Jump to: navigation, search

Project Proposals:OVSDB-Integration

Name

Open vSwitch Database Management Protocol (OVSDB) project creation and Integration into ODP

Repo Name

OVSDB Repo

OVSDB Project Description


Open vSwitch (OVS) an open source software project which implements virtual switching that is interoperable with almost all popular hypervisors. OVS uses OpenFlow to message forwarding in the control plane for both virtual and physical ports.

Ovsdb-architecture.png

OVSDB is the protocol used to manage and configure OVS instances. The wire protocol uses JSON-RPC (v1.0) for remote management. This will enable OpenDaylight to view, create, modify and delete OVS objects like bridges and ports by using the transact method to manipulate the Javascript Object Notation (JSON RFC4627) OVS database.

Jsonrpc is a simple remote procedure tool used to communicate with an ovsdb-server. Requests are formatted {"method":<string>, "params":[], "id":non-null json value} and responses {"result":[], "error":<error>, "id":match method call}. We use jackson to de-serialize json objects received from the server, storing them in our POJOs. Check out the full data binding example at Jackson in Five Minutes for an example on how we use the ObjectMapper to serialize and de-serialize our json objects. For non-blocking async socket abstraction the OVSDB project uses the Netty IO framework. Netty's performance numbers are well suited for a wire protocol such as OVSDB.

Ovsdb.png

Above is an example of our current design/class structure. Please don't consider this set in stone and provide your opinions and feedback. Here is the lifecycle of an OvsdbMessage:

1. New OvsdbIO connects to ovsdb-server at via IP address (also creates new JsonRpcClient and RequestListener instances).

2. New OvsdbMessage is formulated with method, params, and id.

3. sendMessage(OvsdbMessage) is called, which calls the rpc client invoke using our socket output stream.

4. readResponse blocks until a response is received on the input stream, the "request" name/value pair is returned to us and based on the class passed into readResponse we either setup for de-serialization or map to a java type (i.e. String).

Scope

  • Southbound protocol integration to message with ovs-server processes.
  • We have a working prototype using the jsonrpc4j library for converting Java objects to and from JSON objects using the Jackson library for serialization/deserialization. An example of the OVS schema can be found here.

Resources Committed (developers committed to working)

  • Brent Salisbury <brent.salisbury@gmail.com>
  • Evan Zeller <evanrzeller@gmail.com>
  • Giovanni Meo <gmeo@cisco.com>
  • Madhu Venugopal <mavenugo@gmail.com>
  • Kyle Mestery <mestery@mestery.com>

Initial Committers

  • Brent Salisbury <brent.salisbury@gmail.com>
  • Evan Zeller <evanrzeller@gmail.com>

Added Committers

  • Giovanni Meo <gmeo@cisco.com>
  • Madhu Venugopal <mavenugo@gmail.com>
  • Kyle Mestery <mestery@mestery.com>
  • Aswin Nair <aswinnair@gmail.com>

Vendor Neutral

  • Completely agnostic.

Meets Board Policy (including IPR)

No Inbound Code Review required for this project. No substantial contribution of 3rd party code is present {Phil Robb: 07-18-13}