OpenFlow protocol bindings for multiple languages
Python Java Roff C C++ Lua Other
Latest commit 48de0a4 Sep 23, 2017 @bsn-abat bsn-abat Merge into master from pull request #567:
SWLVX-30: adding digest algorithm tlv to loxigen (#567)
Permalink
Failed to load latest commit information.
.build push-artifacts: make MAKE configurable Apr 10, 2017
.hooks added pre-commit hook script that checks for whitespace errors May 2, 2013
c_gen loci: set wire length when truncating Jul 26, 2016
docker Add: dockerfile for basic build environment Apr 20, 2016
java_gen Add new OXM: IFP Class ID. Sep 14, 2017
loxi_front_end frontend: remove hardcoded field length member names Apr 20, 2016
loxi_ir OF15: fix whitespace errors Apr 26, 2016
loxi_utils OpenFlow 1.5.1 implementation Feb 1, 2016
openflow_input Minor update Sep 22, 2017
py_gen SWL-3216 IPV6 address pretty_print function. Sep 20, 2016
test_data Refactor flow_desc --> flow for backwards compatibility; flow_stats -… Jun 8, 2016
utest frontend: add syntax for field length members Apr 20, 2016
wireshark_gen OpenFlow 1.5.1 implementation Feb 1, 2016
.abat-automerge loxigen-artifacts: address review comments Nov 20, 2013
.gitignore add coverage makefile target Apr 10, 2014
AUTHORS LoxiGen: add AUTHORS Mar 25, 2013
INTERNALS Initial import Mar 25, 2013
LoxiGen.mk Initial import Mar 25, 2013
Makefile Makefile: exclude OF 1.5 when building C backend Apr 20, 2016
README.md Update README.MD for versions 1.4.1 and 1.5.1 May 5, 2016
TODO Initial import Mar 25, 2013
cmdline.py OpenFlow 1.5.1 implementation Feb 1, 2016
docker.sh docker.sh: remove duplicated --rm Apr 21, 2016
generic_utils.py loci: chunk multiple classes into each C file Feb 25, 2014
lang_c.py loci: remove header classes Nov 7, 2014
lang_java.py java_gen: adapt to of_g removal, new ir Nov 15, 2013
lang_python.py pyloxi: reduce boilerplate code required for each module Sep 26, 2014
lang_wireshark.py wireshark_gen: adapt to new of_g Nov 15, 2013
loxi_globals.py OpenFlow 1.5.1 implementation Feb 1, 2016
loxigen.py loxigen: filter input using target versions Apr 20, 2016
pyparsing.py fixed whitespace errors May 2, 2013
setup.cfg add setup.cfg for nosetests to find its unittests Nov 16, 2013
template_utils.py loxi_utils: use new ir, split out template_utils Nov 15, 2013
tenjin.py Initial import Mar 25, 2013

README.md

Introduction

LoxiGen is a tool that generates OpenFlow protocol libraries for a number of languages. It is composed of a frontend that parses wire protocol descriptions and a backend for each supported language (currently C, Python, and Java, with an auto-generated wireshark dissector in Lua on the way).

LoxiGen currently supports OpenFlow Versions 1.0, 1.1, 1.2, and 1.3.1, 1.4.1, and 1.5.1. Versions 1.0, 1.3.1 and 1.4.1 are actively used in production. Support for versions 1.1 and 1.2 is considered experimental. Support for 1.5.1 is currently experimental and limited to the Java backend.

Loxigen is free and open source software. The Loxigen tool itself is licensed under the Eclipse Public License, version 1.0 (EPL), with an exception allowing for the distribution of the generated artifacts under terms of your choice (copyright notices must be retained, see the loxigen.py header for details.)

Prerequisites

Running the unit tests requires nosetests. You can install it via easy_install,

easy_install nose

pip,

pip install nose

or via your distribution's package manager (example for Debian/Ubuntu):

sudo apt-get install python-nose

Nosetests is only required for running the unit tests, not for running LoxiGen itself. We do ask you to install it and use it before submitting pull requests, though.

Running the Java unit tests requires Maven 3: sudo apt-get install maven.

Usage

You can run LoxiGen directly from the repository. There's no need to install it, and it has no dependencies beyond Python 2.7+.

To generate the libraries for all languages:

make

To generate the library for a single language:

make c

The currently supported languages are c, python and java. There is an experimental backend that generates a lua wireshark dissector (wireshark).

The generated libraries will be under the loxi_output directory. This can be changed with the LOXI_OUTPUT_DIR environment variable when using the Makefile.

Each generated library comes with its own set of documentation in the standard format for that language. Please see that documentation for more details on using the generated libraries.

Contributing

Please fork the repository on GitHub and send us a pull request. You might also be interested in the INTERNALS file which has notes about how LoxiGen works.

Loxigen comes with a set of internal unit-tests, as well as with a set of tests for the generated artifacts. Be sure to run

make check-all

and correct any problems before submitting a pull request.