ONOS architecture is strictly segmented into a protocol-agnostic system
core tier and the protocol-aware providers tier as shown in
the figure below:
The ONOS core is responsible for tracking information about the network environment and distributing it to the applications either synchronously via query or asynchronously via listener callbacks. The core is also responsible for persisting select state and synchronizing state among the cluster peers.
The protocol-aware providers are responsible for interacting with the network environment using various control and configuration protocols and supplying such sensory data to the core. Some providers may also need to accept control edicts from the core and apply them to the environment using the appropriate protocol-specific means.
The figure below provides a visual inventory of the various ONOS subsystems.
The ones with the gray outline represent either work in progress features
planned for release in 2015.
The following diagram describes the general structure of each ONOS subsystem:
For example, the device-subsystem comprises of a core
DeviceManager
,
which exposes a north-bound
DeviceService
through which applications or other core components
can learn about the global infrastructure device inventory and through
which they can also subscribe for asynchronous DeviceEvent
notifications via the DeviceListener
mechanism. A set of
administrative actions can be performed via DeviceAdminService
,
e.g. setting mastership role, removing a decommissioned device.
On the south-bound side, the core DeviceManager
exposes a DeviceProviderRegistry
through which any number of
DeviceProvider
entities can register and in turn obtain a
DeviceProviderService
. Device and port information can then be
supplied to the core by each provider through the provider service issued
to them. When a provider unregisters, its DeviceProviderService
will be invalidated and can no longer be used for interacting with the
core.
Within the core, the tasks of indexing, persisting and synchronizing the
global device and port state with the cluster peers falls on the
DeviceStore
.
Similar structure applies to the link subsystem, host subsystem and others.
More information to come later...
Package | Description |
---|---|
org.onlab.graph |
Graph abstractions and graph path finding algorithms.
|
org.onlab.junit |
Utilities to assist in developing JUnit tests.
|
org.onlab.metrics |
Misc utils for various performance metrics.
|
org.onlab.osgi |
Facilities for building testable components in OSGi independent fashion.
|
org.onlab.packet |
Utilities for decoding and encoding packets of various network protocols
and encapsulations.
|
org.onlab.packet.dhcp |
Utilities for decoding and encoding DHCP options.
|
org.onlab.packet.ipv6 |
Utilities for decoding and encoding IPv6 extension headers.
|
org.onlab.packet.lacp |
Utilities for decoding and encoding LACP packets.
|
org.onlab.packet.ndp |
Utilities for decoding and encoding packets of Neighbor Discovery Protocol
for IPv6 (RFC 4861).
|
org.onlab.packet.pim |
Utilities for managing PIM packets.
|
org.onlab.rest |
Facilities for building JAX-RS web resources.
|
org.onlab.rest.exceptions |
Various exception mappers to map errors to proper response status codes.
|
org.onlab.util |
Miscellaneous domain-agnostic utilities.
|
org.onosproject.alarm |
Abstractions for interacting with alarms.
|
org.onosproject.app |
Set of abstractions for managing network control applications.
|
org.onosproject.cfg |
Set of abstractions for centrally managing component configurations.
|
org.onosproject.cli |
Administrative console command-line extensions.
|
org.onosproject.cli.app |
CLI commands for managing distributed inventory of applications.
|
org.onosproject.cli.cfg |
CLI commands for managing centralized component and network configurations.
|
org.onosproject.cli.net |
Administrative console command-line extensions for interacting with the
network model & services.
|
org.onosproject.cli.net.completer |
Completers for karaf CLI.
|
org.onosproject.cli.security |
CLI commands for managing security permissions.
|
org.onosproject.cluster |
Set of abstractions for dealing with controller cluster related topics.
|
org.onosproject.codec |
Base JSON codec abstraction and a service for tracking various JSON codecs.
|
org.onosproject.common |
Miscellaneous common facilities used for construction of various core and
app subsystems.
|
org.onosproject.common.app |
Common facilities for construction of application management subsystem.
|
org.onosproject.common.net |
Set of common network core facilities.
|
org.onosproject.component |
Component management system.
|
org.onosproject.core |
ONOS Core API definitions.
|
org.onosproject.cpman |
An application that manages the control plane.
|
org.onosproject.cpman.message |
Service for looking up control message stats.
|
org.onosproject.dhcp |
Sample application that assigns and manages DHCP leases.
|
org.onosproject.event |
Local event delivery subsystem interfaces & supporting abstractions.
|
org.onosproject.mastership |
Set of abstractions for dealing with controller mastership related topics.
|
org.onosproject.net |
Constants for OSGi properties in the core/net components.
|
org.onosproject.net.behaviour |
Abstractions of various device configuration or device adaptation behaviours;
counterpart to the device driver subsystem.
|
org.onosproject.net.behaviour.protection |
Protection behaviour and related classes.
|
org.onosproject.net.behaviour.trafficcontrol |
Traffic control behaviors and related classes.
|
org.onosproject.net.config |
Subsystem for tracking network environment configuration.
|
org.onosproject.net.config.basics |
Various basic builtin network configurations.
|
org.onosproject.net.config.inject |
Network configurations for "inject" provider.
|
org.onosproject.net.device |
Infrastructure device model & related services API definitions.
|
org.onosproject.net.domain |
Domain intent package.
|
org.onosproject.net.driver |
Set of facilities to allow the platform to be extended with
device specific behaviours and to allow modeling device (and other entity)
behaviours while hiding details of specific driver implementations.
|
org.onosproject.net.edge |
Service for interacting with network edge.
|
org.onosproject.net.flow |
Flow rule model & related services API definitions.
|
org.onosproject.net.flow.criteria |
Traffic selection criteria model.
|
org.onosproject.net.flow.instructions |
Traffic treatment model.
|
org.onosproject.net.flow.oldbatch |
Flow rule model & related services API definitions.
|
org.onosproject.net.flowobjective |
Abstractions for objective-based flow programming of data plane without
requiring device pipeline structure awareness. This subsystem is
experimental and its interfaces will change in the upcoming release.
|
org.onosproject.net.group |
Abstractions for interacting with device port groups.
|
org.onosproject.net.host |
End-station host model & related services API definitions.
|
org.onosproject.net.intent |
Set of abstractions for conveying high-level intents for treatment of
selected network traffic by allowing applications to express the
what rather than the how.
|
org.onosproject.net.intent.constraint |
Definitions of constraints used to refine intent specifications.
|
org.onosproject.net.intent.util |
Package supports intent northbound apis providing utility classes.
|
org.onosproject.net.intf |
Interface Service.
|
org.onosproject.net.key |
Device key data model and services.
|
org.onosproject.net.link |
Infrastructure link model & related services API definitions.
|
org.onosproject.net.mcast |
External model entities of the multicast RIB.
|
org.onosproject.net.meter |
Flow meter model and related services.
|
org.onosproject.net.neighbour |
Neighbour message (ARP, NDP) handling.
|
org.onosproject.net.packet |
Mechanism for processing inbound packets intercepted from the data plane and
for emitting outbound packets onto the data plane.
|
org.onosproject.net.packet.packetfilter |
Packet filter classifier for various Packet types.
|
org.onosproject.net.pi.model |
Model abstractions of a protocol-independent packet processing pipeline.
|
org.onosproject.net.pi.runtime |
Classes abstracting entities for runtime control of a protocol-independent packet processing pipeline.
|
org.onosproject.net.pi.runtime.data |
Classes abstracting data that can be used for runtime operations of a protocol-independent pipeline.
|
org.onosproject.net.pi.service |
Service abstractions for runtime control of a protocol-independent pipeline.
|
org.onosproject.net.provider |
Base abstractions related to network entity providers and their brokers.
|
org.onosproject.net.proxyarp |
Base abstractions related to the proxy arp service.
|
org.onosproject.net.region |
Subsystem for tracking inventory of network control regions.
|
org.onosproject.net.resource |
Generic network resource model and services for resource allocation and
resource tracking.
|
org.onosproject.net.statistic |
Service for looking up statistics on links.
|
org.onosproject.net.topology |
Network topology model & related services API definitions.
|
org.onosproject.net.utils |
Utility classes.
|
org.onosproject.persistence |
Persistence service and builders.
|
org.onosproject.rest |
Base abstractions and utilities for developing REST APIs.
|
org.onosproject.routing |
API for routing libraries.
|
org.onosproject.routing.config |
Routing configuration interfaces.
|
org.onosproject.security |
Application security constructs.
|
org.onosproject.store |
Stores used by the core of ONOS.
|
org.onosproject.store.app |
Implementation of distributed application store.
|
org.onosproject.store.atomix |
Subsystem for tracking controller cluster nodes.
|
org.onosproject.store.cfg |
Implementation of distributed component configuration store.
|
org.onosproject.store.cluster.messaging |
Cluster messaging APIs for the use by the various distributed stores.
|
org.onosproject.store.flow |
Definitions of events and messages pertaining to replication of flow entries.
|
org.onosproject.store.primitives |
Interfaces for creating various distributed primitives.
|
org.onosproject.store.serializers |
Various Kryo serializers for use in distributed stores.
|
org.onosproject.store.serializers.custom |
Distributed store serializers.
|
org.onosproject.store.service |
Distributed core state management services.
|
org.onosproject.ui |
Mechanism for managing dynamically registered user interface extensions.
|
org.onosproject.ui.chart |
Facilities for creating chart models of data for the Web UI.
|
org.onosproject.ui.lion |
Facilities for handling localization of the UI.
|
org.onosproject.ui.model |
Server-side modeling of UI entities.
|
org.onosproject.ui.model.topo |
Server-side modeling of Topology View UI entities.
|
org.onosproject.ui.table |
Facilities for creating tabular models of data for the GUI.
|
org.onosproject.ui.table.cell |
Set of table cell renderers and comparators for use by GUI apps.
|
org.onosproject.ui.topo |
Mechanism for dynamically extending topology view with information and
behaviour overlays.
|
org.onosproject.upgrade |
Abstractions for managing software upgrades.
|
org.onosproject.utils |
Miscellaneous common facilities used for construction of various core and
app subsystems.
|