DocumentsDownloadsWikiCommunityBlogAbout

OpenFlow GUI Wire Protocol

From OpenFlow Wiki

Jump to: navigation, search

Contents


ENVI and LAVI uses a wire protocol over TCP/SSL to communicate. We will take a high level look at that wire protocol here. Detailed packet format and construction will be documented using doxygen (in LAVI) and javadoc (in ENVI) respectively.

Messages

All messages in this protocol begin with header (length, type, transaction id). This allows the transaction to be tracked. However, messages sent in response to a subscription may/will not follow the same xid as the subscribe request.

The type field (a 8 bit value) is being grouped using the upper 4 bits. The groups defined up to now are as follows:

  • 0x00 to 0x09 is reserved for administrative purposes, and 0x0* are for generic communication functionality in the protocol, e.g. poll.
  • 0x1* are used for topology request and responses.
  • 0x2* are for statistics gathering.

There is a lot of room for expansion. As a guideline, non-generically useful protocol extension should try to start from 0xA0. This leaves room for generically useful protocol extensions to be incorporated into the protocol.

Required Messages

  • BOOKT_DISCONNECT is used to disconnect the client from the server. This allows the server to clear state (due to the subscribe-publish model used) as the client leaves.
  • BOOKT_ECHO and BOOKT_ECHO_RESPONSE is used to test the state of a connection. All frontend and backend must implement the functionality of replying a response to an echo request.

Polling

  • BOOKT_POLL and BOOKT_POLL_STOP is used for repeated sending of messages. This prevents a large number of requests from being sent across wire.

Topology

The protocol specify nodes and links to draw a topology. A few things to note are:

  • Nodes can be switches, APs, hosts, etc. This should be defined by the node type.
  • Links are just connections between the nodes. A type is also associated with the link. For example, a link can be tunneled instead of being a direct link.

The frontend can also subscribe to changes in nodes and links set to prevent periodic polling.

OpenFlow Statistics

The backend can also act as a proxy for OpenFlow statistics queries, using the STAT messages. The query format is the same as the OpenFlow statistics query, with the header replaced by a different one.

Flow Visualization

This part is currently in flux. Any idea of how to represent arbitrary flows in wire protocol would be great to know.

Copyright 2008 by the OpenFlow Consortium. All rights reserved. Powered by MediaWiki and WordPress.