.. 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.

.. _ONAP-architecture:

1. 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.

Prior to ONAP, operators of telecommunication networks have been challenged 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 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 third 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, and
even legacy equipment. ONAP’s consolidated VNF requirements publication will
enable commercial development of ONAP-compliant VNFs. 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, 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
dynamic, closed control loop process, with 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 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 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
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 product/service 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 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
-  The architecture shall support elastic scaling as needs grow or shrink

2. ONAP Architecture
====================

The platform provides the common functions (e.g., data collection, control
loops, meta-data recipe creation, policy/recipe distribution, etc.) necessary
to construct specific behaviors.

To create a service or operational capability, it is necessary to develop
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 and
microservices-based platform components.

|image1|

**Figure 1: ONAP Platform architecture (Casablanca Release)**

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

1. Design time environment for onboarding services and resources into ONAP and
   designing required services.
2. External API provides northbound interoperability for the ONAP Platform and
   Multi-VIM/Cloud provides cloud interoperability for the ONAP workloads.
3. OOM provides the ability to manage cloud-native installation and deployments
   to Kubernetes-managed cloud environments.
4. ONAP Common Services manages complex and optimized topologies. 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.
5. 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 Casablanca release has a number of important new features in the areas of
design time and runtime, ONAP installation, and S3P.

Design time: The Service Design and Creation (SDC) project in ONAP has two new
dashboards—DCAE design studio, SO Workflow Designer—to help designers, product
managers, TechOps, and VNF owners create artifacts in one unified design
palette.

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.

In the area of monitoring, analytics, and service assurance, ONAP has early
support for the Linux Foundation PNDA project in DCAE as a compliment to CDAP.
Next, the data collection framework can now collect real-time messages through
a high-volume collector, handle PNFs, and support SNMP and bulk performance
management data files. The Policy project supports a new policy engine as well
as the new Casablanca blueprints and can distribute policies through policy
design capabilities in SDC, simplifying the design process. Next, the Holmes
alarm correlation engine features a new GUI and provides richer functionality
through scripting, again simplifying how rapidly alarm correlation rules can be
developed.

Moreover, there are new features in A&AI to support audit capabilities by
providing historical data. ONAP northbound API continues to align better with
TMForum (around ServiceOrder) 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 offers a new 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). In Casablanca, 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.

Casablanca has introduced 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.

Deployability: Casablanca 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 in ONAP were upgraded to the Oxygen
and v0.11 releases providing new capabilities such as P4 and data routing
respectively.

3. 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.

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:

1. Deployment - with built-in component dependency management (including
   multiple clusters, federated deployments across sites, and anti-affinity
   rules)
2. Configuration - unified configuration across all ONAP components
3. Monitoring - real-time health monitoring feeding to a Consul GUI and
   Kubernetes
4. Restart - failed ONAP components are restarted automatically
5. Clustering and Scaling - cluster ONAP services to enable seamless scaling
6. Upgrade - change out containers or configuration with little or no service
   impact
7. 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. MSB supports both
OpenStack (Heat) and bare metal deployment. 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.

4. 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, 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.

5. 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 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 two asset groups: Resource
or Services.
The SDC environment supports diverse users via common services and utilities.
Using the design studio, product and service designers onboard/extend/retire
resources and services. 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.

The Closed Loop Automation Management Platform (CLAMP) provides a platform for
managing control loops. CLAMP is used to manage a closed control loop,
configure it with specific parameters for a particular network service, then
deploy and decommission it. Once deployed, a user can also update the loop with
new parameters during runtime, as well as suspend and restart it.

6. 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.

The External API Northbound Interface component provides a standards-based
interface between the BSS and various ONAP components, including Service
Orchestrator, A&AI, and SDC. This provides an abstracted view of the platform
within the existing BSS/OSS environment without lengthy, high-cost
infrastructure integration. The Beijing release was the first of a series of
enhancements in support of SDO collaborations, which are expected to support
inter-operator exchanges and other use cases defined by associated standards
bodies such as MEF, TM Forum and others.

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. For the Beijing release, this feature was available for the vCPE
use case.

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.

