Coder Social home page Coder Social logo

plexus's Introduction

Introduction

Plexus is an OpenFlow controller application developed at Duke University.

It makes use of the Ryu OpenFlow controller framework (http://osrg.github.io/ryu/), and is derived from the "rest_router" example application that is included with Ryu.

Plexus extends the "rest_router" example in several key ways:

  1. The concept of a "policy routing table" is added, wherein static routes can be applied only for specific source address ranges.
  2. Error reporting is provided if a gateway associated with a route is unreachable.
  3. Management of DHCP traffic is provided, for integration with existing production deployments.

Plexus is nowhere near complete, and has some known bugs. Development is ongoing, and contributions are welcomed.

Near-term planned additions:

  1. Traffic "tag flipping" from one VLAN to another.
  2. Network address translation from one subnet to another, for a specified range of IPs.
  3. Routing of traffic based on source and/or destination TCP/UDP port matches.

Longer-term planned additions:

  1. IPv6 support
  2. Porting to Python 3.x

The name "Plexus" was chosen due to both the English meaning and Latin etymology of the word. The second meaning of the word, according to the Mirriam-Webster dictionary (http://www.merriam-webster.com/dictionary/plexus) is:

"an interwoven combination of parts or elements in a structure or system"

According to the wikitionary (https://en.wiktionary.org/wiki/plexus#Latin), "plexus" is the perfect passive participle of plectō (plectere, plexī, plexum). This translates, in English, to "(having been) plaited, woven or braided."

We hope that, as Plexus develops, it permits you the flexibility to create arbitrarily complex weavings within your network infrastructure, that also remain understandable and manageable.

At Duke, we manage the complexity of our software-defined network using the Switchboard web application (https://github.com/mccahill/switchboard), as authored by Mark P. McCahill.

Building and Deploying Plexus

Plexus runs on Unix-like systems, due to relying on supervisord to manage the Ryu controller framework.

Installing Plexus can be done by installing the correct set of dependency packages using pip, and then running "python setup.py".

For ease of deployment, however, an RPM build process has been provided, and a Dockerfile is being worked on. If demand exists, a Debian/Ubuntu packaging infrastructure will be added as well.

Distribution of binary RPMs is planned in the near future, as is a detailed description of the RPM build process.

REST API Documentation

The following REST API description is based on the description originally included with the "rest_router" example application, and has been added to as new functions were integrated into Plexus.

This API is still in flux; please expect changes, as we solidify the set of core functions and abstractions.

Specific switches or VLANs are specified below, using the following convention:

{switch_id} may be: "all", or a specific DPID
{vlan_id} may be "all", or a specific numeric value corresponding to a given VLAN

Get subnet address range data and routing data.

Get information about the "default" VLAN (VLAN "0" or "1", a.k.a. untagged traffic) on a particular DPID:

GET /router/{switch_id}

Get information about a specific VLAN, on a particular DPID:

GET /router/{switch_id}/{vlan_id}

The requested information is returned as a JSON-encoded string.

Set subnet address range data or routing data.

Set information on the "default" VLAN, on a particular DPID:

POST /router/{switch_id}

Set information on a specific VLAN, on a particular DPID:

POST /router/{switch_id}/{vlan_id}

When setting information, the information to set is specified as a JSON-encoded string parameter to the POST. Examples of the JSON-encoded data for specific operations are described below.

Define a subnet address range:

parameter = {"address": "A.B.C.D/M"}

Set a static route:

parameter = {"destination": "A.B.C.D/M", "gateway": "E.F.G.H"}

Set the default route:

parameter = {"gateway": "E.F.G.H"}

Set a static route for a specific subnet address range:

parameter = {"destination": "A.B.C.D/M", "gateway": "E.F.G.H", "address_id": "<int>"}

Set the default route for a specific subnet address range:

parameter = {"gateway": "E.F.G.H", "address_id": "<int>"}

Address identifiers for the above two operations can be retrieved using the GET operations described above.

Set valid DHCP server(s) for the default VLAN or a specific VLAN:

parameter = {"dhcp_servers": [ "A.B.C.D", "E.F.G.H" ]}

Delete subnet address range data or routing data.

Delete information associated with the "default" VLAN, on a particular DPID:

DELETE /router/{switch_id}

Delete information associated with a specific VLAN, on a particular DPID:

DELETE /router/{switch_id}/{vlan_id}

When deleting information, the information to delete is specified as a JSON-encoded string parameter to the DELETE. Examples of the JSON-encoded data for specific operations are described below.

Delete a subnet address range, or all subnet address ranges:

parameter = {"address_id": "<int>"} or {"address_id": "all"}

Delete a static route, or all static routes:

parameter = {"route_id": "<int>"} or {"route_id": "all"}

plexus's People

Contributors

vjorlikowski avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.