Introduction to EI

Extensible Internet (EI) is a module for the Pox Networking Platform that provides the core infrastructure for creating edge networking services between interconnected domains and the nodes within them. More concretely, every node in EI is defined by its domain and its service node ID in that domain, often referred to as its DOM.SN identifier. Nodes are connected via pipes that can be configured in a variety of ways, but to a service, are meant to be a simple, direct form of bidirectional packet I/O between one end of the pipe and the other.

Service Modules

EI itself runs multiple service modules (SMs) concurrently. There are two special core SMs that must always be run on a node- these are the Service Node Manager (SNM) and Pipe Terminus (PT). Each service consists of two primary components- a Control Plane (CP), and a Data Plane (DP). The CP consists of Python code and interacts directly with core Pox components, and the DP consists of C++ code run in a separate thread started by the CP. A service commonly will perform control and configuration tasks in the CP, and the DP will process and send packets on pipes using any configuration parameters set by the CP. Every service has its own unique service ID to differentiate itself from other services that may be running on the same node.

Host Stacks

A service module can define a host stack that defines separate IPC definitions for an external Python application to interact with the service via a Linux domain socket [1]. Host stacks are run within the Pipe Terminus, and transform any incoming IPC into a relevant packet that is sent over a “host pipe” to the DP of the service. A service module does not have to define a host stack, but it is the common and expected way to interact with a service.

Host Stack Proxies

While it is possible to write a Python application that uses the host stack of a service directly, it can be more convienent to make a simple HTTP proxy for the host stack using Pox’s available HTTP server architecture. We provide proxies for the services included with EI, and they are what are primarily documented here as well. We also provide a client library in Python that can communicate with its corresponding service proxy.

These proxies can also be put behind a reverse nginx proxy to make them publically available with authentication. Our deployment framework has an example nginx config that can be used for this purpose. For more information please see the relevant deployment documentation.

Service Configuration

The primary component of Pox that EI uses is a synchronized tree of configuration information, which we usually refer to as the Config Tree. EI provides a control interface via the ctl.py module to read and write to this tree, and services will typically read from it in order to get any information necessary at runtime. There is a script in bin/ctl that can call into this script easily. Pipe configuration is set via this tree, and services can choose to read/write information to this tree as well.

Footnotes