Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

OpenNaaS works as an standalone OSGi application as it is explained in Technologies. It deploys an OSGi container and, in top of it, OpenNaaS is deployed as a set of OSGi bundles. OpenNaaS architecture is divided in two parts: core and extensions. Core is the basic functionality of OpenNaaS and extensions are optional OSGi bundles to add more features.

Table of Contents

There are two basic components in OpenNaaS: resources and capabilities as it is detailed in System Architecture.

OpenNaaS defines these elements as basic components of its core architecture, but does not implement any of them. Instead of it, each implementation of resource and capability are developed as extensions of OpenNaaS.

Core components

OpenNaaS define basic core components providing common model to develop extensions on the top of it. They are placed in core project.

Resource

A Resource is the logical representation of a physical or virtual device. It has a descriptor, a model and one or more capabilities. A resource can be a router, a switch, etc.

In OpenNaaS source code, resource is defined by org.opennaas.core.resources.IResource Java interface and implemented by org.opennaas.core.resources.Resource Java class in org.opennaas.core.resources project.

Resource Descriptor

A resource is instantiated in OpenNaaS from its Resource Descriptor, an XML file which provides the necessary parameters to configure a resource. It contains the type, the name and the capabilities of the resource.

In OpenNaaS source code, resource descriptor is defined by org.opennaas.core.resources.descriptor.ResourceDescriptor Java class in org.opennaas.core.resources project. Samples of Resource descriptors can be found in utils/examples/descriptors folder.

Resource Model

The Resource Model is a description of a resource which contains all the information that OpenNaaS can access from it. It is based in the CIM specification.

In OpenNaaS source code, resource model is defined by org.opennaas.core.resources.IModel Java interface in org.opennaas.core.resources project. Each resource implementation defines its own model implementing this interface.

Resource Life cycle

Resources have a Resource Life Cycle as it is defined in System Architecture. It is defined by an state diagram and its transitions.

In OpenNaaS source code, resource life cycle is defined by org.opennaas.core.resources.ILifecycle Java interface in org.opennaas.core.resources project.

Finally resource can be UML modelled as:

Resource Manager

The Resource Manager uses Resource Descriptors to instantiate each resource in OpenNaaS. Moreover it provides the interface between the user and OpenNaaS to manage resources' life cycle. It delegates to Resource Repositories operations which depend on each resource type.

In OpenNaaS source code, resource manager is defined by org.opennaas.core.resources.IResourceManager Java interface and implemented by org.opennaas.core.resources.ResourceManager Java class in org.opennaas.core.resources project.

Resource Repository

Resource Repositories are created for each type of resource. Each repository has the responsibility of managing resources of a concrete type. The Resource Manager interacts with each repository. Moreover, when a resource repository is created, it publishes itself as an OSGi service to provide to Resource Manager a way to instantiate resources of each type.

In OpenNaaS source code, resource repository is defined by org.opennaas.core.resources.IResourceRepository Java interface and implemented by org.opennaas.core.resources.ResourceRepository Java class in org.opennaas.core.resources project.

Capability

A Capability represents a feature or an ability which a resource can do. Each resource type has a set of supported capabilities which define its features. The list of capabilities for a given resource is a subset of these supported ones, and it is specified in the resource descriptor.

In OpenNaaS source code, capability is defined by org.opennaas.core.resources.capability.ICapability Java interface and partially implemented by org.opennaas.core.resources.capability.AbstractCapability Java abstract class in org.opennaas.core.resources project. Each concrete capability implements this Java class defining its own implementation.

Capability Life Cycle

Capabilities have Capability Life Cycle defined by its states (Instantiated, Initialized, Active, Inactive, Shutdown and Error).

In OpenNaaS source code, capability life cycle is defined by org.opennaas.core.resources.capability.ICapabilityLifecycle Java interface, that extends ICapability Java interface in org.opennaas.core.resources project.

Capability Factory

Capabilities have Capability Factories allowing instantiating and initializing capabilities of a resource.

In OpenNaaS source code, capability factory is defined by org.opennaas.core.resources.capability.ICapabilityFactory Java interface and partially implemented by org.opennaas.core.resources.capability.AbstractCapabilityFactory Java abstract class in org.opennaas.core.resources project. Each concrete capability implements this Java class defining its own implementation.

Action Set, Action and Command

Each capability has an Action Set that contains actions. An Action is used to send operations to a specific device associated with a resource. The action set implementation depends on type, model and protocol to access of each resource. Command is each atomic operation which an action can be divided. 

