.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. SPDX-License-Identifier: CC-BY-4.0
.. CAUTION: this document is generated from source in doc/src/rtd.
.. To make changes edit the source and recompile the document.
.. Do NOT make changes directly to .rst or .md files.

============================================================================================
RMR Release Notes
============================================================================================


RMR Release Notes
=================

The following is a list of release highlights for the RMR
library. At one point in time the RMR repo also housed a
wrapper library with a separate version and release cycle.
This resulted in *leap frogging* versions for each package;
the RMR core library was assigned odd major numbers (e.g.
3.1.0). When the wrapper code was moved to a different repo
the need to leap frog versions ceased, and beginning with
version 4.0.0, the RMR versions should no longer skip.


2021 March 31; version 4.7.0
----------------------------

The route table collector thread will capture the current
"offering" from the Route Manager (table generator) if the
RMR_SEED_RT environment variable is set.



2021 March 10; version 4.6.1
----------------------------

Corrected unit test "framework" to make manual testing
easier, and to add the ability to set the code optimisation
level via the CMake command line parameter OPT_LEVEL=n.



2021 February 22; Version 4.6.0
-------------------------------

Enhanced to use millisecond based timestamps when writing log
messages. (RIC-627)

Enhanced to eliminate the reqirement that the file specified
by the RMR_VCTL_FILE environment variable exist when RMR is
initialised. RMR will correctly find this file if it is
created after initialisation. Further, if the environment
variable is not given, the user may create and populate
/tmp/rmr.v at any time and the contents of this file will be
used as if it were supplied via the environment variable.
This should make debugging in existing containers easier.

Enhanced to send an alarm manager when the user application
is not receiving messages fast enough. The original messages
written to the standard error are still generated. (RIC-204)



2021 January 21; Version 4.5.2
------------------------------

Fixes the excessive TCP session bug when sending to a slow
receiver and a related segment fault because of too many open
file descriptors. (RIC-735)



2021 January 19; Version 4.5.1
------------------------------

Version bump to work round a CI job bug preventing push of
the 4.5.0 packages from staging to release in package cloud.
(RIC-732)



2021 January 8; Version 4.5.0
-----------------------------

Version bump for next release tracking. Corrected a potential
locking issue in message allocation. (RIC-732)



Cherry Release
==============



2020 December 4; Version 4.4.6
------------------------------

Correct a range check bug when cloning a route table in prep
to load a new one. (RIC-720)



2020 November 17; Version 4.4.5
-------------------------------

Correct bug in round robin group allocation that could lead
to an empty group. (RIC-695)



2020 November 13; Version 4.4.4
-------------------------------

Correct address memory leak in the RTE cleanup. (RIC-674)



2020 November 4; Version 4.4.3
------------------------------

Correct bug introduced with race fix (4.4.0) (RIC-674)



2020 November 4; Version 4.4.2
------------------------------

Changes to correct more complaints generated by a code scan.
(RIC-673) Also addressed some sonar coverage issues with unit
test changes.



2020 November 4; Version 4.4.1
------------------------------

Changes to correct complaints generated by a code scan.
(RIC-673)



2020 November 4; Version 4.4.0
------------------------------

Changes to address a potential race condition when route
tables arrive in quick succession. (RIC-674)



2020 October 30; Version 4.3.1
------------------------------

Changes to address code analyser scans and two bug fixes
identified while addressing the analysis data. (RIC-673)



2020 October 2; Version 4.3.0
-----------------------------

Add message types for traffic steering anomaly messages



2020 September 15; Version 4.2.4
--------------------------------

Add man page for the rmr_set_low_latency() function (RIC-631)



2020 September 15; Version 4.2.3
--------------------------------

Correct arg processing bug in rmr_rpobe (RIC-645)



2020 August 4; Version 4.2.2
----------------------------

Correct bug in the rmr_probe support utility when -r option
is used on the command line (RIC-644)



2020 August 4; Version 4.2.1
----------------------------

Add additional environment variable dump if RMR_LOG_VLEVEL
set to 4 at start.



2020 August 3; Version 4.2.0
----------------------------

