OpenGENI is designed to run on Ubuntu 12+ flavors of the Linux open-source operating systems. Software is maintained and managed through the debian/apt-get/dpkg tool sets. The software within the rack utilizes the /etc/network/interfaces files along with networking services as apposed to the standard Ubuntu Network Manager. Configurations of services are placed in to the /etc/init directory and links provided in the /etc/init.d directory, while logs are located at /var/log/upstart/.
OpenStack is an open-source piece of software which supports creation and management of virtual environments which include networks, storage, and compute resources. These services include:
- Nova: A service which creates and manages virtual machines. This software layer sits on top of other virtualization technologies such as KVM, Qemu, or Xen.
- Quantum: A service which creates and controls virtual networks. This software provides a common API which allow implementations of services such as Linux Bridging, GRE Tunneling, IP Subnets, and VLANs on top of plugins. GRAM utilizes a plugin to provide VLAN-based segregation using OpenVSwitch.
POX is a python-based OpenFlow controller toolkit that allows the development and deployment of OpenFlow compliant controllers. This toolkit is utilized by several other software components within the rack. Experimenters can build their own controllers on POX or on one of many Python Toolkits that are available.
GENI Rack Aggregate Manager (GRAM) is a fully compliant (V3.0) GENI Aggregate Manager, permitting authenticated and authorized AM API clients access to rack resources. GRAM supports GENI Rspecs V3. GRAM was first developed and tested by the GENI Project Office (GPO) on OpenGENI hardware, the first GENI rack shipped with this aggregate manager.
GRAM Implementation of the GENI AM API V3
GRAM aggregates provide two kinds of resources:
1. VIRTUAL MACHINES
Available in a range of configurations, GRAM virtual machines have varying CPU and memory resources such as mi.small, m1.medium, etc. Researchers can call GetVersion on the GRAM aggregate to acquire a list of configuration options and can specify desired configurations as an attribute of the <sliver_type> element of the request rspec.
Exclusive virtual machines are unsupported, so request rspecs with the exclusive attribute of the <node> element set to true are rejected.
2. NETWORK LINKS
Bi-directional network links connect virtual machines within a GRAM aggregate, but testers may not specify bandwidth in request rspecs. They must measure link throughput themselves if the amount of bandwidth must be identified for testing purposes. Only links connecting virtual machines on different compute hosts pass through the rack OpenFlow switch, so OpenFlow controllers can control only the flows on these links.
GRAM is comprised of the following services:
- gram-am: The aggregate manager which speaks to the GENI AM API and provides virtual resources and topologies upon request.
- gram-amv2: A version of the aggregate manager that communicates through the "V2" version of the AM API.
- gram-vmoc: A controller which manages OpenFlow traffic between multiple OpenFlow switches and controllers.
- gram-ctrl: A default controller for experiments and topolgies that have not otherwise been specified.
- gram-ch: An internal clearinghouse for testing and standalone rack configurations. This is no longer used once the rack is connected to the GENI Clearinghouse.
- gram-mon: A monitoring process that provides information to GMOC.
Storage about the state of slices and associated resources are held in the following synchronized ways:
- OpenStack holds the information in a mySQL database.
- GRAM holds the information about slices and slivers as a JSON snapshots, typically found on the control node in the /etc/gram/snapshots directory.
The GRAM Aggregate Manager (GRAM AM) provides on-demand custom programmable topologies using the GENI AM API v2 and v3 by interacting with OpenStack and the VMOC OpenFlow Multiplexer. This component acts as the communicator and manager between the experimenter, OpenStack, and the other GENI software elements to create the resources requested for a project.
VMOC (VLAN-based Multiplexing OpenFlow Controller) is a controller to the switches as well as the experimenter provided controller. It also allows multiplexing based on VLAN tags and switch DPID/ports.