Skip to content
Snippets Groups Projects
Commit 260570ef authored by Ryan Izard's avatar Ryan Izard
Browse files

Update readme

parent 089df5c6
No related branches found
No related tags found
No related merge requests found
First, the Floodlight wiki has moved. Please visit us at our new site hosted by Atlassian:
https://floodlight.atlassian.net/wiki/display/floodlightcontroller/Floodlight+Documentation
Floodlight is the leading open source SDN controller. It is supported by a community of developers including a number of engineers from Big Switch Networks (http://www.bigswitch.com/).
OpenFlow is a open standard managed by Open Networking Foundation. It specifies a protocol through switch a remote controller can modify the behavior of networking devices through a well-defined “forwarding instruction set”. Floodlight is designed to work with the growing number of switches, routers, virtual switches, and access points that support the OpenFlow standard.
Floodlight v1.0 has full support for OpenFlow 1.0 and 1.3 along with experimental support for OpenFlow 1.1, 1.2, and 1.4. Here are the highlights of what Floodlight v1.0 has to offer and how you can get your hands on it:
The v1.1 Floodlight release builds upon the improvements made in v1.0, with emphasis on new security features, the inclusion of a new proactive Access Control List module (or ACL) written by Pengfei (Alex) Lu – thanks Alex!, bug fixes to the Static Flow Pusher, REST API improvements, more sophisticated flow checking for the Static Flow Pusher – thanks Sanjivini and Naveen!, a reworked Firewall REST API – thanks electricjay!, support for dynamic switch role changes through the REST API and within modules, a new included DHCP server, and many bug fixes and optimizations.
Floodlight v1.1 has full support for OpenFlow 1.0 and 1.3 along with experimental support for OpenFlow 1.1, 1.2, and 1.4. Here are the highlights of what Floodlight v1.0 has to offer and how you can get your hands on it:
At it's core is the OpenFlowJ-Loxigen (or OpenFlowJ-Loxi for short) generated Java library, which among many powerful things abstracts the OpenFlow version behind a common API. Loxigen works by parsing OpenFlow concepts defined as structures in a set of input files. It then generates a set of Java, Python, and C libraries for use in OpenFlow applications. The Loxigen-generated libraries abstract away low-level details and provide a far more pleasant and high-level programming experience for developers. It is straightforward to define each OpenFlow version in Loxigen's input files, and each OpenFlow version is exposed through a common API, which results in few if not zero application code changes when adding OpenFlow versions. In other words, Loxigen provides a fairly future-proof API for the many OpenFlow versions to come. The Loxigen project is open source and can be found on GitHub here (http://github.com/floodlight/loxigen/wiki/OpenFlowJ-Loxi).
......@@ -12,7 +19,7 @@ For instance, the Floodlight v0.90 and v0.91 (old master) Controller class was,
Furthermore, the Static Flow Pusher and REST API in general has undergone an extensive renovation to enable full OpenFlow 1.3 support. More information on the Static Flow Pusher and its REST API syntax can be found here (http://www.openflowhub.org/display/floodlightcontroller/Floodlight+REST+API). Please note any syntax changes from prior Floodlight versions, which have been done to be more consistent with ovs-ofctl style keys.
One of the key features of Floodlight v1.0 is its full support for OpenFlow 1.0 and 1.3, complete with an easy-to-use, version-agnostic API. Each OpenFlow version has a factory that can build all types and messages as they are defined for that version of OpenFlow. This allows for a very much improved way to create OpenFlow Messages, Matches, Actions, FlowMods, etc. The creation of many OpenFlow objects has been greatly simplified using builders, all accessible from a common OpenFlow factory interface. All objects produced from builders are immutable, which allows for safer code and makes your applications easier to debug.
One of the key features of Floodlight v1.1 is its full support for OpenFlow 1.0 and 1.3, complete with an easy-to-use, version-agnostic API. Each OpenFlow version has a factory that can build all types and messages as they are defined for that version of OpenFlow. This allows for a very much improved way to create OpenFlow Messages, Matches, Actions, FlowMods, etc. The creation of many OpenFlow objects has been greatly simplified using builders, all accessible from a common OpenFlow factory interface. All objects produced from builders are immutable, which allows for safer code and makes your applications easier to debug.
To best demonstrate the extent to which constructing and working with OpenFlow concepts such as FlowMods has been improved in Floodlight v1.0, consider the following before and after example.
......@@ -34,7 +41,7 @@ flow.setMatch(match);
flow.setLengthU(OFFlowMod.MINIMUM_LENGTH + outputAction.getLengthU()); // length must be set correctly
sw.write(flow);
/* Floodlight v1.0 -- the new and improved way to compose an OFFlowMod */
/* Floodlight v1.0, v1.1 -- the new and improved way to compose an OFFlowMod */
ArrayList<OFAction> actions = new ArrayList<OFAction();
actions.add(myFactory.actions().buildOutput() // builder pattern used throughout
.setPort(OFPort.of(1)) // raw types replaced with objects for type-checking and readability
......@@ -58,7 +65,7 @@ As such, you do not need to switch APIs when composing your FlowMods and other t
There are some other subtle changes introduced, for the better. For example, many common types such as switch datapath IDs, OpenFlow ports, and IP and MAC addresses are defined by the OpenFlowJ-Loxi library through the DatapathId, OFPort, IPv4Address/IPv6Address, and MacAddress, respectively. You are encouraged to explore org.projectfloodlight.openflow.types, where you will find a wide variety of common types that are now conveniently defined in a single location. Like the objects produced from builders above, all types are immutable.
For more information on how to use the new APIs exposed in Floodlight v1.0, please refer to the OpenFlowJ-Loxi documentation and examples here (http://www.openflowhub.org/display/floodlightcontroller/How+to+use+OpenFlowJ-Loxigen).
For more information on how to use the new APIs exposed in Floodlight v1.1, please refer to the OpenFlowJ-Loxi documentation and examples here (https://floodlight.atlassian.net/wiki/display/floodlightcontroller/How+to+use+OpenFlowJ-Loxigen).
There are many more minor details, which can be found in the release notes. I have been grateful to have the support of many Floodlight developers, and together we have worked to provide the highest quality release within a reasonable time frame. I would especially like to thank the following individuals and beta testers for their code contributions and debugging efforts:
......@@ -73,10 +80,12 @@ Rob Sherwood
Sebastian Szwaczyk
KC Wang
Andreas Wundsam
electricjay
Pengfei (Alex) Lu
Based on further community feedback, there will be minor releases to address any issues found or enhancements anyone would like to contribute. The mailing list has seen quite an uptick in activity over the last few months (minus the holiday season =) ), and I look forward to seeing all the novel and innovative ways people find to use Floodlight v1.0!
Based on further community feedback, there will be minor releases to address any issues found or enhancements anyone would like to contribute. The mailing list has seen quite an uptick in activity over the last few months!
If at any time you have a question or concern, please reach out to us. We rely on our fellow developers to make the most effective improvements and find any bugs. Thank you all for the support and I hope you find your work with Floodlight v1.0 fun and productive!
If at any time you have a question or concern, please reach out to us. We rely on our fellow developers to make the most effective improvements and find any bugs. Thank you all for the support and I hope you find your work with Floodlight v1.1 fun and productive!
Happy coding!
Ryan Izard
......@@ -86,28 +95,21 @@ rizard@g.clemson.edu
Floodlight v1.0 can be found on GitHub at:
http://github.com/floodlight/floodlight/tree/v1.0.
Any updates leading up to a minor release after v1.0 will be placed in master at:
Floodlight v1.1 can be found on GitHub at:
http://github.com/floodlight/floodlight/tree/v1.1.
Any updates leading up to a minor release after v1.1 will be placed in master at:
http://github.com/floodlight/floodlight.
And finally all "bleeding edge" updates will be in my repository's master branch at:
http://github.com/rizard/floodlight.
If you need an older version of Floodlight for any reason, they can still be found on GitHub:
Floodlight v1.0 can be found on GitHub at:
http://github.com/floodlight/floodlight/tree/v1.0
Floodlight v0.91 (old master) can be found at:
https://github.com/floodlight/floodlight/tree/v0.91.
https://github.com/floodlight/floodlight/tree/v0.91
Floodlight v0.90 can be found at:
https://github.com/floodlight/floodlight/tree/v0.90.
https://github.com/floodlight/floodlight/tree/v0.90
To download a pre-built VM appliance, access documentation, and sign up for the mailing list, go to:
http://www.projectfloodlight.org/floodlight
The download sites openflowhub.org and bigswitch.com will be updated as soon as possible and in the near future.
Lastly, I'll leave you with a short list of to-dos for upcoming minor releases. These are items I would have liked to have incorporated into v1.0 but did not fit within the release timeframe. If anyone is interested in exploring these avenues of development and contribution, please feel free to ask and I can provide you with the details. All other suggestions are welcome as well!
-- Modify the Static Flow Pusher to check flow validity before inserting flows into storage. This will allow a detailed, root-cause error message to be sent back to the user via the REST API.
-- Add handshake handlers for OpenFlow 1.1 and 1.2. OpenFlow 1.1 and 1.2 concepts and types are supported by the controller; however, the initial handshakes have not been completed yet.
-- Find and fix a very rare bug (only seen twice in 6 months) that causes an OpenFlow 1.0 factory to be used with an OpenFlow 1.3 switch upon initial handshake. This will cause an exception to be thrown. I have noticed it when the switch is under high load and has many unmatched packets about to be sent as OFPacketIns after the handshake completes.
-- Modify Loxigen to force OFMessage and all classes that extend it to not use the XID field in their equals() functions. This bug prevents comparing the content of an OFMessage without explicitly comparing each field of the OFMessage minus the XID (and the content varies per OpenFlow version and per OFMessage type). This bug is presently impacting the OFMessageDamper; the details of this issue are included here.
-- We do not have a VM yet that contains Floodlight v1.0 and an updated OVS. You should download it directly from GitHub.
-- Create a "compatibility layer" that allows all pre-v1.0 custom modules work seamlessly within Floodlight v1.0.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment