-.. 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.
-
-============================================================================================
-Man Page: rmr_init
-============================================================================================
-
-
+.. 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.
+
+============================================================================================
+Man Page: rmr_init
+============================================================================================
+
+
RMR LIBRARY FUNCTIONS
NAME
----
-rmr_init
+rmr_init
SYNOPSIS
--------
-
-::
-
- #include <rmr/rmr.h>
-
- void* rmr_init( char* proto_port, int norm_msg_size, int flags );
-
+
+::
+
+ #include <rmr/rmr.h>
+
+ void* rmr_init( char* proto_port, int norm_msg_size, int flags );
+
DESCRIPTION
-----------
-The ``rmr_init`` function prepares the environment for
-sending and receiving messages. It does so by establishing a
-worker thread (pthread) which subscribes to a route table
-generator which provides the necessary routing information
-for the RMR library to send messages.
-
-*Port* is used to listen for connection requests from other
-RMR based applications. The *norm_msg_size* parameter is used
-to allocate receive buffers and should be set to what the
-user application expects to be a size which will hold the
-vast majority of expected messages. When computing the size,
-the application should consider the usual payload size
-**and** the maximum trace data size that will be used. This
-value is also used as the default message size when
-allocating message buffers (when a zero size is given to
-rmr_alloc_msg(); see the rmr_alloc_msg() manual page).
-Messages arriving which are longer than the given normal size
-will cause RMR to allocate a new buffer which is large enough
-for the arriving message.
-
-Starting with version 3.8.0 RMR no longer places a maximum
-buffer size for received messages. The underlying system
-memory manager might impose such a limit and the attempt to
-allocate a buffer larger than that limit will likely result
-in an application abort. Other than the potential performance
-impact from extra memory allocation and release, there is no
-penality to the user programme for specifyning a normal
-buffer size which is usually smaller than received buffers.
-Similarly, the only penality to the application for over
-specifying the normal buffer size might be a larger memory
-footprint.
-
-*Flags* allows for selection of some RMR options at the time
-of initialisation. These are set by ORing ``RMRFL`` constants
-from the RMR header file. Currently the following flags are
-supported:
-
-
- .. list-table::
- :widths: auto
- :header-rows: 0
- :class: borderless
-
- * - **RMRFL_NONE**
- -
- No flags are set.
-
-
- * - **RMRFL_NOTHREAD**
- -
- The route table collector thread is not to be started. This
- should only be used by the route table generator application
- if it is based on RMR.
-
-
- * - **RMRFL_MTCALL**
- -
- Enable multi-threaded call support.
-
-
- * - **RMRFL_NOLOCK**
- -
- Some underlying transport providers (e.g. SI95) enable
- locking to be turned off if the user application is single
- threaded, or otherwise can guarantee that RMR functions will
- not be invoked concurrently from different threads. Turning
- off locking can help make message receipt more efficient. If
- this flag is set when the underlying transport does not
- support disabling locks, it will be ignored.
-
-
+The ``rmr_init`` function prepares the environment for
+sending and receiving messages. It does so by establishing a
+worker thread (pthread) which subscribes to a route table
+generator which provides the necessary routing information
+for the RMR library to send messages.
+
+*Port* is used to listen for connection requests from other
+RMR based applications. The *norm_msg_size* parameter is used
+to allocate receive buffers and should be set to what the
+user application expects to be a size which will hold the
+vast majority of expected messages. When computing the size,
+the application should consider the usual payload size
+**and** the maximum trace data size that will be used. This
+value is also used as the default message size when
+allocating message buffers (when a zero size is given to
+rmr_alloc_msg(); see the rmr_alloc_msg() manual page).
+Messages arriving which are longer than the given normal size
+will cause RMR to allocate a new buffer which is large enough
+for the arriving message.
+
+Starting with version 3.8.0 RMR no longer places a maximum
+buffer size for received messages. The underlying system
+memory manager might impose such a limit and the attempt to
+allocate a buffer larger than that limit will likely result
+in an application abort. Other than the potential performance
+impact from extra memory allocation and release, there is no
+penality to the user programme for specifyning a normal
+buffer size which is usually smaller than received buffers.
+Similarly, the only penality to the application for over
+specifying the normal buffer size might be a larger memory
+footprint.
+
+*Flags* allows for selection of some RMR options at the time
+of initialisation. These are set by ORing ``RMRFL`` constants
+from the RMR header file. Currently the following flags are
+supported:
+
+
+ .. list-table::
+ :widths: auto
+ :header-rows: 0
+ :class: borderless
+
+ * - **RMRFL_NONE**
+ -
+ No flags are set.
+
+
+ * - **RMRFL_NOTHREAD**
+ -
+ The route table collector thread is not to be started. This
+ should only be used by the route table generator application
+ if it is based on RMR.
+
+
+ * - **RMRFL_MTCALL**
+ -
+ Enable multi-threaded call support.
+
+
+ * - **RMRFL_NOLOCK**
+ -
+ Some underlying transport providers (e.g. SI95) enable
+ locking to be turned off if the user application is single
+ threaded, or otherwise can guarantee that RMR functions will
+ not be invoked concurrently from different threads. Turning
+ off locking can help make message receipt more efficient. If
+ this flag is set when the underlying transport does not
+ support disabling locks, it will be ignored.
+
+
Multi-threaded Calling
----------------------
-The support for an application to issue a *blocking call* by
-the ``rmr_call()`` function was limited such that only user
-applications which were operating in a single thread could
-safely use the function. Further, timeouts were message count
-based and not time unit based. Multi-threaded call support
-adds the ability for a user application with multiple threads
-to invoke a blocking call function with the guarantee that
-the correct response message is delivered to the thread. The
-additional support is implemented with the *rmr_mt_call()*
-and *rmr_mt_rcv()* function calls.
-
-Multi-threaded call support requires the user application to
-specifically enable it when RMR is initialised. This is
-necessary because a second, dedicated, receiver thread must
-be started, and requires all messages to be examined and
-queued by this thread. The additional overhead is minimal,
-queuing information is all in the RMR message header, but as
-an additional process is necessary the user application must
-"opt in" to this approach.
-
+The support for an application to issue a *blocking call* by
+the ``rmr_call()`` function was limited such that only user
+applications which were operating in a single thread could
+safely use the function. Further, timeouts were message count
+based and not time unit based. Multi-threaded call support
+adds the ability for a user application with multiple threads
+to invoke a blocking call function with the guarantee that
+the correct response message is delivered to the thread. The
+additional support is implemented with the *rmr_mt_call()*
+and *rmr_mt_rcv()* function calls.
+
+Multi-threaded call support requires the user application to
+specifically enable it when RMR is initialised. This is
+necessary because a second, dedicated, receiver thread must
+be started, and requires all messages to be examined and
+queued by this thread. The additional overhead is minimal,
+queuing information is all in the RMR message header, but as
+an additional process is necessary the user application must
+"opt in" to this approach.
+
ENVIRONMENT
-----------
-As a part of the initialisation process ``rmr_init`` reads
-environment variables to configure itself. The following
-variables are used if found.
-
-
- .. list-table::
- :widths: auto
- :header-rows: 0
- :class: borderless
-
- * - **RMR_ASYNC_CONN**
- -
- Allows the async connection mode to be turned off (by setting
- the value to 0). When set to 1, or missing from the
- environment, RMR will invoke the connection interface in the
- transport mechanism using the non-blocking (async) mode. This
- will likely result in many "soft failures" (retry) until the
- connection is established, but allows the application to
- continue unimpeded should the connection be slow to set up.
-
- * - **RMR_BIND_IF**
- -
- This provides the interface that RMR will bind listen ports
- to, allowing for a single interface to be used rather than
- listening across all interfaces. This should be the IP
- address assigned to the interface that RMR should listen on,
- and if not defined RMR will listen on all interfaces.
-
- * - **RMR_CTL_PORT**
- -
- This variable defines the port that RMR should open for
- communications with Route Manager, and other RMR control
- applications. If not defined, the port 4561 is assumed.
-
- Previously, the ``RMR_RTG_SVC`` (route table generator
- service port) was used to define this port. However, a future
- version of Route Manager will require RMR to connect and
- request tables, thus that variable is now used to supply the
- Route Manager's well-known address and port.
-
- To maintain backwards compatibility with the older Route
- Manager versions, the presence of this variable in the
- environment will shift RMR's behaviour with respect to the
- default value used when ``RMR_RTG_SVC`` is **not** defined.
-
- When ``RMR_CTL_PORT`` is **defined:** RMR assumes that Route
- Manager requires RMR to connect and request table updates is
- made, and the default well-known address for Route manager is
- used (routemgr:4561).
-
- When ``RMR_CTL_PORT`` is **undefined:** RMR assumes that
- Route Manager will connect and push table updates, thus the
- default listen port (4561) is used.
-
- To avoid any possible misinterpretation and/or incorrect
- assumptions on the part of RMR, it is recommended that both
- the ``RMR_CTL_PORT`` and ``RMR_RTG_SVC`` be defined. In the
- case where both variables are defined, RMR will behave
- exactly as is communicated with the variable's values.
-
- * - **RMR_RTG_SVC**
- -
- The value of this variable depends on the Route Manager in
- use.
-
- When the Route Manager is expecting to connect to an xAPP and
- push route tables, this variable must indicate the
- ``port`` which RMR should use to listen for these
- connections.
-
- When the Route Manager is expecting RMR to connect and
- request a table update during initialisation, the variable
- should be the ``host`` of the Route Manager process.
-
- The ``RMR_CTL_PORT`` variable (added with the support of
- sending table update requests to Route manager), controls the
- behaviour if this variable is not set. See the description of
- that variable for details.
-
- * - **RMR_HR_LOG**
- -
- By default RMR writes messages to standard error (incorrectly
- referred to as log messages) in human readable format. If
- this environment variable is set to 0, the format of standard
- error messages might be written in some format not easily
- read by humans. If missing, a value of 1 is assumed.
-
- * - **RMR_LOG_VLEVEL**
- -
- This is a numeric value which corresponds to the verbosity
- level used to limit messages written to standard error. The
- lower the number the less chatty RMR functions are during
- execution. The following is the current relationship between
- the value set on this variable and the messages written:
-
-
- .. list-table::
- :widths: auto
- :header-rows: 0
- :class: borderless
-
- * - **0**
- -
- Off; no messages of any sort are written.
-
- * - **1**
- -
- Only critical messages are written (default if this variable
- does not exist)
-
- * - **2**
- -
- Errors and all messages written with a lower value.
-
- * - **3**
- -
- Warnings and all messages written with a lower value.
-
- * - **4**
- -
- Informational and all messages written with a lower value.
-
- * - **5**
- -
- Debugging mode -- all messages written, however this requires
- RMR to have been compiled with debugging support enabled.
-
-
-
- * - **RMR_RTG_ISRAW**
- -
- **Deprecated.** Should be set to 1 if the route table
- generator is sending "plain" messages (not using RMR to send
- messages), 0 if the RTG is using RMR to send. The default is
- 1 as we don't expect the RTG to use RMR.
-
- This variable is only recognised when using the NNG transport
- library as it is not possible to support NNG "raw"
- communications with other transport libraries. It is also
- necessary to match the value of this variable with the
- capabilities of the Route Manager; at some point in the
- future RMR will assume that all Route Manager messages will
- arrive via an RMR connection and will ignore this variable.
-
- * - **RMR_SEED_RT**
- -
- This is used to supply a static route table which can be used
- for debugging, testing, or if no route table generator
- process is being used to supply the route table. If not
- defined, no static table is used and RMR will not report
- *ready* until a table is received. The static route table may
- contain both the route table (between newrt start and end
- records), and the MEID map (between meid_map start and end
- records).
-
- * - **RMR_SRC_ID**
- -
- This is either the name or IP address which is placed into
- outbound messages as the message source. This will used when
- an RMR based application uses the rmr_rts_msg() function to
- return a response to the sender. If not supplied RMR will use
- the hostname which in some container environments might not
- be routable.
-
- The value of this variable is also used for Route Manager
- messages which are sent via an RMR connection.
-
- * - **RMR_VCTL_FILE**
- -
- This supplies the name of a verbosity control file. The core
- RMR functions do not produce messages unless there is a
- critical failure. However, the route table collection thread,
- not a part of the main message processing component, can
- write additional messages to standard error. If this variable
- is set, RMR will extract the verbosity level for these
- messages (0 is silent) from the first line of the file.
- Changes to the file are detected and thus the level can be
- changed dynamically, however RMR will only suss out this
- variable during initialisation, so it is impossible to enable
- verbosity after startup.
-
- * - **RMR_WARNINGS**
- -
- If set to 1, RMR will write some warnings which are
- non-performance impacting. If the variable is not defined, or
- set to 0, RMR will not write these additional warnings.
-
-
+As a part of the initialisation process ``rmr_init`` reads
+environment variables to configure itself. The following
+variables are used if found.
+
+
+ .. list-table::
+ :widths: auto
+ :header-rows: 0
+ :class: borderless
+
+ * - **RMR_ASYNC_CONN**
+ -
+ Allows the async connection mode to be turned off (by setting
+ the value to 0). When set to 1, or missing from the
+ environment, RMR will invoke the connection interface in the
+ transport mechanism using the non-blocking (async) mode. This
+ will likely result in many "soft failures" (retry) until the
+ connection is established, but allows the application to
+ continue unimpeded should the connection be slow to set up.
+
+ * - **RMR_BIND_IF**
+ -
+ This provides the interface that RMR will bind listen ports
+ to, allowing for a single interface to be used rather than
+ listening across all interfaces. This should be the IP
+ address assigned to the interface that RMR should listen on,
+ and if not defined RMR will listen on all interfaces.
+
+ * - **RMR_CTL_PORT**
+ -
+ This variable defines the port that RMR should open for
+ communications with Route Manager, and other RMR control
+ applications. If not defined, the port 4561 is assumed.
+
+ Previously, the ``RMR_RTG_SVC`` (route table generator
+ service port) was used to define this port. However, a future
+ version of Route Manager will require RMR to connect and
+ request tables, thus that variable is now used to supply the
+ Route Manager's well-known address and port.
+
+ To maintain backwards compatibility with the older Route
+ Manager versions, the presence of this variable in the
+ environment will shift RMR's behaviour with respect to the
+ default value used when ``RMR_RTG_SVC`` is **not** defined.
+
+ When ``RMR_CTL_PORT`` is **defined:** RMR assumes that Route
+ Manager requires RMR to connect and request table updates is
+ made, and the default well-known address for Route manager is
+ used (routemgr:4561).
+
+ When ``RMR_CTL_PORT`` is **undefined:** RMR assumes that
+ Route Manager will connect and push table updates, thus the
+ default listen port (4561) is used.
+
+ To avoid any possible misinterpretation and/or incorrect
+ assumptions on the part of RMR, it is recommended that both
+ the ``RMR_CTL_PORT`` and ``RMR_RTG_SVC`` be defined. In the
+ case where both variables are defined, RMR will behave
+ exactly as is communicated with the variable's values.
+
+ * - **RMR_RTG_SVC**
+ -
+ The value of this variable depends on the Route Manager in
+ use.
+
+ When the Route Manager is expecting to connect to an xAPP and
+ push route tables, this variable must indicate the
+ ``port`` which RMR should use to listen for these
+ connections.
+
+ When the Route Manager is expecting RMR to connect and
+ request a table update during initialisation, the variable
+ should be the ``host`` of the Route Manager process.
+
+ The ``RMR_CTL_PORT`` variable (added with the support of
+ sending table update requests to Route manager), controls the
+ behaviour if this variable is not set. See the description of
+ that variable for details.
+
+ * - **RMR_HR_LOG**
+ -
+ By default RMR writes messages to standard error (incorrectly
+ referred to as log messages) in human readable format. If
+ this environment variable is set to 0, the format of standard
+ error messages might be written in some format not easily
+ read by humans. If missing, a value of 1 is assumed.
+
+ * - **RMR_LOG_VLEVEL**
+ -
+ This is a numeric value which corresponds to the verbosity
+ level used to limit messages written to standard error. The
+ lower the number the less chatty RMR functions are during
+ execution. The following is the current relationship between
+ the value set on this variable and the messages written:
+
+
+ .. list-table::
+ :widths: auto
+ :header-rows: 0
+ :class: borderless
+
+ * - **0**
+ -
+ Off; no messages of any sort are written.
+
+ * - **1**
+ -
+ Only critical messages are written (default if this variable
+ does not exist)
+
+ * - **2**
+ -
+ Errors and all messages written with a lower value.
+
+ * - **3**
+ -
+ Warnings and all messages written with a lower value.
+
+ * - **4**
+ -
+ Informational and all messages written with a lower value.
+
+ * - **5**
+ -
+ Debugging mode -- all messages written, however this requires
+ RMR to have been compiled with debugging support enabled.
+
+
+
+ * - **RMR_RTG_ISRAW**
+ -
+ **Deprecated.** Should be set to 1 if the route table
+ generator is sending "plain" messages (not using RMR to send
+ messages), 0 if the RTG is using RMR to send. The default is
+ 1 as we don't expect the RTG to use RMR.
+
+ This variable is only recognised when using the NNG transport
+ library as it is not possible to support NNG "raw"
+ communications with other transport libraries. It is also
+ necessary to match the value of this variable with the
+ capabilities of the Route Manager; at some point in the
+ future RMR will assume that all Route Manager messages will
+ arrive via an RMR connection and will ignore this variable.
+
+ * - **RMR_SEED_RT**
+ -
+ This is used to supply a static route table which can be used
+ for debugging, testing, or if no route table generator
+ process is being used to supply the route table. If not
+ defined, no static table is used and RMR will not report
+ *ready* until a table is received. The static route table may
+ contain both the route table (between newrt start and end
+ records), and the MEID map (between meid_map start and end
+ records).
+
+ * - **RMR_SRC_ID**
+ -
+ This is either the name or IP address which is placed into
+ outbound messages as the message source. This will used when
+ an RMR based application uses the rmr_rts_msg() function to
+ return a response to the sender. If not supplied RMR will use
+ the hostname which in some container environments might not
+ be routable.
+
+ The value of this variable is also used for Route Manager
+ messages which are sent via an RMR connection.
+
+ * - **RMR_VCTL_FILE**
+ -
+ This supplies the name of a verbosity control file. The core
+ RMR functions do not produce messages unless there is a
+ critical failure. However, the route table collection thread,
+ not a part of the main message processing component, can
+ write additional messages to standard error. If this variable
+ is set, RMR will extract the verbosity level for these
+ messages (0 is silent) from the first line of the file.
+ Changes to the file are detected and thus the level can be
+ changed dynamically, however RMR will only suss out this
+ variable during initialisation, so it is impossible to enable
+ verbosity after startup.
+
+ * - **RMR_WARNINGS**
+ -
+ If set to 1, RMR will write some warnings which are
+ non-performance impacting. If the variable is not defined, or
+ set to 0, RMR will not write these additional warnings.
+
+
RETURN VALUE
------------
-The ``rmr_init`` function returns a void pointer (a context
-if you will) that is passed as the first parameter to nearly
-all other RMR functions. If ``rmr_init`` is unable to
-properly initialise the environment, NULL is returned and
-errno is set to an appropriate value.
+The ``rmr_init`` function returns a void pointer (a context
+if you will) that is passed as the first parameter to nearly
+all other RMR functions. If ``rmr_init`` is unable to
+properly initialise the environment, NULL is returned and
+errno is set to an appropriate value.
ERRORS
------
-The following error values are specifically set by this RMR
-function. In some cases the error message of a system call is
-propagated up, and thus this list might be incomplete.
-
- .. list-table::
- :widths: auto
- :header-rows: 0
- :class: borderless
-
- * - **ENOMEM**
- -
- Unable to allocate memory.
-
-
+The following error values are specifically set by this RMR
+function. In some cases the error message of a system call is
+propagated up, and thus this list might be incomplete.
+
+ .. list-table::
+ :widths: auto
+ :header-rows: 0
+ :class: borderless
+
+ * - **ENOMEM**
+ -
+ Unable to allocate memory.
+
+
EXAMPLE
-------
-
-::
-
- void* uh;
- rmr_mbuf* buf = NULL;
-
- uh = rmr_init( "43086", 4096, 0 );
- buf = rmr_rcv_msg( uh, buf );
-
+
+::
+
+ void* uh;
+ rmr_mbuf* buf = NULL;
+
+ uh = rmr_init( "43086", 4096, 0 );
+ buf = rmr_rcv_msg( uh, buf );
+
SEE ALSO
--------
-rmr_alloc_msg(3), rmr_call(3), rmr_free_msg(3),
-rmr_get_rcvfd(3), rmr_mt_call(3), rmr_mt_rcv(3),
-rmr_payload_size(3), rmr_send_msg(3), rmr_rcv_msg(3),
-rmr_rcv_specific(3), rmr_rts_msg(3), rmr_ready(3),
-rmr_fib(3), rmr_has_str(3), rmr_tokenise(3), rmr_mk_ring(3),
-rmr_ring_free(3)
+rmr_alloc_msg(3), rmr_call(3), rmr_free_msg(3),
+rmr_get_rcvfd(3), rmr_mt_call(3), rmr_mt_rcv(3),
+rmr_payload_size(3), rmr_send_msg(3), rmr_rcv_msg(3),
+rmr_rcv_specific(3), rmr_rts_msg(3), rmr_ready(3),
+rmr_fib(3), rmr_has_str(3), rmr_tokenise(3), rmr_mk_ring(3),
+rmr_ring_free(3)