.. This work is licensed under a Creative Commons Attribution
.. 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
.. Copyright 2017-2018 Huawei Technologies Co., Ltd.
.. Copyright 2019 ONAP Contributors

.. _ONAP-architecture:

Introduction
============

The ONAP project addresses the rising need for a common automation platform for
telecommunication, cable, and cloud service providers—and their solution
providers—to deliver differentiated network services on demand, profitably and
competitively, while leveraging existing investments.

The challenge that ONAP meets is to help operators of telecommunication
networks to keep up with the scale and cost of manual changes required to
implement new service offerings, from installing new data center equipment to,
in some cases, upgrading on-premises customer equipment. Many are seeking to
exploit SDN and NFV to improve service velocity, simplify equipment
interoperability and integration, and to reduce overall CapEx and OpEx costs.
In addition, the current, highly fragmented management landscape makes it
difficult to monitor and guarantee service-level agreements (SLAs). These
challenges are still very real now as ONAP creates its fourth release.

ONAP is addressing these challenges by developing global and massive scale
(multi-site and multi-VIM) automation capabilities for both physical and
virtual network elements. It facilitates service agility by supporting data
models for rapid service and resource deployment and providing a common set of
northbound REST APIs that are open and interoperable, and by supporting
model-driven interfaces to the networks. ONAP’s modular and layered nature
improves interoperability and simplifies integration, allowing it to support
multiple VNF environments by integrating with multiple VIMs, VNFMs,
SDN Controllers, as well as legacy equipment (PNF). ONAP’s consolidated xNF
requirements publication enables commercial development of ONAP-compliant xNFs.
This approach allows network and cloud operators to optimize their physical
and virtual infrastructure for cost and performance; at the same time, ONAP’s
use of standard models reduces integration and deployment costs of
heterogeneous equipment. All this is achieved while minimizing management
fragmentation.

The ONAP platform allows end-user organizations and their network/cloud
providers to collaboratively instantiate network elements and services in a
rapid and dynamic way, together with supporting a closed control loop process
that supports real-time response to actionable events. In order to design,
engineer, plan, bill and assure these dynamic services, there are three major
requirements:

- A robust design framework that allows the specification of the service in
  all aspects – modeling the resources and relationships that make up the
  service, specifying the policy rules that guide the service behavior,
  specifying the applications, analytics and closed control loop events needed
  for the elastic management of the service

- An orchestration and control framework (Service Orchestrator and Controllers
  ) that is recipe/ policy-driven to provide an automated instantiation of the
  service when needed and managing service demands in an elastic manner

- An analytic framework that closely monitors the service behavior during the
  service lifecycle based on the specified design, analytics and policies to
  enable response as required from the control framework, to deal with
  situations ranging from those that require healing to those that require
  scaling of the resources to elastically adjust to demand variations.

To achieve this, ONAP decouples the details of specific services and supporting
technologies from the common information models, core orchestration platform,
and generic management engines (for discovery, provisioning, assurance etc.).
Furthermore, it marries the speed and style of a DevOps/NetOps approach with
the formal models and processes operators require to introduce new services
and technologies. It leverages cloud-native technologies including Kubernetes
to manage and rapidly deploy the ONAP platform and related components. This is
in stark contrast to traditional OSS/Management software platform
architectures, which hardcoded services and technologies, and required lengthy
software development and integration cycles to incorporate changes.

The ONAP Platform enables service/resource independent capabilities for design,
creation and lifecycle management, in accordance with the following
foundational principles:

- Ability to dynamically introduce full service lifecycle orchestration (design
  ,provisioning and operation) and service API for new services and
  technologies without the need for new platform software releases or without
  affecting operations for the existing services
- Carrier-grade scalability including horizontal scaling (linear scale-out) and
  distribution to support a large number of services and large networks
- Metadata-driven and policy-driven architecture to ensure flexible and
  automated ways in which capabilities are used and delivered
- The architecture shall enable sourcing best-in-class components
- Common capabilities are ‘developed’ once and ‘used’ many times
- Core capabilities shall support many diverse services and infrastructures

Further, ONAP comes with a functional architecture with component definitions
and interfaces, which provides a force of industry alignment in addition to
the open source code.

ONAP Architecture
=================
The platform provides common functions such as data collection, control loops,
meta-data recipe creation, and policy/recipe distribution that are necessary to
construct specific behaviors.

To create a service or operational capability ONAP supports service/
operations-specific service definitions, data collection, analytics, and
policies (including recipes for corrective/remedial action) using the ONAP
Design Framework Portal.

Figure 1 provides a high-level view of the ONAP architecture with its
microservices-based platform components.

|image1|

**Figure 1: ONAP Platform Architecture (Dublin Release)**

Figure 2 below, provides a simplified functional view of the architecture,
which highlights the role of a few key components:

#. Design time environment for onboarding services and resources into ONAP and
   designing required services.
#. External API provides northbound interoperability for the ONAP Platform and
   Multi-VIM/Cloud provides cloud interoperability for the ONAP workloads.
#. OOM provides the ability to manage cloud-native installation and
   deployments to Kubernetes-managed cloud environments.
#. ONAP Shared Services provides shared capabilities for ONAP modules. MUSIC
   allows ONAP to scale to multi-site environments to support global scale
   infrastructure requirements. The ONAP Optimization Framework (OOF) provides
   a declarative, policy-driven approach for creating and running optimization
   applications like Homing/Placement, and Change Management Scheduling
   Optimization. Logging provides centralized logging capabilities, Audit
   (POMBA) provides capabilities to understand orchestration actions.
#. ONAP shared utilities provide utilities for the support of the ONAP
   components.
#. Information Model and framework utilities continue to evolve to harmonize
   the topology, workflow, and policy models from a number of SDOs including
   ETSI NFV MANO, TM Forum SID, ONF Core, OASIS TOSCA, IETF, and MEF.

|image2|

**Figure 2. Functional view of the ONAP architecture**

The Dublin release has a number of important new features in the areas of
design time and runtime, ONAP installation, and S3P.

Design time: Dublin has evolved the controller design studio, as part of the
controller framework, which enables a model driven approach for how an ONAP
controller controls the network resources.

Runtime: Service Orchestration (SO) and controllers have new functionality to
support physical network functions (PNFs), reboot, traffic migration, expanded
hardware platform awareness (HPA), cloud agnostic intent capabilities, improved
homing service, SDN geographic redundancy, scale-out and edge cloud onboarding.
This will expand the actions available to support lifecycle management
functionality, increase performance and availability, and unlock new edge
automation and 5G use cases. With support for ETSI NFV-SOL003, the introduction
of an ETSI compliant VNFM is simplified.

To facilitate VNF vendor integration, ONAP introduced some mapper components
that translate specific events (SNMP traps, telemetry, 3 GPP PM) towards ONAP
VES standardized events.

The Policy project supports multiple policy engines and can distribute policies
through policy design capabilities in SDC, simplifying the design process.
Next, the Holmes alarm correlation engine continues to support a GUI
functionality via scripting to simplify how rapidly alarm correlation rules can
be developed.

ONAP northbound API continues to align better with TM Forum APIs (Service
Catalog, Service Inventory, Service Order and Hub API) and MEF APIs (around
Legato and Interlude APIs) to simplify integration with OSS/BSS. The VID and
UUI operations GUI projects can support a larger range of lifecycle management
actions through a simple point and click interface allowing operators to
perform more tasks with ease. Furthermore, The CLAMP project supports a
dashboard to view DMaaP and other events during design and runtime to ease the
debugging of control-loop automation. ONAP has experimentally introduced ISTIO
in certain components to progress the introduction of Service Mesh.

