= GENI Network Stitching Example = This page used gcf 2.4 preview 7 to show an example experiment that creates a network stitching path between the GPO InstaGENI and the Utah InstaGENI racks. <> The experiment uses [http://groups.geni.net/geni/wiki/GeniClearinghouse GENI Clearinghouse] credentials with the omni tool named ''stitcher.py''. 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]. == Design the Stitching Experiment == {{{ #!html Design/Setup }}} At this time GENI network stitching is supported by several aggregate, this example shows a simple stitching scenario with one server VM in the GPO InstaGENI rack and one VM client in the Utah InstaGENI rack that are connected with a link. The server-gpo host is configured to be both a Web Server and an Iperf server, also a routable IP address is requested to access the web server. All this is captured in the request RSpec used for this experiment: Assemble a Request Rspec that includes one VM at each rack site: {{{ }}} In the above RSpec, the link information in the ''component_manager name'' is used by the stitcher.py script to contact the GENI Stitching Computation Service and determine a path between the end-point. == Execute the Stitching experiment == {{{ #!html Execute }}} First create a slice for this experiment: {{{ $ omni.py print_slice_expiration ig-gpo-ig-utah 07:30:38 INFO omni: Loading config file /home/lnevers/.gcf/omni_config 07:30:38 INFO omni: Using control framework portal 07:30:40 INFO omni: Slice urn:publicid:IDN+ch.geni.net:ln-prj+slice+ig-gpo-ig-utah expires on 2013-07-25 00:00:00 UTC 07:30:40 INFO omni: ------------------------------------------------------------ 07:30:40 INFO omni: Completed print_slice_expiration: Options as run: framework: portal project: ln-prj Args: print_slice_expiration ig-gpo-ig-utah Result Summary: Slice urn:publicid:IDN+ch.geni.net:ln-prj+slice+ig-gpo-ig-utah expires on 2013-07-25 00:00:00 UTC 07:30:40 INFO omni: ============================================================ }}} A sliver that included a stitched VLAN path can be created using the ''stitcher.py'' script. There is no need to specify the ''-a'' aggregate option, aggregates are determined from the RSpec and need not be specified. Also note that a file is created in the directory where the sliver is created that capture the aggregates associated with the slice. Following is the stitcher operation that setup up all slivers: {{{ $ stitcher.py createsliver ig-gpo-ig-utah stitch-ig-gpo-ig-utah.rspec -o 07:31:45 INFO stitcher: Loading config file /home/lnevers/.gcf/omni_config 07:31:45 INFO stitcher: Using control framework portal 07:31:45 INFO stitcher: Checking that slice ig-gpo-ig-utah is valid... <==(1) 07:31:46 INFO stitcher: Slice urn:publicid:IDN+ch.geni.net:ln-prj+slice+ig-gpo-ig-utah expires on 2013-07-25 00:00:00 UTC 07:31:47 INFO stitcher: speaks AM API v3, but sticking with v2 <==(2) 07:31:47 INFO stitcher: speaks AM API v3, but sticking with v2 <==(2) 07:31:47 INFO stitcher: speaks AM API v3, but sticking with v2 <==(2) 07:31:47 INFO stitch.Aggregate: Writing to '/tmp/ig-gpo-ig-utah-createsliver-request-11-instageni-gpolab-bbn-com.xml' <==(3) 07:31:47 INFO stitch.Aggregate: Stitcher doing createsliver at https://boss.instageni.gpolab.bbn.com:12369/protogeni/xmlrpc/am 07:32:04 INFO stitch.Aggregate: Allocation at complete. 07:32:04 WARNING stitch.Aggregate: Slivers at PG Utah may not be requested initially for > 5 days. PG Utah slivers will expire earlier than at other aggregates - requested expiration being reset from 2013-07-25T00:00:00Z to 2013-07-21T11:12:04Z 07:32:04 INFO stitch.Aggregate: Writing to '/tmp/ig-gpo-ig-utah-createsliver-request-11-emulab-net.xml' <==(3) 07:32:04 INFO stitch.Aggregate: Stitcher doing createsliver at https://www.emulab.net:12369/protogeni/xmlrpc/am 07:33:12 INFO stitch.Aggregate: Allocation at complete. 07:33:12 INFO stitch.Aggregate: Writing to '/tmp/ig-gpo-ig-utah-createsliver-request-11-utah-geniracks-net.xml' <==(3) 07:33:12 INFO stitch.Aggregate: Stitcher doing createsliver at https://boss.utah.geniracks.net:12369/protogeni/xmlrpc/am 07:33:33 INFO stitch.Aggregate: Allocation at complete. 07:33:33 INFO stitch.Aggregate: Writing to '/tmp/ig-gpo-ig-utah-createsliver-request-11-ion-internet2-edu.xml' <==(3) 07:33:33 INFO stitch.Aggregate: Stitcher doing createsliver at http://geni-am.net.internet2.edu:12346 07:34:18 INFO stitch.Aggregate: DCN AM : must wait for status ready.... <==(4) 07:34:18 INFO stitch.Aggregate: Pause to let circuit become ready... 07:34:55 INFO stitch.Aggregate: DCN circuit 22931 is ready 07:35:02 INFO stitch.Aggregate: Allocation at complete. 07:35:02 INFO stitch.launcher: All aggregates are complete. 07:35:02 INFO stitcher: Writing to 'ig-gpo-ig-utah-manifest-rspec-stitching-combined.xml' 07:35:02 INFO stitcher: Saved combined reservation RSpec at 4 AMs to file ig-gpo-ig-utah-manifest-rspec-stitching-combined.xml <==(5) Stitching success: Reserved resources in slice ig-gpo-ig-utah at 4 Aggregates (including 2 intermediate aggregate(s) not in the original request), creating 1 link(s). }}} (1) Sticher.py runs rspeclint on the stitch-ig-gpo-ig-utah.rspec file. [[BR]] (2) Sticher.py contacts the Stitching Computation Service (SCS) and returns the list of AMs that are needed to establish the stitching path in addition to the Internet2/ION aggregate.[[BR]] (3) Stitcher.py generates a request RSpec for each of the aggregates in the path to request both network and compute resources. [[BR]] (4) Request at Internet2/ION waits for DCN circuits. If this request fails, stitcher.py will try again after 600 seconds. [[BR]] (5) A combined manifest rspec is assembled by the stitcher.py to show all aggregates and VLANs used in the sliver. To combined manifest [http://groups.geni.net/geni/attachment/wiki/GENIExperimenter/ExperimentExample-stitching/ig-gpo-ig-utah-manifest-rspec-stitching-combined.xml ig-gpo-ig-utah-manifest-rspec-stitching-combined.xml] is attached. Below is part of the ig-gpo-ig-utah-manifest-rspec-stitching-combined.xml file showing the stitching portion of the manifest that includes all hops hops along the stitched VLAN path: {{{ ion.internet2.edu-22931 2013-07-25T00:00:00.000Z 2013-07-16T11:34:49.472Z 10 100000 l2sc ethernet 9000 3748 3748 false 2 10 100000 l2sc ethernet 9000 874 874 false 5 10 100000 l2sc ethernet 9000 874 874 false 6 10 100000 l2sc ethernet 9000 874 874 false null }}} In the stitching definition: - is for the GPO InstaGENI switch (procurve2:5.24) and uses VLAN 3748. - is for the Internet2 switch (procurve-pgeni-atla:3.21) and uses VLAN 874 - is for the Utah PG switch (procurveA:3.19) and uses VLAN 874 - is for the Utah InstaGENI switch (procurve2:1.19) and uses VLAN 874 At this point the experiment has been set up and you may determine the login information at each compute aggregate: {{{ $ readyToLogin.py ig-gpo-ig-utah -a ig-gpo ... 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@pcvm2-14.instageni.gpolab.bbn.com $ readyToLogin.py ig-gpo-ig-utah -a ig-utah 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@pcvm2-14.instageni.gpolab.bbn.com [lnevers@server-gpo ~]$ /sbin/ifconfig eth999 Link encap:Ethernet HWaddr 02:1A:B9:6C:51:18 inet addr:192.1.242.151 Bcast:192.1.242.255 Mask:255.255.255.128 <==(a) UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:17379 errors:0 dropped:0 overruns:0 frame:0 TX packets:9372 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:25441630 (24.2 MiB) TX bytes:509859 (497.9 KiB) eth3748 Link encap:Ethernet HWaddr 02:73:1F:92:9B:C6 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:68 errors:0 dropped:0 overruns:0 frame:0 TX packets:52 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:3901 (3.8 KiB) TX bytes:27928 (27.2 KiB) }}} (a) publically routable IP address You may also use the ''client-utah'' login to verify connectivity between to the ''server-gpo'': {{{ $ ssh -p 30522 -i /home/lnevers/.ssh/geni_cert_portal_key lnevers@pc1.utah.geniracks.net [lnevers@client-utah ~]$ /sbin/ifconfig eth874 Link encap:Ethernet HWaddr 02:16:D6:8B:87:01 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:55 errors:0 dropped:0 overruns:0 frame:0 TX packets:260 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:3434 (3.3 KiB) TX bytes:323831 (316.2 KiB) eth999 Link encap:Ethernet HWaddr 02:DF:E2:D1:9E:24 inet addr:172.17.1.4 Bcast:172.31.255.255 Mask:255.240.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:15802 errors:0 dropped:0 overruns:0 frame:0 TX packets:7917 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:22849021 (21.7 MiB) TX bytes:421874 (411.9 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:2 errors:0 dropped:0 overruns:0 frame:0 TX packets:2 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:196 (196.0 b) TX bytes:196 (196.0 b) [lnevers@client-utah ~]$ ping -c 5 192.168.4.1 PING 192.168.4.1 (192.168.4.1) 56(84) bytes of data. 64 bytes from 192.168.4.1: icmp_req=1 ttl=64 time=80.4 ms 64 bytes from 192.168.4.1: icmp_req=2 ttl=64 time=80.4 ms 64 bytes from 192.168.4.1: icmp_req=3 ttl=64 time=80.3 ms 64 bytes from 192.168.4.1: icmp_req=4 ttl=64 time=80.3 ms 64 bytes from 192.168.4.1: icmp_req=5 ttl=64 time=80.3 ms --- 192.168.4.1 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4001ms rtt min/avg/max/mdev = 80.376/80.395/80.436/0.180 ms [lnevers@client-utah ~]$ }}} We can now connected to the web server to verify that iperf tests were run and that client completed wget operations: [[Image(web-server.jpg)]] [[BR]] Select the ''' ''Web Server Statistics'' ''' link and verify that wget was sucessfull for images: [[Image(web-server-stats.jpg)]] [[BR]] Next, select the ''' ''Iperf Server Logs'' ''' link to verify that the iperf test completed: [[Image(web-server-iperf.jpg)]] == Finish the Stitching Experiment == {{{ #!html Finish }}}