Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

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.

Create an SSH Public/Private Key Pair

Access to resources we reserve in GENI is granted through registered public keys only. We must use our public key's private counterpart when logging into GENI resources. After we reserve resources, such as a VM, our public keys will have already been uploaded to these resources, which serves as a whitelist. The real advantage is not having to enter any passwords when logging in. If you are prompted for a password when attempting to access a GENI resource you have reserved, (1) either the resource is not yours or your resource has not been fully initialized yet (i.e. your public key hasn't been copied to it yet) or (2) you are using the wrong private key when attempting to login.

After you have logged into GENI, you can browse to the top-right corner of the screen where it lists your email address/username. Hover over this and a dropdown menu will appear with "SSH Keys" as an option. Click "SSH Keys" and follow the instructions on the screen to generate and download your private key. Your public key will be loaded by GENI onto any resources you have reserved. You should use this private key in order to access the resources. Instructions are provided by GENI for both Windows and Mac/Linux users. If you're using Windows, I would highly recommend you use Mac or Linux.

Note, if you already have an SSH public private key pair that you use regularly, you can upload it to GENI so that you do not have to manage yet another key pair.

Join a Project

(info)

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

Aggregates, Slices, Slivers

In GENI, there are three terms you should become familiar with – aggregate, slice, and sliver. An aggregate is an entity registered with GENI that provides GENI resources, such as a rack consisting of GENI servers and network switches. An aggregate might also be a provider that creates links between GENI racks. 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. The aggregates in this example are Clemson InstaGENI, Stanford InstaGENI, and AL2S. 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.

RSPECs

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>

Now, that looks nasty. And up until a year or so ago, we were writing these by hand. Lucky for you – the next generation of GENI users – there is Jacks.

Jacks

Jacks is a JavaScript-based GUI where you can define your slices in graphical way without the need to actually write an rspec by hand. There are some types of exotic slices that still require "massaging" an rspec manually in order to get the exact topology needed. However, for this course, everything we do will be straightforward enough to use Jacks.

Reserve your Resources

At this point, we have defined our topology by means of a slice; however, it's only on paper and doesn't exist anywhere. To reserve the resources we've asked for, simply click the "Reserve Resources" button underneath Jacks. This will prompt a new page to load in which you can view the reservation's status. Do not leave this page until the timer has stopped and indicates "Finished". This page will tell us if there is an error in our reservation, so it is important that we wait to verify everything checked out okay.

Since GENI racks are shared by many users all over the country, there might be a time when the rack you choose cannot handle any more reservations. To view the current status of the GENI racks, you can use this page. If you find that the rack is being heavily used, try to pick another that will suit your experiment. A simple Google search for rack names (e.g. Clemson InstaGENI) will tell you where they are in the country.

Wait

After you reserve your resources, depending on the load of the aggregates where they're being requested, it might take a few moments to them to become available to you.

 

  • No labels