.. This work is licensed under a
   Creative Commons Attribution 4.0 International License.

.. _master_index:

Open Network Automation Platform
================================

Open Network Automation Platform (ONAP) is an open source project hosted by
the Linux Foundation.

ONAP provides a comprehensive platform for real-time, policy-driven service
orchestration and automation. ONAP enables service providers and developers
to rapidly automate the instantiation and configuration of physical and
virtual network functions and to support complete life cycle management
activities. By unifying the resources of open source members, ONAP enables
the acceleration of the development of a vibrant ecosystem around a globally
shared architecture and the implementation of network automation faster than
any product could on its own.

Please find some guidance here on the content of the Dublin Release documentation for ONAP:

 +---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+
 | Main documentation areas 	                                                   | Description                                                                                   |
 +=================================================================================+===============================================================================================+
 | :ref:`ONAP Overview <overview>`                                                 | ONAP Overview provides generic and high-level guidance on the mission and main                |
 |                                                                                 | functionalities of ONAP. Basic guidelines on license details, limitations and                 |
 |                                                                                 | security references support understanding the solution.                                       |
 +---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+
 | :ref:`ONAP Architecture <ONAP-architecture>`                                    | The ONAP architecture and its functional elements are described in details                    |
 |                                                                                 | here. We can learn how the two main frameworks, namely the Design-time                        |
 |                                                                                 | framework and the Run-time framework cooperate and how the Microservices,                     |
 |                                                                                 | Common services and the ONAP Portal support the certain functions.                            |
 +---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+
 | :ref:`ONAP components and functionalities <doc_onap-developer_guide_projects>`  | The ONAP components and functionalities are described in details here.                        |
 |                                                                                 | We can learn what functionalities ONAP provides and how the certain components in ONAP        |
 |                                                                                 | operate together.                                                                             |
 +---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+
 | :ref:`Setting Up ONAP <installing-onap>`                                        | Installation guidelines and requirements help the very first set up of an                     |
 |                                                                                 | ONAP environment. The ONAP Operations Manager Cloud setup Guide and the                       |
 |                                                                                 | ONAP Operations Manager Quick Start Guide support the deployment and installation activities. |
 +---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+
 | :ref:`Developer Guides <ONAP_developer_guides>`                                 | Developers contributing to the ONAP development can find crucial information                  |
 |                                                                                 | in the Developer Guides. The reader can search among the developers’ topics                   |
 |                                                                                 | in alphabetical order.                                                                        |
 +---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+
 | :ref:`User Guides <user-guides>`                                                | The User Guides provide details on the ONAP portal, which portal integrates                   |
 |                                                                                 | numerous different ONAP applications at one place. Platform operations are                    |
 |                                                                                 | supported with ONAP Operations Quick Start Guide and with an ONAP Operations                  |
 |                                                                                 | User Guide. The instantiation and the management of resources and the services                |
 |                                                                                 | are supported with a Service Design Guide and with guidelines on Service Deployment.          |
 +---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+
 | :ref:`VNF/PNF Requirements and Guidelines <vnf_reqs>`                           | Harmonized VNF and PNF requirements and reduced customization of onboarding VNFs              |
 |                                                                                 | and PNFs can accelerate the optimal usage of this ONAP environment. The guidelines            |
 |                                                                                 | on VNF/PNF requirements facilitates synchronized and aligned activities for all participants. |
 +---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+

You can reach the complete set of Dublin Release documentation from the Navigation bar on the left.

.. toctree::
   :maxdepth: 1
   :hidden:

   Home <self>
   guides/overview/index
   release/index
   guides/onap-developer/architecture/index
   guides/onap-developer/developing/index
   guides/onap-developer/settingup/index
   guides/onap-developer/index
   guides/onap-user/index
   guides/onap-provider/index