In OpenNaaS source code, action is defined by org.opennaas.core.resources.action.IAction Java interface and implemented by org.opennaas.core.resources.action.Action Java class in org.opennaas.core.resources project. In the same project, action set is defined by org.opennaas.core.resources.action.IActionSet Java interface and implemented by org.opennaas.core.resources.action.ActionSet Java class. Finally, in the same project, command is defined by org.opennaas.core.resources.command.ICommand Java interface and implemented by org.opennaas.core.resources.command.Command Java class.

Finally, action set, action and command can be UML modelled as:

Protocol Manager and Protocol Session Manager

OpenNaaS uses lots of different protocols in its operations. The Protocol Manager copes with each protocol and session. A Protocol Session Manager is instantiated for each protocol session established with each concrete device. The user can interact with OpenNaaS creating, removing, editing or getting information of each protocol session and protocol.

In OpenNaaS source code, protocol manager is defined by org.opennaas.core.resources.protocol.IProtocolManager Java interface and implemented by org.opennaas.core.protocols.sessionmanager.ProtocolManager Java class in org.opennaas.core.resources project. In the same project, protocol session manager is defined by org.opennaas.core.resources.protocol.IProtocolSessionManager Java interface and implemented by org.opennaas.core.protocols.sessionmanager.ProtocolSessionManager Java class. Each protocol has implementations of its own protocol session.

Extension components

Each resource type and concrete capability are developed as extensions of OpenNaaS. Extensions are placed in extensions project. In current OpenNaaS development, there are a set of resources, each of them has one ore more capabilities with zero or more developed drivers. More information can be found in Compatibility Matrix.

Queue Manager

The Queue Manager is a mandatory capability of each resource. It is a transaction execution engine (sometimes simply misnamed queue) that queues actions and executes them. If anything goes wrong, the operation is rolled back. It has an state diagram defined by four states:

  • Prepare
    Starting state where working configuration is saved as a backup.
  • Execute
    Next state where each action is executed sequentially.
  • Commit
    If all actions are correctly executed, all the changes are committed and backup configuration is discarded.
  • Rollback
    Opposite to commit state that becomes when an error is produced during execute state. The backup configuration is restored.

In OpenNaaS source code, queue manager is defined by org.opennaas.extensions.queuemanager.IQueueManagerCapability Java interface which defines the capability itself and implemented by org.opennaas.extensions.queuemanager.QueueManager in queuemanager extension project.

Router resource

The Router resource is the most used resource in OpenNaaS, it represents a router device with some capabilities.

In OpenNaaS source code, there are resource descriptor examples for router resources in the project folder utils/examples. There are these resource descriptor examples:

Capabilities

Chassis capability

Chassis capability allows doing operations with router like activating/deactivating interfaces, creating/deleting sub-interfaces, creating/deleting logical routers, adding/removing interfaces in logical routers or setting interface encapsulation labels.

In OpenNaaS source code, Chassis capability is defined by org.opennaas.extensions.router.capability.chassis.IChassisCapability Java interface which defines the capability itself and implemented by org.opennaas.extensions.router.capability.chassis.ChassisCapability in router.capability.chassis extension project.

IP capability

IP capability allows setting IP addresses (defined by RFC 791) and setting interface description in a given router interface.

In OpenNaaS source code, IP capability is defined by org.opennaas.extensions.router.capability.ip.IIPCapability Java interface which defines the capability itself and implemented by org.opennaas.extensions.router.capability.ip.IPCapability in router.capability.ip extension project.

Static route capability

Static route capability allows creating/deleting static routes in the router (defined by RFC 791).

In OpenNaaS source code, Static Route capability is defined by org.opennaas.extensions.router.capability.staticroute.IStaticRouteCapability Java interface which defines the capability itself and implemented by org.opennaas.extensions.router.capability.staticroute.StaticRouteCapability in router.capability.staticroute extension project.

OSPF capability

OSPF capability allows activating/deactivating Open Shortest Path First protocol in routers (also called OSPF, defined by RFC 2328). Also, it allows configuring/clearing current OSPF configurations. Besides it allows configuring/removing OSPF areas, adding/removing interfaces in OSPF areas, enabling/disabling OSPF interfaces. Finally, it allows getting/showing OSPF configuration.

In OpenNaaS source code, OSPF capability is defined by org.opennaas.extensions.router.capability.ospf.IOSPFCapability Java interface which defines the capability itself and implemented by org.opennaas.extensions.router.capability.ospf.OSPFCapability in router.capability.ospf extension project.

GRE Tunnel capability

GRE Tunnel capability allows creating/deleting Generic Router Encapsulation tunnels (also called GRE tunnels, defined by RFC 2784).

In OpenNaaS source code, GRE Tunnel capability is defined by org.opennaas.extensions.router.capability.gretunnel.IGRETunnelCapability Java interface which defines the capability itself and implemented by org.opennaas.extensions.router.capability.gretunnel.GRETunnelCapability in router.capability.gretunnel extension project.