ONAP installation: The ONAP Operations Manager (OOM) continues to make progress
in streamlining ONAP installation by using Kubernetes (Docker and Helm Chart
technologies). OOM supports pluggable persistent storage including GlusterFS,
providing users with more storage options. In a multi-node deployment, OOM
allows more control on the placement of services based on available resources
or node selectors. Finally, OOM now supports backup/restore of an entire k8s
deployment thus introducing data protection.

Deployability: Dublin continued the 7 Dimensions momentum (Stability, Security,
Scalability, Performance; and Resilience, Manageability, and Usability) from
the prior to the Beijing release. A new logging project initiative called Post
Orchestration Model Based Audit (POMBA), can check for deviations between
design and ops environments thus increasing network service reliability.
Numerous other projects ranging from Logging, SO, VF-C, A&AI, Portal, Policy,
CLAMP and MSB have a number of improvements in the areas of performance,
availability, logging, move to a cloud-native architecture, authentication,
stability, security, and code quality. Finally, versions of OpenDaylight and
Kafka that are integrated into ONAP were upgraded to the Oxygen and v0.11
releases providing new capabilities such as P4 and data routing respectively.

Microservices Support
=====================
As a cloud-native application that consists of numerous services, ONAP requires
sophisticated initial deployment as well as post- deployment management.

The ONAP deployment methodology needs to be flexible enough to suit the
different scenarios and purposes for various operator environments. Users may
also want to select a portion of the ONAP components to integrate into their
own systems. And the platform needs to be highly reliable, scalable, secure and
easy to manage. To achieve all these goals, ONAP is designed as a
microservices-based system, with all components released as Docker containers
following best practice building rules to optimize their image size. To reduce
the ONAP footprint, a first effort to use shared data base have been initiated
with a Cassandra and mariadb-galera clusters.

The ONAP Operations Manager (OOM) is responsible for orchestrating the
end-to-end lifecycle management and monitoring of ONAP components. OOM uses
Kubernetes to provide CPU efficiency and platform deployment. In addition, OOM
helps enhance ONAP platform maturity by providing scalability and resiliency
enhancements to the components it manages.

OOM is the lifecycle manager of the ONAP platform and uses the Kubernetes
container management system and Consul to provide the following functionality:

#. Deployment - with built-in component dependency management (including
   multiple clusters, federated deployments across sites, and anti-affinity
   rules)
#. Configuration - unified configuration across all ONAP components
#. Monitoring - real-time health monitoring feeding to a Consul GUI and
   Kubernetes
#. Restart - failed ONAP components are restarted automatically
#. Clustering and Scaling - cluster ONAP services to enable seamless scaling
#. Upgrade - change out containers or configuration with little or no service
   impact
#. Deletion - clean up individual containers or entire deployments

OOM supports a wide variety of cloud infrastructures to suit your individual
requirements.

Microservices Bus (MSB) provides fundamental microservices supports including
service registration/ discovery, external API gateway, internal API gateway,
client software development kit (SDK), and Swagger SDK. When integrating with
OOM, MSB has a Kube2MSB registrar which can grasp services information from k8s
metafile and automatically register the services for ONAP components.

In the spirit of leveraging the microservice capabilities, further steps
towards increased modularity have been taken in the Dublin release. Service
Orchestrator (SO) and the controllers have increased its level of modularity.

Portal
======
ONAP delivers a single, consistent user experience to both design time and
runtime environments, based on the user’s role. Role changes are configured
within a single ONAP instance.

This user experience is managed by the ONAP Portal, which provides access to
design, analytics and operational control/administration functions via a
shared, role-based menu or dashboard. The portal architecture provides
web-based capabilities such as application onboarding and management,
centralized access management through the Authentication and Authorization
Framework (AAF), and dashboards, as well as hosted application widgets.

