.. 
..  Copyright (c) 2019 AT&T Intellectual Property.
..  Copyright (c) 2019 Nokia.
..
..  Licensed under the Creative Commons Attribution 4.0 International
..  Public License (the "License"); you may not use this file except
..  in compliance with the License. You may obtain a copy of the License at
..
..    https://creativecommons.org/licenses/by/4.0/
..
..  Unless required by applicable law or agreed to in writing, documentation
..  distributed under the License is distributed on an "AS IS" BASIS,
..  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
..
..  See the License for the specific language governing permissions and
..  limitations under the License.
..

Release-Notes
=============


This document provides the release notes for the Bronze release of E2Manager

.. contents::
   :depth: 3
   :local:


Version history
---------------

+--------------------+--------------------+--------------------+--------------------+
| **Date**           | **Ver.**           | **Author**         | **Comment**        |
|                    |                    |                    |                    |
+--------------------+--------------------+--------------------+--------------------+
| 2019-10-31         | 2.0.7              | Shuky Har-Noy      | First draft        |
|                    |                    |                    |                    |
+--------------------+--------------------+--------------------+--------------------+
| 2019-12-02         | 2.0.10             | Shuky Har-Noy      | Amber Release      |
|                    |                    |                    |                    |
+--------------------+--------------------+--------------------+--------------------+
| 2020-06-14         | 4.4.12             | Shuky Har-Noy      | Bronze Release     |
|                    |                    |                    |                    |
+--------------------+--------------------+--------------------+--------------------+




Summary
-------
The Bronze release of E2Manager supports the following flows:
    - E2 Setup From RAN to RIC

X2 flows are not supported anymore


The Amber release of E2Manager supports the following flows:
	- ENDC Setup
	- X2 Setup
	- ENDC Configuration Update
	- X2 Configuration Update
	- Reset
	- Shutdown
	- Load Information

Release Data
------------

+--------------------------------------+--------------------------------------+
| **Project**                          | RAN Intelligent Controller  	      |
|                                      |                                      |
+--------------------------------------+--------------------------------------+
| **Repo/commit-ID**                   | ric-plt/e2mgr                        |
|                                      |                                      |
+--------------------------------------+--------------------------------------+
| **Release designation**              | Bronze                               |
|                                      |                                      |
+--------------------------------------+--------------------------------------+
| **Release date**                     | 2020-06-14                           |
|                                      |                                      |
+--------------------------------------+--------------------------------------+
| **Purpose of the delivery**          | open-source E2Manager      	      |
|                                      |                                      |
+--------------------------------------+--------------------------------------+


+--------------------------------------+--------------------------------------+
| **Project**                          | RAN Intelligent Controller  	      |
|                                      |                                      |
+--------------------------------------+--------------------------------------+
| **Repo/commit-ID**                   | ric-plt/e2mgr                        |
|                                      |                                      |
+--------------------------------------+--------------------------------------+
| **Release designation**              | Amber                                |
|                                      |                                      |
+--------------------------------------+--------------------------------------+
| **Release date**                     | 2019-12-02                           |
|                                      |                                      |
+--------------------------------------+--------------------------------------+
| **Purpose of the delivery**          | open-source E2Manager      	      |
|                                      |                                      |
+--------------------------------------+--------------------------------------+
