This section provides a high-level view of ONOS, and its general design approach.
Aside from being an SDN OS, ONOS is a multi-module project whose modules are managed as OSGi bundles.
ONOS is designed with a few points in mind:
We take a succinct look at each below.
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:
The project is comprised of a set of sub-projects, each with their own source tree that can be built independently. To do this, the ONOS source tree 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.
For implementation details of the source tree and POM file organization, refer to [Appendix C] of the Developer's Guide.
ONOS is partitioned into a protocol-agnostic system core and protocol-aware network-facing modules (providers). A southbound API sits between the system core and the providers, serving to: