This is the continued TableVisor project. The discontinued project (written in Erlang) can be found here.
Software Defined Networking aims to separate the control and data plane in networks by moving the control logic from network devices into a logically centralized controller. Using a well-defined, unified protocol, such as OpenFlow, the controller is able to configure the forwarding behavior of data plane devices. Here, the OpenFlow protocol is translated to vendor- and device-specific instructions that, for instance, manipulate the flow table entries in the device.
In reality, SDN-enabled switches often feature different hardware capabilities and configurations with respect to the number of flow tables, how they are implemented, and which kind of data plane features they support. Furthermore, most devices only support a subset of the OpenFlow specification. This leads to an ever growing device heterogeneity within the SDN landscape. Accordingly, developers either have to restrict control plane applications to a set of well known devices or provide feature limited solutions for a broad spectrum of devices.
To overcome this challenge we propose TableVisor, a transparent proxy-layer for the OpenFlow control channel. It enables a flexible and scalable abstraction of multiple data plane devices into one emulated data plane switch, meeting the requirements of the control plane applications. Therefor, TableVisor registers with the SDN controller as a single switch with use-case specific capabilities. It translates instructions and rules from control applications towards the appropriate data plane device where they are executed.
- Java 8
- Maven (build dependency)
- ONOS Controller 1.11.1 (only for examples)
- Curl (only for examples, to push ONOS rules)
- Python 2 (only for example 1)
- Mininet (only for example 1)
- A Netronome Agilio CX P4 SmartNIC (only for example 2)
JTableVisor uses maven to build an executable .jar
file.
Executing mvn package
will create the binary in ./target/
.
An exemplary configuration file can be found in ./target/classes/config.yml
after building the package.
For a detailed description of configuration options, see Configuration.
In order to run TableVisor, execute the generated .jar
file and provide the path to your configuration file in the arguments.
Example: java -jar target/tablevisor-standalone-3.0.0-SNAPSHOT-jar-with-dependencies.jar target/classes/config.yml
- Example 1: MPLS_PUSH in a Staged Pipeline with the MultiSwitchApplication
- Example 2: Label Edge Router in P4
Alexej Grigorjew - alexej.grigorjew@informatik.uni-wuerzburg.de
Stefan Geissler - stefan.geissler@informatik.uni-wuerzburg.de
Stefan Herrnleben - stefan.herrnleben@informatik.uni-wuerzburg.de
Thomas Zinner - zinner@informatik.uni-wuerzburg.de
For referencing the TableVisor tool, please use the cite the following publication.
The Power of Composition: Abstracting a Multi-Device SDN Data Path Through a Single API, S Geissler, S Herrnleben, R Bauer, A Grigorjew, T Zinner, M Jarschel, IEEE Transactions on Network and Service Management, 2019