Add support for the RMR_RTREQ_FREQ environment variable to
control the request frequency for a new route table (default
5s if not supplied). (RIC-630)



2020 July 21; Version 4.1.4
---------------------------

Fix bug in SI95 -- possible use of pointer after free
(RIC-626).



2020 July 9; version 4.1.3
--------------------------

Allow RTS messages to be sent before the arrival of the
initial route table. Calls to RTS (heart beat responses)
prior to the initial route table load could cause a crash if
a framework blindly assumes that RTS is valid. (RIC-589)



2020 June 22; version 4.1.2
---------------------------

Fix typo in RIC Message header file.

Add document for message type constants and the scripts which
generate them.



2020 June 22; version 4.1.1
---------------------------

Add new message types to RIC header file for
    RIC_ALARM           (110)
    RIC_ALARM_QUERY     (111)
    RIC_METRICS         (120)
    RAN_E2_RESET_REQ    (12008)
    RAN_E2_RESET_RESP   (12009)



2020 June 18; version 4.1.0
---------------------------

Bump version minor to move away from 4.0.* which will bump
for any patches applied back to bronze.

Add magic C++ goo to symtab header file allowing C++ xAPPs to
use the symbol table directly.



Bronze Release
==============



2020 May 06; version 4.0.5
--------------------------

Fix the bug in SI95 receive message management semaphore
count issue. (RIC-355)



2020 April 29; version 4.0.4
----------------------------

Fix the traffic steering message type constants (again)
(RIC-342)



2020 April 28; version 4.0.3
----------------------------

Fix sonar flagged bugs (RIC-78)



2020 April 24; version 4.0.2
----------------------------

Correct bug in SI95 transport header length validation
(RIC-341)



2020 April 22; version 4.0.1
----------------------------

Correct message type constant for Traffic Steering
predication (RIC-342)



2020 April 21; version 4.0.0
----------------------------

The NNG based libraries are no longer included in the RMR
packages. This is considered a breaking change as NNG will
not be supported by default. It is still possible to build
with RMR-NNG libraries, but that is the exception. The API
between 3.8.2 and 4.0.0 is the SAME. Upgrading to 4.0.0 only
means that the underlying transport mechanism is limited only
to SI95.

The rmr_rcv_specific() function has been deprecated as it was
necessary only for NNG and Nanomsg support. Its use should be
discontinued.



2020 April 20; version 3.8.2
----------------------------

Fix bug which was preventing an instance receiving dynamic
route table updates. (RIC-336)



2020 April 20; version 3.8.1
----------------------------

Add user guide which replaces the concatenation of man pages
(RIC-328)



2020 April 17; version 3.8.0
----------------------------

Add safe connect to avoid potential connect bug on Linux
(RIC-332)

Change debugging in route table collector to avoid possible
segment fault when in level 2 debug (RIC-335)



2020 April 15; version 3.7.4
----------------------------

Add missing message type to header file (RIC-334)



2020 April 14; version 3.7.3
----------------------------

Fix bug in rmr_call() when using SI95 (RIC-333)



2020 April 10; version 3.7.2
----------------------------

Fix bug related to static route table only mode (RIC-331)



2020 April 9; version 3.7.1
---------------------------

The max length restriction for receiving messages when using
SI95 has been removed. The length supplied during
initialisation is used as the "normal maximum" and default
buffer allocation size, but messages arriving which are
larger are accepted. (RIC-309)



2020 April 7; version 3.7.0
---------------------------

The health check support programme was renamed to rmr_probe
(RIC-308).



2020 April 6; version 3.6.6
---------------------------

Correct bug in SI95 address conversion module (RIC-327)
Correct bug in SI initialisation module



2020 April 2; version 3.6.5
---------------------------

Correct potential nil pointer use when examining interfaces
for use as a listen target (RIC-307)



2020 April 1; version 3.6.4
---------------------------

Correct potential nil pointer use in the NNG interface
(RIC-303) Correct issue preventing CI build without a
container



2020 March 30; version 3.6.3
----------------------------

