41 | | ''FIXME: We should add a full example detailed here, including rspecs, Omni commands, etc.'' |
| 45 | Here'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 | |
| 49 | Save these rspecs into files; you'll use them with omni commands later. |
| 50 | |
| 51 | === Compute resources === |
| 52 | |
| 53 | These 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 | |
| 57 | Save 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 | |
| 76 | Save 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 | |
| 95 | You'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 | |
| 108 | Save 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 | |
| 134 | Then edit it as described above. |
| 135 | |
| 136 | ==== Stanford ==== |
| 137 | |
| 138 | Save 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 | |
| 164 | Then edit it as described above. |
| 165 | |
| 166 | ==== NLR ==== |
| 167 | |
| 168 | Save 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 | |
| 196 | Then edit it as described above. |
| 197 | |
| 198 | == Creating your slice == |
| 199 | |
| 200 | Now that you've got your rspecs, create your slice. |
| 201 | |
| 202 | First, 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 | {{{ |
| 205 | slicename=helloYOURUSERNAME |
| 206 | omni createslice $slicename |
| 207 | omni renewslice $slicename $(date +%Y%m%dT%H:%M:%S -d "now + 1 week") |
| 208 | }}} |
| 209 | |
| 210 | == Creating your slivers == |
| 211 | |
| 212 | Now that you've got a slice, create slivers within it: |
| 213 | |
| 214 | {{{ |
| 215 | omni -n -a https://myplc.gpolab.bbn.com:12346/ createsliver $slicename myplc-bbn.rspec |
| 216 | omni -n -a https://myplc.stanford.edu:12346/ createsliver $slicename myplc-stanford.rspec |
| 217 | omni -n -a https://expedient.gpolab.bbn.com:1443/openflow/gapi/createsliver $slicename openflow-bbn.rspec |
| 218 | omni -n -a https://endpoint.stanford.edu:1443/openflow/gapi/ $slicename openflow-stanford.rspec |
| 219 | omni -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 | |
| 224 | Creating 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 | {{{ |
| 227 | Hi! I'm creating a slice to try out Hello GENI, and reserving some |
| 228 | OpenFlow resources at BBN, Stanford, and NLR. My topology should just |
| 229 | include the port for one MyPLC plnode at each site, the cross-connect port |
| 230 | to VLAN 3715, and the connections between them, plus the NLR backbone |
| 231 | switches, for 10.42.256.0/24 only. |
| 232 | |
| 233 | Can you please opt in my slivers? Thanks! |
| 234 | }}} |
| 235 | |
| 236 | Sub in your subnet in place of "256" above, of course. |
| 237 | |
| 238 | == Log in to your MyPLC resources == |
| 239 | |
| 240 | While 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 | {{{ |
| 243 | omni -n -a https://myplc.gpolab.bbn.com:12346/ sliverstatus $slicename |
| 244 | omni -n -a https://myplc.stanford.edu:12346/ sliverstatus $slicename |
| 245 | }}} |
| 246 | |
| 247 | In 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 | {{{ |
| 250 | ssh pgenigpolabbbncom_jbstest@navis.gpolab.bbn.com |
| 251 | }}} |
| 252 | |
| 253 | Once you've logged in, you can install the 'nc' package, to run netcat, which you'll use later: |
| 254 | |
| 255 | {{{ |
| 256 | sudo yum install nc |
| 257 | }}} |
| 258 | |
| 259 | == Say hello == |
| 260 | |
| 261 | Once 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 | |
| 263 | Log in to your plnode at BBN, and run a netcat listener, on : |
| 264 | |
| 265 | {{{ |
| 266 | nc -lk 10.42.256.55 6256 |
| 267 | }}} |
| 268 | |
| 269 | In another window, log in to your plnode at Stanford, and connect to the listener you're running at BBN: |
| 270 | |
| 271 | {{{ |
| 272 | nc 10.42.256.55 6256 |
| 273 | }}} |
| 274 | |
| 275 | You 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 | |
| 277 | Note 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 | |
| 281 | You can run |
| 282 | |
| 283 | {{{ |
| 284 | omni -n -a https://myplc.gpolab.bbn.com:12346/ listresources |
| 285 | omni -n -a https://myplc.stanford.edu:12346/ listresources |
| 286 | }}} |
| 287 | |
| 288 | to 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 | |
| 290 | If 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.'' |