Warp is a component-based software defined networking framework built on top of Akka. It holds connections with SDN switches, supports dynamic (re)loading of predefined or user-defined components and provides event-based way of communication between loaded components and connected switches.
Warp build and test process is managed with sbt, Simple build tool.
- Oracle Java SDK, versions 7 and 8 are verified
- Simple build tool, sbt, version 0.13. Installation instruction is here.
It's very simple. Go to
$ git clone https://github.com/FlowForwarding/warp
$ cd warp
$ sbt assembly
basic driver API and controller
driver-independent OpenFlow Protocol 1.3 API
implementation of OpenFlow Protocol 1.3 driver
an all-in-one jar for quick start
More information about subprojects you can find here.
Warp comes with sample project demo
, output jar of which may be used to start controller
$ java -cp ./demo/target/scala-2.11/demo-assembly-0.5.jar org.flowforwarding.warp.controller.ModuleManager
Then in the interactive console issue the command: start <ip> <port>
.
Please note that the way above is the easiest way to start controller, but the main idea of Warp framework is modularity, so the supposed way of controller usage is to pick only jars you really need. For example, if you want to execute instructions provided in demo project, you have to run controller in the following way:
$ java -cp ./controller/target/scala-2.11/controller-assembly-0.5.jar:./driver-api-ofp13-adapter/target/scala-2.11/driver-api-ofp13-adapter-assembly-0.5.jar:./sdriver-ofp13/target/scala-2.11/sdriver-ofp13-assembly-0.5.jar org.flowforwarding.warp.controller.ModuleManager ./demo/src/main/resources/instructions.txt
Another way to run controller is to build it using command sbt package
instead of sbt assembly
. Resulting jars will appear as ./<project>/target/scala-2.11/<project>_2.11-0.5.jar
and will not contain any third-party classes, therefore all the warp dependencies must be present in classpath in order to run controller.
More detailed information about commands, controller usage, modularity and framework architecture you can find here.