The portal provides an SDK to enable multiple development teams to adhere to
consistent UI development requirements by taking advantage of built-in
capabilities (Services/ API/ UI controls), tools and technologies. ONAP also
provides a Command Line Interface (CLI) for operators who require it (e.g., to
integrate with their scripting environment). ONAP SDKs enable
operations/security, third parties (e.g., vendors and consultants), and other
experts to continually define/redefine new collection, analytics, and policies
(including recipes for corrective/remedial action) using the ONAP Design
Framework Portal.

Design Time Framework
=====================
The design time framework is a comprehensive development environment with
tools, techniques, and repositories for defining/ describing resources,
services, and products.

The design time framework facilitates reuse of models, further improving
efficiency as more and more models become available. Resources, services,
products, and their management and control functions can all be modeled using
a common set of specifications and policies (e.g., rule sets) for controlling
behavior and process execution. Process specifications automatically sequence
instantiation, delivery and lifecycle management for resources, services,
products and the ONAP platform components themselves. Certain process
specifications (i.e., ‘recipes’) and policies are geographically distributed
to optimize performance and maximize autonomous behavior in federated cloud
environments.

Service Design and Creation (SDC) provides tools, techniques, and repositories
to define/simulate/certify system assets as well as their associated processes
and policies. Each asset is categorized into one of four asset groups:
Resource, Services, Products, or Offers. SDC also supports TOSCA1.3 List type
definition in Dublin release which provides the ability to design complicated
service descriptor.

The SDC environment supports diverse users via common services and utilities.
Using the design studio, product and service designers onboard/extend/retire
resources, services and products. Operations, Engineers, Customer Experience
Managers, and Security Experts create workflows, policies and methods to
implement Closed control Loop Automation/Control and manage elastic
scalability.

To support and encourage a healthy VNF ecosystem, ONAP provides a set of VNF
packaging and validation tools in the VNF Supplier API and Software Development
Kit (VNF SDK) and VNF Validation Program (VVP) components. Vendors can
integrate these tools in their CI/CD environments to package VNFs and upload
them to the validation engine. Once tested, the VNFs can be onboarded through
SDC. In addition, the testing capability of VNFSDK is being utilized at the
LFN Compliance Verification Program to work towards ensuring a highly
consistent approach to VNF verification.

The Policy Creation component deals with policies; these are rules, conditions,
requirements, constraints, attributes, or needs that must be provided,
maintained, and/or enforced. At a lower level, Policy involves machine-readable
rules enabling actions to be taken based on triggers or requests. Policies
often consider specific conditions in effect (both in terms of triggering
specific policies when conditions are met, and in selecting specific outcomes
of the evaluated policies appropriate to the conditions).

Policy allows rapid modification through easily updating rules, thus updating
technical behaviors of components in which those policies are used, without
requiring rewrites of their software code. Policy permits simpler management
/ control of complex mechanisms via abstraction.

Runtime Framework
=================
The runtime execution framework executes the rules and policies distributed by
the design and creation environment.

This allows for the distribution of policy enforcement and templates among
various ONAP modules such as the Service Orchestrator (SO), Controllers,
Data Collection, Analytics and Events (DCAE), Active and Available Inventory
(A&AI), and a Security Framework. These components use common services that
support logging, access control, Multi-Site State Coordination (MUSIC), which
allow the platform to register and manage state across multi-site deployments.
The External API provides access for third-party frameworks such as MEF,
TM Forum and potentially others, to facilitate interactions between operator
BSS and relevant ONAP components. The logging services also includes
event-based analysis capabilities to support post orchestration consistency
analysis.

Orchestration
-------------
The Service Orchestrator (SO) component executes the specified processes by
automating sequences of activities, tasks, rules and policies needed for
on-demand creation, modification or removal of network, application or
infrastructure services and resources. The SO provides orchestration at a
very high level, with an end-to-end view of the infrastructure, network,
and applications.

ONAP External APIs, North Bound Interface (NBI) module, exposes ONAP
capabilities to OSS/BSS by currently implementing TM Forum APIs. In the
previous Release, Casablanca, External APIs was already providing a set of
serviceOrder, serviceInventory, serviceCatalog and event publish/subscribe
serviceOrder notification management. For Dublin, External APIs is for the
first time officially involved in two approved ONAP blueprints. One is
BroadBand Service (BBS), the second one is Cross Domain and Cross Layer VPN
(CCVPN).

