The following is intended as a guide on how to use GENI for our course. Although we will walk through this procedure in class, please feel free to refer back to these notes as necessary.
Table of Contents
Introduction
GENI is a nationwide testbed for developing and conducting network or distributed experiments. There are many GENI racks with compute and networking resources scattered around the country, where we can reserve virtual machines (VMs), entire servers, programmable network switches, and layer 2/layer 3 links to interconnect our resources. Due to the distributed nature of GENI, resources can be reserved in strategic locations given a desired bandwidth or latency.
Clemson is a member of the GENI testbed with two GENI racks and a wireless testbed for conducting WiMAX, LTE, and WiFi experiments. GENI is programmable from the application layer where your programs run all the way down into the link layer where switches forward packets. As such, it is a very powerful and flexible testbed, especially for network experimenters and those interested in software defined networking research (as our research group is).
Given the above research benefits, GENI has other advantages that extend into the classroom. It is a great "sandbox" where you can get hands on experience with real, non-simulated networks. Not to mention, you do not have to worry about screwing up the network, since your environment is isolated from those of other experimenters and of production networks, such as the Internet.
Getting Started
Login to GENI
To use GENI, all you need is your Clemson username and password. GENI is federated with InCommon, so that we can use our existing accounts to use the service, just as we can use eduroam at other universities and places around the country and world without having to create additional accounts.
To access GENI, navigate in your favorite browser to http://portal.geni.net. From here, select Clemson University from the list of click the Clemson logo if you see it present already. Then, enter your Clemson username (omitting @clemson.edu) and password. You should be granted access to the GENI portal.
Join a Project
I have already batch added everyone as members to the ece-4400-6400 project. Please check your email and accept the invite to complete the process. |
---|
Once in GENI, you must join a project in order to actually reserve resources. For this course, the project you should be a member of is ece-4400-6400. You can browse all available projects from the "Projects" tab. Please to not try to join projects other than the one for our course. Once you join a project, there is no need to rejoin in the future – you will be a member until the project is terminated.
Create your Topology
In GENI, there are two terms you should become familiar with – slice and sliver. A slice is your running experiment and might encompass multiple physical resources and/or racks around the country. You can think of a slice as your network topology including any end hosts you have attached to it. A sliver, on the other hand, defines your resources at a particular GENI location.
For example, if you were to reserve two VMs at both Clemson InstaGENI and Stanford InstaGENI with a layer 2 connection linking the VMs, your slice would be the four VMs and the tunnel (i.e. everything), whereas there would be three slivers – one at Clemson InstaGENI, one at Stanford InstaGENI, and one called AL2S (Advanced Layer 2 Services), which is responsible for establishing the link between the Clemson and Stanford slivers. If you ever ask for help on geni-users@googlegroups.com, they might throw these terms at you, which is why I introduce them now.
In order to reserve your resources, you need to first define what those resources are. To do this, GENI uses resource specification files or rspecs for short. An rspec is an XML file where you can define your resources using certain XML tags. An example rspec is given below:
<?xml version="1.0" encoding="utf-8"?> <rspec expires="2015-04-07T13:40:37Z" type="manifest" xmlns="http://www.geni.net/resources/rspec/3" xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab1" xmlns:jacks="http://www.protogeni.net/resources/rspec/ext/jacks/1" xmlns:tour="http://www.protogeni.net/resources/rspec/ext/apt-tour/1" xmlns:vtop="http://www.protogei.net/resources/rspec/ext/emulab/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.geni.net/resources/rspec/3 http://www.geni.net/resources/rspec/3/manifest.xsd"> <node client_id="client-stan" component_id="urn:publicid:IDN+instageni.stanford.edu+node+pc2" component_manager_id="urn:publicid:DN+instageni.stanford.edu+authority+cm" exclusive="false" sliver_id="urn:publicid:IDN+instageni.stanford.edu+sliver+24452" xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1"> <icon url="https://portal.geni.net/images/VM-noTxt-centered.svg" xmlns="http://www.protogeni.net/resources/rspec/ext/jacks/1"/> <sliver_type name="default-vm"/> <services> <login authentication="ssh-keys" hostname="pc2.instageni.stanford.edu" port="33851" username="rizard01"/> <emulab:console server="pc2.instageni.stanford.edu"/> </services> <interface client_id="if-client-ovs-stan" component_id="rn:publicid:IDN+instageni.stanford.edu+interface+pc2:lo0" mac_address="02e5da91e2bc" sliver_id="urn:publicid:IDN+instageni.stanford.edu+sliver+24459"> <ip address="10.10.2.2" type="ipv4"/> </interface> <emulab:vnode name="pcvm2-12"/> <host name="client-stan.sos1.ch-geni-net.instageni.stanford.edu"/> </node> <node client_id="ovs-stan" component_id="urn:publicid:IDN+instageni.stanford.edu+node+pc2" component_manager_id="urn:publicid:IDNinstageni.stanford.edu+authority+cm" exclusive="false" sliver_id="urn:publicid:IDN+instageni.stanford.edu+sliver+24453" xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1"> <icon url="https://portal.geni.net/images/VM-noTxt-centered.svg" xmlns="http://www.protogeni.net/resources/rspec/ext/jacks/1"/> <routable_control_ip xmlns="http://www.protogeni.net/resources/rspec/ext/emulab/1"/> <sliver_type name="default-vm"/> <services> <login authentication="ssh-keys" hostname="pcvm2-13.instageni.stanford.edu" port="22" username="kwang01"/> <login authentication="ssh-keys" hostname="pcvm2-13.instageni.stanford.edu" port="22" username="rizard01"/> <emulab:console server="pcvm2-13.instageni.stanford.edu"/> </services> <interface client_id="link-stanford-max-stan" component_id="urn:publicid:IDN+instageni.stanford.edu+interface+pc2:eth0" sliver_id="urn:publicid:IDN+instageni.stanford.edu+sliver+24456"> <ip address="10.0.150.1" netmask="255.255.255.0" type="ipv4"/> </interface> <interface client_id="if-ovs-client-stan" component_id="rn:publicid:IDN+instageni.stanford.edu+interface+pc2:lo0" mac_address="02547113add2" sliver_id="urn:publicid:IDN+instageni.stanford.edu+sliver+24458"> <ip address="10.10.2.1" type="ipv4"/> </interface> <interface client_id="if-ovs-agent-stan" component_id="un:publicid:IDN+instageni.stanford.edu+interface+pc2:lo0" mac_address="0274b45e7138" sliver_id="urn:publicid:IDN+instageni.stanford.edu+sliver+24462"> <ip address="10.10.3.2" type="ipv4"/> </interface> <emulab:vnode name="pcvm2-13"/> <host name="ovs-stan.sos1.ch-geni-net.instageni.stanford.edu"/> </node> <node client_id="agent-stan" component_id="urn:publicid:IDN+instageni.stanford.edu+node+pc2" component_manager_id="urn:publicid:IN+instageni.stanford.edu+authority+cm" exclusive="false" sliver_id="urn:publicid:IDN+instageni.stanford.edu+sliver+24451" xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1"> <icon url="https://portal.geni.net/images/VM-noTxt-centered.svg" xmlns="http://www.protogeni.net/resources/rspec/ext/jacks/1"/> <sliver_type name="default-vm"/> <services> <login authentication="ssh-keys" hostname="pc2.instageni.stanford.edu" port="33850" username="kwang01"/> <login authentication="ssh-keys" hostname="pc2.instageni.stanford.edu" port="33850" username="rizard01"/> <emulab:console server="pc2.instageni.stanford.edu"/> </services> <interface client_id="if-agent-ovs-stan" component_id="un:publicid:IDN+instageni.stanford.edu+interface+pc2:lo0" mac_address="02b0b691cb89" sliver_id="urn:publicid:IDN+instageni.stanford.edu+sliver+24461"> <ip address="10.10.3.1" type="ipv4"/> </interface> <emulab:vnode name="pcvm2-11"/> <host name="agent-stan.sos1.ch-geni-net.instageni.stanford.edu"/> </node> <node client_id="agent-max" component_id="urn:publicid:IDN+instageni.maxgigapop.net+node+pc3" component_manager_id="urn:publicid:ID+instageni.maxgigapop.net+authority+cm" exclusive="false" sliver_id="urn:publicid:IDN+instageni.maxgigapop.net+sliver+15668" xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1"> <icon url="https://portal.geni.net/images/VM-noTxt-centered.svg" xmlns="http://www.protogeni.net/resources/rspec/ext/jacks/1"/> <sliver_type name="default-vm"/> <services> <login authentication="ssh-keys" hostname="pc3.instageni.maxgigapop.net" port="32314" username="kwang01"/> <login authentication="ssh-keys" hostname="pc3.instageni.maxgigapop.net" port="32314" username="rizard01"/> <emulab:console server="pc3.instageni.maxgigapop.net"/> </services> <interface client_id="if-agent-ovs-max" component_id="urn:ublicid:IDN+instageni.maxgigapop.net+interface+pc3:lo0" mac_address="026b11909905" sliver_id="urn:publicid:IDN+instageni.maxgigapop.net+sliver+15676"> <ip address="10.10.2.2" type="ipv4"/> </interface> <emulab:vnode name="pcvm3-1"/> <host name="agent-max.sos1.ch-geni-net.instageni.maxgigapop.net"/> </node> <node client_id="client-max" component_id="urn:publicid:IDN+instageni.maxgigapop.net+node+pc3" component_manager_id="urn:publicid:IN+instageni.maxgigapop.net+authority+cm" exclusive="false" sliver_id="urn:publicid:IDN+instageni.maxgigapop.net+sliver+15669" xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1"> <icon url="https://portal.geni.net/images/VM-noTxt-centered.svg" xmlns="http://www.protogeni.net/resources/rspec/ext/jacks/1"/> <sliver_type name="default-vm"/> <services> <login authentication="ssh-keys" hostname="pc3.instageni.maxgigapop.net" port="32315" username="kwang01"/> <login authentication="ssh-keys" hostname="pc3.instageni.maxgigapop.net" port="32315" username="rizard01"/> <emulab:console server="pc3.instageni.maxgigapop.net"/> </services> <interface client_id="if-client-ovs-max" component_id="urnpublicid:IDN+instageni.maxgigapop.net+interface+pc3:lo0" mac_address="02eb4374e711" sliver_id="urn:publicid:IDN+instageni.maxgigapop.net+sliver+15679"> <ip address="10.10.3.2" type="ipv4"/> </interface> <emulab:vnode name="pcvm3-2"/> <host name="client-max.sos1.ch-geni-net.instageni.maxgigapop.net"/> </node> <node client_id="ovs-max" component_id="urn:publicid:IDN+instageni.maxgigapop.net+node+pc3" component_manager_id="urn:publicid:IDN+nstageni.maxgigapop.net+authority+cm" exclusive="false" sliver_id="urn:publicid:IDN+instageni.maxgigapop.net+sliver+15670" xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1"> <icon url="https://portal.geni.net/images/VM-noTxt-centered.svg" xmlns="http://www.protogeni.net/resources/rspec/ext/jacks/1"/> <routable_control_ip xmlns="http://www.protogeni.net/resources/rspec/ext/emulab/1"/> <sliver_type name="default-vm"/> <services> <login authentication="ssh-keys" hostname="pcvm3-17.instageni.maxgigapop.net" port="22" username="kwang01"/> <login authentication="ssh-keys" hostname="pcvm3-17.instageni.maxgigapop.net" port="22" username="rizard01"/> <emulab:console server="pcvm3-17.instageni.maxgigapop.net"/> </services> <interface client_id="link-stanford-max-max" component_id="urn:publicid:IDN+instageni.maxgigapop.net+interface+pc3:eth0" sliver_id="urn:publicid:IDN+instageni.maxgigapop.net+sliver+15673"> <ip address="10.0.150.2" netmask="255.255.255.0" type="ipv4"/> </interface> <interface client_id="if-ovs-agent-max" component_id="urn:ublicid:IDN+instageni.maxgigapop.net+interface+pc3:lo0" mac_address="025b1bc80530" sliver_id="urn:publicid:IDN+instageni.maxgigapop.net+sliver+15675"> <ip address="10.10.2.1" type="ipv4"/> </interface> <interface client_id="if-ovs-client-max" component_id="urnpublicid:IDN+instageni.maxgigapop.net+interface+pc3:lo0" mac_address="0206b1582723" sliver_id="urn:publicid:IDN+instageni.maxgigapop.net+sliver+15678"> <ip address="10.10.3.1" type="ipv4"/> </interface> <emulab:vnode name="pcvm3-17"/> <host name="ovs-max.sos1.ch-geni-net.instageni.maxgigapop.net"/> </node> <link client_id="link-stanford-max" sliver_id="urn:publicid:IDN+instageni.stanford.edu+sliver+24455" xmlns:vtop="http://www.protogeni.net/resources/rspec/ext/emulab/1"> <link_type name="egre-tunnel"/> <interface_ref client_id="link-stanford-max-stan" component_id="urn:publicid:IDN+instageni.stanford.edu+interface+pc2:eth0" sliver_id="urn:publicid:IDN+instageni.stanford.edu+sliver+24456"/> <interface_ref client_id="link-stanford-max-max"/> <component_manager name="urn:publicid:IDN+instageni.stanford.edu+authority+cm"/> <component_manager name="urn:publicid:IDN+instageni.maxgigapop.net+authority+cm"/> <vtop:link_attribute key="nomac_learning" value="yep"/> <property capacity="150000" dest_id="link-stanford-max-max" source_id="link-stanford-max-stan"/> </link> <link client_id="link-client-ovs-stan" sliver_id="urn:publicid:IDN+instageni.stanford.edu+sliver+24457" xmlns:vtop="http://www.protogeni.net/resources/rspec/ext/emulab/1"> <interface_ref client_id="if-ovs-client-stan" component_id="urn:publicid:IDN+instageni.stanford.edu+interface+pc2:lo0" sliver_id="urn:publicid:IDN+instageni.stanford.edu+sliver+24458"/> <interface_ref client_id="if-client-ovs-stan" component_id="urn:publicid:IDN+instageni.stanford.edu+interface+pc2:lo0" sliver_id="urn:publicid:IDN+instageni.stanford.edu+sliver+24459"/> <component_manager name="urn:publicid:IDN+instageni.stanford.edu+authority+cm"/> <vtop:link_attribute key="nomac_learning" value="yep"/> <property capacity="150000" dest_id="if-client-ovs-stan" source_id="if-ovs-client-stan"/> </link> <link client_id="link-agent-ovs-stan" sliver_id="urn:publicid:IDN+instageni.stanford.edu+sliver+24460" xmlns:vtop="http://www.protogeni.net/resources/rspec/ext/emulab/1"> <interface_ref client_id="if-agent-ovs-stan" component_id="urn:publicid:IDN+instageni.stanford.edu+interface+pc2:lo0" sliver_id="urn:publicid:IDN+instageni.stanford.edu+sliver+24461"/> <interface_ref client_id="if-ovs-agent-stan" component_id="urn:publicid:IDN+instageni.stanford.edu+interface+pc2:lo0" sliver_id="urn:publicid:IDN+instageni.stanford.edu+sliver+24462"/> <component_manager name="urn:publicid:IDN+instageni.stanford.edu+authority+cm"/> <vtop:link_attribute key="nomac_learning" value="yep"/> <property capacity="150000" dest_id="if-ovs-agent-stan" source_id="if-agent-ovs-stan"/> </link> <link client_id="link-agent-ovs-max" xmlns="http://www.geni.net/resources/rspec/3"> <interface_ref client_id="if-ovs-agent-max" xmlns="http://www.geni.net/resources/rspec/3"/> <interface_ref client_id="if-agent-ovs-max" xmlns="http://www.geni.net/resources/rspec/3"/> <component_manager name="urn:publicid:IDN+instageni.maxgigapop.net+authority+cm" xmlns="http://www.geni.net/resources/rspec/3"/> <vtop:link_attribute key="nomac_learning" value="yep"/> <property capacity="150000" dest_id="if-agent-ovs-max" source_id="if-ovs-agent-max"/> </link> <link client_id="link-client-ovs-max" xmlns="http://www.geni.net/resources/rspec/3"> <interface_ref client_id="if-ovs-client-max" xmlns="http://www.geni.net/resources/rspec/3"/> <interface_ref client_id="if-client-ovs-max" xmlns="http://www.geni.net/resources/rspec/3"/> <component_manager name="urn:publicid:IDN+instageni.maxgigapop.net+authority+cm" xmlns="http://www.geni.net/resources/rspec/3"/> <vtop:link_attribute key="nomac_learning" value="yep"/> <property capacity="150000" dest_id="if-client-ovs-max" source_id="if-ovs-client-max"/> </link> <rs:site_info xmlns:rs="http://www.protogeni.net/resources/rspec/ext/site-info/1"> <rs:location country="US" latitude="37.43" longitude="-122.17"/> </rs:site_info> <rs:site_info xmlns:rs="http://www.protogeni.net/resources/rspec/ext/site-info/1"> <rs:location country="US" latitude="38.970941" longitude="-76.921971"/> </rs:site_info> </rspec>