.. 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 <getting-started>`                        | 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:`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 and PNF Requirements and Guidelines <vnf_pnf_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 and 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/settingup/index
   guides/onap-developer/index
   guides/onap-user/index
   guides/onap-provider/index
