= GENI Network Stitching Example = This page uses GCF 2.6 to show an example experiment that creates a network stitching path between the GPO InstaGENI and the Utah InstaGENI racks. [[Image(IG-GPO-IG-Utah.jpg)]] The experiment uses [http://groups.geni.net/geni/wiki/GeniClearinghouse GENI Clearinghouse] credentials with the new Omni tool named ''stitcher''. GENI network stitching does not require any special configuration. If you haven't already configured Omni, please follow [http://trac.gpolab.bbn.com/gcf/wiki/OmniConfigure/Automatic these configuration instructions]. For a list of other GENI sites that support stitching see the [http://groups.geni.net/geni/wiki/GeniNetworkStitchingSites GENI Network Stitching Sites] page. If you need further assistance, please contact [mailto:help@geni.net]. == 1. Design the Stitching Experiment == {{{ #!html Design/Setup }}} GENI network stitching is available for the aggregates listed in the [http://groups.geni.net/geni/wiki/GeniNetworkStitchingSites GENI Network Stitching Sites] page. This example shows a simple stitching scenario with one server VM in the GPO InstaGENI rack and one client VM in the Utah InstaGENI rack. The server-gpo host is configured as a Web, Iperf and !PingPlus server; it also has a routable IP address that is used to access the web server and display results for all traffic types. We define an RSpec with 2 nodes and one link between them. The link ''' ''must'' ''' specify the 2 aggregates that are the endpoints of the link. The tools will do the rest of the work required to stitch the topology. This is the request RSpec used for this experiment: {{{ }}} Notes: - In the above RSpec, ''stitcher'' uses the link information in the ''component_manager name'' to contact the GENI Stitching Computation Service (SCS) and determine a path between the end-point hosts. - The default bandwidth allocation is 100 MB, but for the example we set the link to 20 MB, which is sufficient to show the experiment working. == 2. Execute the Stitching experiment == {{{ #!html Execute }}} We now use ''stitcher'' to set up a stitched topology between the two nodes. - ''Stitcher'' simplifies experiment set-up because it creates slivers at all aggregates, including the network stitching path. - ''Stitcher'' determines all your experiment compute resource aggregates from your RSpec. (You no longer need to enter “-a aggregateName”.) - ''Stitcher'' uses the MAX Stitching Computation Service (SCS) to determine VLAN paths needed for your experiment. - VLANs are a scarce commodity, and failures can happen. ''Stitcher'' will retry if it fails to create a sliver at an aggregate. We first create a slice for this experiment: {{{ $ omni.py createslice gpo2utah 14:44:56 INFO : Loading agg_nick_cache file '/home/lnevers/.gcf/agg_nick_cache' 14:44:56 INFO : Loading config file /home/lnevers/.gcf/omni_config 14:44:56 INFO : Using control framework portal 14:44:56 INFO : Member Authority is https://ch.geni.net/MA (from config) 14:44:56 INFO : Slice Authority is https://ch.geni.net/SA (from config) 14:45:00 INFO : Created slice with Name gpo2utah, URN urn:publicid:IDN+ch.geni.net:Luisa_Nevers-Test-Proj_01+slice+gpo2utah, Expiration 2014-06-13 18:45:00+00:00 14:45:00 INFO : ------------------------------------------------------ 14:45:00 INFO : Completed createslice: Options as run: framework: portal project: Luisa_Nevers-Test-Proj_01 Args: createslice gpo2utah Result Summary: Created slice with Name gpo2utah, URN urn:publicid:IDN+ch.geni.net:Luisa_Nevers-Test-Proj_01+slice+gpo2utah, Expiration 2014-06-13 18:45:00+00:00 14:45:00 INFO : ====================================================== }}} Next, we create all necessary slivers using ''stitcher'' which will use the RSpec to determine which aggregates are used, so there is no need to specify the ''-a'' aggregate option. Also the ''stitcher'' records the aggregates associated with the slice in a file in the ''~/.gcf'' directory, for later operations with the slice. To create slivers at all aggregates, we type this command: {{{ $ stitcher.py createsliver gpo2utah stitch-demo.rspec -o 14:45:06 INFO : Configured logging from file /home/lnevers/gcf-2.6-rc6/src/gcf/stitcher_logging.conf 14:45:07 INFO : Reading slice gpo2utah credential... <=(1) 14:45:07 INFO : Slice urn:publicid:IDN+ch.geni.net:Luisa_Nevers-Test-Proj_01+slice+gpo2utah expires on 2014-06-13 18:45:00 UTC 14:45:07 INFO : Calling SCS... <=(2) 14:45:08 INFO : Multi-AM reservation will include resources from these aggregates: 14:45:08 INFO : <=(2) 14:45:08 INFO : 14:45:08 INFO : 14:45:08 INFO : 14:45:08 INFO : Stitcher doing createsliver at ... <=(3) 14:45:25 INFO : ... Allocation at complete. 14:45:25 INFO : Stitcher doing createsliver at ... 14:46:13 INFO : ... Allocation at complete. 14:46:13 INFO : Stitcher doing createsliver at ... 14:46:35 INFO : ... Allocation at complete. 14:46:35 INFO : Stitcher doing createsliver at ... 14:47:19 INFO : DCN AM : must wait for status ready.... 14:47:19 INFO : Pausing 30 seconds to let circuit become ready... 14:48:04 INFO : Getting credential from file /tmp/slice-ch-geni-net-Luisa_Nevers-Test-Proj_01-gpo2utah-for-lnevers-cred.xml 14:48:04 INFO : ... Allocation at complete. 14:48:04 INFO : All aggregates are complete. 14:48:04 INFO : Your resources expire at 3 different times at different AMs. The first expiration is 2014-06-06 23:46:15 UTC at and . Second expiration is 2014-06-07T18:46:39 UTC. 14:48:04 INFO : Saved combined reservation RSpec at 4 AMs to file '/home/lnevers/gcf-test/stitch-test/gpo2utah-manifest-rspec-stitching-combined.xml' <=(4) Success: Reserved resources in slice gpo2utah at 4 Aggregates (including 2 intermediate aggregate(s) not in the original request), creating 1 stitched link(s). }}} (1) Slice credentials are checked and rspeclint is run on the ''stitch-demo-utah.rspec '' request RSpec, if rspeclint is found in your search path. [[BR]] (2) ''Stitcher'' contacts the Stitching Computation Service (SCS) which returns the list of AMs needed to establish the stitching path, including the Internet2 ION aggregate.[[BR]] (3) ''Stitcher'' generates a request RSpec for each aggregates and creates a sliver at each aggregate(path & end-points). [[BR]] (4) A combined manifest RSpec is assembled that shows all aggregates and VLANs used in the slice. The above stitched scenario sliver creation accomplishes several steps that previously required manual set-up: - Switch configuration at rack endpoints - Static circuit configuration to reach ION in the aggregate - ION/OSCARS creation of a dynamic circuit with VLAN translation - A static connection over UEN - A routed connection across PG Utah - A dynamic circuit and then a fixed circuit to Utah InstaGENI. The overall information about allocated resources that can be found in the file are shown here: [[Image(IG-GPO-IG-Utah-tags.jpg)]] Below is part of the gpo2utah-manifest-rspec-stitching-combined.xml file showing the stitching manifest that includes all hops along the stitched VLAN path: {{{ 10 20000 l2sc ethernet 1500 3727 3727 false 2 10 20000.0 l2sc ethernet 9000 3727 3727 true 3 10 20000.0 l2sc ethernet 9000 805 805 true 4 10 20000 l2sc ethernet 1500 805 805 false 5 10 20000 l2sc ethernet 1500 805 805 false 6 10 20000 l2sc ethernet 1500 805 805 false null }}} In the stitching definition: - is for the GPO InstaGENI switch (procurve2:5.24.ion.newy.ae0) and uses VLAN 3727. - is for the Internet2 router in New York (rtr.newy:ae0:bbn) and uses VLAN 3727. - is for the Internet2 router in Atlanta (rtr.atla:ge-10/3/2:protogeni) and uses VLAN 805 - is for PG Utah switch that connects PG Utah to ION (procurve-pgeni-atla:3.21) and uses VLAN 805 - is for the Utah PG switch that connects to Utah IG (procurveA:3.19) and uses VLAN 805 - is for the Utah InstaGENI switch (procurve2:1.19) and uses VLAN 805 Also notice that each of the hops show the bandwidth that was originally requested: {{{ 20000 }}} At this point the experiment has been set up, and you may determine the login information at each compute aggregate: {{{ $ readyToLogin.py gpo2utah -a ig-gpo ... ================================================================================ LOGIN INFO for AM: https://boss.instageni.gpolab.bbn.com:12369/protogeni/xmlrpc/am/2.0 ================================================================================ For more login info, see the section entitled: 'Providing a private key to ssh' in 'readyToLogin.py -h' server-gpo's geni_status is: ready (am_status:ready) User lnevers logs in to server-gpo using: ssh -i /home/lnevers/.ssh/geni_cert_portal_key lnevers@pcvm1-26.instageni.gpolab.bbn.com $ readyToLogin.py gpo2utah -a ig-utah ... ================================================================================ LOGIN INFO for AM: https://boss.utah.geniracks.net:12369/protogeni/xmlrpc/am/2.0 ================================================================================ For more login info, see the section entitled: 'Providing a private key to ssh' in 'readyToLogin.py -h' client-utah's geni_status is: ready (am_status:ready) User lnevers logs in to client-utah using: ssh -p 30522 -i /home/lnevers/.ssh/geni_cert_portal_key lnevers@pc1.utah.geniracks.net }}} We will use the ''server-gpo'' login to determine the routable IP address that was requested for the Web Server: {{{ $ ssh -i /home/lnevers/.ssh/geni_cert_portal_key lnevers@pcvm1-26.instageni.gpolab.bbn.com [lnevers@server-gpo ~]$ /sbin/ifconfig eth999 Link encap:Ethernet HWaddr 02:84:C8:6D:99:DA inet addr:192.1.242.172 Bcast:192.1.242.255 Mask:255.255.255.128 <=(a) UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:24503 errors:0 dropped:0 overruns:0 frame:0 TX packets:10400 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:25757338 (24.5 MiB) TX bytes:557996 (544.9 KiB) eth3727 Link encap:Ethernet HWaddr 02:09:15:E4:32:ED inet addr:192.168.4.1 Bcast:192.168.4.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:19288 errors:0 dropped:0 overruns:0 frame:0 TX packets:13587 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:27216849 (25.9 MiB) TX bytes:1598817 (1.5 MiB) }}} (a) publically routable IP address is 192.1.242.172 We can now connect to the web server with the resolvable hostname or with the IP address above to verify that the iperf tests were run and that the client completed the wget operations: [[Image(web-server.jpg, 60%)]] [[BR]] Select the ''' ''Web Server Statistics'' ''' link, and verify that wget was sucessfull for images: [[Image(web-server-stats.jpg, 60% )]] [[BR]] Next, select the ''' ''Iperf Server Logs'' ''' link to verify that the iperf test completed: [[Image(web-server-iperf.jpg, 60%)]] Before starting the !PingPlus portion of the experiment, verify that no information existing for !PingPlus by selecting the link ''' ''Layer 2 !PingPlus Statistics'' '''. Now we start the Layer 2 !PingPlus experiment, by logging into ''client-utah,'' determining its dataplane MAC address and then shutting down IP on that interface: {{{ $ ssh -p 30522 -i /home/lnevers/.ssh/geni_cert_portal_key lnevers@pc1.utah.geniracks.net [lnevers@client-utah ~]$ /sbin/ifconfig eth805 Link encap:Ethernet HWaddr 02:D8:9D:7D:3D:46 inet addr:192.168.4.2 Bcast:192.168.4.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:13553 errors:0 dropped:0 overruns:0 frame:0 TX packets:19530 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1595191 (1.5 MiB) TX bytes:27562287 (26.2 MiB) eth999 Link encap:Ethernet HWaddr 02:C7:CD:82:54:E9 inet addr:172.17.1.2 Bcast:172.31.255.255 Mask:255.240.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:22515 errors:0 dropped:0 overruns:0 frame:0 TX packets:9286 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:23380982 (22.2 MiB) TX bytes:510178 (498.2 KiB) [lnevers@client-utah ~]$ sudo /sbin/ifconfig eth805 0 [lnevers@client-utah ~]$ }}} Now on the server, shutdown IP on the dataplane interface and run Layer 2 !PingPLus: {{{ [lnevers@server-gpo ~]$ sudo /sbin/ifconfig eth3727 0 [lnevers@server-gpo ~]$ sudo /local/scripts/runPingPlus.sh 02:D8:9D:7D:3D:46 eth3727 [lnevers@server-gpo ~]$ }}} Now, we go back to the web server and select the ''' ''Layer 2 !PingPlus Statistics'' ''' link. You will find new statistics: [[Image(web-server-pingplus.jpg, 60%)]] We have now completed the experiment. == 3. Finish the Stitching Experiment == {{{ #!html Finish }}} Now that the experiment is completed, we release all resources: {{{ $ stitcher deletesliver gpo2utah 17:26:14 INFO : Configured logging from file /home/lnevers/gcf-2.6-rc6/src/gcf/stitcher_logging.conf 17:26:14 INFO : Reading slice gpo2utah aggregates from file /home/lnevers/.gcf/ch-geni-net-Luisa_Nevers-Test-Proj_01-gpo2utah-amlist.txt 17:26:14 INFO : Loading agg_nick_cache file '/home/lnevers/.gcf/agg_nick_cache' 17:26:14 INFO : Loading config file /home/lnevers/.gcf/omni_config 17:26:14 INFO : Using control framework portal 17:26:14 INFO : Member Authority is https://ch.geni.net/MA (from config) 17:26:14 INFO : Slice Authority is https://ch.geni.net/SA (from config) 17:26:15 INFO : Slice urn:publicid:IDN+ch.geni.net:Luisa_Nevers-Test-Proj_01+slice+gpo2utah expires on 2014-06-13 18:45:00 UTC 17:27:05 INFO : (PG log url - look here for details on any failures: https://boss.utah.geniracks.net/spewlogfile.php3?logfile=bbd448e5c74491b407d2bec7917fe6b7) 17:27:06 INFO : Deleted sliver urn:publicid:IDN+ch.geni.net:Luisa_Nevers-Test-Proj_01+slice+gpo2utah at utah-ig 17:27:11 INFO : Deleted sliver urn:publicid:IDN+ch.geni.net:Luisa_Nevers-Test-Proj_01+slice+gpo2utah at ion 17:28:00 INFO : (PG log url - look here for details on any failures: https://www.emulab.net/spewlogfile.php3?logfile=caab98b5564c31b263b8fb7c24cf952e) 17:28:00 INFO : Deleted sliver urn:publicid:IDN+ch.geni.net:Luisa_Nevers-Test-Proj_01+slice+gpo2utah at utah-pg 17:28:50 INFO : (PG log url - look here for details on any failures: https://boss.instageni.gpolab.bbn.com/spewlogfile.php3?logfile=bf986e2173c87b04ee4ad65088a2b980) 17:28:51 INFO : Deleted sliver urn:publicid:IDN+ch.geni.net:Luisa_Nevers-Test-Proj_01+slice+gpo2utah at gpo-ig Deleted slivers on 4 out of a possible 4 aggregates }}} Stitcher uses the files ''~/.gcf/ch-geni-net-!ProjectName-!SliceName-amlist.txt'' which has the AM list associated with the slice. Note, that is this file does not exist in the current working directory, stitcher will try to delete the sliver at all know aggregates, but you will still have to delete the sliver manually at the Internet2/ION aggregate (http://geni-am.net.internet2.edu:12346). Now the sliver has been deleted and compute and network resources are released at all aggregates. == Additional Stitching Scenarios == Additional stitching scenarios have been tested and some example request RSpecs can be used as a reference at this [http://groups.geni.net/geni/browser/trunk/stitch-examples location]. If additional help is needed please contact [mailto:help@geni.net].