= 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 the experiment: {{{ $ omni.py createslice ig-gpo-ig-utah 21:19:10 INFO omni: Loading config file /home/lnevers/.gcf/omni_config 21:19:10 INFO omni: Using control framework portal 21:19:11 INFO omni: Created slice with Name ig-gpo-ig-utah, URN urn:publicid:IDN+ch.geni.net:ln-prj+slice+ig-gpo-ig-utah, Expiration 2013-07-25 00:00:00 21:19:11 INFO omni: ------------------------------------------------------------ 21:19:11 INFO omni: Completed createslice: Options as run: framework: portal project: ln-prj Args: createslice ig-gpo-ig-utah Result Summary: Created slice with Name ig-gpo-ig-utah, URN urn:publicid:IDN+ch.geni.net:ln-prj+slice+ig-gpo-ig-utah, Expiration 2013-07-25 00:00:00 21:19:11 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 21:28:50 INFO stitcher: Loading config file /home/lnevers/.gcf/omni_config 21:28:50 INFO stitcher: Using control framework portal 21:28:50 INFO stitcher: Checking that slice ig-gpo-ig-utah is valid... <<==(1) 21:28:51 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 21:28:52 INFO stitcher: speaks AM API v3, but sticking with v2 <==(2) 21:28:52 INFO stitcher: speaks AM API v3, but sticking with v2 21:28:52 INFO stitcher: speaks AM API v3, but sticking with v2 21:28:52 INFO stitch.Aggregate: Writing to '/tmp/ig-gpo-ig-utah-createsliver-request-11-instageni-gpolab-bbn-com.xml' <==(3) 21:28:52 INFO stitch.Aggregate: Stitcher doing createsliver at https://boss.instageni.gpolab.bbn.com:12369/protogeni/xmlrpc/am 21:29:04 ERROR omni: {'output': 'vlan tag for link not available', 'code': {'protogeni_error_log': 'urn:publicid:IDN+instageni.gpolab.bbn.com+log+907dbcc8cf1d9204562b3c224e0c714f', 'am_type': 'protogeni', 'geni_code': 1, 'am_code': 1, 'protogeni_error_url': 'https://boss.instageni.gpolab.bbn.com/spewlogfile.php3?logfile=907dbcc8cf1d9204562b3c224e0c714f'}, 'value': 0} 21:29:34 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-21T01:09:34Z 21:30:12 INFO stitch.Aggregate: Allocation at complete. 21:30:12 INFO stitch.Aggregate: Writing to '/tmp/ig-gpo-ig-utah-createsliver-request-11-utah-geniracks-net.xml' <==(3) 21:30:12 INFO stitch.Aggregate: Stitcher doing createsliver at https://boss.utah.geniracks.net:12369/protogeni/xmlrpc/am 21:30:39 INFO stitch.Aggregate: Allocation at complete. 21:30:39 INFO stitch.Aggregate: Writing to '/tmp/ig-gpo-ig-utah-createsliver-request-12-instageni-gpolab-bbn-com.xml' <==(4) 21:30:39 INFO stitch.Aggregate: Stitcher doing createsliver at https://boss.instageni.gpolab.bbn.com:12369/protogeni/xmlrpc/am 21:30:56 ERROR omni: {'output': 'vlan tag for link not available', 'code': {'protogeni_error_log': 'urn:publicid:IDN+instageni.gpolab.bbn.com+log+f90141724ac70ca40144bd5b8775e40f', 'am_type': 'protogeni', 'geni_code': 1, 'am_code': 1, 'protogeni_error_url': 'https://boss.instageni.gpolab.bbn.com/spewlogfile.php3?logfile=f90141724ac70ca40144bd5b8775e40f'}, 'value': 0} 21:31:41 INFO stitch.Aggregate: Allocation at complete. 21:31:41 INFO stitch.Aggregate: Writing to '/tmp/ig-gpo-ig-utah-createsliver-request-11-ion-internet2-edu.xml' <==(5) 21:31:41 INFO stitch.Aggregate: Stitcher doing createsliver at http://geni-am.net.internet2.edu:12346 <==(6) 21:32:25 INFO stitch.Aggregate: DCN AM : must wait for status ready.... 21:32:25 INFO stitch.Aggregate: Pause to let circuit become ready... 21:33:02 INFO stitch.Aggregate: DCN circuit 22911 is ready 21:33:09 INFO stitch.Aggregate: Allocation at complete. 21:33:09 INFO stitch.launcher: All aggregates are complete. 21:33:09 INFO stitcher: Writing to 'ig-gpo-ig-utah-manifest-rspec-stitching-combined.xml' 21:33:09 INFO stitcher: Saved combined reservation RSpec at 4 AMs to file ig-gpo-ig-utah-manifest-rspec-stitching-combined.xml 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.[[BR]] (3) Stitcher.py generates a request RSpec for each of the aggregates in the path including ION/Internet2. [[BR]] (4) Second attempt at GPO InstaGENI, initial request failed because the requested VLAN was not available. [[BR]] (5) Request at Internet2/ION waits for DCN circuits. If this request fails, stitcher.py will try again after 600 seconds. [[BR]] 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@pc5.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 Warning: Permanently added 'pcvm2-14.instageni.gpolab.bbn.com,192.1.242.151' (RSA) to the list of known hosts. [lnevers@server-gpo ~]$ /sbin/ifconfig eth999 Link encap:Ethernet HWaddr 02:94:6D:BC:36:DC inet addr:192.1.242.151 Bcast:192.1.242.255 Mask:255.255.255.128 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:16760 errors:0 dropped:0 overruns:0 frame:0 TX packets:8485 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:22877000 (21.8 MiB) TX bytes:460760 (449.9 KiB) eth3747 Link encap:Ethernet HWaddr 02:50:1E:B4:3D:52 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:63 errors:0 dropped:0 overruns:0 frame:0 TX packets:7 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:3064 (2.9 KiB) TX bytes:476 (476.0 b) }}} 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@pc5.utah.geniracks.net [lnevers@client-utah ~]$ /sbin/ifconfig eth923 Link encap:Ethernet HWaddr 02:FC:D2:8D:7C:FF 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:54 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:2408 (2.3 KiB) TX bytes:0 (0.0 b) eth999 Link encap:Ethernet HWaddr 02:CD:95:2D:16:C5 inet addr:172.17.5.7 Bcast:172.31.255.255 Mask:255.240.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:17003 errors:0 dropped:0 overruns:0 frame:0 TX packets:8062 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:22951047 (21.8 MiB) TX bytes:432534 (422.3 KiB) [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=161 ms 64 bytes from 192.168.4.1: icmp_req=2 ttl=64 time=80.3 ms 64 bytes from 192.168.4.1: icmp_req=3 ttl=64 time=80.4 ms 64 bytes from 192.168.4.1: icmp_req=4 ttl=64 time=80.4 ms 64 bytes from 192.168.4.1: icmp_req=5 ttl=64 time=80.4 ms --- 192.168.4.1 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4005ms rtt min/avg/max/mdev = 80.388/96.667/161.683/32.508 ms }}} }}} == Finish the Stitching Experiment == {{{ #!html Finish }}}