VRRP capability

VRRP capability allows configuring/uncofiguring VRRP protocol in router (defined by RFC 5798). Moreover, it allows updating VRRP virtual IP address and VRRP priority.

In OpenNaaS source code, VRRP capability is defined by org.opennaas.extensions.router.capability.vrrp.IVRRPCapability Java interface which defines the capability itself and implemented by org.opennaas.extensions.router.capability.vrrp.VRRPCapability in router.capability.vrrp extension project.

Junos 10.0 driver

OpenNaaS has developed extensions for Juniper Network Operating System (also called Junos) present in Juniper routers. It provides compatibility with Juniper routers using Junos version 10.0. Each router resource capability has a Junos implementation of Action and Command.

In OpenNaaS source code, Junos Action is defined by org.opennaas.extensions.router.junos.actionssets.actions.JunosAction Java abstract class in router.actionsets.junos extension project. In the same project, in actionssets/actions folder there are specific folders for each router resource capability action implementations. Moreover, in the same project, each router resource capability action set has specific implementation in actionssets folder. Finally, in the same project, commandsets/commands folder has specific implementation of each router resource capability command based on org.opennaas.extensions.router.junos.commandsets.commands.JunosCommand abstract Java class.

Optical Switch resource

The Optical Switch resource represents the homonymous device. Concretely, OpenNaaS define a Reconfigurable Optical Add-Drop Multiplexer (also called ROADM). It has two capabilities: monitoring capability and connections capability.

Capabilities

Monitoring capability

Monitoring capability allows getting and clearing alarms of the optical switch.

In OpenNaaS source code, Monitoring capability is defined by org.opennaas.extensions.roadm.capability.monitoring.IMonitoringCapability Java interface which defines the capability itself and implemented by org.opennaas.extensions.roadm.capability.monitoring.MonitoringCapability in roadm.capability.monitoring extension project.

Connections capability

Connections capability allows creating/removing fibre optics connections in the optical switch.

In OpenNaaS source code, Connections capability is defined by org.opennaas.extensions.roadm.capability.connections.IConnectionsCapability Java interface which defines the capability itself and implemented by org.opennaas.extensions.roadm.capability.connections.ConnectionsCapability in roadm.capability.connections extension project.

W-onesys driver

OpenNaaS has developed extensions for W-onesys optical switches, concretely ROADM Proteus S8 ones. Each ROADM switch resource capability has a W-onesys implementation of Action and Command.

In OpenNaaS source code, W-onesys action is defined by org.opennaas.extensions.roadm.wonesys.actionsets.actions.WonesysAction Java abstract class in roadm.actionsets.wonesys extension project. In the same project, in actionssets/actions folder there are specific folders for each optical switch resource capability action implementations. Moreover, in the same project, each optical switch resource capability action set have specific implementations in actionssets folder. Finally, in the same project, commandsets/commands folder has specific implementations of each optical switch resource capability command based on org.opennaas.extensions.roadm.wonesys.commandsets.WonesysCommand abstract Java class.

BoD resource

The Bandwidth on Demand resource (also called BoD) represents a bandwidth allocation system. OpenNaaS has extensions to offer Layer 2 BoD.

Capabilities

Layer 2 Bandwidth on Demand capability

Layer 2 Bandwidth on Demand capability (also called L2BoD) allows requesting/shutting down BoD connections.

In OpenNaaS source code, Layer 2 Bandwidth on Demand capability is defined by org.opennaas.extensions.bod.capability.l2bod.IL2BoDCapability Java interface which defines the capability itself and implemented by org.opennaas.extensions.bod.capability.l2bod.L2BoDCapability in bod.capability.l2bod extension project.

GÉANT AutoBAHN driver

OpenNaaS has developed extensions to use GÉANT AutoBAHN bandwidth allocation system (also called Automated Bandwidth Allocation across Heterogeneous Networks). It allows allocating Layer 2 circuits with allocated bandwidth.

In OpenNaaS source code, Autobahn action is defined by org.opennaas.extensions.bod.autobahn.AutobahnAction Java abstract class in bod.autobahn extension project. In the same project, in bod folder there are specific classes for each BoD resource capability action implementation. Moreover, in the same folder, the BoD resource capability action set is defined by org.opennaas.extensions.bod.autobahn.bod.BoDActionSet Java class. Finally, in the same project, commands folder has specific implementations of each BoD resource capability command based on org.opennaas.extensions.bod.autobahn.commands.AutobahnCommand abstract Java class.

MAC Bridge resource

The MAC Bridge resource represents a LAN bridge that groups its interfaces in the same layer 2 domain breaking collision domains.

Capabilities

VLAN Aware Bridge capability