Correct the max receive message size constant in rmr.h
(RIC-301)



2020 March 23; version 3.6.2
----------------------------

Fix message initialisation bug when pulling a message from
the pool (RIC-295)



2020 March 19; version 3.6.1
----------------------------

Fix problem with RPM package install



2020 March 18; version 3.6.0
----------------------------

Add message types to support traffic steering



2020 March 16; version 3.5.2
----------------------------

Correct bug in the meid table parser that prevented the
ack/nack of meid tables (RIC-273)



2020 March 10; version 3.5.1
----------------------------

Add missing health check message types.



2020 March 9; version 3.5.0
---------------------------

Added new wormhole send function: rmr_wh_call().



2020 March 6; version 3.4.0
---------------------------

Add new wormhole state function: rmr_wh_state().



2020 March 5; Version 3.3.1
---------------------------

Correct several "bugs" identified by automatic code analysis.



2020 March 4; Version 3.3.0
---------------------------

Add SI95 based unit testing Health check support binary added
(reason for minor bump)



2020 February 26; version 3.2.5
-------------------------------

Fix source address bug in SI95 receive/send funcitons. Fix
threading issues involving session disconnection in SI95
Remove unused SI95 status variable.



2020 February 24; version 3.2.4
-------------------------------

Fix meid bug (RIC-220) causing core dump.



2020 February 21; version 3.2.3
-------------------------------

Add meid routing support to the SI95 interface.



2020 February 20; version 3.2.2
-------------------------------

Fix receive thread related core dump (ring early unlock).



2020 February 19; version 3.2.1
-------------------------------

Added missing message types (E2-Setup)



2020 February 18; version 3.2.0
-------------------------------

Added support for new Route Manager and it's ability to
accept a request for table update.



2020 February 14; version 3.1.3
-------------------------------

Fix bug in SIsend which was causing a core dump in some cases
where the application attempted to send on a connection that
had disconnected. (RIC-207).



2020 February 6; version 3.1.2
------------------------------

Fix disconnection detection bug in interface to SI95.



2020 January 31; verison 3.1.1
------------------------------

Allow route table thread logging to be completely disabled
when logging is turned off.



2020 January 26; verison 3.1.0
------------------------------

First step to allowing the user programme to control messages
written to standard error. Introduces the rmr_set_vlevel()
function, and related environment variable.



2020 January 24; verison 3.0.5
------------------------------

Fix bug in SI95 with receive buffer allocation.



2020 January 23; verison 3.0.4
------------------------------

Fix bug in SI95 causing excessive CPU usage on poll.



2020 January 22; verison 3.0.3
------------------------------

Enable thread support for multiple receive threads.



2020 January 21; verison 3.0.2
------------------------------

Fix bug in SI95 (missing reallocate payload function).



2020 January 20; verison 3.0.1
------------------------------

Enable support for dynamic route table updates via RMR
session.



2020 January 16; version 3.0.0
------------------------------

Introduce support for SI95 transport library to replace NNG.
(RMR library versions will use leading odd numbers to avoid
tag collisions with the wrapper tags which will use even
numbers.)



2019 December 9; version 1.13.1
-------------------------------

Correct documentation and missing rel-notes update for RTD.



2019 December 6; version 1.13.0
-------------------------------

Add ability to route messages based on the MEID in a message
combined with the message type/subscription-ID.



Amber Release
=============



2019 November 14; version 1.11.1
--------------------------------

Fix bug in payload reallocation function; correct length of
payload was not always copied.



2019 November 13; version 1.12.1
--------------------------------

New message type constants added to support A1.



2019 November 4; version 1.11.0
-------------------------------

Version bump to move away from the 1.10.* to distinguish
between release A and the trial.



2019 November 7; version 1.12.0
-------------------------------

Version cut to support continued development for next release
preserving the 1.11.* versions for release 1 (Amber) and
related fixes.



2019 October 31; version 1.10.2
-------------------------------

Provide the means to increase the payload size of a received
message without losing the data needed to use the
rmr_rts_msg() funciton.



2019 October 21; version 1.10.1
-------------------------------

