Pushed openflow 1.3+ protocol driver library source code to ODL repo (openflowplugin)

Anilkumar Vishnoi <avishnoi@...>

Hi All,

At IBM we were exploring openflow 1.3 spec and how we can extend the existing opendaylight code base to support openflow 1.3+ protocol. We started developing openflow 1.3+ protocol driver library using the existing openflow 1.0 driver library code (openflowj) and implemented all the required features of openflow 1.3 protocol. We also modified the existing code as per 1.3 spec. We would like to share the code to the community so that people can hack on it, and other dependent project (like protocol plugin project) can use it as a starting point. Later on when openflow 1.3 driver library will be contributed through "Openflow Protocol Library" we can probably switch to the new library.

This library can be used with Netty IO library or any other IO library, because its implemented using the adaptor interface. I pushed the codec library code to "Openflow Plugin" project's repo "openflowplugin" because netty based openflow driver library (openflowj_netty) and openflow protocol plugin (protocol_plugin_netty) code base are already pushed to the repo and people can start hacking protocol plugin code for openflow 1.3+ support using both of these protocol driver library. If community think that "Openflow Protocol Library" project's repo is better place we can move it there as well.

Following are the details of the Openflow 1.3+ CoDec library:

Gerrit URL :http://git.opendaylight.org/gerrit/913

*.* We assume that all the future openflow specs won't be drastically different from its previous version and all the new features/ diffs can be handled in this new library.

*.* Library is developed with the design assumption that single south bound plugin for openflow protocol will be used with separate protocol driver library for different version of protocol spec(openflow 1.0 and openflow 1.3+).

*.* We tried to develop this library in a IO library agnostic way, so that it should not be dependent on what IO library is used by protocol plugin. We used adaptor pattern and defined one interface IDataBuffer.java, that needs to be implemented by the IO library used by protocol plugin code. (E.g refer sample implementation - ByteDataBuffer.java)
*.* Name of the classes is derived from their respective structure name in the openflow specification (E.g struct ofp_action_output --> OFPActionOutput) . Adapting this naming convention helped us avoiding the class name conflict with the existing openflowj project classes.

*.* As we assume that new protocol driver library will be used to extend/modify to support the future releases of the spec as well, we chose version agnostic name of the project (org.openflow.codec). If community feels that the assumption doesn't hold we can probably discuss it, and if everybody feels that we should name it with version in it (something like openflowj1.3) we can re-factor the code to make appropriate changes.

*.* As of now only required features are implemented and optional features are open for hack :). Following are the features yet to be implemented
        *.* Meter Table / Meter Band
        *.* Per Meter / Per Meter band stats
        *.* Meter feature statistics
        *.* Meter modification message
        *.* Will add if I missed out anything

*.* As of now this code is just unit tested, so there is very much possibility of bugs, so feel free to test/report/fix/ hack :), also this code is not very well cleaned up.

If you have any queries, feel free to drop a mail to mailing list or IRC (handle - vishnoianil), will try to respond as prompt as i can. :)

Anilkumar Vishnoi
IBM Research Lab,India