GpENI logo

Welcome

The Great Plains Environment for Network Innovation (GpENI) is a high-speed, international network and research testbed with nodes located around the world. There are a growing number of member institutions who host and administer the testbed and who help develop a PlanetLab-based GENI control framework. (more | wiki)

About This Demonstration

This site demonstrates a PlanetLab-based testbed running on GpENI. It querys the testbed controller for current information using a custom AJAX adapter for the PLC API. It also allows anyone to visually construct network paths and measure their latency on the live testbed. The implementation is discussed later on this page. The site's main sections are summarized below.

Main Sections

Sites
A site is a GpENI member organization that hosts nodes. This section provides an interactive map and an interface for constructing arbitrary loops and measuring their network latency. A loop is a sequence of sites that begins and ends at the same site. Although these loops are quite abstract, the hope is that they can provide insight into the underlying GpENI network infrastructure.
Nodes
The testbed consists of nodes—hosts on GpENI that are dynamically partitioned into slivers which provide virtual, isolated resources to users. This section summarizes the status and major properties of every GpENI node.
Slices
A user may reserve a sliver on any node for their experiment. A slice is a collection of slivers on different nodes, all belonging to to the same experiment. It is essentially an entire virtual network controlled by the associated user. This section is not yet functional.
Other
This section is a placeholder for miscellaneous projects that lend themselves to demonstration but may not be fundamental to GpENI.

Browsers and Versions

We expect this site to function in any modern, standards-compliant desktop browser, including the latest stable versions of Firefox, Chrome, and Safari.

The original version of this demonstration was prepared for the fourth GENI Engineering Conference in April 2009 and remains online for archival purposes.

More About GpENI

GpENI is composed of universities and other institutions from around the world. The GpENI wiki is the best place to learn more about the project, including details about the network infrastructure, software architecture, and past and future milestones. We also publish news updates to our MyPLC website (note that sign-up is currently limited to GpENI members).

GpENI is funded in part by the National Science Foundation's GENI project. We belong to Cluster B, tasked with developing a PlanetLab-based GENI control framework.

Detailed Description

This demonstration is composed primarily of three custom-developed components:

  1. an AJAX adapter for the PLC API,
  2. ProbeLoop, a network latency measurement program that runs within a slice on our testbed, and
  3. the website itself, which integrates the above components with Google Maps to provide a user-friendly interface.

The AJAX Adapter for the PLC API

The AJAX adapter consists of a client-side JavaScript adapter and a server-side CGI script. Together, they provide a JSON interface for executing arbitrary PLC API calls asynchronously from a web browser.

JavaScript application code sends PLC API calls to the adapter, along with a callback to invoke with the data returned from MyPLC. The adapter packages each API call as an object, which is encoded (or “stringified”) as JSON with the help of a public domain script, and sent as the content of an HTTP POST request to the CGI script. Later, the CGI script responds with the JSON-encoded results, which are decoded into a JavaScript object and passed to the callback function provided by the application.

The CGI script, written in Python, serves two purposes. First, it acts as a same-origin proxy for XMLHttpRequest AJAX requests, which provide the only mechanism for asynchronously POSTing data but which, for security reasons, cannot be addressed to the MyPLC server if it resides on a different domain. Second, it translates the call from its object representation (which is simple to work with in JavaScript) to PLC API–compliant XML-RPC, and it performs the inverse translation for returned data.

ProbeLoop

ProbeLoop is an application that runs in a GpENI slice and is deployed on all nodes. It measures the time it takes to forward a small packet through any sequence of GpENI nodes that begins and ends at the same node.

ProbeLoop consists of two Python programs. The first is a simple relay that listens for UDP packets containing a list of addresses, moves the first address in the list to the end, and sends to that address the updated list. The second is a simple web server that listens for requests to probe a specified loop, performs the delay probe several times, and responds with a summary of the results.

Requests to ProbeLoop are HTTP GET requests with a sequence of nodes in the query part of the URL. The sequence of nodes specifies the interior of the loop to probe; the loop implicitly begins and ends with the node handling the request, which we call the anchor. The anchor generates a UDP packet with a list of addresses such that the relay algorithm (described above) will forward the packet through the specified loop. The anchor sends the packet to the relay on the next node along the loop, saves the system time, waits to receive the packet again after it has traversed the loop, and finally measures the elapsed time, which it uses as an estimate of “loop latency”.

The measurement described above is actually performed several times. The first result is discarded since it might be influenced by ARP requests (though no DNS lookups are performed). The others are summarized (the average, minimum, and maximum latencies are calculated) and encoded as JSON for the HTTP response from the anchor.

Since the website is making asynchronous GET requests here, it is not restricted to same-origin-only XMLHttpRequest-based AJAX. Instead, it uses dynamically-inserted <script> tags and the JSONP convention to communicate with the loop anchor directly.

The Website

The website relies heavily on the excellent jQuery library for cross-browser AJAX and DOM manipulation. It also makes use of the Google Maps API to help users visualize the loops they construct.

Sites

Interaction mode:

Click a site's name in the list or its marker on the map for details about the site. Generate and measure loops with the controls above the map.

Click a site's name in the list or its marker on the map to insert the site into the loop at the cursor position. See the loop definition to set the cursor position (the red box) and to remove sites from the loop.

Loop definition:

Loop length: spanning
Total delay: (avg ) (min ) (max )

Nodes

The table below shows the status and main properties of all GpENI nodes. The information is obtained from the node registry on the GpENI MyPLC.

Summary of all GpENI nodes
Nickname Status Last contact* Host name IP address Site # Slices Created Model

* Retrieved ago. Computation depends on local settings and is unreliable.

Related Links

Slices

Slice statistics are available on our CoMon slice statistics page.

Slice information is collected with CoMon, an application developed by Princeton that runs within a slice but is given access to information about other slices. CoMon also reports information about GpENI nodes.

Other

Contents

geniwrapper

geniwrapper diagram

The geniwrapper module, developed by PlanetLab, implements the GENI interface in a wrapper layer around the standard PlanetLab interfaces. GpENI has installed geniwrapper on its MyPLC controller, which is an important step in the process of creating a PlanetLab-based testbed that can export resources to the worldwide GENI research network.

The sfi command line tool was developed by PlanetLab to provide a simple UI to query the GENI interface. For demonstration purposes, we have site-specific sfi output for each GpENI site. See the sites map, click any site, and maximize the resulting "bubble" in order to see site details, including the sfi output.

Gush Integration

The GENI User Shell (Gush) project at Williams College provides software that helps researchers deploy and manage their experiments on GENI testbeds. During GEC4, a Gush developer added GpENI support so that Gush can be used to simultaneously deploy and manage experiments on GpENI and PlanetLab. The Gush wiki has a tutorial with the details.

Hello World

The PlanetLab Hello World tutorial describes a step-by-step process for deploying an application into a PlanetLab slice that reports the geographic coordinates of the node on which it is running to a central server, which generates a corresponding KML file. We duplicated the experiment on GpENI. Below, you can download the resulting KML (for Google Earth) or you can simply load it into an embedded map.