The Virtual Infrastructure Deployment (VID) application enables users to
instantiate infrastructure services from SDC, along with their associated
components, and to execute change management operations such as scaling and
software upgrades to existing VNF instances.

Policy-Driven Workload Optimization
-----------------------------------
The ONAP Optimization Framework (OOF) provides a policy-driven and model-driven
framework for creating optimization applications for a broad range of use
cases. OOF Homing and Allocation Service (HAS) is a policy driven workload
optimization service that enables optimized placement of services across
multiple sites and multiple clouds, based on a wide variety of policy
constraints including capacity, location, platform capabilities, and other
service specific constraints.

ONAP Multi-VIM/Cloud (MC) and several other ONAP components such as Policy, SO,
A&AI etc. play an important role in enabling “Policy-driven
Performance/Security-Aware Adaptive Workload Placement/ Scheduling” across
cloud sites through OOF-HAS. OOF-HAS uses Hardware Platform Awareness (HPA),
cloud agnostic Intent capabilities, and real-time capacity checks provided by
ONAP MC to determine the optimal VIM/Cloud instances, which can deliver the
required performance SLAs, for workload (VNF etc.) placement and scheduling
(Homing). Operators now realize the true value of virtualization through fine
grained optimization of cloud resources while delivering performance and
security SLAs.

