This section provides a high-level view of ONOS, and its general design approach.
ONOS in a Sentence
Aside from being an SDN OS, ONOS is a multi-module project whose modules are managed as OSGi bundles.
Run-Time Extensibility
ONOS is written to leverage Apache Karaf as its OSGi framework. In addition to dependency resolution at startup and dynamic module loading at runtime, Karaf provides the following:
- Enable use of standard JAX-RS API to develop our REST APIs and make them secure
- The notion of features as a set of bundles allowing assembly of custom setups
- Strict semantic versioning of code bundles, including third-party dependencies
- Local and remote ssh console with easily extensible CLI
- The notion of run-time log levels
This is predicated on having a project comprised of a set of sub-projects, each with their own source tree that can be built independently.
Code Organization and Modularity
The ONOS source is organized in a hierarchical fashion that takes advantage of Maven's notion of a hierarchical POM file organization. Each sub-project has its own pom.xml file, and intermediate directories have parent aggregate pom.xml files. The latter contains shared dependencies and configurations for those sub-projects, enabling them to be built independent of unrelated sub-projects. The ONOS root contains the top-level pom file used to build the full project and all of its modules. Refer to [Appendix C] of the Developer's Guide for details on the exact organization.