Fix to prevent null message buffer from being returned by the
timeout receive function if the function is passed one to
reuse.



2019 October 21; version 1.10.1
-------------------------------

Add periodic dump of send count info to stderr.



2019 September 27; version 1.9.0
--------------------------------

Python bindings added receive all queued function and
corrected a unit test



2019 September 25; version 1.8.3
--------------------------------

Correct application level test issue causing timing problems
during jenkins verification testing at command and merge

Handle the NNG connection shutdown status which may now be
generated when a connection throug a proxy is reset.



2019 September 25; version 1.8.2
--------------------------------

Correct bug in rmr_torcv_msg() when timeout set to zero (0).



2019 September 19; version 1.8.1
--------------------------------

Correct missing constant for wrappers.



2019 September 19; version 1.8.0
--------------------------------

New message types added:
    RAN_CONNECTED, RAN_RESTARTED, RAN_RECONFIGURED



2019 September 17; version 1.7.0
--------------------------------

Initial connection mode now defaults to asynchronous. Set
RMR_ASYNC_CONN=0 in the environment before rmr_init() is
invoked to revert to synchronous first TCP connections.
(Recovery connection attempts have always been asynchronous).



2019 September 3; version 1.6.0
-------------------------------

Fix bug in the rmr_rts_msg() function. If a return to sender
message failed, the source IP address was not correctly
adjusted and could cause the message to be "reflected" back
to the sender on a retry.

Added the ability to set the source "ID" via an environment
var (RMR_SRC_ID). When present in the environment, the string
will be placed in to the message header as the source and
thus be used by an application calling rmr_rts_smg() to
return a response to the sender. If this environment variable
is not present, the host name (original behaviour) is used.



2019 August 26; version 1.4.0
-----------------------------

New message types were added.



2019 August 16; version 1.3.0
-----------------------------

New mesage types added.



2019 August 13; version 1.2.0 (API change, non-breaking)
--------------------------------------------------------

The function rmr_get_xact() was added to proide a convenient
way to extract the transaction field from a message.



2019 August 8; version 1.1.0 (API change)
-----------------------------------------

This change should be backward compatable/non-breaking A new
field has been added to the message buffer (rmr_mbuf_t). This
field (tp_state) is used to communicate the errno value that
the transport mechanism might set during send and/or receive
operations. C programmes should continue to use errno
directly, but in some environments wrappers may not be able
to access errno and this provides the value to them. See the
rmr_alloc_msg manual page for more details.



2019 August 6; version 1.0.45 (build changes)
---------------------------------------------

Support for the Nanomsg transport library has been dropped.
    The library librmr.* will no longer be included in packages.

Packages will install RMR libraries into the system preferred
    target directory. On some systems this is /usr/local/lib
    and on others it is /usr/local/lib64.  The diretory is
    determined by the sytem on which the package is built and
    NOT by the system installing the package, so it's possible
    that the RMR libraries end up in a strange location if the
    .deb or .rpm file was generated on a Linux flavour that
    has a different preference than the one where the package
    is installed.



2019 August 6; version 1.0.44 (API change)
------------------------------------------

Added a new message type constant.



2019 July 15; Version 1.0.39 (bug fix)
--------------------------------------

Prevent unnecessary usleep in retry loop.



2019 July 12; Version 1.0.38 (API change)
-----------------------------------------

Added new message types to RIC_message_types.h.



2019 July 11; Version 1.0.37
----------------------------


librmr and librmr_nng
    - Add message buffer API function rmr_trace_ref()
      (see rmr_trace_ref.3 manual page in dev package).



2020 April 8; Version n/a
-------------------------

RMR Python moved to Python Xapp Framework
(https://gerrit.o-ran-sc.org/r/admin/repos/ric-plt/xapp-frame-py)



2020 February 29; Version 2.4.0
-------------------------------

Add consolidated testing under CMake Add support binary for
health check (SI95 only)



2020 February 28; Version 2.3.6
-------------------------------

Fix bug in Rt. Mgr comm which prevented table ID from being
sent on ack message (RIC-232).