The VLAN Aware Bridge capability allows creating/deleting VLAN configurations and adding/deleting static VLAN registration entities from filtering databases.

In OpenNaaS source code, VLAN Aware Bridge capability is defined by org.opennaas.extensions.capability.macbridge.vlanawarebridge.IVLANAwareBridgeCapability Java interface which defines the capability itself and implemented by org.opennaas.extensions.capability.macbridge.vlanawarebridge.VLANAwareBridgeCapability in macbridge.capability.vlanawarebridge extension project.

IOS Driver

OpenNaaS has developed extensions to use a Cisco MAC Bridges that use Cisco IOS (Internetworking Operating System)

In OpenNaaS source code, in macbridge.ios.resource extension project there are folders for each MAC Bridge resource capability action implementations in  actionssets/actions project folder. Moreover, in actionssets project folder, the MAC Bridge resource capability action sets are defined. Finally, in the same project,  commandsets/commands folder has specific implementations of each MAC Bridge resource capability commands based on org.opennaas.extensions.macbridge.ios.resource.commandsets.commands.IOSCommand abstract Java class.

Network resource

The Network resource represents a network topology based on its resources and its links between resources interfaces.

Capabilities

Network Basic capability

Network Basic capability (also called L2BoD) allows adding/removing resources in a network topology and attaching/detaching interfaces in a network topology.

In OpenNaaS source code, Network Basic capability is defined by org.opennaas.extensions.network.capability.basic.INetworkBasicCapability Java interface which defines the capability itself and implemented by org.opennaas.extensions.network.capability.basic.NetworkBasicCapability in network.capability.basic extension project.

Network OSFP capability

Network OSPF capability allows activating/deactivating OSPF protocol in a network.

In OpenNaaS source code, Network OSPF capability is defined by org.opennaas.extensions.network.capability.ospf.INetOSPFCapability Java interface which defines the capability itself and implemented by org.opennaas.extensions.network.capability.ospf.NetOSPFCapability in network.capability.queue extension project.

Network Queue capability

Network Queue capability allows executing the queue of each resource in the network.

In OpenNaaS source code, Network Queue capability is defined by org.opennaas.extensions.network.capability.queue.IQueueCapability Java interface which defines the capability itself and implemented by org.opennaas.extensions.network.capability.queue.QueueCapability in network.capability.queue extension project.

VCPE resource

The Virtual Customer Premises Equipment resource(also called vCPE) is a CPE deployed following Network as a Service (NaaS) paradigm. More Information about vCPE can be found in this paper.

Capabilities

VCPE Builder capability

The vCPE Builder capability allows building/destroying vCPE networks.

In OpenNaaS source code, vCPE Builder capability is defined by org.opennaas.extensions.vcpe.capability.builder.IVCPENetworkBuilderCapability Java interface which defines the capability itself and implemented by org.opennaas.extensions.vcpe.capability.builder.IVCPENetworkBuilderCapability in vcpe extension project.

VCPE IP capability

The vCPE IP capability allows updating a set of IP addresses in a given vCPE network.

In OpenNaaS source code, vCPE IP capability is defined by org.opennaas.extensions.vcpe.capability.ip.IVCPEIPCapability Java interface which defines the capability itself and implemented by org.opennaas.extensions.vcpe.capability.ip.VCPEIPCapability in vcpe extension project.

VCPE VRRP capability

The vCPE VRRP capability allows updating virtual VRRP IP addresses in a given vCPE network. Moreover, it allows changing VRRP priority in a given vCPE network

In OpenNaaS source code, vCPE VRRP capability is defined by org.opennaas.extensions.vcpe.capability.vrrp.IVCPEVRRPCapability Java interface which defines the capability itself and implemented by org.opennaas.extensions.vcpe.capability.vrrp.VCPEVRRPCapability in vcpe extension project.

User interfaces

There two interfaces between users and OpenNaaS: the Command Line Interface (CLI) and the Web Services API.

CLI

A command line interface is developed to provide a quick way to interact with OpenNaaS. It is developed on top of Apache Karaf console. It allows extending standard commands adding new customized ones (more information can be found here).

Mostly all capability methods have commands available in the shell. To develop an OpenNaaS command it is necessary to implement org.opennaas.core.resources.shell.GenericKarafCommand Java abstract class.

Web Services API

A Web Services API allows to interact between user and OpenNaaS. It is developed using Apache CXF and dOSGI technologies and provides a REST API. Broadly, all the capability are registered services that publish their interfaces in this API. Moreover, Resource Manager and Protocol Manager register their interfaces too. Method registerService of org.opennaas.core.resources.capability.AbstractCapability Java abstract class shows how a capability interface is published as Web Service API using these technologies.

Conclusion

Finally, OpenNaaS can be summarized in this module diagram: