1. Running OVX

1.1. Can I use OpenJDK instead of Oracle Java?

No. We develop OVX using Oracle Java 7 and higher. We tried OpenJDK and it gave us all kinds of weird behavior and performance penalties. Feel free to submit patches to make it compatible though.

1.2. What does “Error: Unable to access jarfile ./../target/OpenVirteX.jar” mean?

Maven failed to build your executable. First, check if the VM is connected to the Internet; Maven needs to download several dependencies to build OVX. Then, make sure Maven is pointing to Oracle Java, NOT OpenJDK. mvn -version should give you a line similar to the one below:

Java version: 1.7.0_55, vendor: Oracle Corporation

The ‘Java version’ above should match what java -version outputs. If not, you can try setting the Java your system is using with update-alternatives:

$ sudo update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
* 0            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      auto mode
  1            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      manual mode
  2            /usr/local/bin/jre1.7.0_55/bin/java              90        manual mode

Press enter to keep the current choice[*], or type selection number: 

Select whichever Java is in your Oracle Java install path (usually “jre1.x.y/bin/java”, for the above that’s 2).
Sometimes update-alternatives won’t be give you any choices other than openjdk. Given that you’ve installed Oracle Java, you can add it to the line-up:

$ sudo update-alternatives --install /usr/bin/java java /[Oracle-Java-directory]/jre1.7.0_55/bin/java 1000 

Then try again.

2. Development

2.1. When are you going to support OpenFlow 1.x??

So far we have been using OpenFlowJ, but we are currently replacing it by LoxiGen. This should give us support for all current and future OpenFlow versions. We’ll let you know when the transition is done.

2.2. How should I setup my Eclipse environment?

  • Make sure you are running Java 1.7 JDK from Oracle
  • Install Maven Plugin
    • Goto Help -> Eclipse Marketplace and search for “Maven Integration for Eclipse (Juno and newer)”
  • Goto File -> Import -> Maven -> Existing Maven Projects
    • Point it to the base directory of OpenVirteX
  • Goto Run -> Run Configurations and select OpenVirteX (I think this assumes you already ran it once). Command line parameters go under “Program arguments”; these are described in more detail here. Use the following line for the VM arguments
-Dlog4j.configurationFile=config/log4j2.xml -Djavax.net.ssl.keyStore=config/sslStore

3. Miscellaneous

3.1. What’s the difference between OpenVirteX and FlowVisor? When should I use which?

The best way to understand this is to see what both do to the packet header space (flowspace).

In short, OpenVirteX gives you a full packet header space (a virtual copy for your own virtual network), whereas FlowVisor lets you divide up a single packet header space into subsets to assign to your slices.

So, if you want whole new virtual networks, use OpenVirteX, and if you just want to group hosts based on specific header field values (IP addresses, TCP/UDP port values, etc), use FlowVisor.

3.2. How does OpenVirteX isolate tenant traffic on the physical OpenFlow network?

OVX uses the MAC address fields in the packet headers to add extra information which helps it differentiate between different tenants’ traffic. Specifically, it encodes three parameters into the MAC address fields, across both the source and destination MAC fields (this gives us more bits to support more flows and tenants). The encoded values are:

  • flow id — this allows us to look up the particular flow that entered the virtual link and restore its values when the traffic exits the virtual link.
  • tenant id — isolates the different tenants on the virtual link
  • virtual link id — which allows us to keep track of which virtual link this is as virtual links can overlap.

The MAC addresses use ON.Lab’s OUI (A4:23:05), which guarantees us that there cannot be a collision with a host’s real MAC address and leaves 48 bits to encode these values on.