Controllers
-----------
Controllers are applications which are coupled with cloud and network services
and execute the configuration, real-time policies, and control the state of
distributed components and services. Rather than using a single monolithic
control layer, operators may choose to use multiple distinct controller types
that manage resources in the execution environment corresponding to their
assigned controlled domain such as cloud computing resources (network
configuration (SDN-C) and application (App-C). Also, the Virtual Function
Controller (VF-C) provides an ETSI NFV compliant NFV-O function that is
responsible for lifecycle management of virtual services and the associated
physical COTS server infrastructure. VF-C provides a generic VNFM capability
but also integrates with external VNFMs and VIMs as part of an NFV MANO stack.

Inventory
---------
Active and Available Inventory (A&AI) provides real-time views of a system’s
resources, services, products and their relationships with each other, and also
retains a historical view. The views provided by A&AI relate data managed by
multiple ONAP instances, Business Support Systems (BSS), Operation Support
Systems (OSS), and network applications to form a “top to bottom” view ranging
from the products end users buy, to the resources that form the raw material
for creating the products. A&AI not only forms a registry of products,
services, and resources, it also maintains up-to-date views of the
relationships between these inventory items.

To deliver the promised dynamism of SDN/NFV, A&AI is updated in real time by
the controllers as they make changes in the network environment. A&AI is
metadata-driven, allowing new inventory types to be added dynamically and
quickly via SDC catalog definitions, eliminating the need for lengthy
development cycles.

Multi Cloud Adaptation
----------------------
Multi-VIM/Cloud provides and infrastructure adaptation layer for VIMs/Clouds
in exposing advanced hardware platform awareness and cloud agnostic intent
capabilities, besides standard capabilities, which are used by OOF and other
components for enhanced cloud selection and SO/VF-C for cloud agnostic workload
deployment.

Closed Control Loop Automation
==============================
Closed loop control is provided by cooperation among a number of design-time
and run-time elements. The Runtime loop starts with data collectors from Data
Collection, Analytics and Events (DCAE). ONAP includes the following
collectors: VES for events, HV-VES for high-volume events, SNMP for SNMP traps,
File Collector to receive files, and Restconf Collector to collect the
notifications. After data collection/verification phase, data are moved through
the loop of micro-services like Homes for event detection, Policy for
determining actions, and finally, controllers and orchestrators to implement
actions CLAMP is used to monitor the loops themselves. DCAE also supports
(Platform for Network Data Analytics) PNDA analytics capabilities.  CLAMP,
Policy and DCAE all have design time aspects to support the creation of the
loops.

We refer to this automation pattern as “closed control loop automation” in that
it provides the necessary automation to proactively respond to network and
service conditions without human intervention. A high-level schematic of the
“closed control loop automation” and the various phases within the service
lifecycle using the automation is depicted in Figure 3.

Closed control loop control is provided by Data Collection, Analytics and
Events (DCAE) and one or more of the other ONAP runtime components.
Collectively, they provide FCAPS (Fault Configuration Accounting Performance
Security) functionality. DCAE collects performance, usage, and configuration
data; provides computation of analytics; aids in troubleshooting; and publishes
events, data and analytics (e.g., to policy, orchestration, and the data lake).
Another component, “Holmes”, connects to DCAE and provides alarm correlation
for ONAP, new data collection capabilities with High Volume VES, and bulk
performance management support.

Working with the Policy Framework and CLAMP, these components detect problems
in the network and identify the appropriate remediation. In some cases, the
action will be automatic, and they will notify Service Orchestrator or one of
the controllers to take action. In other cases, as configured by the operator,
they will raise an alarm but require human intervention before executing the
change. The policy framework is extended to support additional policy decision
capabilities with the introduction of adaptive policy execution.

|image3|

**Figure 3: ONAP Closed Control Loop Automation**

Shared Services
===============
ONAP provides a set of operational services for all ONAP components including
activity logging, reporting, common data layer, access control, secret and
credential management, resiliency, and software lifecycle management.

These services provide access management and security enforcement, data backup,
restoration and recovery. They support standardized VNF interfaces and
guidelines.

Operating in a virtualized environment introduces new security challenges and
opportunities. ONAP provides increased security by embedding access controls in
each ONAP platform component, augmented by analytics and policy components
specifically designed for the detection and mitigation of security violations.

ONAP Modeling
=============
ONAP provides models to assist with service design, the development of ONAP
service components, and with the improvement of standards interoperability.

Models are an essential part for the design time and runtime framework
development. The ONAP modeling project leverages the experience of member
companies, standard organizations and other open source projects to produce
models which are simple, extensible, and reusable. The goal is to fulfill the
requirements of various use cases, guide the development and bring consistency
among ONAP components and explore a common model to improve the
interoperability of ONAP.

In the Dublin Release, ONAP supports the following Models:

- A VNF Descriptor Information Model based on ETSI NFV IFA011 v.2.5.1 with
  appropriate modifications aligned with ONAP requirements
- A PNF Descriptor Information Model based on ETSI NFV IFA014 v2.5.1
- A VNF Descriptor TOSCA based Data Model based on IM and ETSI NFV SOL001
  v 2.5.1 has been implemented by SDC and supported by vCPE use case.
- VNF Package format leveraging the ETSI NFV SOL004 specification and supported
  by VNF SDK project
- A VNF instance model based on ETSI NFV IFA specification and A&AI
  implementation
- A Network Service Descriptor (NSD) has been realized by the VFC (using the
  modelling project parsing capabilities)
- These models enable ONAP to interoperate with implementations based on
  standards and improve industry collaboration.

In Dublin release, in addition to the parser library, modeling project
introduced generic parser which provide the Tosca parser restful APIs for other
projects as a standalone service.

Industry Alignment
==================
ONAP support and collaboration with other standards and opensource communities
is evident in the architecture.

- MEF and TMF interfaces are used in the External APIs
- In addition to the ETSI-NFV defined VNFD and NSD models mentioned above, ONAP
  supports the NFVO interfaces (SOL005 between the SO and VFC, SOL003 from
  either the SO or VFC to an external VNFM).

Read this whitepaper for more information: The Progress of ONAP: Harmonizing
Open Source and Standards.

ONAP Blueprints
===============
ONAP can support an unlimited number of use cases, within reason. However, to
provide concrete examples of how to use ONAP to solve real-world problems, the
community has created a set of blueprints. In addition to helping users rapidly
adopt the ONAP platform through end-to-end solutions, these blueprints also
help the community prioritize their work. With the ONAP Dublin release, we
introduced a new blueprint in the area of residential connectivity: Broadband
Service. Prior blueprints were vCPE, VoLTE, vFW/vDNS, 5G, and CCVPN. 5G and
CCVPN underwent feature enhancements during the Dublin release.

5G Blueprint
------------
The 5G blueprint is a multi-release effort, with three key initiatives around
PNF integration, network optimization, and network slicing. The combination of
eMBB that promises peak data rates of 20 Mbps, uRLLC that guarantees
sub-millisecond response times and MMTC that can support 0.92 devices per sq.
ft. brings with it some unique requirements. First, ONAP needs to optimize the
network around real time and bulk analytics, place VNFs on the correct edge
cloud, scale and heal services, and provide edge automation. Next, ONAP needs
to handle end-to-end network slicing. These requirements have led to the three
above-listed initiatives. Between the Casablanca and Dublin releases, the 5G
blueprint incorporates PNF integration, edge automation, real-time and bulk
analytics, homing (VNF placement), scaling and modeling work that will support
end-to-end network slicing in future releases.

|image4|

**Figure 4. Disaggregated Hybrid RAN**

Read the 5G Blueprint to learn more.

Residential Connectivity Blueprints
-----------------------------------
Two ONAP blueprints (vCPE and BBS) address the residential connectivity use
case.

Virtual CPE (vCPE)
..................
Currently, services offered to a subscriber are restricted to what is
designed into the broadband residential gateway. In the blueprint, the customer
has a slimmed down physical CPE (pCPE) attached to a traditional broadband
network such as DSL, DOCSIS, or PON (Figure 5). A tunnel is established to a
data center hosting various VNFs providing a much larger set of services to the
subscriber at a significantly lower cost to the operator. In this blueprint,
ONAP supports complex orchestration and management of open source VNFs and both
virtual and underlay connectivity.

|image5|

**Figure 5. ONAP vCPE Architecture**

Read the Residential vCPE Use Case with ONAP blueprint to learn more.

Broadband Service (BBS)
.......................
This blueprint provides multi-gigabit residential
internet connectivity services based on PON (Passive Optical Network) access
technology. A key element of this blueprint is to show automatic
re-registration of an ONT (Optical Network Terminal) once the subscriber moves
(nomadic ONT) as well as service subscription plan changes. This blueprint uses
ONAP for the design, deployment, lifecycle management, and service assurance of
broadband services.  It further shows how ONAP can orchestrate services across
different locations (e.g. Central Office, Core) and technology domains (e.g.
Access, Edge).

|image6|

**Figure 6. ONAP BBS Architecture**

Read the Residential Connectivity Blueprint to learn more.

Voice over LTE (VoLTE) Blueprint
--------------------------------
This blueprint uses ONAP to orchestrate a Voice over LTE service. The VoLTE
blueprint incorporates commercial VNFs to create and manage the underlying vEPC
and vIMS services by interworking with vendor-specific components, including
VNFMs, EMSs, VIMs and SDN controllers, across Edge Data Centers and a Core Data
Center. ONAP supports the VoLTE use case with several key components: SO, VF-C,
SDN-C, and Multi-VIM/ Cloud. In this blueprint, SO is responsible for VoLTE
end-to-end service orchestration working in collaboration with VF-C and SDN-C.
SDN-C establishes network connectivity, then the VF-C component completes the
Network Services and VNF lifecycle management (including service initiation,
termination and manual scaling) and FCAPS (fault, configuration, accounting,
performance, security) management. This blueprint also shows advanced
functionality such as scaling and change management.

|image7|

**Figure 7. ONAP VoLTE Architecture Open Network Automation Platform**

Read the VoLTE Blueprint to learn more.

CCVPN (Cross Domain and Cross Layer VPN) Blueprint
--------------------------------------------------
CSPs, such as CMCC and Vodafone, see a strong demand for high-bandwidth, flat,
high-speed OTN (Optical Transport Networks) across carrier networks. They also
want to provide a high-speed, flexible and intelligent service for high-value
customers, and an instant and flexible VPN service for SMB companies.

|image8|

**Figure 8. ONAP CCVPN Architecture**

The CCVPN (Cross Domain and Cross Layer VPN) blueprint is a combination of SOTN
(Super high-speed Optical Transport Network) and ONAP, which takes advantage of
the orchestration ability of ONAP, to realize a unified management and
scheduling of resource and services. It achieves cross-domain orchestration and
ONAP peering across service providers. In this blueprint, SO is responsible for
CCVPN end-to-end service orchestration working in collaboration with VF-C and
SDN-C. SDN-C establishes network connectivity, then the VF-C component
completes the Network Services and VNF lifecycle management. ONAP peering
across CSPs uses east-west API which is being aligned with the MEF Interlude
API. The key innovations in this use case are physical network discovery and
modeling, cross-domain orchestration across multiple physical networks, cross
operator end-to-end service provisioning and close-loop reroute for
cross-domain service. The Dublin release added support for dynamic changes
(branch sites, VNFs) and intelligent service optimization.

To provide an extension work, many enhancement functions have been added into
CCVPN blueprint in Dublin release. Multi-sites VPN service, service change and
close-loop bandwidth adjustment will be realized in Dublin release, other
functions, like AI Apps, SFC and E-LAN service will be supported in the next
few releases.

Read the CCVPN Blueprint to learn more.

vFW/vDNS Blueprint
------------------
The virtual firewall, virtual DNS blueprint is a basic demo to verify that ONAP
has been correctly installed and to get a basic introduction to ONAP. The
blueprint consists of 5 VNFs: vFW, vPacketGenerator, vDataSink, vDNS and
vLoadBalancer. The blueprint exercises most aspects of ONAP, showing VNF
onboarding, network service creation, service deployment and closed-loop
automation. The key components involved are SDC, CLAMP, SO, APP-C, DCAE and
Policy. In the Dublin release, the vFW blueprint has been demonstrated by
using a mix of a CNF and VNF.

Conclusion
==========
The ONAP platform provides a comprehensive platform for real-time,
policy-driven orchestration and automation of physical and virtual network
functions that will enable software, network, IT and cloud providers and
developers to rapidly automate new services and support complete lifecycle
management.

By unifying member resources, ONAP will accelerate the development of a vibrant
ecosystem around a globally shared architecture and implementation for network
automation—with an open standards focus— faster than any one product could on
its own.

Resources
=========
Watch videos about the major platform components on
`YouTube <https://www.youtube.com/channel/UCmzybjwmY1te0FHxLFY-Uog>`_ and
`Youku <https://i.youku.com/i/UNTI4MjA5MDg5Ng==?spm=a2h1n.8251843.0.0>`_.

Read about how ONAP can be deployed using containers.

.. |image1| image:: media/ONAP-toplevel.png
   :width: 6.5in
   :height: 3.13548in
.. |image2| image:: media/ONAP-fncview.png
   :width: 6.5in
   :height: 3.409in
.. |image3| image:: media/ONAP-closedloop.png
   :width: 6in
   :height: 2.6in
.. |image4| image:: media/ONAP-5G.png
   :width: 6in
   :height: 2.6in
.. |image5| image:: media/ONAP-vcpe.png
   :width: 6.5in
   :height: 3.28271in
.. |image6| image:: media/ONAP-bbs.png
   :width: 6.5in
   :height: 3.02431in
.. |image7| image:: media/ONAP-volte.png
   :width: 6.5in
   :height: 3.02431in
.. |image8| image:: media/ONAP-ccvpn.png
   :width: 6.5in
