Changes between Version 9 and Version 10 of HelloGENI


Ignore:
Timestamp:
05/11/11 17:01:27 (13 years ago)
Author:
Josh Smift
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • HelloGENI

    v9 v10  
    3535On campuses, you'll want an rpsec that reserves your subnet, on the ports that (a) your compute resources are connected to; and (b) connect those ports to the cross-connect to reach the OF core VLANs (3715 and 3716). The various campus !OpenFlow [wiki:GeniAggregate aggregate information pages] have tables and/or diagrams with more information along those lines; if you need a hand figuring out exactly which ports to use, contact help@geni.net.
    3636
    37 Note that as with all !OpenFlow slivers, you'll need to contact the [wiki:OpenFlow/Expedient#Optinginyourtraffic Expedient Opt-In Manager admin] for each of the aggregates where you reserve resources.
     37Note that as with all !OpenFlow slivers, you'll need to contact the [wiki:OpenFlow/Expedient#Optinginyourtraffic Expedient Opt-In Manager admins] for the aggregates where you reserve resources.
     38
     39You'll also need a host on which you can run an !OpenFlow controller, listening on a TCP port, which the OpenFlow resources at the sites can reach (i.e. any firewalls in front of your controller must permit your TCP port).
     40
     41''FIXME: This page should link to a page describing how to get and run a simple !OpenFlow controller, if you don't have one already.''
    3842
    3943= Example =
    4044
    41 ''FIXME: We should add a full example detailed here, including rspecs, Omni commands, etc.''
     45Here's a full end-to-end example, using one MyPLC plnode at each of BBN and Stanford, and using 10.42.256.0/24 (which doesn't exist) as the example IP subnet. It assumes that you're already set up with Omni.
     46
     47== Rspecs ==
     48
     49Save these rspecs into files; you'll use them with omni commands later.
     50
     51=== Compute resources ===
     52
     53These rspecs will each reserve one MyPLC plnode. You could modify them to reserve different and/or additional plnodes, but you'd also need to modify your !OpenFlow rspecs to include the dataplane interfaces for those plnodes. See "More advanced stuff" below.
     54
     55==== One MyPLC plnode at BBN ====
     56
     57Save this in a file called myplc-bbn.rspec:
     58
     59{{{
     60<?xml version="1.0"?>
     61<RSpec type="SFA">
     62  <network name="plc.gpolab">
     63    <site id="s1">
     64      <name>myplc.gpolab.bbn.com</name>
     65      <node id="n1">
     66        <hostname>navis.gpolab.bbn.com</hostname>
     67        <sliver></sliver>
     68      </node>
     69    </site>
     70  </network>
     71</RSpec>
     72}}}
     73
     74==== One MyPLC plnode at Stanford ====
     75
     76Save this in a file called myplc-stanford.rspec:
     77
     78{{{
     79<?xml version="1.0"?>
     80<RSpec type="SFA">
     81  <network name="plc">
     82    <site id="s1">
     83      <name>MyPLC</name>
     84      <node id="n1">
     85        <hostname>of-planet1.stanford.edu</hostname>
     86        <sliver></sliver>
     87      </node>
     88    </site>
     89  </network>
     90</RSpec>
     91}}}
     92
     93=== !OpenFlow resources ===
     94
     95You'll need to modify some parts of both of these rspecs before you can use them. In particular, you'll need to modify:
     96
     97 * In the 'user' element, sub in your own site name, e-mail address, first name, last name, and a newly-made-up password for Expedient to use.
     98 * In the 'project' element, sub in your own username and your full name.
     99 * In the 'slice' element:
     100   * For the 'controller_url' attribute, sub in the hostname and port where you plan to run your !OpenFlow controller.
     101   * For the 'name' attribute, sub in the hostname and port of your controller.
     102   * For the 'description' attribute, sub in your own username.
     103   * For the 'expiry' attribute, enter a number representing a time in the future, in seconds since the epoch. (Try 'date +%s -d "now + 1 week"' on a Linux system to get a number meaning "one week from now".)
     104 * In the 'nw_dst' and 'nw_src' elements, sub in your subnet instead of "256" in two places below.
     105
     106==== BBN ====
     107
     108Save this in a file called openflow-bbn.rspec:
     109
     110{{{
     111<resv_rspec type="openflow">
     112  <user affiliation="YOURSITE" email="YOURUSERNAME@YOURSITE" firstname="YOURFIRST" lastname="YOURLAST" password="NEWPASSWD"/>
     113  <project name="YOURUSERNAME-hello-geni" description="Hello GENI experiment by YOURNAME"/>
     114  <slice controller_url="tcp:HOSTNAME:PORT" name="HOSTNAME-PORT" description="The controler for YOURUSERNAME-hello-geni."/>
     115  <flowspace>
     116    <port urn="urn:publicid:IDN+tulum.gpolab.bbn.com:expedient:openflow+switch:06:d6:00:24:a8:c4:b9:00+port:56"/>
     117    <port urn="urn:publicid:IDN+tulum.gpolab.bbn.com:expedient:openflow+switch:06:d6:00:24:a8:c4:b9:00+port:71"/>
     118    <port urn="urn:publicid:IDN+tulum.gpolab.bbn.com:expedient:openflow+switch:06:d6:00:12:e2:b8:a5:d0+port:3"/>
     119    <port urn="urn:publicid:IDN+tulum.gpolab.bbn.com:expedient:openflow+switch:06:d6:00:12:e2:b8:a5:d0+port:20"/>
     120    <dl_type from="2048" to="2048"/>
     121    <nw_dst from="10.42.256.0" to="10.42.256.255"/>
     122  </flowspace>
     123  <flowspace>
     124    <port urn="urn:publicid:IDN+tulum.gpolab.bbn.com:expedient:openflow+switch:06:d6:00:24:a8:c4:b9:00+port:56"/>
     125    <port urn="urn:publicid:IDN+tulum.gpolab.bbn.com:expedient:openflow+switch:06:d6:00:24:a8:c4:b9:00+port:71"/>
     126    <port urn="urn:publicid:IDN+tulum.gpolab.bbn.com:expedient:openflow+switch:06:d6:00:12:e2:b8:a5:d0+port:3"/>
     127    <port urn="urn:publicid:IDN+tulum.gpolab.bbn.com:expedient:openflow+switch:06:d6:00:12:e2:b8:a5:d0+port:20"/>
     128    <dl_type from="2048" to="2048"/>
     129    <nw_src from="10.42.256.0" to="10.42.256.255"/>
     130  </flowspace>
     131</resv_rspec>
     132}}}
     133
     134Then edit it as described above.
     135
     136==== Stanford ====
     137
     138Save this in a file called openflow-stanford.rspec:
     139
     140{{{
     141<resv_rspec type="openflow" version="2">
     142  <user affiliation="YOURSITE" email="YOURUSERNAME@YOURSITE" firstname="YOURFIRST" lastname="YOURLAST" password="NEWPASSWD"/>
     143  <project name="YOURUSERNAME-hello-geni" description="Hello GENI experiment by YOURNAME"/>
     144  <slice controller_url="tcp:HOSTNAME:PORT" name="HOSTNAME-PORT" description="The controler for YOURUSERNAME-hello-geni." expiry="EXPIRY"/>
     145  <flowspace>
     146    <port urn="urn:publicid:IDN+stanford:expedient:openflow+switch:00:00:00:12:e2:78:31:f5+port:2"/>
     147    <port urn="urn:publicid:IDN+stanford:expedient:openflow+switch:00:00:00:12:e2:78:31:f5+port:11"/>
     148    <port urn="urn:publicid:IDN+stanford:expedient:openflow+switch:03:85:00:23:47:4e:2e:c0+port:4"/>
     149    <port urn="urn:publicid:IDN+stanford:expedient:openflow+switch:03:85:00:23:47:4e:2e:c0+port:8"/>
     150    <dl_type from="2048" to="2048"/>
     151    <nw_dst from="10.42.256.0" to="10.42.256.255"/>
     152  </flowspace>
     153  <flowspace>
     154    <port urn="urn:publicid:IDN+stanford:expedient:openflow+switch:00:00:00:12:e2:78:31:f5+port:2"/>
     155    <port urn="urn:publicid:IDN+stanford:expedient:openflow+switch:00:00:00:12:e2:78:31:f5+port:11"/>
     156    <port urn="urn:publicid:IDN+stanford:expedient:openflow+switch:03:85:00:23:47:4e:2e:c0+port:4"/>
     157    <port urn="urn:publicid:IDN+stanford:expedient:openflow+switch:03:85:00:23:47:4e:2e:c0+port:8"/>
     158    <dl_type from="2048" to="2048"/>
     159    <nw_src from="10.42.256.0" to="10.42.256.255"/>
     160  </flowspace>
     161</resv_rspec>
     162}}}
     163
     164Then edit it as described above.
     165
     166==== NLR ====
     167
     168Save this in a file called openflow-nlr.rspec:
     169
     170{{{
     171<resv_rspec type="openflow" version="2">
     172  <user affiliation="YOURSITE" email="YOURUSERNAME@YOURSITE" firstname="YOURFIRST" lastname="YOURLAST" password="NEWPASSWD"/>
     173  <project name="YOURUSERNAME-hello-geni" description="Hello GENI experiment by YOURNAME"/>
     174  <slice controller_url="tcp:HOSTNAME:PORT" name="HOSTNAME-PORT" description="The controler for YOURUSERNAME-hello-geni." expiry="EXPIRY"/>
     175  <flowspace>
     176    <switch urn="urn:publicid:IDN+nlr:expedient:openflow+switch:0e:83:00:23:47:c8:bc:00"/>
     177    <switch urn="urn:publicid:IDN+nlr:expedient:openflow+switch:0e:83:00:23:47:ca:bc:40"/>
     178    <switch urn="urn:publicid:IDN+nlr:expedient:openflow+switch:0e:83:00:24:a8:d2:48:00"/>
     179    <switch urn="urn:publicid:IDN+nlr:expedient:openflow+switch:0e:83:00:24:a8:d2:b8:40"/>
     180    <switch urn="urn:publicid:IDN+nlr:expedient:openflow+switch:0e:83:00:26:f1:40:a8:00"/>
     181    <dl_type from="2048" to="2048"/>
     182    <nw_dst from="10.42.256.0" to="10.42.256.255"/>
     183  </flowspace>
     184  <flowspace>
     185    <switch urn="urn:publicid:IDN+nlr:expedient:openflow+switch:0e:83:00:23:47:c8:bc:00"/>
     186    <switch urn="urn:publicid:IDN+nlr:expedient:openflow+switch:0e:83:00:23:47:ca:bc:40"/>
     187    <switch urn="urn:publicid:IDN+nlr:expedient:openflow+switch:0e:83:00:24:a8:d2:48:00"/>
     188    <switch urn="urn:publicid:IDN+nlr:expedient:openflow+switch:0e:83:00:24:a8:d2:b8:40"/>
     189    <switch urn="urn:publicid:IDN+nlr:expedient:openflow+switch:0e:83:00:26:f1:40:a8:00"/>
     190    <dl_type from="2048" to="2048"/>
     191    <nw_src from="10.42.256.0" to="10.42.256.255"/>
     192  </flowspace>
     193</resv_rspec>
     194}}}
     195
     196Then edit it as described above.
     197
     198== Creating your slice ==
     199
     200Now that you've got your rspecs, create your slice.
     201
     202First, give it a name, like "hello" followed by your username, e.g. "hellojbs". Then, create it, and set it to expire a week from now:
     203
     204{{{
     205slicename=helloYOURUSERNAME
     206omni createslice $slicename
     207omni renewslice $slicename $(date +%Y%m%dT%H:%M:%S -d "now + 1 week")
     208}}}
     209
     210== Creating your slivers ==
     211
     212Now that you've got a slice, create slivers within it:
     213
     214{{{
     215omni -n -a https://myplc.gpolab.bbn.com:12346/ createsliver $slicename myplc-bbn.rspec
     216omni -n -a https://myplc.stanford.edu:12346/ createsliver $slicename myplc-stanford.rspec
     217omni -n -a https://expedient.gpolab.bbn.com:1443/openflow/gapi/createsliver $slicename openflow-bbn.rspec
     218omni -n -a https://endpoint.stanford.edu:1443/openflow/gapi/ $slicename openflow-stanford.rspec
     219omni -n -a https://ofc-testlab.grnoc.iu.edu:1443/openflow/gapi/createsliver $slicename openflow-nlr.rspec
     220}}}
     221
     222== Opt in your !OpenFlow resources ==
     223
     224Creating those !OpenFlow slivers doesn't actually reserve the resources immediately, it just puts in a request to the !OpenFlow Expedient Opt-In Manager at each aggregate. In order to finish reserving them, send mail to response-team@geni.net, saying something like:
     225
     226{{{
     227Hi! I'm creating a slice to try out Hello GENI, and reserving some
     228OpenFlow resources at BBN, Stanford, and NLR. My topology should just
     229include the port for one MyPLC plnode at each site, the cross-connect port
     230to VLAN 3715, and the connections between them, plus the NLR backbone
     231switches, for 10.42.256.0/24 only.
     232
     233Can you please opt in my slivers? Thanks!
     234}}}
     235
     236Sub in your subnet in place of "256" above, of course.
     237
     238== Log in to your MyPLC resources ==
     239
     240While you wait for your !OpenFlow resources to be opted in, you can confirm that you can log in to your MyPLC resources. Run these commands to find the login name to use:
     241
     242{{{
     243omni -n -a https://myplc.gpolab.bbn.com:12346/ sliverstatus $slicename
     244omni -n -a https://myplc.stanford.edu:12346/ sliverstatus $slicename
     245}}}
     246
     247In the output of each of those, look for a line containing "pl_hostname" and a line containing "pl_login". You should then be able to log in via SSH using that login name to that hostname, e.g.
     248
     249{{{
     250ssh pgenigpolabbbncom_jbstest@navis.gpolab.bbn.com
     251}}}
     252
     253Once you've logged in, you can install the 'nc' package, to run netcat, which you'll use later:
     254
     255{{{
     256sudo yum install nc
     257}}}
     258
     259== Say hello ==
     260
     261Once you hear back from the Expedient OIM admins at BBN, Stanford, and NLR, you can try sending traffic from one of your MyPLC plnodes to another.
     262
     263Log in to your plnode at BBN, and run a netcat listener, on :
     264
     265{{{
     266nc -lk 10.42.256.55 6256
     267}}}
     268
     269In another window, log in to your plnode at Stanford, and connect to the listener you're running at BBN:
     270
     271{{{
     272nc 10.42.256.55 6256
     273}}}
     274
     275You can then type text in one window, and it'll appear in the other -- if your !OpenFlow controller is running. Try it with your controller running, and not running, to see.
     276
     277Note that after you stop your controller, you'll need to wait five seconds without sending any traffic in order for the flowtable entries in the switches to time out -- if you keep sending traffic continuously, it'll keep flowing even if you stop your controller. Once any existing flowtable entries time out, though, new ones won't be created (and traffic won't flow) while your controller is down.
     278
     279= More advanced stuff =
     280
     281You can run
     282
     283{{{
     284omni -n -a https://myplc.gpolab.bbn.com:12346/ listresources
     285omni -n -a https://myplc.stanford.edu:12346/ listresources
     286}}}
     287
     288to get a list of other BBN and/or Stanford MyPLC plnodes to use. Note that the advertisement rspec format returned by that command is subtly different than the reservation rspec format shown above.
     289
     290If you wanted to use different plnodes than the ones listed above, you'd need to modify your !OpenFlow rspecs to include the dataplane interfaces for those plnodes, and also any intermediate switches in the topology.
     291
     292''FIXME: This page should probably include a little more information about how to figure out what ports you'd need to set up a more complicated topology.''