Add route table guide and formatting tweaks
[ric-plt/lib/rmr.git] / docs / rmr_init.3.rst
index 9cce558..ef830f2 100644 (file)
@@ -1,44 +1,47 @@
 .. 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 LIBRARY FUNCTIONS
+=====================
+
+
+
+NAME
+----
+
 rmr_init 
-SYNOPSIS 
--------------------------------------------------------------------------------------------- 
+
+
+SYNOPSIS
+--------
+
  
 :: 
-  
  #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. 
+
+
+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 
@@ -67,46 +70,51 @@ 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 
+of initialisation. These are set by ORing ``RMRFL`` constants 
 from the RMR header file. Currently the following flags are 
 supported: 
  
  
-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 
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
+   .. 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 
+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 
@@ -125,243 +133,247 @@ 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
+-----------
+
+As a part of the initialisation process ``rmr_init`` reads 
 environment variables to configure itself. The following 
 variables are used if found. 
  
  
-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: 
-   
-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. 
-ERRORS 
--------------------------------------------------------------------------------------------- 
+   .. 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. 
+
+
+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. 
  
-ENOMEM 
-   
-  Unable to allocate memory. 
-EXAMPLE 
--------------------------------------------------------------------------------------------- 
+   .. 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 );
  
-SEE ALSO 
--------------------------------------------------------------------------------------------- 
+
+
+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),