The following is a summary of the organization of the ONOS source tree. This section is not intended to be comprehensive list of all packages and files, but rather an overview to provide developers with a general idea of how ONOS is organized (think
man hier on UNIX-like operating systems).
|Table of Contents|
ONOS is organized as multiple projects, each with its own pom.xml file so that it can be built with Maven. The pom.xml files are organized in a hierarchy, so that projects with shared dependencies and configurations can be built from a parent pom.xml file defined closer to the root.The root of the source tree contains the top-level pom file that builds all of the projects comprising ONOS.
Since the POM hierarchy reflects the logical organization of ONOS, it is used as the reference for this page.
The following is the rough layout of the project. The indentation level reflects directory level depth for directory names. For example, "calendar" is onos-next/apps/calendar/.
Similarly, the bundle names correspond to the POM files for the project modules; all bundles indented under a bundle may be built by building the latter, using its POM file. For example, if one wishes to build just the OpenFlow subsystem components:
cd onos-next/providers/openflow && mvn clean install
Please note that neither the full file hierarchy nor all modules are shown. '-' denotes directories that do not contain POM files (i.e. not modules), or are deprecated. Entries in italics are not modules, but are described for convenience.
The project root directory
Domain-agnostic and third-party utilities
ONOS data types, graph representations, etc.
I/O loop handling
Wrappers for leveraging OSGi
Basis for JAX-RS web resources
API, network model, clustering, etc.
North- and south-bound API definitions
GUI & REST API
REST API resources
ONOS GUI reosurces
Karaf CLI extensions for ONOS commands
Applications - demos, samples, and use cases
OpenFlow libraries & IO loop
OpenFlow provider/switch - related APIs
Controller and switch object implementations
Developer/test utilities and configuration files
Developer utilities - IDE settings, bash aliases, etc.
Build tools and configurations for Jenkins, Sonar, etc.
Configurations used for packaging
ONOS scripts, cell definitions, Mininet topologies, etc.
target directory for Javadocs