<html>
<body>
<p>
    ONOS architecture is strictly segmented into a <em>protocol-agnostic system
    core</em> tier and the <em>protocol-aware providers</em> tier as shown in
    the figure below:<br>
    <img src="doc-files/onos-tiers.png" alt="ONOS architecture tiers">
</p>

<p>
    The <em>ONOS core</em> 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.
</p>

<p>
    The <em>protocol-aware providers</em> 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.
</p>

<p>
    The following diagram describes a general structure of each ONOS subsystem:
    <br>
    <img src="doc-files/onos-subsystem.png" alt="ONOS subsystem structure"><br>
    For example, the device-subsystem comprises of a core
    {@link org.onlab.onos.net.trivial.device.impl.DeviceManager},
    which exposes a north-bound
    {@link org.onlab.onos.net.device.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 {@link org.onlab.onos.net.device.DeviceEvent}
    notifications via the {@link org.onlab.onos.net.device.DeviceListener} mechanism. A set of
    administrative actions can be performed via {@link org.onlab.onos.net.device.DeviceAdminService},
    e.g. setting mastership role, removing a decommissioned device.
</p>

<p>
    On the south-bound side, the core {@link org.onlab.onos.net.trivial.device.impl.DeviceManager}
    exposes a {@link org.onlab.onos.net.device.DeviceProviderRegistry} through which any number of
    {@link org.onlab.onos.net.device.DeviceProvider} entities can register and in turn obtain a
    {@link org.onlab.onos.net.device.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 {@link org.onlab.onos.net.device.DeviceProviderService}
    will be invalidated and can no longer be used for interacting with the
    core.
</p>

<p>
    Within the core, the tasks of indexing, persisting and synchronizing the
    global device and port state with the cluster peers falls on the
    {@link org.onlab.onos.net.device.DeviceStore}.
</p>

<p>
    Similar structure applies to the link subsystem, host subsystem and others.
</p>

<p>
    <em>More information to come later...</em>
</p>

</body>
</html>