The new Multisite State Coordination (MUSIC) project records and manages state
of the Portal and ONAP Optimization Framework to ensure consistency, redundancy
and high availability across geographically distributed ONAP deployments.

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 in
Casablanca it 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. The cloud agnostic intent capabilities are newly introduced in the
Casablanca release.

7. Closed Control Loop Automation
=================================

Closed loop control is provided by cooperation among a number of design time
and runtime elements. The Runtime loop starts with Data Collection, Analytics
and Events (DCAE) and then moves through the loop of micro-services like Holmes
for event detection, Policy for determining actions, and finally controllers
and orchestrators to implement actions CLAMP is used to monitor the loops
themselves. 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. In the Casablanca Release, DCAE evolved to support new analytics
capabilities with PNDA (http://pnda.io/) as well as 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**

8. Common Services
==================

ONAP provides common 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.

9. 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 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 Casablanca Release, ONAP supports the following Models:

-  A VNF Descriptor Information Model based on ETSI NFV IFA011 v.2.4.1 with
   appropriate modifications aligned with ONAP requirements;
-  A VNF Descriptor Model based on TOSCA implementation based on the IM and
   follow the same model definitions in ETSI NFV SOL001 v 0.6.0.
-  VNF Package format leveraging the ETSI NFV SOL004 specification.
-  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 the industry collaboration.

10. ONAP Blueprints
===================

ONAP can support an unlimited number of use cases. 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 Casablanca release, we
introduced two new blueprints: 5G and CCVPN. Prior blueprints, vCPE, VoLTE and
vFW/vDNS have been ported to Casablanca as well.

5G Blueprint
------------
The 5G blueprint is a multi-release effort, with Casablanca introducing first
set of capabilities around PNF integration, edge automation, real-time
analytics, network slicing, data modeling, homing, scaling, and network
optimization. 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 support network services that include PNFs in addition to VNFs. Next
ONAP needs to support edge cloud onboarding as network services will no longer
be restricted to just large datacenters but will proliferate a large number of
distributed edge locations. Finally, ONAP needs to collect real-time
performance data for analytics and policy driven closed-loop automation. These
requirements have led to several initiatives within ONAP to holistically address
the 5G blueprint.

|image4|

**Figure 4. Disaggregated Hybrid RAN**

Read the 5G Blueprint to learn more.

Virtual CPE Blueprint
---------------------

This blueprint addresses a residential use case, where the services offered to
a subscriber are currently restricted to what is designed into the broadband
residential gateway. In this blueprint, the customer has a slimmed down
physical CPE (pCPE), that only consists of bridging functionality, attached to
a traditional broadband network such as DSL or DOCSIS (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.
ONAP supports complex orchestration and management of both virtual and underlay
connectivity with two key components–SDN-C, which manages connectivity service
, and APP-C, which manages virtualization services. In this case, ONAP provides
a common service orchestration layer for the end-to-end service. This blueprint
shows advanced functionality such as scaling, change management , HPA and cloud
agnostic intent.

|image5|

**Figure 5. ONAP vCPE Architecture**

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

Voice over LTE (VoLTE) Blueprint
--------------------------------

This blueprint uses ONAP to orchestrate a Voice over LTE service. This
blueprint demonstrates how a Mobile Service Provider (SP) could deploy VoLTE
services based on SDN/NFV. 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.

|image6|

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

Read the VoLTE with ONAP 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.

|image7|

**Figure 7. 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. ONAP supports the CCVPN use case with
several key components: SO, VF-C, SDN-C, Policy, Holmes and DCAE. 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.

Read the CCVPN with ONAP 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.

Read the vFW/vDNS with ONAP blueprint to learn more.

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 and Youku
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-volte.png
   :width: 6.5in
   :height: 3.02431in
.. |image7| image:: media/ONAP-ccvpn.png
   :width: 6.5in
   :height: 3.02431in
