695db2964e5d1b4a0a2bb787abfb49c0bf98aa74
Remove monolithic OpenFlow switch. Add userspace datapath. Fix BUG#13: Revise check wildcards for in_port != out_port output validation. Fix BUG#30: Made use of get_jiffies_64 instead of jiffies. Fix BUG#31: Fix NetFPGA crash in case of test_delete test harness run. Fix BUG#32: Add stack depth limitation to avoid inifinite loop in log_backtrace. Fix BUG#33: Improve NetFPGA kernel extension and NetFPGA image to support MAC address rewrite features (two actions) on NetFPGA enabled OpenFlow switch. Fix BUG#34: Add NetFPGA kernel extension source codes to create distribution package with NetFPGA correctly. Fix BUG#38: Improve regression test for FLOW_MOD ACTION SET_DL_SRC and SET_DL_DST. Fix BUG#39: Correct misunderstanding of byte order ops for OFPAT_XXX.
OpenFlow Reference Release <http://openflowswitch.org>
What is OpenFlow?
-----------------
OpenFlow is a flow-based switch specification designed to enable
researchers to run experiments in live networks. OpenFlow is based on a
simple Ethernet flow switch that exposes a standardized interface for
adding and removing flow entries.
An OpenFlow switch consists of three parts: (1) A "flow table" in
which each flow entry is associated with an action telling the switch
how to process the flow, (2) a "secure channel" connecting the switch
to a remote process (a controller), allowing commands and packets to
be sent between the controller and the switch, and (3) an OpenFlow
protocol implementation, providing an open and standard way for a
controller to talk to the switch.
An OpenFlow switch can thus serve as a simple datapath element that
forwards packets between ports according to flow actions defined by
the controller using OpenFlow commands. Example actions are:
- Forward this flow's packets to the given port(s)
- Drop this flow's packets
- Encapsulate and forward this flow's packets to the controller.
The OpenFlow switch is defined in detail in the OpenFlow switch
Specification [2].
What's here?
------------
This distribution includes two reference implementations of an
OpenFlow switch. The first implementation, which is closely tied to
Linux because it is partially implemented in the Linux kernel, has the
following components:
- A Linux kernel module that implements the flow table and
OpenFlow protocol, in the datapath directory.
- secchan, a program that implements the secure channel
component of the reference switch.
- dpctl, a tool for configuring the kernel module.
- Hardware acceleration support, see README.hwtables
The second implementation has the following components:
- udatapath, which implements the same functionality as the
Linux kernel module in userspace, at a cost in performance.
- secchan, a program that implements the secure channel
component of the reference switch (the same program used in
the kernel-based implementation).
This distribution includes some additional software as well:
- controller, a simple program that connects to any number of
OpenFlow switches, commanding them to act as regular MAC
learning switches.
- vlogconf, a utility that can adjust the logging levels of a
running secchan or controller.
- ofp-pki, a utility for creating and managing the public-key
infrastructure for OpenFlow switches.
- A patch to tcpdump that enables it to parse OpenFlow
messages.
- A regression suite that tests OpenFlow functionality, please
see regress/README.
- A Wireshark dissector that can decode the OpenFlow wire
protocol. Please see utilities/wireshark_dissectors/README.
For installation instructions, read INSTALL. Each userspace program
is also accompanied by a manpage.
Platform support
----------------
Other than the Linux kernel module and userspace switch
implementation, the software in the OpenFlow distribution should
compile under Unix-like environments such as Linux, FreeBSD, Mac OS X,
and Solaris. Our primary test environment is Debian GNU/Linux.
Please contact us with portability-related bug reports or patches.
The Linux kernel module is, of course, Linux-specific, and the dpctl
utility will not be useful without the kernel module. The testing of
the kernel module has focused on Linux 2.6.26. Linux 2.6 releases
from 2.6.15 onward and Linux 2.4 releases from 2.4.20 onward should
also work.
The userspace datapath implementation should be easy to port to
Unix-like systems. The interface to network devices, in netdev.c, is
the code most likely to need changes. So far, only Linux is
supported. We welcome ports to other platforms.
GCC is the expected compiler.
Bugs/Shortcomings
-----------------
- The flow table does not support the "normal processing" action.
References
----------
[1] OpenFlow: Enabling Innovation in College Networks. Whitepaper.
<http://openflowswitch.org/documents/openflow-wp-latest.pdf>
[2] OpenFlow Switch Specification.
<http://openflowswitch.org/documents/openflow-spec-latest.pdf>
Contact
-------
e-mail: info@openflowswitch.org
www: http://openflowswitch.org/
Description
Languages
C
82.5%
Perl
12.9%
Roff
2.2%
Makefile
0.7%
Shell
0.6%
Other
1.1%