RTIReference Manual
RTIReference Manual
Reference Manual
MÄK RTI
Reference Manual
Copyright © 2012 VT MÄK
All rights Reserved. Printed in the United States.
Under copyright laws, no part of this document may be copied or reproduced in
any form without prior written consent of VT MÄK.
VR-Exchange™ and VR-Vantage™ are trademarks of VT MÄK. MÄK Technolo-
gies®, VR-Forces®, RTIspy®, B-HAVE®, and VR-Link® are registered
trademarks of VT MÄK.
The ZLIB library is copyright 1995-2004 Jean-loup Gailly and Mark Adler.
All other trademarks are owned by their respective companies.
For additional third party license information, please see “Third Party Licenses,” on
page xvii.
VT MÄK
68 Moulton St.
Cambridge, MA 02138 USA
Voice: 617-876-8085
Fax: 617-876-9208
[email protected]
www.mak.com
Revision RTI-4.1.1-1-120525
Contents
Preface
How the Manual is Organized ..................................................................... xi
Documentation .......................................................................................... xii
MÄK Products .......................................................................................... xiii
How to Contact Us .................................................................................... xv
Document Conventions ............................................................................ xvi
Mouse Button Naming Conventions ................................................. xvii
Third Party Licenses ................................................................................. xvii
Boost License ..................................................................................... xvii
libXML and libICONV .................................................................... xviii
pThreads Library .............................................................................. xviii
EHS, PCRE, and PME ..................................................................... xviii
Freefont OpenType Font Set ............................................................ xviii
iv VT MÄK
Contents
vi VT MÄK
Contents
viii VT MÄK
Contents
Index
x VT MÄK
Preface
This manual is for developers of HLA simulation applications and for persons who
need to install or use the MÄK RTI.
This manual assumes that you are familiar with the command-line and graphical
windowing environments for your operating system.
For information about changes to the MÄK RTI since this manual went to press, please
see MÄK RTI Release Notes.
Chapter 8, Managing Federates explains how to use the RTI Assistant and RTIspy GUI
to manage federates.
Chapter 9, Monitoring the Network, describes how to use the RTI Assistant and RTIspy
GUI to monitor the performance of federates. It also describes how to run latency tests.
Chapter 10, Managing Network Traffic describes parameters used to configure the RTI’s
interaction with the network, except for those used to configure message forwarding.
Chapter 11, Configuring Message Forwarding, explains basic message forwarding strate-
gies, the different types of distributed forwarding topologies, and how to configure
them.
Chapter 12, Configuring HLA Services, explains how to configure MOM and time
management services and how to configure internal messages.
Chapter 13, Using Data Distribution Management, provides conceptual background for
the MÄK RTI’s DDM implementations.
Chapter 14, Running the MÄK RTI Using Shared Memory, explains how to configure
use of shared memory for co-located federates.
Chapter 15, Using FOM Modules, explains the MÄK RTI’s implementation of FOM
modules.
Chapter 16, Update Rate Reduction, explains the MÄK RTI’s implementation of update
rate reduction.
Chapter 17, The RTIspy Plug-in API, explains how to use the RTIspy API to create
plug-ins for the MÄK RTI.
Appendix A, RID File Parameters Reference describes the format of the RID file and each
RID file parameter.
Appendix B, Example Federates, describes the sample federates provided with the MÄK
RTI.
Documentation
The MÄK RTI documentation set is as follows:
MÄK RTI Reference Manual is a brief introduction to HLA and the MÄK RTI and
explains how to configure the MÄK RTI startup environment and run a federate.
MÄK RTI Reference Manual provides detailed information about configuring the
MÄK RTI, designing network topologies for HLA federations, and how to use the
RTIspy API.
MÄK RTI First Experience Guide shows you how easy it is to run HLA federates
with the MÄK RTI.
MÄK RTI Release Notes system information and updates for the current release.
xii VT MÄK
Preface — MÄK Products
MÄK RTIspy API class documentation and MÄK RTI API class documentation in
HTML format. You can access the class documentation from the Start menu in
Windows or by opening ./classdoc/index.html.
Online help. The RTI Assistant windows and the RTIspy web GUI have online
help.
MÄK Products Interoperability Guide explains how MÄK products work together
and provides troubleshooting information.
MÄK Products
The MÄK RTI is a member of the VT MÄK line of software products designed to
streamline the process of developing and using networked simulated environments.
The VT MÄK product line includes the following:
VR-Link® Network Toolkit. VR-Link is an object-oriented library of C++ func-
tions and definitions that implement the High Level Architecture (HLA) and the
Distributed Interactive Simulation (DIS) protocol. VR-Link has built-in support
for the RPR FOM and allows you to map to other FOMs. This library minimizes
the time and effort required to build and maintain new HLA or DIS-compliant
applications, and to integrate such compliance into existing applications.
VR-Link includes a set of sample debugging applications and their source code.
The source code serves as an example of how to use the VR-Link Toolkit to write
applications. The executables provide valuable debugging services such as gener-
ating a predictable stream of HLA or DIS messages, and displaying the contents of
messages transmitted on the network.
MÄK RTI. An RTI (Run-Time Infrastructure) is required to run applications using
the High Level Architecture (HLA). The MÄK RTI is optimized for high perfor-
mance. It has an API, RTIspy®, that allows you to extend the RTI using plug-in
modules. It also has a graphical user interface (the RTI Assistant) that helps users
with configuration tasks and managing federates and federations.
VR-Forces®. VR-Forces is a computer generated forces application and toolkit. It
provides an application with a GUI, that gives you a 2D and 3D views of a simu-
lated environment.
You can create and view local entities, aggregate them into hierarchical units, assign
tasks, set state parameters, and create plans that have tasks, set statements, and
conditional statements. VR-Forces also functions as a plan view display for viewing
remote entities taking part in an exercise. Using the toolkit, you can extend the
VR-Forces application or create your own application for use with another user
interface.
xiv VT MÄK
Preface — How to Contact Us
How to Contact Us
For RTI technical support, information about upgrades, and information about other
MÄK products, you can contact us in the following ways:
Telephone
Call or fax us at: Voice: 617-876-8085 (extension 3 for support)
Fax: 617-876-9208
E-mail
Sales and upgrade information: [email protected]
Technical support: [email protected]
VR-Vantage support: [email protected]
Internet
MÄK web site home page: www.mak.com
Post
Send postal correspondence to: VT MÄK
68 Moulton St.
Cambridge, MA, USA 02138
When requesting support, please tell us the product you are using, the version, and the
platform on which you are running.
Document Conventions
This manual uses the following typographic conventions:
Monospaced Indicates commands or values you enter.
Monospaced Italic Indicates command variables that you replace with appropriate
values.
i
Indicates supplemental or clarifying information.
Directory names are preceded with dot and slash characters that show their position
with respect to the RTI home directory. For example, the directory makRtix.x/doc
appears in the text as ./doc.
xvi VT MÄK
Preface — Third Party Licenses
Boost License
VR-Link, and all MÄK software that uses VR-Link uses some code which is distributed
under the Boost License. All header files that contain Boost code are properly attrib-
uted. The boost web site is: www.boost.org.
Boost Software License - Version 1.0 - August 17th, 2003
Permission is hereby granted, free of charge, to any person or organization obtaining a
copy of the software and accompanying documentation covered by this license (the
“Software”) to use, reproduce, display, distribute, execute, and transmit the Software,
and to prepare derivative works of the Software, and to permit third-parties to whom
the Software is furnished to do so, all subject to the following:
The copyright notices in the Software and this entire statement, including the above
license grant, this restriction and the following disclaimer, must be included in all
copies of the Software, in whole or in part, and all derivative works of the Software,
unless such copies or derivative works are solely in the form of machine-executable
object code generated by a source language processor.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE
LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEAL-
INGS IN THE SOFTWARE.
pThreads Library
VR-Exchange links with the pThreads win32 library. The library is distributed under
the GNU Lesser General Public License (LGPL). MÄK has made no modification to
this library. For information about the pThreads win32 library please see: http://source-
ware.org/pthreads-win32/
xviii VT MÄK
1
i In this manual and MÄK RTI Users Guide, when we use the term “HLA 1516” or
1516, we mean the SISO DLC HLA API 1516 specification. When we use the term
“HLA Evolved”, we mean IEEE 1516-2010. When we discuss a subject that applies
equally to HLA 1516 and HLA Evolved, we refer generically to the “HLA 1516 spec-
ifications”.
1-2 VT MÄK
Introduction to the MÄK RTI — Compatibility with Other RTI Implementations
i Since the FED file and FDD file perform the same function, and since for
the MÄK RTI they are essentially interchangeable, in this manual, unless
otherwise noted, references to the FED file should be considered as references
to the FED file and the FDD file.
Before you run an HLA application, you must make sure that your federates (and the
rtiexec if you are running it) can find the FED file for the federation you are running.
For details, please see “Specifying the FED File,” on page 7-3.
1-4 VT MÄK
Introduction to the MÄK RTI — MÄK RTI Applications
1-6 VT MÄK
Introduction to the MÄK RTI — Support for the HLA 1516 Specification
Although the Dynamic Link Compatible 1516 API more closely resembles the 1.3 API
than the original 1516 API does, some significant differences remain. For example, an
RTI namespace is used instead of a top-level RTI class, templates are still used to repre-
sent handles (to allow different implementations of handles), and the API uses Standard
Template Library (STL) maps to represent sets of attribute handle/value pairs.
By implementing against the SISO 1516 API, MÄK promotes link compatibility with
other RTI vendors, which is not possible with the original IEEE 1516 API. The IEEE
1516 API only allowed compile-time compatibility (especially true with the use of
templates). However, link compatibility is important because it allows federates built
using one RTI to execute with the local RTI component (LRC) library and central RTI
component (CRC) executable of a different RTI without having to recompile the
federate.
i While the 1516 API uses the std:wstring to exchange string information,
internally, the MÄK RTI 1516 operates on narrow strings only (that is,
representable by std::string). Therefore, the contents of any wide string
passed through the RTI API must be convertible to a narrow string.
1-8 VT MÄK
2
2-2 VT MÄK
MÄK RTI Concepts — The MÄK RTI Process Model
2-4 VT MÄK
MÄK RTI Concepts — The MÄK RTI Process Model
2-6 VT MÄK
MÄK RTI Concepts — Network Topologies for RTI Messages
2-8 VT MÄK
3
Compiling and Linking with the MÄK RTI
This chapter provides details about how to compile and link applications with the
MÄK RTI.
Library Names .............................................................................................. 3-2
Compiling and Linking with the MÄK RTI 1.3 ........................................... 3-2
Compiling and Linking on Linux........................................................... 3-2
Compiling and Linking on Windows ..................................................... 3-3
Compiling and Linking with the MÄK RTI 1516 ........................................ 3-4
Compiling and Linking on Linux........................................................... 3-4
Compiling and Linking on Windows ..................................................... 3-4
Compiling and Linking with HLA Evolved .................................................. 3-5
Federation Time............................................................................................ 3-5
The HLA 1.3 Time Implementation ...................................................... 3-6
The RTI 1516 Time Implementation..................................................... 3-7
The HLA Evolved Time Implementation ............................................... 3-8
Java Bindings for the MÄK RTI.................................................................... 3-8
Windows UNIX
HLA 1.3 libRTI-NG.lib and .dll libRTI-NG.so
libfedtime.lib and .dll libfedtime.so
HLA 1516 librti1516.lib and .dll librti1516.so
libfedtime1516.lib and .dll libfedtime1516.so
HLA Evolved librti1516e.lib and .dll librti1516e.so
libfedtime1516e.lib and .dll libfedtime1516e.so
3-2 VT MÄK
Compiling and Linking with the MÄK RTI — Compiling and Linking with the MÄK RTI 1.3
3-4 VT MÄK
Compiling and Linking with the MÄK RTI — Compiling and Linking with HLA Evolved
To link to the HLA 1516 libraries, on the Linker section of the Project Property Pages dialog
box:
1. In the General section, add C:\MAK\makRti4.1.1\lib to the Additional Library
Directories property.
2. In the Input section, on the Additional Dependencies property, for release builds,
add the following:
librti1516.lib libfedtime1516.lib ws2_32.lib netapi32.lib
comctl32.lib
For debug builds, add the following:
librti1516d.lib libfedtime1516d.lib ws2_32.lib
netapi32.lib comctl32.lib
3. In the Input category, on the Ignore Specific Library property, for release builds,
add msvcrtd.lib. For debug builds, add msvcrt.lib.
3-6 VT MÄK
Compiling and Linking with the MÄK RTI — Federation Time
When a federate uses the time management services, it should use one of the concrete
logical time derivations directly. The derivations provide constructors and methods that
allow the federate to work with the logical time abstraction using the native C++ types
(double and unsigned integer).
The class declarations are contained in files that have the same name as the class and
end in .h. They are in ./include/HLA1516E/RTI/time.
i The MÄK RTI does not include Java bindings for HLA Evolved.
3-8 VT MÄK
4
i The RID file is not required for basic RTI use. Use it if you want to
change the default parameter values and if you want to use plug-ins.
The connection configurations for the RTI Assistant override the RID
file parameters that specify RTI connection values unless you force the
RTI to use the RID file parameters. For details, please see Section 8.3,
“Managing Connection Configurations”, in MÄK RTI Users Guide.
i On Windows, you can use the RTI Chooser to specify the RID file to use
with a particular version of the RTI. The RTI Chooser takes care of setting
the environment so that the correct RID file is used. For details about using
the RTI Chooser, please see Section 8.2, “Configuring the MÄK RTI Version
and RID File to Use”, in MÄK RTI Users Guide.
If the RTI_RID_FILE environment variable is not defined, the search order is:
1. Try to open rid.mtl in the directory from which you run the application (that is, the
working directory, which is not necessarily the directory in which the executable is
located).
2. Try to open the file specified by RTI_CONFIG/rid.mtl.
3. If a RID file is not found, print a warning and open using default values.
4-2 VT MÄK
The RID File — The RID File
where:
RTI_RID_FILE is optional. If included, the RTI_RID_FILE must be the first
token in the string. The RID text following the token up to the '#' delimiter char-
acter is taken as the RID file name. If the # is omitted, then the remainder of the
string text is used as the file name.
lisp_expression may contain zero or more lisp expressions.
4-4 VT MÄK
The RID File — Displaying Configuration Settings in the RTI Federations View
4-6 VT MÄK
The RID File — Displaying RTI Configuration Parameters in the RTIspy
4-8 VT MÄK
The RID File — The RID File Consistency Checker
4-10 VT MÄK
The RID File — The RID File Consistency Checker
! The following RID parameters are evaluated before the RID consistency
check is performed. Therefore, they cannot have their consistency enforced
by the consistency checker. It is your responsibility to ensure that, if required,
they are the same in all federates.
RTI_enableBigMessage
RTI_tcpPort
RTI_udpPort
RTI_enablePacketBundling
RTI_enableTcpCompression
RTI_enableUdpCompression
RTI_internalMsgReliableWhenUsingRtiexec
RTI_mcastDiscoveryEnabled
RTI_ridConsistencyChecking
RTI_tcpForwarderAddr
RTI_useRtiExec.
Most of these parameters are federation-wide settings and must be the same
in all RID files. However, a few such as RTI_tcpForwarderAddr may vary if you
use distributed forwarders.
4-12 VT MÄK
5
RTI Applications
This chapter describes the rtiexec and applications included with the MÄK RTI that
help customers better understand or use the HLA environment.
The rtiexec.................................................................................................... 5-2
Configuring the rtiexec........................................................................... 5-3
Configuring Diagnostic Messages ........................................................... 5-3
The RTI Assistant ......................................................................................... 5-4
Specifying the RTI Assistant’s Log Update Interval................................. 5-5
Shutting Down the RTI Assistant........................................................... 5-5
Configuring the RTI Assistant’s View Log Prompt ................................. 5-6
Configuring the Display of RTI Assistant Messages................................ 5-6
Specifying the Warning Tick Interval ..................................................... 5-7
Common Operations in RTI Assistant Log Windows ............................ 5-7
Specifying the RTI Assistant’s Ports ........................................................ 5-8
Specifying the RTI Assistant’s Multicast Address..................................... 5-9
Disabling the RTI Assistant .................................................................... 5-9
The RTI Forwarder Application.................................................................... 5-9
Running the RTI Forwarder ................................................................. 5-10
The RTI Command Line Tool.................................................................... 5-11
Listing Federation Executions and Federates......................................... 5-13
Deleting Federates ................................................................................ 5-13
i If you use the rtiexec, internal message reliable mode is recommended, rather
than best effort.
5-2 VT MÄK
RTI Applications — The rtiexec
i The federate-specific features of the RTI Assistant, such as viewing log files
and resigning federates, are only available for federates that are running on
the local machine.
You can clear the default license and connection parameters, and you can set an envi-
ronment variable to disable the RTI Assistant.
For more general information about the RTI Assistant, please see Chapter 6, The RTI
Assistant, in MÄK RTI Users Guide.
5-4 VT MÄK
RTI Applications — The RTI Assistant
5-6 VT MÄK
RTI Applications — The RTI Assistant
Clear
Save
Pause/Resume
i The Assistant Log is primarily for the use of MÄK support engineers when
they provide customer support.
5-8 VT MÄK
RTI Applications — The RTI Forwarder Application
Option Description
(-- | --ignore_rest) Ignore all command-line options that follow this one.
(-A | --destAddrString) Specifies the multicast group address to use if reliable
address transport is disabled. Equivalent to the RTI_destAddrString
parameter.
(-d | --doNotUseRoutes- Specifies that the forwarder not use a routes file.
File)
(-D | --distributedForward- Specifies the port that RTI Forwarders use to commu-
erPort) port nicate with each other.
(-F | --forwarderToCon- Specifies the address of an additional forwarder that
nectTo) address this forwarder should try to connect to instead of
using the routes file.
(-h | --help) Displays a list of command-line options.
(-l | --setLogFileName) Enables logging to a file with the specified name.
filename
(-M | --manual) Specifies that the RTI Forwarder use the connection
configuration in the RID file or supplied on the
command line rather than the configuration stored by
the RTI Assistant. It is equivalent to setting
RTI_configureConnectionWithRid to 1. Since command-line
options override the RID file, using this option enables
you to specify the connection configuration from the
command line.
(-n | --notifyLevel) level Sets the diagnostic output level.
(-N | --networkInter- Specifies the IP address of the network card that you
faceAddr) address want this forwarder to use.
5-10 VT MÄK
RTI Applications — The RTI Command Line Tool
Option Description
(-P | --setUdpPort) port Specifies the port to listen to. Equivalent to the
RTI_udpPort parameter.
(-R | --setRidFileName) Specifies the RID file to use. -R overrides the
RID_file RTI_RID_FILE environment variable.
(-r | --routesFileName) Specifies the forwarder route file to use. Overrides
routeFileName the RTI_forwarderRoutesFile parameter in the RID file.
(-T | --setTcpPort) port Specifies the port to be used to connect to the RTI
Forwarderusing TCP. Equivalent to the RTI_tcpPort
parameter.
(-v | --version) Display version information and exit.
Table 5-2 lists the commands that you can use with RTI command line tool.
Table 5-2: rtiexec runtime commands
The following example uses the list command to generate information about compo-
nents. Then it deletes a federate.
C:\source\makRti\bin>rti list rtiexec
Information from local rtiexec Connections
1) duboisp370 (192.168.3.226), 4226, 229.7.7.7, fully compliant
[192.168.3.226]
4) MAKsimple
2) rtisimple1516 (duboisp370)
C:\source\makRti\bin>rti delete 1 4 2
Delete federate Component Command sent to rtiexec
This command tells the rtiexec with LRC handle 1, to delete the federate with federate
handle 2, in the federation with federation handle 4.
5-12 VT MÄK
RTI Applications — The RTI Command Line Tool
5-14 VT MÄK
6
Table 6-1 lists the parameters that enable and configure the RTIspy.
Table 6-1: RTIspy configuration parameters (Sheet 1 of 3)
Parameter Description
RTI_enableRtiexecWebservice Enables (1) or disables (0) RTIspy for the rtiexec.
Default: 0.
RTI_enableLrcWebservice Enables (1) or disables (0) the LRC RTIspy services.
This is set per LRC.
RTI_pluginDirectory Specifies the RTI plug-in directory. The RTIspy direc-
tory structure is fixed relative to the plug-in directory
specified by the RTI_pluginDirectory parameter. The www
sub-directory must be present within the chosen plug-
in directory for the RTIspy to function. If you change
the RTI plug-in directory, you must copy the entire
www directory from the installed plugins directory to
the new location. Default: “../plugins”.
6-2 VT MÄK
Setting Up the RTIspy — Installing and Configuring the RTIspy
Parameter Description
RTI_enableLrcWebserviceEventLog Enables (1) or disables (0) the LRC Event Log in the
RTIspy. The event log can be very useful in tracking
down initial startup problems with misbehaving feder-
ates. However, over time, as the number of logged
events grows, the event log may consume significant
memory at the federate. The event log grows even
when a federate is not actively monitored. Therefore,
the log is disabled by default. Normally, it should only
be enabled at specific federates for debugging and
during federation testing. Default: 0.
RTI_webserviceHttpPort Specifies the port for the HTTP interface to the
RTIspy. You must point your browser to the specific
machine running the HTTP server and this specific
port (using the syntax:
http://serverAddress:RTI_webserviceHttpPort/).
Default: 8008.
RTI_webserviceRtiPort Specifies the port which each RTI component will use
to connect to the RTIspy Web service HTTP server.
The RTI components must be allowed to open a TCP
connection to their HTTP server to enable monitoring
via the RTIspy. Unlike the RTI_webserviceHttpPort, you do
not need to be aware of this port in order to view the
RTIspy, since it is not part of the URL passed to the
browser.
Default: 4002.
RTI_webserviceAddr Allows you to instruct each RTI component to attach
to a specific HTTP server. By default, an HTTP server
runs at each host and federates running on that host
should connect to that HTTP server. In general, the
default provides the expected behavior and this
parameter rarely needs to be changed. (For details,
please see “Choosing Between Local and Centralized
HTTP Servers,” on page 6-6.)
Default: "127.0.0.1".
RTI_webserviceEnableServerAutoStart Instructs the RTI components to try to start an HTTP
server if none is running when they are started. This is
usually the desired behavior, but when using a central-
ized HTTP server it is unnecessary. (For details, please
see “Choosing Between Local and Centralized HTTP
Servers,” on page 6-6.) Default: 1.
Parameter Description
RTI_webserviceEnableForwarding Enables (1) or disables (0) connection proxying
through the rtiexec web services. The only reason to
disable this parameter is to explicitly disallow proxy
connections. (For details, please see “Connecting to
the RTIspy Web Servers,” on page 6-8.) Default: 1.
RTI_webserviceNotifyLevel Specifies the debug output level at the HTTP server.
By default, the HTTP server is mostly silent. Increasing
the notify level to 2 allows you to monitor connections
to the HTTP server for debugging purposes. Normally,
this parameter should only be raised above 2 when
instructed to do so by VT MÄK technical support.
(Due to the nature of the HTTP server, the output is
far less useful to end users than the output from the
LRC or rtiexec.) Default: 1.
6-4 VT MÄK
Setting Up the RTIspy — Running the RTIspy Web Servers
If you select port 80 for the RTI_webserviceHttpPort, you can omit the :port portion of
the URL when accessing the RTIspy. However, many hosts already have a web server
running on port 80, so it is recommended that you select a different port for the
RTIspy web service.
6-6 VT MÄK
Setting Up the RTIspy — Running the RTIspy Web Servers
i The web service requires access to both the RID file and the plugins directory
from the MÄK RTI installation, so it is recommended that the MÄK RTI be
installed on any machine that will be used to host the web service.
Option Description
(-D | --runDaemonized) Run ShmExec in the background. (Linux only)
(-h | --help) Displays a syntax help screen.
(-K | --AutoExit) Run the web server and automatically exit after
the last subscriber disconnects.
(-l | --enableLogging) Enable RTIspy Web Server logging to
makWebSpy.log.
(-n | --notifyLevel) level Sets the verbosity of the web server's debug
output. It is recommended that this parameter
be set to 3 or less. Set it to 0 to run the web
server silently. The default value is 1. It over-
rides the parameter configured in the RID file.
level can be:
0 — Fatal
1 — Warn (default)
2 — Notify
3 — Verbose
4 — Debug.
(-t | --testPage) Show a test demonstration.
(-v | --version) Displays version information and exits.
(-- | --ignore_rest) Ignore the command-line options that follow this
option.
i Proxy connections are only available through the web-based rtiexec. The
rtiexec must be brought up first, and then a proxy connection to an LRC
page can be made.
6-8 VT MÄK
Setting Up the RTIspy — Connecting to the RTIspy Web Servers
6.3.1. Bookmarking
When you connect directly to an RTI component, you can create a browser bookmark
to return quickly to the same component. To create a bookmark, format the URL as
described in “URL Structure,” on page 6-5. However, it is important to note that the
URL for a specific LRC is dynamic, since the ID field is based on the RTI's assigned
connection ID. If the target federation tends to start up in a predictable order, then
connection IDs are likely to be assigned in a predictable manner, but this is certainly
not guaranteed. The only guaranteed URL is the rtiexec's:
http://localhost:8008/?id=rtiexec.
6-10 VT MÄK
7
Managing Federations
This chapter explains how to view information about and configure federation execu-
tions.
Introduction ................................................................................................. 7-3
Specifying the FED File ................................................................................ 7-3
Search Order for FED Files .................................................................... 7-4
Distributing the FED File ...................................................................... 7-4
Using Lightweight Mode .............................................................................. 7-5
Limitations of Lightweight Mode ........................................................... 7-6
Viewing Network Components..................................................................... 7-7
The RTIspy Network Map ..................................................................... 7-7
The RTI Network Component View.................................................... 7-10
Viewing the MÄK RTI Components List............................................. 7-11
Viewing Information about a Federation..................................................... 7-12
Viewing Federation Information in the RTIspy .................................... 7-13
Viewing Time Management State Information ........................................... 7-14
Viewing Time Management State Information in the RTIspy .............. 7-16
Viewing Synchronization Points.................................................................. 7-17
Viewing Federation-Wide Notification Messages ........................................ 7-18
Configuring Fault Tolerance Strategies ........................................................ 7-19
Responding to Abnormal Termination ................................................. 7-19
Reconnecting to the RTI Forwarder ..................................................... 7-21
Specifying the Response Interval........................................................... 7-21
Processing Discovery of Unknown Objects........................................... 7-22
Choosing Silent Failure Instead of Exceptions ...................................... 7-22
Configuring Save/Restore............................................................................ 7-23
7-2 VT MÄK
Managing Federations — Introduction
7.1. Introduction
The MÄK RTI has the following graphical user interfaces (GUIs) for viewing informa-
tion about federations and federates:
RTI Federations View
RTI Network Component View
RTIspy web-based GUI.
This chapter covers high-level federation management issues and explains how to use
the RTI Assistant and RTIspy GUIs to help manage federations.
In lightweight mode, the name of the FED file is not communicated among federates.
If you want the federates to use a FED file other than the default (the federation execu-
tion name with .fed appended to the end), then either use the RID parameter
RTI_defaultFedFile to specify the name of the FED file to read, or at each federate use the
createFederationExecution service prior to the joinFederationService to create a
mapping between the federation name and the FED file name.
The primary reasons to enable FED file distribution are to ensure that the FOM used
by each federate is consistent while you are developing a federation or to support FOM
modules. During federation development, the FOM may be in a state of flux. If
different federates try to join the federation using different revisions of the FOM, unex-
pected and difficult-to-diagnose problems may arise.
However, distributing the FED file is a relatively expensive network operation, which
may slow the join process and, in the case of late joining federates, may even impede the
performance of a running federation. Therefore, unless you are using FOM modules,
we recommend that you only use FED file distribution in the federation development
phase, and use only statically distributed FED files when the simulation is deployed. (If
you use the FOM module feature, you must distribute the FED file. For details, please
see “Using FOM Modules,” on page 15-2.)
! Any federate that attempts to create a federation must have a local copy of the
FED file, because the createFederationExecution API routine requires a valid
FED file.
7-4 VT MÄK
Managing Federations — Using Lightweight Mode
i The federation management features of the RTI Assistant and the RTIspy
web-based GUI are not available in lightweight mode.
7-6 VT MÄK
Managing Federations — Viewing Network Components
The network map displays an icon for each forwarder, each federate, and the rtiexec
node. The links between components represent the reliable connections (TCP) between
them. (Components can communicate through other connectionless methods that are
not represented in the network map (UDP).)
The upper left frame displays a tree list of components or nodes. The lower left frame
displays information for a selected node.
The tree list is rooted with a notional RTI network node. Nested under the RTI
network are the RTI Forwarders. Nested under each forwarder are the federates
connected to that forwarder. The rtiexec is nested under one of the forwarders. You can
expand and collapse the tree.
Selecting a node in the map highlights the tree list node and all of its connections in the
network map. Selecting a node in the tree list causes it to be selected in the map and
displays the node information (#1 in Figure 7-2). Selecting a node in the map selects
the corresponding node in the tree list.
7-8 VT MÄK
Managing Federations — Viewing Network Components
You can also display node information in a popup window by hovering the mouse over
the node in the map (Figure 7-3).
i To view the network map, you must run the rtiexec and must run internal
message reliable.
7-10 VT MÄK
Managing Federations — Viewing Network Components
7-12 VT MÄK
Managing Federations — Viewing Information about a Federation
i View a node by proxy when that federate is not directly reachable from the
viewing location. For details, please see “Running the RTIspy Web Servers,”
on page 6-4.
! In the RTI Federations View, you can configure which time management
state information is displayed. In the RTIspy all information is displayed.
Displaying time management information adds some overhead to RTI
performance.
i You can also display or hide columns individually by selecting them on the
Federate Columns sub-menu.
7-14 VT MÄK
Managing Federations — Viewing Time Management State Information
7-16 VT MÄK
Managing Federations — Viewing Synchronization Points
7-18 VT MÄK
Managing Federations — Configuring Fault Tolerance Strategies
For RTI 1.3 and 1516, the removal of a terminated federate from a federation is treated
approximately as if the federate resigned either with an action of
RTI::RELEASE_ATTRIBUTES or
RTI::DELETE_OBJECTS_AND_RELEASE_ATTRIBUTES. For HLA Evolved, a
federate that is abnormally terminated is resigned with the action specfied by the auto-
maticResignAction in the FDD file.
To detect broken TCP connections, an LRC must establish a TCP connection to the
rtiexec’s RTI Forwarder (RTI_tcpForwarderAddr). When the rtiexec detects that this TCP
connection has been lost, the federate is forcibly removed from its federation, if it is
joined.
The heartbeat mechanism has each LRC send a heartbeat message to its federation
executive once it has joined. If the federation executive does not receive a heartbeat
message within a specified time-out interval, the federate is forcibly removed from the
federation. To configure the heartbeat interval, set RTI_enableFederateHeartbeat to 1, and
edit the RTI_federateHeartbeatInterval parameter, as follows.
RTI_federateHeartbeatInterval heartbeat
where heartbeat specifies the frequency with which each federate LRC sends a heart-
beat message. The default heartbeat is 10 seconds.
To configure the timeout interval, set RTI_enableFederateHeartbeat to 1, and edit the
RTI_federateTimeoutInterval parameter, as follows:
RTI_federateTimeoutInterval timeout
where timeout specifies the time period in which the federation must receive a heart-
beat or it will forcibly remove the federate. The default is 25 seconds.
where mode specifies whether or not the objects for which a terminated federate owns
the privilegeToDelete will be automatically deleted.
0 — disabled (all owned attributes are orphaned)
1 — enabled.
Default: 1.
7-20 VT MÄK
Managing Federations — Configuring Fault Tolerance Strategies
i Other connection issues may cause the LRC to report the same type of
connection error, for example, mismatched UDP ports.
Default: 1.
where:
0 — do not throw exceptions
1 — throw exceptions.
7-22 VT MÄK
Managing Federations — Configuring Save/Restore
7-24 VT MÄK
8
Managing Federates
This chapter explains how to view information about federates and how to configure
them.
Introduction ................................................................................................. 8-2
Configuring Federate Connections in the RID File ................................ 8-2
Displaying Federate Information in the RTIspy ............................................ 8-3
Displaying Federate LRC Details............................................................ 8-4
Displaying Federate Objects and Interactions................................................ 8-5
Displaying the Object Instances Page ..................................................... 8-5
Displaying Object Attribute Information ............................................... 8-6
Undiscovering Objects............................................................................ 8-7
Displaying Federate Interactions............................................................. 8-7
Displaying FOM Object and Interaction Classes .......................................... 8-8
Displaying a Class’s Attributes or Parameters .......................................... 8-8
Displaying the Classes a Federate is Publishing and Subscribing To ........ 8-9
Displaying the Federate LRC Event Log...................................................... 8-10
Viewing LRC Diagnostic Messages ............................................................. 8-11
Enabling LRC Diagnostic Data Logging in the RID File...................... 8-11
Enabling LRC Diagnostic Data Logging from the RTI Assistant .......... 8-12
Displaying LRC Diagnostic Messages................................................... 8-12
Using the RTIspy to Debug an Application ................................................ 8-13
8.1. Introduction
The RTIspy and RTI Assistant have options for viewing information about federates
and managing them. You can:
Display information about federates
Display information about objects and interactions
View event logs
Resign federates from a federation.
8-2 VT MÄK
Managing Federates — Displaying Federate Information in the RTIspy
i In any RTIspy table, you can sort columns in ascending or descending order
by clicking the column heading.
1 2
8-4 VT MÄK
Managing Federates — Displaying Federate Objects and Interactions
8-6 VT MÄK
Managing Federates — Displaying Federate Objects and Interactions
i The object may be rediscovered if a federate that owns attributes still exists in
the federation.
To undiscover an object, in the Object Instances page, click the Undiscover button
for the object (#2 in Figure 8-3).
8-8 VT MÄK
Managing Federates — Displaying FOM Object and Interaction Classes
8-10 VT MÄK
Managing Federates — Viewing LRC Diagnostic Messages
i When logging is enabled in the RID file, if there is more than one federate
running on a PC, a separate log file of the specified name is created in the
directory in which the executable is located. If you are running more than
one executable from the same directory, for example the VR-Link talk and
listen applications, data for both federates is written to the same log file
unless you set RTI_reuseLogFile to 0.
Enable logging from the RTI Assistant. If you enable logging from the RTI Assis-
tant, no messages are logged until you enable logging, so startup messages are not
captured. The messages are not saved unless you explicitly save them. You can view
the log at any time while the federate is running and save the current snapshot of
messages to a file. Any messages that are sent between the time you save a snapshot
and shut down the federate are not saved.
i Once you start logging messages, either globally or for a particular LRC,
you cannot turn off the logging process. However, you can change the
notification level to reduce the number of messages logged.
You can view log files only for federates on the local machine.
8.6.2. Enabling LRC Diagnostic Data Logging from the RTI Assistant
If logging is not enabled in the RID file, you can enable it from the RTI Assistant. You
must enable it individually for each federate whose messages you want to log. The log is
not saved automatically.
To enable logging of LRC diagnostic data from the RTI Assistant:
1. Right-click the RTI Assistant icon. A menu is displayed.
2. Choose the federate for which you want to enable logging. A submenu is displayed.
3. On the submenu, choose Enable Logging. Depending on your RTI Assistant prefer-
ences, the log may be displayed, you may be prompted to display it, or there may
be no action. For details about setting this preference, please see “Configuring the
RTI Assistant’s View Log Prompt,” on page 5-6.
i When logging is enabled from the RTI Assistant, the LRC does not create a
permanent log file. The logged text is not saved to a file unless you explicitly
save it. For details, please see “Saving Console Output to a File,” on page 5-8.
8-12 VT MÄK
Managing Federates — Using the RTIspy to Debug an Application
8-14 VT MÄK
Managing Federates — Using the RTIspy to Debug an Application
8-16 VT MÄK
9
9.1. Introduction
The HLA API provides many options for optimizing performance. Since each of the
RTI options offers trade-offs between CPU usage, network overhead, and functionality,
it can be very difficult to predict the final effect of the various options on overall
network and simulation performance. For example, time management provides
synchronization between federates, but imposes additional overhead in terms of
message processing and increased complexity at the RTI level. Choosing data distribu-
tion management (DDM) over declaration management can greatly reduce the number
of updates and interactions sent by the RTI, but adds processing overhead to each RTI
call, which may result in an update or interaction message being sent, and in fact, may
increase the number of messages sent under certain conditions.
To help you assess the results of using different performance optimizations, you can
enable and run latency tests between federates and you can use the RTIspy’s network
monitoring tools to view object and interactions statistics, the frequency of RTI
message types, and API call statistics.
9-2 VT MÄK
Monitoring the Network — Testing Latency Between Federates
Each test does the following for each interaction that it sends:
1. Records the start time.
2. Sends an interaction from the initiating federate to a recipient federate. The recip-
ient returns the interaction.
3. Waits until the amount of time calculated as start_time +
time_between_interactions has elapsed.
While the initiator is sending interactions, it is also processing the return interactions
and recording individual results. After the last interaction is sent to a given recipient
federate and the wait time has expired (plus some extra time), a complete result for the
initiator:recipient pair is computed and displayed.
i You must have at least two federates in the federation to run latency tests.
9-4 VT MÄK
Monitoring the Network — Testing Latency Between Federates
i Each of the values reported is the average of the values for the individual
interactions sent in the test.
9-6 VT MÄK
Monitoring the Network — Testing Latency Between Federates
To display details about a federate, select it in the Latency Test window. The
Details group box is updated.
i If a federate drops out of an exercise, its last test results remain in the Latency
Test window. They do not update, but there is no indication that the federate
is no longer active.
To run latency tests continuously, in the Latency Test window, click the Run Test
Continuously icon (Figure 9-4).
9-8 VT MÄK
Monitoring the Network — Testing Latency Between Federates
9-10 VT MÄK
Monitoring the Network — The RTIspy Network Monitoring Tool
9-12 VT MÄK
Monitoring the Network — The RTIspy Network Monitoring Tool
9-14 VT MÄK
Monitoring the Network — Examples of Using the RTIspy Network Monitoring Tool
9-16 VT MÄK
10
FOM Data
1 RTI_fomDataTransportTypeControl = 1 internal
BE* reliable
RTI_internalMsgReliableWhenUsingRtiexec = 0
UDP multicast
FOM Data
2 RTI_fomDataTransportTypeControl = 1 internal
BE reliable
RTI_internalMsgReliableWhenUsingRtiexec = 1
FOM Data
3 RTI_fomDataTransportTypeControl = 0
BE reliable internal
RTI_internalMsgReliableWhenUsingRtiexec = 1
FOM Data
RTI_fomDataTransportTypeControl = 2
4 BE reliable internal
RTI_internalMsgReliableWhenUsingRtiexec = 1
TCP forwarding
*BE = best effort
10-2 VT MÄK
Managing Network Traffic — Using the Correct IP Address Format
i Figure 10-1 does not illustrate use of an RTI Forwarder to forward UDP
multicast traffic over a WAN. For details, please see “Configuring UDP and
Centralized TCP on a WAN,” on page 11-4.
i Bundles are flushed at the end of every tick(), even if the bundle is not full.
where size is the maximum size of a bundled packet. size should be <= MTU of the
network. If size is 0 (zero), then packet bundling is disabled. Default: 0.
10-4 VT MÄK
Managing Network Traffic — Configuring Sender-Side Filtering (Smart TCP Forwarding)
! If you use sender-side filtering, the rtiexec can support only one federa-
tion at a time.
Sender-side filtering is not compatible with fixed grid DDM.
TCP forwarding
Each federate sends updates to the
RTI Forwarder, which forwards them
to all other federates, including other
federates on the local LAN.
Federate to forwarder A
Forwarder to federate
M1A2 COM
Thickness represents relative
amount of traffic (1:3)
B
WAN
Sender-side filtering
Each federate sends updates through
the RTI Forwarder. Only updates of
interest are sent to receiving federates.
WAN
10-6 VT MÄK
Managing Network Traffic — Compressing RTI Messages
i If you want to use the RTIspy API to override the socket compression
implementation, please contact MÄK technical support for assistance.
The RTI_socketSendBufferSize parameter configures the socket send buffer size. This
buffer size should be large enough to hold the largest message to be sent. Default: 50K.
(setqb RTI_socketSendBufferSize buffer_size)
The RTI_tcpBufferSize sets the size of the internal buffer into which TCP packets get
read. This buffer size should be large enough to hold the largest message to be received.
Default: 50K.
(setqb RTI_tcpBufferSize buffer_size)
10-8 VT MÄK
Managing Network Traffic — Choosing the Network Device to Use
where IP_address is the IP address of the ethernet device you want to use with multicast
traffic.
where:
ObjectClassName is a fully qualified FOM class of the form
"ObjectRoot.BaseEntity.Platform".
MulticastAddress is a valid multicast address of the form "229.7.7.9" for
IPv4 or "ff02::7:9" for IPv6.
NestingOperator is a quoted string containing either exclusive or
inclusive. The nesting operator values determine whether the assignment of the
multicast address will apply to the specific class exclusively or to that class and all
derived classes.
interface is specifies a network interface. For details, please see “Assigning DM
Multicast Groups to Network Interfaces,” on page 10-11.
Organize entries in the order of base classes to leaf classes. Exclusive entries must be
placed after all inclusive entries from which the class inherits.
In the following example, the address 229.7.7.9 is assigned to all classes derived from
“ObjectRoot.BaseEntity.Platform” except for
“ObjectRoot.BaseEntity.Platform.GroundVehicle”, which is assigned 229.7.7.10:
(RTI-addDMObjectMulticastAddr "ObjectRoot.BaseEntity.
Platform" "229.7.7.9" "inclusive" "0.0.0.0")
(RTI-addDMObjectMulticastAddr "ObjectRoot.BaseEntity.
Platform.GroundVehicle" "229.7.7.10" "exclusive" "0.0.0.0")
10-10 VT MÄK
Managing Network Traffic — Filtering by Multicast Groups Using Declaration Management
i The functionality described in this section is separate from any filtering that
the DDM services might perform.
i The multicast address and network interface must be of the same address
family – IPv4 or IPv6.
10-12 VT MÄK
11
11-2 VT MÄK
Configuring Message Forwarding — Configuring UDP and Centralized TCP Forwarding on a LAN
! The MÄK RTI supports IPv4 and IPv6, but you cannot mix the two
protocols. If your federation is using IPv4, then all IP addresses in the
RID file and RTI Assistant must be in the IPv4 format. The same applies
to use of IPv6.
i You can set the size of the buffer into which TCP packets get read. To set the
buffer size, use the RTI_tcpBufferSize variable. The default size is 20000 bytes.
11-4 VT MÄK
Configuring Message Forwarding — Configuring UDP and Centralized TCP on a WAN
! If you are running two or more federates on the same computer and that
computer is not available by multicast, then you must use the RTI Forwarder
for best effort. This is because unicast UDP packets are only available to one
application per IP:port pair. In other words, the procedure described in this
section does not work if you run multiple federates on a computer.
11-6 VT MÄK
Configuring Message Forwarding — Distributed Forwarding Topologies on a LAN
i The primary and ancillary forwarders are different for each federate.
Forwarder A is the primary forwarder for federate A1, but is an ancillary
forwarder to federate B1.
Forwarder A
A1 A2 A3
B1 C1
B2 C2
B3 C3
Forwarder B Forwarder C
11-8 VT MÄK
Configuring Message Forwarding — Distributed Forwarding Topologies on a LAN
A1 A2 A3
Forwarder A
LAN
Forwarder B Forwarder C
B1 C1
B2 C2
B3 C3
Bidirectional connections
Path of example message
11-10 VT MÄK
Configuring Message Forwarding — Distributed Forwarding Topologies on an WAN
A1 A2 A3
LAN A
Forwarder A
WAN
Forwarder B Forwarder C
B1 C1
B2 LAN B LAN C C2
B3 C3
Bidirectional connections
Path of example message
Single-Portal Interconnections
Using single-portal interconnections, one forwarder in each group is designated as the
‘portal’ forwarder. The portal forwarder acts as the entryway into the forwarder group.
However, each forwarder in the group is responsible for forwarding its messages out of
the group. To achieve this behavior, all local forwarders connect to the portal forwarder
in foreign forwarder groups. Each forwarder then forwards messages from the federates
they service to each foreign portal, which in turn relays the messages to all the federates
in the portal forwarder’s local forwarder group.
The portals also handle messages destined for the rtiexec and the distribution of
internal messages to the other non-portal forwarders within their groups. Figure 11-4
illustrates a single-portal forwarder network. The solid lines represent bi-directional
connections between two portals; the dashed lines represent connections from non-
portal forwarders to portal forwarders. Non-portal forwarders send messages to the
portals they are connected to, but the portals do not send messages directly to non-
portals, only to the other portals. In a forwarder group network it is the groups that are
considered fully-connected, not each individual forwarder.
11-12 VT MÄK
Configuring Message Forwarding — Distributed Forwarding Topologies on an WAN
Forwarder Group
Forwarder Group
Alpha
Charlie
Alpha_1
Charlie_1
Alpha_2
Charlie_2
Alpha_3
Load-Balanced Interconnections
In a load-balanced forwarder network, multiple forwarders (preferably all forwarders) in
each group act as portals. There are multiple entry points into the group. Again
however, each forwarder is responsible for forwarding messages out of the group. So
instead of all local forwarders connecting to just a single portal forwarder in foreign
groups, each local forwarder selects a different portal forwarder in each foreign group.
In this arrangement, each local forwarder sends messages from the federates it services
to a portal in each foreign forwarder group which in turn relays the messages to all the
federates in its group. Use of multiple portals distributes the load of traffic sent between
groups among several forwarders in each group, thus eliminating the potential bottle-
neck created by the single-portal scheme. Figure 11-5 illustrates a load-balanced config-
uration. In an ideal configuration, all groups have an equal number of forwarders and
each forwarder has a bidirectional connection with a single forwarder in each foreign
group.
Forwarder Group
Forwarder Group
Alpha
Charlie
Alpha_1
Charlie_1
Alpha_2
Charlie_2
Alpha_3
11-14 VT MÄK
Configuring Message Forwarding — Configuring Federates for Distributed Forwarding
In Figure 11-5, there is an unequal number of forwarders in one group. One or more
forwarders in this smaller forwarder group must maintain connections with more than
one forwarder in the larger foreign forwarder groups. However, a forwarder with
multiple connections can have only one bidirectional connection to each foreign group.
The other connections to a foreign group are treated like ancillary connections, from
which it only receives messages. It sends messages only to the bidirectional connection,
but receives them from both. The configuration of a forwarder forming multiple
connections to a single foreign group is illustrated by forwarder group Charlie, which
has only two members (compared to three for the other groups). The ancillary connec-
tion from each of the other groups is automatically distributed evenly between the two
portals in the group so as to avoid overloading one of the portals.
i When you use forwarder groups, each forwarder serves as a primary for a
subset of the federates. As a result, the configuration will be different for
federates with different primary forwarders.
Figure 11-6. Expanded Add New Local rtiexec Connection dialog box
2. Optionally, specify a port for the RTI Forwarder.
11-16 VT MÄK
Configuring Message Forwarding — Configuring RTI Forwarders for Distributed Forwarding
where:
ForwarderName is an arbitrary name assigned to a forwarder. It cannot contain
spaces.
IP address is the IP address of the computer on which the forwarder is running.
hostname is the host name of the computer on which the forwarder is running.
Port is the port to be used to connect to this forwarder. If you specify 0, the value
of the RTI_distributedForwarderPort RID parameter is used. The only situation where
a value other than 0 would normally be specified would be when trying to run two
forwarders on the same computer.
Both input values must be enclosed by double-quotes (“ ”).
! The use of hostnames rather than IP addresses in the routes file is strongly
discouraged. Although specifying hostnames may work in some limited cases,
in most WAN situations issues such as network address translation (NAT)
traversal or VPN tunneling will lead to incorrect or unstable routing
networks.
Table 11-1 describes all of the routes file parameters. Some of them are discussed in
more detail in “Optional RTI Forwarder Configuration Parameters,” on page 11-19.
Table 11-1: Routes file parameters
Parameter Description
RTI_addForwarder Specifies the IP address (or hostname) of an RTI
Forwarder to be added to the forwarder list.
RTI-enableCompression Enables compression and sets the compression
level for individual forwarder connections.
RTI-enableBundling Enables bundling and sets the bundle size for indi-
vidual forwarder connections.
RTI_forwarderInterfaceAddr Specifies the IP address of the host interface on
which to try to initiate connections to other RTI
Forwarders. Only necessary for multi-homed hosts.
RTI-allowMulticastForwarding Specifies the forwarder name of an RTI Forwarder
enabled to handle distributed UDP forwarding duties
on its LAN. A separate entry for each RTI Forwarder
that will act as the distributed UDP forwarder for its
LAN is necessary. It is required only when
forwarder groups are used and
RTI_distributedUdpForwarderMode is 2.
RTI_forwarderGroupInterconnectMethod Specifies the type of distributed forwarder network
that will be created. Acceptable values are:
“single-portal”
“load-balance”
“manual”.
For information about single-portal and load-
balanced networks, please see “Configuring Single-
Portal Forwarder Groups,” on page 11-20 and
“Configuring Load-Balanced Forwarder Groups,” on
page 11-22. For information about manual configu-
ration of forwarder networks, please see “Special
Distributed Forwarder Networks,” on page 11-25.
RTI-addForwarderGroup Specifies the name of a Forwarder Group that will
be included in the distributed forwarder network.
RTI-addForwarderToGroup Adds the named RTI Forwarder to the specified
Forwarder Group.
11-18 VT MÄK
Configuring Message Forwarding — Configuring RTI Forwarders for Distributed Forwarding
UDP Forwarding
If you use distributed UDP forwarding to handle multicast traffic between LANs, you
must add an RTI-allowMulticastForwarding parameter for the RTI Forwarder on each LAN
that will monitor and relay those messages. The syntax is:
(RTI-allowMulticastForwarding “ForwarderName”)
The ForwarderName string cannot contain spaces and must be enclosed by double-
quotes (“ ”). Each name must be identical to a name specified in one of the
RTI_addForwarder parameters.
where:
single-portal specifies a single portal interconnection method, as described in
“Single-Portal Interconnections,” on page 11-12. This is the default interconnect
method.
load-balance specifies a load balanced interconnection method, as described in
“Load-Balanced Interconnections,” on page 11-14.
manual specifies that interconnections are configured manually as described in
“Special Distributed Forwarder Networks,” on page 11-25.
The value string must be enclosed in double-quotes (“ ”).
To configure the group membership rosters, create a group using the RTI-addForwarder-
Group parameter. Then populate it with RTI Forwarders using the RTI-addForwarderTo-
Group parameter. The RTI Forwarders must have already been specified in the forwarder
list created by the RTI_addForwarder entries. The syntax of the two parameters is:
(RTI-addForwarderGroup “GroupName”)
(RTI-addForwarderToGroup “GroupName” “ForwarderName” “URL”
acceptRemoteConnections)
where:
ForwarderName must be identical to a name specified in one of the
RTI_addForwarder parameters and it must appear before the group configuration
section of the routes file.
URL is currently not supported and should be left as an empty string (“”).
acceptRemoteConnections specifies that the forwarder is a portal (1) or not a
portal (0).
The GroupName and ForwarderName strings cannot contain spaces and must be
enclosed by double-quotes (“ ”).
If none of the forwarders in a group is explicitly assigned to act as the portal for the
group, the forwarder in the group whose name occurs first alphabetically acts as the
portal.
11-20 VT MÄK
Configuring Message Forwarding — Configuring RTI Forwarders for Distributed Forwarding
The following example configuration shows the creation of four groups interconnected
using the single-portal method (illustrated in Figure 11-4):
;; Forwarder Groups
(RTI-addForwarderGroup “Alpha”)
(RTI-addForwarderToGroup “Alpha” “Alpha_1” “” 1)
(RTI-addForwarderToGroup“Alpha” “Alpha_2” “” 0)
(RTI-addForwarderToGroup“Alpha” “Alpha_3” “” 0)
(RTI-addForwarderGroup “Bravo”)
(RTI-addForwarderToGroup“Bravo” “Bravo_1” “” 0)
(RTI-addForwarderToGroup“Bravo” “Bravo_2” “” 0)
(RTI-addForwarderToGroup“Bravo” “Bravo_3” “” 1)
(RTI-addForwarderGroup “Charlie”)
(RTI-addForwarderToGroup“Charlie” “Charlie_2” “” 0)
(RTI-addForwarderToGroup“Charlie” “Charlie_1” “” 0)
(RTI-addForwarderGroup “Delta”)
(RTI-addForwarderToGroup“Delta” “Delta_1” “” 0)
(RTI-addForwarderToGroup“Delta” “Delta_2” “” 1)
(RTI-addForwarderToGroup“Delta” “Delta_3” “” 0)
(RTI-addForwarderGroup “Bravo”)
(RTI-addForwarderToGroup“Bravo” “Bravo_1” “” 1)
(RTI-addForwarderToGroup“Bravo” “Bravo_2” “” 1)
(RTI-addForwarderToGroup“Bravo” “Bravo_3” “” 1)
(RTI-addForwarderGroup “Charlie”)
(RTI-addForwarderToGroup“Charlie” “Charlie_2” “” 1)
(RTI-addForwarderToGroup“Charlie” “Charlie_1” “” 1)
(RTI-addForwarderGroup “Delta”)
(RTI-addForwarderToGroup“Delta” “Delta_1” “” 1)
(RTI-addForwarderToGroup“Delta” “Delta_2” “” 1)
(RTI-addForwarderToGroup“Delta” “Delta_3” “” 1)
The RTI Forwarders automatically determine the necessary connections for each indi-
vidual forwarder and assemble themselves into the optimal forwarder network.
If it is not feasible to have every forwarder in a group act as a portal (for instance if some
forwarders in a group are behind a firewall and no port forwarding is available) they
should be marked as non-portals (acceptRemoteConnections = 0) in their RTI-addFor-
warderToGroup entry. The other RTI Forwarders will automatically distribute connec-
tions to the affected group among the portals in that group. The non-portal forwarders
will still connect to other portals in foreign forwarder groups, and these connections are
accounted for when determining the optimal interconnect routing to ensure that every
portal has a roughly equal number of connections to foreign forwarder groups to
handle.
11-22 VT MÄK
Configuring Message Forwarding — Configuring RTI Forwarders for Distributed Forwarding
! Only one RTI Forwarder on each LAN can monitor traffic. Otherwise there
will be duplication of messages. (For details, please see “Optional RTI
Forwarder Configuration Parameters,” on page 11-19).
Assume LANs A, B, and C (Figure 11-7). Lan A has one federate. LANs B and C have
multiple federates and each have a RTI Forwarder. Each federate’s RID file must list the
multicast address for the local LAN (RTI_destAddrString) and the address of each remote
forwarder (RTI-addDestAddrString) (or machine for LANs that do not run a forwarder).
A
207.86.232.1
Forwarder
Forwarder
C
209.86.232.1 209.86.232.2 209.86.232.3 209.86.232.4
WAN
Figure 11-7. UDP forwarding
For the federate on LAN A, there are no other local federates; its only destinations are
the federates on LANs B and C. Even so, there are some messages that can be sent by an
LRC that are processed by the sending LRC (for example, requestAttributeValueUp-
date). Therefore, the primary destination address must still be either a broadcast or
multicast address (which will loop back the message). Then the addresses of the two
RTI Forwarders at LAN B and C would be added as additional destinations.
The RID file for LAN A might have the following entries:
(setqb RTI_destAddrString "229.7.7.7")
(RTI-addDestAddrString "208.86.232.1")
(RTI-addDestAddrString "209.86.232.1")
The RID files for federates on LAN B should be configured with a multicast address as
the primary destination for the other federates on the LAN. Then the address of the
federate on LAN A and the UDP Forwarder on LAN C should be added as additional
destinations.
(setqb RTI_destAddrString "229.7.7.7")
(RTI-addDestAddrString "207.86.232.1")
(RTI-addDestAddrString "209.86.232.1")
The RID files for federates on LAN C should be configured similarly, but use LAN B’s
UDP Forwarder address.
(setqb RTI_destAddrString "229.7.7.7")
(RTI-addDestAddrString "207.86.232.1")
(RTI-addDestAddrString "208.86.232.1")
11-24 VT MÄK
Configuring Message Forwarding — Configuring Routers or Firewalls for WAN Federations
The ForwarderName strings cannot contain spaces and must be enclosed by double-
quotes (“ ”). The names must be identical to a name specified in one of the
RTI_addForwarder parameters. The RTI_addForwarder parameters must be specified before
the connections between them are specified.
The routing of messages through a forwarder node is specified by including an
RTI_addForwarderRoute entry in the routes file for each adjacent node. The syntax of this
parameter is:
(RTI_addForwarderRoute “LinkNode” “Source” “NextHop”)
where:
LinkNode is the RTI Forwarder through which the message passes
Source is the RTI Forwarder from which the message originates
NextHop is the destination RTI Forwarder for this network hop.
The LinkNode, Source, and NextHop strings must be valid forwarder names. There
can be multiple entries between source and link nodes with different next hop nodes,
and likewise there can be multiple entries dictating different sources through a link
node to any particular next hop node.
Each of these entries configures a routing rule at the link node such that any message
received by the link node from the source node will be forwarded to all the next hop
nodes for which a matching routing rule exists at the link node. It is not necessary to
establish a route beyond the next hop from any link node. However forwarder routes
are uni-directional, so to establish a complementary return path for messages, a separate
RTI_addForwarderRoute entry with the source and next hop values swapped is required.
11-26 VT MÄK
Configuring Message Forwarding — Special Distributed Forwarder Networks
Consider the simple hierarchical network illustrated in Figure 11-8. Forwarders A and
B serve as link nodes between all other forwarders. Consequently routes must be config-
ured to direct messages from Forwarder C through Forwarder A to Forwarders B and
D, and both reverse routes must be configured (from B through A to C and from D
through A to C). Likewise routes from Forwarder D through Forwarder A to Forwarder
C and B (and the reverse) must be created, as well as routes from Forwarders E and F
through Forwarder B and their reverse routes. No explicit entry is necessary to spell out
the path from Forwarder C to Forwarder E since the entries covering the path from C
through A to B and from A through B to E will allow the messages to be delivered end-
to-end. Since in this example Forwarders C, D, E, and F are leaf nodes, none of the
routes go through them. In other words, leaf nodes cannot be link nodes.
Forwarder C Forwarder E
Forwarder A Forwarder B
Forwarder D Forwarder F
11-28 VT MÄK
12
12-2 VT MÄK
Configuring HLA Services — Configuring Internal Messages
i The throttle only affects the retransmission of internal messages during tick().
It does not affect messages required by services invoked by the federate (for
example, updates and interactions).
12-4 VT MÄK
13
This section explains how to enable DDM and configure the different DDM
approaches. The rest of this chapter provides conceptual background for the different
approaches to DDM.
i The HLA Evolved implementation of DDM is the same as the HLA 1516
implementation. Therefore, in this chapter, all references to HLA 1516 apply
to HLA Evolved as well.
! The MÄK RTI supports IPv4 and IPv6, but you cannot mix the two
protocols. If your federation is using IPv4, then all IP addresses in the
RID file and RTI Assistant must be in the IPv4 format. The same applies
to use of IPv6.
13-2 VT MÄK
Using Data Distribution Management — Configuring DDM Services
where:
RoutingSpaceName specifies the name of the routing space. For HLA 1.3, the
routing space name is required to get dimension handles. For HLA 1516, the
routine space name is optional. The default is an internal routing space named
HlaGlobalSpace.
SubspacePartition is a keyword. Its components are:
– subspaceDimensionName specifies the FOM dimension
– partitionSize specifies the number of partitions for the subspace axis
– dimName specifies one or more dimension names of the remaining axes
– defaultPartitionSize specifies the default partition size.
Each index line specifies partitions for the application space, as follows:
– index specifies an application space, beginning with 0. If an application space
index is omitted, its axes are partitioned using the default partition size.
– descriptiveName is for documentation only.
– dimName specifies how the dimensions will be partitioned for each application
space. If the dimension name is omitted, its axes is partitioned using the default
value partition size.
;; indicates a comment.
The following example fixed grid specification shows six application spaces in the
subspace partition:
(RS1
(SubspacePartition subspace 6 (one two) 1
(
(0 (level0 (one 1) (two 1)))
(1 (level1 (one 2) (two 2)))
(2 (level2 (one 4) (two 4)))
(3 (level3 (one 8) (two 8)))
(4 (level4 (one 16) (two 16)))
(5 (level5 (one 32) (two 32)))
)
)
)
13-4 VT MÄK
Using Data Distribution Management — Configuring DDM Services
where fileName is a quoted string containing the name of the implicit DDM config-
uration file.
Table 13-1 describes the parameters in the implicit DDM configuration file:
Table 13-1: Implicit DDM parameters
Parameter Description
RTI_implicitDdmDefaultUpdateRange Specifies the maximum range, in meters, that the
object can travel between successive location
updates. This value is not used when fixed grid DDM
is enabled.
The default update range is used when a range is not
specified for the object class using RTI-setObjectUpdate-
Range. This value is not used when fixed grid DDM is
enabled. Default: 0.0.
RTI_implicitDdmDefaultSensorRange Specifies the maximum range, in meters, within
which the object can sense another object. This value
is added to the update range to determine the
furthest point an object can sense another object
between successive location updates.
The default sensor range is used when a range is not
specified for the object class using RTI-setObjectSensor-
Range. Default: 100.0.
RTI_implicitDdmRegionMargin Specifies a factor that increases the update region
range so that the region does not have to be modified
each time the object updates its location. The update
range is multiplied by this factor so that the region is
not modified unless the resulting region extent does
not encompass the object’s actual update range. This
value is not used when fixed grid DDM is enabled.
Default: 5.0.
Parameter Description
RTI_implicitDdmMinExtentLimit Specifies the range over which the location values are
RTI_implicitDdmMaxExtentLimit normalized. Defaults: -12000000.0 and 12000000.0.
(RTI-setObjectUpdateRange "BaseEntity.PhysicalEntity.Platform.Aircraft"
328.8)
(RTI-setObjectSensorRange "BaseEntity.PhysicalEntity.Platform.Aircraft"
160000.0)
(RTI-setObjectWeaponRange "BaseEntity.PhysicalEntity.Platform.Aircraft"
56000.0)
13-6 VT MÄK
Using Data Distribution Management — The Distributed Region Approach
P1 (M1)
S2
S1
P2 (M2)
The MÄK RTI also uses region matching information for reliable transmissions.
Because both update and subscription region information is exchanged between the
LRCs, an LRC can determine exactly which remote region subscriptions match its local
update regions. The MÄK RTI uses this information to establish the destination mask
used in sender-side filtering. The use of DDM matching to support smart forwarding
results in true sender-side filtering. In fact, if no matching subscriptions are found on
the sending side, the MÄK RTI can prevent updates from being sent for both reliable
and best effort messages.
In Figure 13-2, P1 and P2 both have a subscription set of S1 and S2 while P3 has a
subscription set of S1.
P1 (M1)
S1
S2
P3 (M2) P2 (M1)
13-8 VT MÄK
Using Data Distribution Management — The Fixed Grid Approach
! The fixed grid approach is not fully compliant with either HLA 1.3 or HLA
1516. It relaxes some requirements and imposes some restrictions. (For
details, please see “The Fixed Grid Approach and DDM Services,” on
page 13-15.)
M1 M2
P1 M3
S2
S1
M4 M5 M6
P2
M7 M8 M9
The MÄK RTI fixed grid approach is modeled after application space partitioning
(introduced by Coffin, et. al. and Helfinstine, et. al. 1, 2). A few generic dimensions are
defined, with one “subspace” dimension used to partition the others into application
spaces. The remaining dimensions can then be interpreted and partitioned to meet the
specific application requirements.
The same fixed grid approach is used for both the HLA 1.3 and 1516 APIs. The appli-
cation space partitioning is less useful for DDM in HLA 1516, because each attribute is
associated with individual dimensions rather than routing spaces. In HLA 1.3, a region
contains all the dimensions in a routing space, while in HLA 1516 a region can be
comprised of exactly the dimensions needed (that is, a subset of the available dimen-
sions). Using the same implementation makes it possible for federates that use the
different APIs to interoperate.
13-10 VT MÄK
Using Data Distribution Management — The Fixed Grid Approach
G 224.0.0.5
R ·
I · ·
D ·
· ·
224.0.0.3 224.0.0.6
C ·
E · ·
L
L
S 224.0.0.7
224.0.0.15
224.0.0.31
224.0.0.63
Subspace 0 1 2 3 4 5
Partition
The fixed grid with the same partitioning as Figure 13-4 would have grid cell bound-
aries as illustrated in Figure 13-5. A federate region has a lower and an upper bound for
each dimension in the region. Using the index formula, the lower bound is mapped to a
beginning index and the upper bound is mapped to an ending index. The dimension
specified as the subspace dimension is mapped first. The range for the subspace is
assumed to be a point range (only the lower bound used), because a single subspace
must be selected.
13-12 VT MÄK
Using Data Distribution Management — The Fixed Grid Approach
Given that the subspace dimension has 6 partitions, a range bound value from 0
through 66 would result an index of 0, from 67 through 133 would result in an index
of 1, and so on. For the last partition, the maximum upper bound would be mapped
down into the maximum index, so a value of 400 would result in an index of 5 versus 6.
For the other dimensions, the index would depend on which subspace index was speci-
fied. For subspace 0, any value would result in an index of 0. For a subspace of 1, values
0 through 199 would result in an index of 0, and values of 200 through 400 would
result in an index of 1. The indices for the other subspace partitions are calculated simi-
larly.
399 388
375
350 374
349
300
G 299
R ·
I · ·
D ·
200 · ·
199
C · ·
E ·
L
L
100
S 99
50
49 25
24 13
0
Subspace [0 - 66][67 - 133][134 - 199][200 - 266][267 - 333][334 - 399]
Partition
2. Move the rangeBound into the center of the partition by adding scale/2:
double rangeBound = (scale * (value - minEnum)) + scale / 2
For a linear mapping, the magnitude of the dimension’s full extent is scaled by the
linear extent. A typical linear mapping for a coordinate system would first define the
bounds of the coordinate values (for example, minimum and maximum longitude and
latitude). The partition of the fixed grid axes could then represent the resolution of
filtering (that is, more partitions would allow finer-grained location filtering).
The formula for a linear mapping is similar to that for an enumerated mapping, but
without the adjustment to the center of the partition. It is calculated as follows:
1. Determine a scale between the dimension’s extent and the linear bounds:
double scale = dimensionUpperBound / double(max – min)
13-14 VT MÄK
Using Data Distribution Management — The Fixed Grid Approach
i In the following sections, all comments regarding HLA 1516 also apply to
HLA Evolved.
Create Region
A fixed grid region is initialized with the exact dimensions that are used to configure the
fixed grid. As a result, any additional dimensions are ignored (even in HLA 1.3 when
they belong to the same routing space). Since the region is initialized with the fixed set
of dimensions, any of these dimensions not specified when creating the region are auto-
matically added. The initial values for the range bounds are the default range bounds.
In HLA 1.3, the default range bounds are 0 to 4,294,967,295. In HLA 1516, the
default range bounds are set by the FOM. If the FOM omits the default range bounds
or the default range bounds are excluded, the default range bounds are 0 to 1.
Delete Region
This service behaves as expected. A region in use cannot be deleted.
13-16 VT MÄK
Using Data Distribution Management — Implicit DDM
Miscellaneous
In HLA 1.3, the region’s first extent is used and any additional extents are ignored. In
HLA 1516, a region only has one extent.
The fixed grid approach disables all advisories. No subscription or publication informa-
tion is exchanged between federate LRCs.
i Almost all of the the plug-in's work is performed above the actual RTI
Ambassador implementation, with perhaps some alterations to other classes
employed by the RTI Ambassador such as the FOM Manager
(DtFomClassManager). It was not necessary to change the Federate
Ambassador to implement the implicit DDM approach.
Since the plug-in must intercept and decode attribute value updates and interactions, it
needs some knowledge of the underlying federation object model. The Implicit DDM
plug-in was designed to be compatible with HLA RPR FOM 1.0 and HLA RPR FOM
2.0 Draft 17 or their derivatives. All references to actual classes, attributes, interactions,
and parameters will use RPR FOM 1.0 nomenclature.
13-18 VT MÄK
Using Data Distribution Management — Implicit DDM
The approximate radius of the Earth is 6000 km. Therefore, the default space subtends
a cube roughly twice the diameter of the Earth on all sides. The minimum and
maximum extent limits are configurable.
All the dimensions are normalized to take values between 1 and MAX_INT-1 (for 1516
the normalized boundaries are from 2 to MAX_INT-2). This range allows for point
regions to be created at {0,0,0} and {MAX_INT,MAX_INT,MAX_INT} which an
object can never occupy.
Because the DDM is implicit, no region information is associated with an object
instance when it is registered. So until the first location attribute for the new object
instance is decoded by the plug-in, it cannot set the region bounds based on the actual
coordinates of the object instance. Instead, the plug-in creates initialization regions and
sets the initial bounds to one of the two inaccessible points. This ensures that when a
new object instance is created, its update regions will not inadvertently overlap with any
remote federate's subscription region and trigger erroneous detection by remote feder-
ates. Similarly, the federate's subscription region will not inadvertently overlap with
remote federate update regions.
i HLA 1516 APIs do not support subscription regions with multiple extents.
However it was necessary for the plug-in to be able to create and modify an
arbitrary number of extents within each object's subscription region.
Consequently, in certain circumstances, the range-based Implicit DDM
plug-in bypasses the HLA 1516 API calls to directly access the underlying
classes.
The plug-in then intercepts the attribute updates and interactions from each instance of
the desired classes and extracts location information. Before it allows the attribute
updates or interactions to be processed further, the plug-in uses the location informa-
tion to modify the extents of the regions it has created and to make the necessary DDM
calls to distribute the region modifications. If necessary, a DDM call is substituted for
the normal DM call (for example, sendInteractionWithRegion). No additional changes
are necessary, because the normal underlying DDM processing uses the implicit DDM
region information as if the federate had made the DDM calls directly.
13-20 VT MÄK
Using Data Distribution Management — Implicit DDM
When a federate sends an interaction using sendInteraction() the plug-in decodes the
FiringObjectIdentifier parameter and looks in a map of object instance names to deter-
mine if the interaction was sent by a BaseEntity object which has an interaction region
associated with it. If an interaction region can be associated with the interaction, the
plug-in simply substitutes the sendInteractionWithRegion() call to the RTI for further
processing.
i The bandwidth savings will be offset somewhat by the fact that the smart
forwarding feature is incompatible with fixed grid DDM, so all updates and
interactions will transit the network even when there are no subscribers
joined to the same multicast group.
13-22 VT MÄK
14
Running the MÄK RTI Using Shared Memory
This chapter explains how to configure, run, and tune the use of shared memory.
14.1. Introduction
The MÄK RTI allows co-located federates (federates running on the same CPU or
multi-processor machine) and an rtiexec process to communicate with each other using
a message queue that is implemented using shared memory. This chapter describes how
to configure and use this feature.
i For simplicity, it is assumed that all co-located federates belong to the same
federation. It is possible to support multiple distinct federations either on a
single shared memory message queue or on their own distinct shared memory
message queues.
14-2 VT MÄK
Running the MÄK RTI Using Shared Memory — Configuring Use of Shared Memory
14-4 VT MÄK
Running the MÄK RTI Using Shared Memory — Starting the Shared Memory Manager
i Each distinct shared memory region must have its own shared memory
manager.
You can start the shared memory manager manually prior to starting the rtiexec or any
federates. The shared memory manager application is in ./bin. The executable is named
rtiShmQMgr (for HLA 1.3) or rtiShmQMgr1516. The shared memory manager process
must have access to a RID file with the same parameters used by the rtiexec or federates.
i The shared memory manager does not support the connection configuration
feature used by federates and the rtiexec. When you run the shared memory
manager , it must be configured to listen to the port and address being used
by the federation execution you want to join.
i You must restart the shared memory manager process when you change RID
parameters.
Option Description
(-A | --destAddrString) Overrides the IP address (configured by RTI_destAddrString)
address to which best-effort federation execution traffic is sent.
(-D | --Daemon) Run ShmExec in the background. (Linux only)
(-h | --help) Displays a syntax help screen.
(-k | --ruthLess) Specifies ruthless takeover.
This option forces the Shared Memory Queue Manager
process being launched to take over the shared memory
queue named in the RID file and reinitialize the queue
regardless of whether or not another active Shared
Memory Queue Manager process exists or other
processes are attached to and using the shared memory
region. This can cause unexpected behavior among
other processes subscribed to the shared memory
queue at the time. It will not terminate any other
processes, although that may be a side-effect. It should
only be used in situations where attempting a graceful
takeover has failed.
(-K | --AutoExit) Run ShmExec and automatically exit after the last
subscriber disconnects.
(-l | --setLogFileName) Enables logging to the specified file.
logfilename
14-6 VT MÄK
Running the MÄK RTI Using Shared Memory — Starting the Shared Memory Manager
Option Description
(-n | --notifyLevel) Overrides the notification level configured in the RID
level file. level can be:
0 — Fatal
1 — Warn (default)
2 — Notify
3 — Verbose
4 — Debug.
(-P | --setUdpPort) port Overrides the value specified by RTI_udpPort. This port is
used to exchange UDP messages between federates,
the rtiexec, and RTI Forwarders, if applicable.
(-q | --setNotifyQuiet) Sets the notification level to Fatal (0).
(-R | --setRidFileName) Specifies the name of the RID file to use.
ridfile
(-t | --graceful) Specifies graceful takeover.
This option forces the Shared Memory Queue Manager
process being launched to try to take over the shared
memory queue named in the RID parameters, even if
the queue was created by another Shared Memory
Queue Manager process. This option is useful if the
Shared Memory Queue Manager process that created
the queue terminates abnormally or becomes unrespon-
sive. This can cause unexpected behavior among other
processes subscribed to the shared memory queue at
the time.
(-T | --setTcpPort) port Overrides the value specified by RTI_tcpPort. This port is
used to establish a TCP connection with the RTI
Forwarder to exchange TCP messages among feder-
ates, the rtiexec, and the RTI Forwarders.
(-v | --version) Displays version information and exits.
(-- | --ignore_rest) Ignore the command-line options that follow this option.
14-8 VT MÄK
Running the MÄK RTI Using Shared Memory — Tuning Shared Memory
The RTI 1.3 and RTI 1516 specifications process messages in slightly different ways. In
RTI 1.3, a federate processes messages by calling the tick() or tick(min,max) member
functions. In RTI 1516, a federate processes messages by calling evokeCallback() or
evokeMultipleCallbacks(). In this section, both methods are referred to by the term
tick.
14-10 VT MÄK
Running the MÄK RTI Using Shared Memory — Tuning Shared Memory
A more serious issue arises if a federate has become totally unresponsive (hung or
crashed) while subscribed to the shared memory queue. Since these federates are no
longer reading messages, the queue will eventually fill up. To avoid permanently
blocking new messages, the shared memory subsystem detects unresponsive federates
and unsubscribes them from the queue if they have been inactive for one second or
more. Once unsubscribed, these unresponsive federates cause an exception to be gener-
ated the next time they try to access the message queue in shared memory (if they start
processing again). There is no way to allow these federates to resubscribe. Therefore,
when you are debugging federates that employ shared memory you must remember
that when execution of the federate process is intentionally halted, for example, when a
breakpoint is hit, the other federate processes still running may unsubscribe the halted
federate.
While it is tempting to simply set the queue size to the maximum allowed by your plat-
form, remember that any memory not allocated to a shared memory region is available
for other uses which may improve the overall performance of your federate application.
14-12 VT MÄK
15
i Modular FOMs is not part of either the 1.3 or the 1516 API, so the MÄK
RTI configures its use through configuration parameters in the RID file.
HLA Evolved federates can specify FOM modules during create and join
using the HLA Evolved API.
15-2 VT MÄK
Using FOM Modules — Merging FOM Modules into the Current FOM
i In the HLA Evolved specification, the term MOM module, used in early
drafts, and therefore in the initial implementation of modular FOMs in the
MÄK RTI, was changed to MOM and Initialization Module, or MIM. If
FOM module merging is disabled, a MIM cannot be used. If FOM module
merging is enabled, a MIM is always used. The federate can specify the MIM
it would like to use in the createFederationExecution call. If it does not
specify the MIM, the standard MIM is used. The standard MIM is
./bin/HLAstandardMIM.xml.
15-4 VT MÄK
Using FOM Modules — Validating FOM Modules
To restate the basic merging rule, once an object or interaction class is added to the
current FOM, its attributes and parameters cannot be changed. Merging a non-scaf-
folding object or interaction class definition requires that the object or interaction class
be absent in the current FOM or, if present, match the existing class attributes and
parameters exactly.
! The previous paragraphs in this section apply to all three HLA specifica-
tions. However everything else in this section, including the following
paragraph applies only to HLA 1.3 and 1516.
Not all modular FOM configuration parameters affect a federation. For
example, RTI-addCreateFomModule and RTI_momModuleExtensionFileName
only affect the federation if the federate creates the federation. A MOM
module extension or create FOM module of a federate that joins an
already created federation have no effect on the federation.
where momModuleName is a quoted string that specifies the MOM module file name.
The file name can be an absolute path, a path relative to the working directory, or just
the filename if it is in the working directory.
The specified MOM module can contain extensions to the existing MOM classes. The
module specified in this parameter can be considered the first FOM module specified,
because it will be merged into the current FOM before any other modules specified in
the RID file. This parameter is optional and the default base MOM classes are used if
omitted.
15-6 VT MÄK
Using FOM Modules — Configuring Use of Modular FOMs
where fomModuleName is a quoted string that specifies a FOM module file name.
The file name can be an absolute path, a path relative to the working directory, or just
the filename if it is in the working directory.
Each function specifies a single create FOM module. You can include multiple entries
in the RID file. The order that they appear in the file is the order they are merged into
the current FOM. The RTI will try to merge the contents of each FOM module into
the current FOM during the create federation execution service call. If successful, the
FOM module becomes part of the current FOM supplied to federates when they join.
If unsuccessful, the create call fails.
where fomModuleName is a quoted string that specifies a FOM module file name.
The file name can be an absolute path, a path relative to the working directory, or just
the filename if it is in the working directory.
Each function specifies a single join FOM module. You can include multiple entries in
the RID file. The order they appear in the file determines the order that they are
merged into the current FOM. The RTI will try to merge the contents of each FOM
module into the current FOM during the join federation execution service call. If
successful, the FOM module becomes part of the current FOM supplied to other feder-
ates when they join. If unsuccessful, the join call fails.
where enableOption is 1 to enable (use local copy) and 0 to disable (rtiexec retrans-
mits copy).
15-8 VT MÄK
16
Entity level
federate
Entity level
federate LRC
LRC 10 HZ 10 HZ
RTI network
transmissions
1 HZ
PVD
federate
LRC
16-2 VT MÄK
Update Rate Reduction — Update Rate Reduction
The update rate applies to each object attribute instance independently. That means
that in practice, the rate that attributes can be reflected (where a reflect contains the
attributes from one object) is the number of discovered objects times the update rate.
Logger
Entity level federate
federate 0 -- default
LRC
LRC
1 -- 10 hz
20 hz Entity level
2 -- 1 hz federate
3 -- 0.1 hz LRC
UA at t, t+10.0, ...
PVD
UA at t+1.0, 2.0, ...
federate
UA at t+0.05, 0.15,
UA at t+0.1, 0.2, 0.3, 0.25, 0.35, 0.45, 0.55, LRC
0.4, 0.5, 0.6, 0.7, 0.8, 0.65, 0.75, 0.85, 0.95,
0.9, 1.01, 1.02, ... 1.05, 1.15, ...
The update rate outline format corresponds to the format for arrowed lines.
16-4 VT MÄK
Update Rate Reduction — Configuring Update Rate Reduction
where name is a quoted unique string and rate is a floating point value specifying the
rate in hertz.
i In HLA Evolved, the update rates are specified in the FDD file.
16.3.2. Specifying the Rate for Object Class Subscriptions in 1.3 and 1516
You can specify an update rate for object class subscription with the RID function
RTI-addUpdateRateSubscription. Add an entry for each class that should have update rate
reduction applied to its subscription. The nesting qualifier (inclusive or
exclusive) is a shortcut that allows the rate to be applied to all subclasses of the spec-
ified class. The entries are applied in the order they appear in the RID file, and the
nesting operators override previous operations. For example, a top level class could
specify a rate as inclusive, meaning it applies to all subclasses. Selected subclasses
could override that rate with exclusive entries (that apply only to themselves), or
inclusive entries (that apply to themselves and their subclasses).
The syntax for RTI-addUpdateRateSubscription is as follows:
(RTI-addUpdateRateSubscription “class" “rateName” “nesting”)
where:
class is a quoted string specifying an object class name, which must be in the
joined FOM
rateName is a quoted string specifying the name of an update rate, which must be
specified in an RTI-addUpdateRate entry previously in the RID file
nesting is a quoted string specifying either inclusive or exclusive, where
inclusive indicates the rate applies to the specified class and all subclasses and
exclusive indicates the rate applies to just the specified class.
i In HLA Evolved, the subscription rate is specified using the API when a
federate subscribes to object class attributes.
16-6 VT MÄK
Update Rate Reduction — Configuring Update Rate Reduction
16.3.4. Example Update Rate Reduction Configuration (1.3 and 1516 Only)
Here is an example configuration of update rate reduction using all the necessary
parameters:
(setqb RTI_enableUpdateRateReduction 1)
(RTI-addDMObjectMulticastAddr "ObjectRoot.BaseEntity" "229.7.8.1"
"inclusive" "0.0.0.0")
(RTI-addDMObjectMulticastAddr "ObjectRoot.BaseEntity.GroundVehicle"
"229.7.8.5" “exclusive” "0.0.0.0")
(RTI-addDMObjectMulticastAddr "ObjectRoot.BaseEntity.Aircraft"
"229.7.8.9" "exclusive" "0.0.0.0")
16-8 VT MÄK
17
17.1. Introduction
The RTIspy API is an interface to the internals of the MÄK RTI. Using the API, you
can develop plug-ins – dynamically linked libraries that can monitor, extend, or alter
the functionality of the MÄK RTI. You can develop custom RTIs using the MÄK RTI
as a starting point. For example, within your plug-ins you can monitor the RTI service
calls, change the “wire format” used by the RTI on the network, implement communi-
cation mechanisms other than the default UDP and TCP networking schemes, or make
performance optimizations based on the specific needs of your federation. Plug-ins are
loaded by the rtiexec, by each LRC, or by both, when instructed to do so by the RID
file. The LRC web client, printer example, and implicit DDM feature are plug-ins.
The RTIspy API does not replace or change the external RTI API, which is based on
the HLA Standard Interface. Federates still interact with the RTI through the
RTI::RTIambassador and RTI::FederateAmbassador classes, with their familiar func-
tions like sendInteraction() and updateAttributeValues(). The plug-in API just allows
you to change the implementation of these standard RTI functions. Federate code does
not need to change to use an RTI that has been extended with a plug-in, since federates
typically do not need to be modified even when switching to an entirely different RTI
implementation.
Generally speaking, the job of an RTI is to implement the RTI::RTIambassador
portion of the RTI interface specification. The implementation of a particular
RTI::RTIambassador function might change the state of the LRC, cause data to be sent
to remote LRCs, or – as in the case of tick() – cause RTI::FederateAmbassador func-
tions to be invoked. In the MÄK RTI, implementation of RTI::RTIambassador func-
tion calls is managed by an object called a DtRtiAmbassadorImplementor (ambImp.h).
The DtRtiAmbassadorImplementor has an API that mirrors the external
RTI::RTIambassador API. When an RTI::RTIambassador service is called by the
federate, the ambassador calls down to the corresponding function in the
DtRtiAmbassadorImplementor to execute the function. The
DtRtiAmbassadorImplementor in turn, delegates most function calls to various manager
objects within the RTI.
When a federate instantiates RTI::RTIambassador, it creates an instance of
DtRtiAmbassadorImplementor, which is passed to your plug-in. Through this
DtRtiAmbassadorImplementor object, your plug-in can register service call observers and
get to all of the RTI’s managers.
i The MÄK RTI classes rely on some classes and utilities from the VR-Link
vlutil and mtl libraries. To build plug-ins, you must install a copy of the VR-
Link version that the MÄK RTI was built against. You do not need a VR-
Link license.
17-2 VT MÄK
The RTIspy Plug-in API — The RTI Managers
i The 1516 RTIspy APIs have the same internal components and managers as
the 1.3 RTIspy API. The classes may have been modified to some degree (for
example, RTI type replacement), but they essentially perform the same
functions.
17-4 VT MÄK
The RTIspy Plug-in API — Initializing a Plug-in
You can use a single plug-in library for both the LRCs and the rtiexec. Each ignores the
Init*() function that does not apply to it. Alternatively, you could create separate plug-
ins for the rtiexec and for the LRCs. In this case, there is no reason to include
InitRtiexecPlugin() in the LRC's plug-in, or InitLRCPlugin() in the rtiexec's plug-in.
The following example shows the expected function prototype for each of the three
functions, and the mechanics of exporting your functions:
#if WIN32
#define EXPORT __declspec(dllexport)
#else
#define EXPORT
#endif
extern "C"
{
void EXPORT SetPluginCreators()
{
// Register your derived class creator functions here
}
17-6 VT MÄK
The RTIspy Plug-in API — Monitoring RTI Service Invocations
The following example creates and registers a DtFedAmbWrapper that intercepts the
receiveInteraction call, and prints a message both before and after the federate’s version
of this function is executed:
class MyFedAmbWrapper : public DtFedAmbWrapper
{
public:
As long as a wrapper is registered with the RTI, the RTI deletes it when the
DtRtiAmbassadorImplementor is destroyed. However, you can remove a wrapper at any
time using DtRtiAmbassadorImplementor’s removeFedAmbWrapper(), at which point
you regain ownership of the wrapper.
You can chain federate ambassador wrappers together, so that you can have, for
example, an outer wrapper wrapping an inner wrapper, which wraps the federate’s orig-
inal RTI::FederateAmbassador (arbitrary length chains are supported). If you register
multiple wrappers, each subsequent wrapper becomes the new top-level wrapper, and
its child ambassador automatically becomes the previous wrapper. The innermost
wrapper has the federate’s original ambassador as its child. In effect, outer-wrappers
intercept calls from lower-level wrappers, but if you always call down to the base
DtFedAmbWrapper’s version of each function that you override, you will ensure that
each wrapper invokes its child ambassador’s version of the function, and that the
federate’s version will eventually be called.
17-8 VT MÄK
The RTIspy Plug-in API — Creating Custom RTI Managers
2. Within SetPluginCreators(), register your subclass’s creator function with the RTI
using the manager’s static setCreatorFunction():
// Register your new manager subclass’s creator function with the RTI
DtInteractionManager::setCreatorFunction(MyInterMgr::create);
When it is time for the RTI to instantiate an interaction manager, it will use your create
function, which will result in the creation of a MyInterMgr instance.
All of the managers have similar setCreatorFunction() member functions.
When you derive from the MÄK RTI's managers, it is important to understand that the
RTI itself sometimes uses subclasses of DtInteractionMgr, DtObjectMgr, and DtConnec-
tionMgr rather than using those base classes directly. Therefore, if you need to extend or
override default functionality you may need to derive from the RTI's subclasses rather
than directly from these base manager classes.
Specifically, if DDM is disabled, the RTI uses DtObjectMgr and DtInteractionMgr. If
DDM is enabled, it uses DtObjectDataDistMgr (objDdmMgr.h) and DtInterData-
DistMgr (interDdmMgr.h) plus a derived class specific to the HLA specification (for
example, DtObjectDataDistMgr13 (objDdmMgr13.h) and DtInterDataDistMgr13
(interDdmMgr13.h). Similar classes exist for the 1516 specifications. If your federation
uses DDM, you should derive from one of the classes for the HLA specificaiton that
you are using.
};
2. Use SetPluginCreators() to tell the RTI to use an instance of your subclass instead
of the default implementor:
// Register your new implementor subclass’s creator function with the RTI
DtRtiAmbassadorImplementor::setCreatorFunction(MyImplementor::create);
Remember that when you override implementations of RTI services, you must keep the
RTI’s internal state correct and consistent, otherwise other services may fail to work
properly.
17-10 VT MÄK
The RTIspy Plug-in API — Communicating with Remote LRCs and the rtiexec
i If you are familiar with the VR-Link API, you will see that a DtRtiConnection
is analogous to the DtExerciseConn in the DIS version of VR-Link. Similarly,
DtRtiMsg and its subclasses closely resemble VR-Link’s DtPdu and its
subclasses.
17-12 VT MÄK
The RTIspy Plug-in API — Communicating with Remote LRCs and the rtiexec
Whatever approach you take, you will probably need to subclass DtConnectionMgr and
override some of the functions responsible for creating connections.
Subclassing DtSocket
A DtRtiConnection uses a DtSocket to send and receive messages. Depending on which
constructor you use, it can create its own or you can pass one in. If you subclass
DtSocket, pass it to the DtRtiConnection. The RTIspy API uses the VR-Link DtSocket.
To replace the MÄK RTI's default network-based communication infrastructure by
changing the behavior at the DtSocket level, you would probably want to:
1. Derive a new kind of DtSocket that implements sending and receiving by writing
and reading using your alternative communication method. (For complete infor-
mation about creating a DtSocket, please see VR-Link documentation.)
2. Derive a new kind of DtConnectionMgr that uses a single DtRtiConnection that is
initialized by passing in an instance of your new type of socket.
17-14 VT MÄK
The RTIspy Plug-in API — Communicating with Remote LRCs and the rtiexec
Overriding DtConnectionMgr::tick()
The tick() function calls readAndProcess(), which checks for new messages. The default
is to call readAndProcess() on each connection. You probably will not want to change
this behavior. However, if you do not want to check a particular connection every tick,
you can override tick() to change the behavior.
Example
The following example demonstrates methods for changing how the RTI communi-
cates, as discussed in this section.
1. Derive a new DtSocket that does sending and receiving using whatever communica-
tions mechanism you choose:
class MySocket : public DtSocket
{
public:
// Constructors
...
// Override sendTo
virtual int sendTo(caddr_t packet, size_t size,
DtInetAddr addr = DtUSE_DEFAULT_IP_ADDR)
{
// Your implementation here. Return number of bytes sent, -1 for
// failure.
}
// Constructor
MyConnectMgr(DtRIDParameters* params, DtFederateMgr* fedMgrPtr) :
DtConnectionMgr(params, fedMgrPtr)
{
}
// Destructor
~MyConnectMgr
{
// Since we create the socket and connection (in init), we should
// delete them. Set myUdpConn, myTcpConn, and myInternalConn to NULL
// so that the base destructor will not also try to delete them. In
// this example, all three pointers point to the same connection, so
// only delete it once.
delete myUdpConn;
myUdpConn = myReliableConn = myInternalConn = NULL;
}
3. Tell the RTI to use your derived connection manager, within SetPluginCreators():
void SetPluginCreators()
{
DtConnectionMgr::setCreatorFunction(MyConnectMgr::create);
}
17-16 VT MÄK
The RTIspy Plug-in API — Communicating with Remote LRCs and the rtiexec
17.7.5. Messages
Messages in the RTI are represented by instances of subclasses of DtRtiMessage
(rtiMsg.h). Different subclasses represent different kinds of messages that an LRC needs
to send to other LRCs or to the rtiexec. Examples include DtJoinMsg (joinMsg.h), which
is sent by a federate as a result of a call to joinFederateExecution(), and
DtUpdateRoMsg (updateRoMsg.h), which contains receive order attribute updates. For a
full list of message kinds, please see rtiMsg.h.
You might want to use the RTIspy API to change the wire format for messages. This
typically involves subclassing one or more of the DtRtiMsgs and changing the way the
message is represented on the network. For example, to change the way attribute
updates are encoded, subclass from DtUpdateRoMsg, DtUpdateTsoMsg, or both.
You can also create brand new types of messages, but these will only be useful if you are
creating custom managers and are writing code to send and receive the new messages.
The various DtRtiMsg subclasses have accessor functions to set and inspect various
fields. All messages share common header information. Accessors for header fields are
inherited from the base DtRtiMsg. DtRtiMsg inherits from DtBaseMsg, which is taken
from the vlutil library in the VR-Link API.
When a DtRtiMsg is sent through a DtRtiConnection, the connection calls netRep() on
the message to get a buffer that contains exactly the bytes that need to be communi-
cated to other LRCs or the rtiexec. It then passes that buffer to its DtSocket for sending.
On the receiving side, when a connection gets a packet from its DtSocket, it constructs
the appropriate kind of DtRtiMsg by passing that network representation buffer to the
message's constructor.
When deriving your own kinds of DtRtiMsgs, you could just ignore the way we
normally implement the accessors, netRep(), and the from-network-representation
constructors, and provide brand new implementations for these functions. However, we
suggest taking advantage of the infrastructure that the DtRtiMsg class provides for
managing the buffer used to store the network representation, managing the message
headers, and so on. The recommended method for subclassing DtRtiMsg very closely
parallels the method of deriving new kinds of DtPdus in VR-Link. For examples, please
see the VR-Link documentation.
Once you have created new subclasses of DtRtiMsg, you must instruct the RTI to use
them instead of the default versions. Do this by properly configuring the RTI's message
factory. A message factory, represented by the DtRtiMsgFactory class (rtiMsgFact.h), is a
table that maps message types to creator functions that are used to instantiate the
appropriate subclass of DtRtiMsg. When the RTI needs to instantiate a particular kind
of message, it looks up the message kind in the DtRtiMsgFactory, finds the appropriate
creator function, and uses it to create the right type of message. The DtRtiMsgFactory is
obtained from the Connection Manager, using its msgFactory() member.
To configure the message factory so that it will contain your creator functions, use its
addSendCreator(), and addReceiveCreator() member, passing the message kind, along
with a creator function to be used for outgoing or incoming messages.
The following example assumes you are creating a subclass of DtUpdateMsg called
MyUpdateRoMsg:
class MyUpdateRoMsg : public DtUpdateRoMsg
{
public:
...
// Constructors, and overridden member functions
...
};
17-18 VT MÄK
The RTIspy Plug-in API — Responding to Dropped Federates
A separate file descriptor is used to signal the presence of reliable versus best effort data.
The file descriptor can be used in calls like select() to avoid unnecessary polling.
On Windows, this function works only if you are not using asynchronous mode. If you
are using asynchronous mode, DtReadFileDescriptor() returns -1, and you must use an
alternate method to avoid polling.
The DtReadFileEvent() member function (also declared in makRti.h), returns a
WIN32 event handle that signals when data is available to be read:
WSAEVENT DtReadFileEvent(RTI::RTIambassador* amb, RTI::TransportType
transport);
! These functions are not part of the standard RTI API. If you rely on these
functions, you will not be able to switch to other RTI implementations
without recompiling (and avoiding these functions).
17-20 VT MÄK
The RTIspy Plug-in API — rtiexec Plug-ins
From within your plug-in code, you can obtain the value of MyParam as follows,
assuming that params is a DtRIDParameters object that has been passed to one of your
derived managers:
int val;
DtlObjPtr value;
value = params->mtlEnvironment().lookup("MyParam");
if(!value.null())
{
val = value->fixnum();
}
If your parameter value is a string, use string() instead of fixnum(). For floats, use
flonum().
This technique relies on the MTL library, a utility library that is actually part of VR-
Link. You must include mtlInc.h and link with libmtl to use DtlObjPtr.
You do not need to use rid.mtl and its accompanying lisp-like interpretation system to
configure your plug-ins. Custom configuration mechanisms will not harm the RTI.
17-22 VT MÄK
The RTIspy Plug-in API — Compiling and Linking
where rtiDir is the path to the root of your MÄK RTI installation.
When you link your shared library, there is usually no need to link with any MÄK
libraries. Your plug-in will find the symbols it needs in the RTI libraries at run-time.
You must link against the RTI libraries, including the specialized RTI versions of the
VR-Link utility libraries. Include the following object and library modules in your
project settings:
libRTI-NG.lib
rtimatrixRT.lib
rtimtlRT.lib
rtivlutilRT.lib.
Provide a path to the MÄK RTI ./lib directory in your additional library path.
Example Makefiles are in the ./plugins/examples/printer directory.
! The RTIspy 1516 plug-ins must be linked against librti1516.lib. The RTIspy
plug-ins for HLA Evolved must be linked against librti1516e.lib.
To build debug versions of your DLL, append a d to the library name, for example,
rtimatrixRTd.lib. Provide a path to the MÄK RTI ./lib directory in your additional
library path.
! The RTIspy 1516 plug-ins must be linked against librti1516.lib. The RTIspy
plug-ins for HLA Evolved must be linked against librti1516e.lib.
17-24 VT MÄK
A
For example:
(setq EnableWireframe 1)
or:
(setqb parameter_name value)
For example:
(setqb disDestAddr (getenv (quote DEST_ADDR)))
A-2 VT MÄK
RID File Parameters Reference — MÄK Technologies Lisp (MTL) Files
If you have more than one statement to evaluate, use a sequence block:
;; HLA specific parameters
(if (equal HLA 1)
(sequence
(setqb fomMapperLib "")
(setqb fomMapperInitData "")
(setqb rprFomVersion 1.0)
(setqb pathToSublistFile "sublist.mtl")
(setqb ignoreAdvisories 0)
(setqb fedLookahead 1.0)
)
)
A-4 VT MÄK
RID File Parameters Reference — Federation-Wide Parameters
Parameter Description
RTI Compliance
RTI_forceFullCompliance Specifies all relevant RID file parameters to support
full compliance with the HLA Interface Specifica-
tion.
0 — Do not force full compliance
1 — Force full compliance.
Default: 0.
For more information, please see “Enabling and
Disabling HLA Services,” on page 12-2.
This parameter is ignored unless
RTI_configureConnectionWithRid is set to 1.
Communications Configuration
RTI_useRtiExec Determines whether the application should try to
connect to an rtiexec application when it creates,
destroys, or joins a federation execution.
0 — Do not use the rtiexec
1 — Use the rtiexec.
Default: 0.
This parameter is ignored unless
RTI_configureConnectionWithRid is set to 1.
RTI_tcpPort Specifies the port number to be used for TCP
messages. Default: 4000.
This parameter is ignored unless
RTI_configureConnectionWithRid is set to 1.
RTI_udpPort Specifies the port number to be used for UDP
messages. Default: 4000.
This parameter is ignored unless
RTI_configureConnectionWithRid is set to 1.
Parameter Description
RTI_destAddrString Specifies the IP address to which best effort federa-
tion execution traffic is sent. This will typically be a
broadcast address or multicast address.
Default: “229.7.7.7” (a multicast address).
A value of “0.0.0.0” is a special value that indicates
that the default broadcast address should be used.
If any of your federates are running on platforms on
which multicast is not supported, you must use a
broadcast address rather than a multicast address.
For more information, please see “Configuring Best
Effort (UDP) on a LAN,” on page 11-3.
This parameter is ignored unless
RTI_configureConnectionWithRid is set to 1.
RTI_tcpForwarderAddr Specifies the IP address of the machine that the
rtiexec application is running on. This value is
required if you are using reliable transport.
Default: “127.0.0.1”
For more information, please see “Configuring UDP
and Centralized TCP Forwarding on a LAN,” on
page 11-3 and “Configuring UDP and Centralized
TCP on a WAN,” on page 11-4.
This parameter is ignored unless
RTI_configureConnectionWithRid is set to 1.
RTI_internalMsgReliableWhenUsingRtiexec Specifies whether or not you want to send the RTI’s
internal bookkeeping messages using reliable trans-
port. This parameter is ignored if RTI_useRtiExec is set
to 0.
0 — Use best effort for all internal messages.
1 — Use reliable for all internal messages.
Default: 1.
For more information, please see “Choosing Best
Effort or Reliable Transport,” on page 10-2.
This parameter is set to 1 unless
RTI_configureConnectionWithRid is set to 1.
RTI_fomDataTransportTypeCon This parameter sets the FOM Data Transport Type
trol Controller as follows:
0 – FOM data is sent either best effort or reliable
based on FOM settings. Thi is the default. It is
forced when forceFullCompliance is enabled.
1 – All FOM data is sent best effort. It is the
forced setting when using lightweight configura-
tions.
2 – All FOM data is sent reliable. This is
permitted only when RTI_configureConnectionWithRid is
1.
A-6 VT MÄK
RID File Parameters Reference — Federation-Wide Parameters
Parameter Description
Optional Services
RTI_momServiceAvailable Enables (1) or disables (0) management object
model (MOM) services. Default: 0.
For more information, please see “Configuring MOM
Services,” on page 12-2
RTI_timeMgmt Enables (1) or disables (0) time management
services. Default: 0.
For more information, please see “Configuring Time
Management Services,” on page 12-2.
RTI_extend13and1516interop Extends interoperability between 1.3 and the 1516
versions (for example, handling DDM dimensions).
For more information, please see “RTI Interopera-
bility,” on page 1-8.
RTI_dataDistMgmt Enables (1) or disables (0) data distribution manage-
ment (DDM) services. Default: 0.
For more information, please see “Configuring DDM
Services,” on page 13-2.
RTI_ddmFixedGrid Enables (1) or disables (0) fixed grid DDM versus
distributed region DDM when DDM is enabled.
Default: 0.
For more information, please see “Configuring a
Fixed Grid DDM,” on page 13-3.
RTI_ddmFixedGridFilename Specifies the fixed grid configuration file name.
For more information, please see “Fixed Grid Search
Order,” on page 13-4.
For more information about all parameters in this
RTIspy Web GUI
section, please see “Configuring the RTIspy,” on
page 6-2.
RTI_webserviceHttpPort Specifies the HTTP Service port for web client
connections to the HTTP Server. Default: 8008.
RTI_webserviceRtiPort Specifies the port used by RTI components to
connect to the HTTP Server back-end. This param-
eter would be the same for multiple federates, but
does not have to be the same for all federates.
Default: 6002.
RTI_webserviceAddr Specifies the IP address of the HTTP server for this
RTI component to connect to. This parameter would
be the same for multiple federates, but does not
have to be the same for all federates.
Parameter Description
Service Implementation
RTI_responseInterval Specifies the amount of time (in seconds) that the
local RTI component waits to receive a response
from the rtiexec when processing the
createFederation, destroyFederation, or
joinFederation service calls. Default: 3 seconds.
For more information, please see “Specifying the
Response Interval,” on page 7-21.
RTI_useRandomNumberForFedHandle Instructs the RTI to create federate IDs based on
random numbers rather than the federate’s process
ID, when not using the rtiexec.
0 — Use process ID.
1 — Use pseudo random number.
Default: 0.
RTI_enableHlaObjectNamePrefix Specifies that the RTI, and only the RTI, will create
object names that begin with “hla”.
0 — Do not force object names to start with “hla”.
1 — Force object names to start with “hla”.
Default: 0.
RTI_sendDiscoveredClass Enables (1) or disables (0) transmission of discov-
ered class advisory messages. Default: 0.
To meet the interface specification requirements for
the turn updates on or off advisories, the discovery
class of remote objects must be relayed to federates
that own attributes of those objects. The transmis-
sion of the discover messages can be disabled,
reducing the overhead with only a slight degradation
of the advisory functionality (the actual class is used
instead of the discovered class).
RTI_enableFomBackwardsCompatibility Enables (1) or disables (0) use of the handle
numbering scheme used in MÄK RTI 2.3.3 and
earlier. It supports federates that recorded old
handles in a file. Default: 0.
RTI_variableLengthDataUsesNull Determines how VariableLengthData represents zero
length data. By default, when an instance of the
1516 (or HLA Evolved) VariableLengthData class is
empty (that is, length is zero), its data method
returns a pointer to a single byte initialized to zero.
To have the data method of an empty Variable-
LengthData instance return a NULL pointer, enable
RTI_variableLengthDataUsesNull.
A-8 VT MÄK
RID File Parameters Reference — Federation-Wide Parameters
Parameter Description
RTI_reuseReleasedObjectHandles Allows the RTI to reuse object instance handles if
the original instance has been deleted. Use of this
feature breaks the guarantee that handles are
unique over the lifetime of a federation. Handles will
still be unique at any given instant.
RTI_distributeFedFile Enables (1) or disables (0) distribution of the FED or
FDD file. Default: 0.
The federation must also enable RTI_useRtiExec and
RTI_internalMsgReliableWhenUsingRtiexec.
For more information, please see “Distributing the
FED File,” on page 7-4.
RTI_fullFedFileDistribution Federates and the federation execution will only
request FOMs not locally available if set to 0. If set
to 1, the federation execution and federates will
distribute all FOM files to all federates snf fedet-
stions even if they already have it.
RTI_enableNameReservation Enables (1) or disables (0) the name reservation
service in HLA 1516 or HLA Evolved. Default: 1.
RTI_strictNameReservation Enables (1) or disables (0) use of strict 1516 name
reservation. If enabled, it ensures that no more than
one object can reserve a name for the lifetime of the
federation. Default: 0.
Fault Tolerance
RTI_deleteOrphans Specifies whether or not the objects for which a
terminated federate owns the privilegeToDelete will
be automatically deleted.
0 — disabled (all owned attributes are orphaned).
1 — enabled.
Default: 1.
For more information, please see “Handling
Orphaned Objects,” on page 7-20.
RTI_enableFederateHeartbeat Enables (1) or disables (0) the requirement that
federates send a heartbeat.
RTI_federateHeartbeatInterval Specifies the frequency, in seconds, with which
each federate LRC sends a heartbeat message.
Default: 10.
Valid only if RTI_enableFederateHeartbeat is set to 1.
For more information, please see “Responding to
Abnormal Termination,” on page 7-19.
Parameter Description
RTI_federateTimeoutInterval Specifies the time period in which the federation
must receive a heartbeat or it will forcibly remove
the federate. Default: 25.
Valid only if RTI_enableFederateHeartbeat is set to 1.
For more information, please see “Responding to
Abnormal Termination,” on page 7-19.
RTI_reconnectEnabled Specifies that the LRC try to reconnect to the RTI
Forwarder RTI_federateReconnectPause seconds after a
TCP connection is lost. Default: 0.
For more information, please see “Reconnecting to
the RTI Forwarder,” on page 7-21.
RTI_federateReconnectPause If RTI_reconnectEnabled is enabled, specifies the amount
of time, in seconds, to wait before trying to recon-
nect to the RTI Forwarder. Default: 5.
“Reconnecting to the RTI Forwarder,” on page 7-21.
RTI_rtiExecReconnectPause If RTI_reconnectEnabled is enabled, specifies the amount
of time, in seconds, to wait before trying to recon-
nect to the RTI Forwarder. Default: 4.
For more information, please see “Reconnecting to
the RTI Forwarder,” on page 7-21.
A-10 VT MÄK
RID File Parameters Reference — Federation-Wide Parameters
Parameter Description
Parameter Description
RTI_maxNumFederates Specifies the maximum number of federates allowed
in a federation at any one time. This parameter only
applies when sender-side filtering is enabled. Each
update and interaction message has a bitmask of at
least this number of bits appended, so increasing
the number of federates increases the overhead.
Default: 100.
For more information, please see “Configuring
Sender-Side Filtering (Smart TCP Forwarding),” on
page 10-5.
RTI_forwardingDelay When publication changes affect forwarding,
routing filters are ignored for the specified interval
to allow updates to remote subscription information.
Default: 3.0.
RTI_routeToAllByDefault When publication changes affect forwarding, route
to all federates until specifically informed by remote
federates that they have not discovered an object or
are not subscribed to an interaction class.
0 — disable.
1 — enable.
Default: 0.
RTI_discoveryMsgBundlingDelay Delays the sending of discovery messages for the
specified number of seconds. This allows discovery
messages to be bundled together. Bundling can
reduce traffic and processing time if a federate is
creating a large number of objects at once.
Default: 0.0 seconds.
RTI_enableFedexMsgRouting This parameter makes sure that internal messages
destined for the rtiexec are sent only to the rtiexec
and that any messages (both internal and FOM) that
the rtiexec does not process are not sent to the
rtiexec. Default: 1.
0 — disable filtering.
1 — enable filtering.
For more information, please see “Configuring
Sender-Side Filtering for rtiexec Messages,” on
page 10-7.
RTI_connectionTestInterval Specifies the time to wait between connection tests
for connections that may be idle for long periods.
A-12 VT MÄK
RID File Parameters Reference — Federation-Wide Parameters
Parameter Description
Save/Restore Configuration
RTI_enableSaveRestoreWhenUsingRtiexec Enables (1) or disables (0) save/restore when you
are using the rtiexec.
RTI_saveRestoreTimeout Specifies the number of seconds the federation
execution waits for a save/restore operation to
complete before indicating a failure.
Default: 120 seconds.
For more information, please see “Configuring
Save/Restore,” on page 7-23.
RTI_saveTransientMessages Enables (1) or disables (0) saving of transient
messages during a save, to be delivered upon
restore. Default: 0.
For more information, please see “Configuring
Save/Restore,” on page 7-23.
For details about update rate reduction, please see
Update Rate Reduction
“Update Rate Reduction,” on page 16-2.
RTI_enableUpdateRateReduction Enables (1) or disables (0) update rate reduction.
RTI-addUpdateRate Registers an update rate with the LRC. You must
specify a unique name and the update rate in hertz.
For example, RTI-addUpdateRate( "low", 0.1) regis-
ters an update rate called "low" with the value of
0.1 hertz.
RTI-addUpdateRateSubscription Applies update rate reduction to a specified object
class. Can be inclusive or exclusive. (This parameter
is federate-specific.)
RTI_receiveTolerance Specifies a percentage reduction to the inter-arrival
time between attribute updates. It reduces the inter-
arrival time for a given rate so that an update that
appears to arrive early at the receiver is accepted.
Parameter Description
RTI_configureConnectionWithRid Specifies that the rtiexec or federate use the
connection configuration parameters in the RID file
instead of those in the RTI Assistant connection
configurations.
License Checking
RTI_forceUnlicensedForTwo Forces the MÄK RTI to use the unlicensed version
without checking for a license. This setting saves
time at startup. If you have a licensed version of the
MÄK RTI, do not skip license checking.
0 — Check for a license.
1 — Do not check for a license.
Default: 0.
RTI_disableUnlicensedForTwo Enables (0) or disables (1) unlicensed mode in
Windows (even if the forceUnlicensedForTwo parameter is
set).When this parameter is enabled, federates must
check out a license to run. Default: 0.
RTI_rtiExecPerformsLicensing Enables (1) or disables (0) license checkout from the
rtiexec. The rtiexec will check out a license for each
joining federate. Default 0.
A-14 VT MÄK
RID File Parameters Reference — LRC-Specific Parameters
Parameter Description
RTI_lrcMcastDiscoveryDelay Specifies the interval that the LRC waits for a multi-
cast discovery response. Default: 3.0.
RTI_execMcastDiscoveryDelay Specifies the interval that the rtiexec waits for a
multicast discovery response. Default: 1.0.
RTI_mcastDiscoveryTries Specifies the number of times the federate should
try to find the multicast discovery address before it
defaults to best effort transport. Default: 5.
For more information, please see “Automatically
Locating the RTI Forwarder and rtiexec,” on
page 10-4.
Optional Services
RTI_throwExceptionOnConcurrentAccess In HLA 1.3, controls whether the ConcurrentAc-
cessAttempted exception is thrown when an RTIam-
bassador service call is called while concurrently
processing another service call. This usually
happens when a FederateAmbassador callback calls
another RTIambassador service call during a tick().
0 — Do not throw exceptions.
1 — Throw exceptions.
Default: 0.
RTI_throwExceptionForDisabledService Specifies whether or not function calls throw an
exception when they call a service that is not acti-
vated in the MÄK RTI.
0 — Do not throw exceptions.
1 — Throw exceptions.
Default: 1.
For more information, please see “Choosing Silent
Failure Instead of Exceptions,” on page 7-22.
RTI_enableWarningsForDisabledServices Specifies whether or not the RTI Assistant displays
a message when an exception is thrown for a
disabled service. Default: 1 (on).
Parameter Description
RTI_conveyRegionDesignatorSwitch Specifies whether the Convey Region Designator
switch is enabled (1), or disabled (0).
RTI_preferRidToFedSwitchTable must be enabled to use this
parameter. Otherwise it is overridden by the FED file
switch table definitions. Default: 0.
RTI_conveyProducingFederateSwitch Specifies whether the Convey Producing Federate
switch is enabled (1), or disabled (0).
RTI_preferRidToFedSwitchTable must be enabled to use this
parameter. Otherwise it is overridden by the FED file
switch table definitions. Default: 1.
RTI_serviceReportingSwitch Specifies whether the Service Reporting switch is
enabled (1), or disabled (0). RTI_preferRidToFedSwitchTable
must be enabled to use this parameter. Otherwise it
is overridden by the FED file switch table definitions.
Default: 0.
RTI_exceptionReportingSwitch Specifies whether the Exception Reporting switch is
enabled (1), or disabled (0). RTI_preferRidToFedSwitchTable
must be enabled to use this parameter. Otherwise it
is overridden by the FED file switch table definitions.
Default: 0.
RTI_delaySubscriptionEvaluationSwitch Specifies whether the Delay Subscription Evaluation
switch is enabled (1), or disabled (0).
RTI_preferRidToFedSwitchTable must be enabled to use this
parameter. Otherwise it is overridden by the FED file
switch table definitions. Default: 0.
For all parameters in this section, please see
Advisory Configuration
“Configuring Use of Advisory Messages,” on
page 4-3 for more details.
RTI_interactionRelevanceAdvisorySwitch Specifies whether the Interaction Relevance Advi-
sory switch is enabled (1), or disabled (0).
RTI_preferRidToFedSwitchTable must be enabled to use this
parameter. Otherwise it is overridden by the FED file
switch table definitions. Default: 1.
RTI_objectClassRelevanceAdvisorySwitch Specifies whether the Object Class Relevance Advi-
sory switch is enabled (1), or disabled (0).
RTI_preferRidToFedSwitchTable must be enabled to use this
parameter. Otherwise it is overridden by the FED file
switch table definitions. Default: 1.
RTI_attributeRelevanceAdvisorySwitch Specifies whether the Attribute Relevance Advisory
switch is is enabled (1), or disabled (0).
RTI_preferRidToFedSwitchTable must be enabled to use this
parameter. Otherwise it is overridden by the FED file
switch table definitions. Default: 0.
A-16 VT MÄK
RID File Parameters Reference — LRC-Specific Parameters
Parameter Description
RTI_attributeScopeAdvisorySwitch Specifies whether the Attribute Scope Advisory
switch is enabled (1), or disabled (0).
RTI_preferRidToFedSwitchTable must be enabled to use this
parameter. Otherwise it is overridden by the FED file
switch table definitions. Default: 0.
Diagnostic Configuration
RTI_notifyLevel Specifies the category of notification messages to
print.
0 — Fatal.
1 — Warn.
2 — Notify.
3 — Verbose.
4 — Debug.
Default: 1.
RTI_logFileDirectory Specifies a directory where the log file should be
output. Default: “” (the working directory).
RTI_logfileName Enables logging to a file with the specified name. If
just a filename is specified, a file is written for each
federate on the computer in the directory from
which a federate is executed. If a pathname is spec-
ified, data for all federates on the machine is written
to the same file unless RTI_reuseLogFile is 0.
Default: “makRti.log”.
For more information, please see “Enabling LRC
Diagnostic Data Logging in the RID File,” on
page 8-11.
RTI_rtiExecLogFileName Enables (1) or disables (0) the rtiexec log file and
specifies the file's name. Default: “rtiExec.log”.
For more information, please see “Logging rtiexec
Output,” on page 5-3.
RTI_rtiForwarderLogFileName Enables (1) or disables (0) the RTI Forwarder log file
and specifies the file's name.
Default: rtiForwarder.log.
RTI_reuseLogFile Enables (1) or disables (0) writing logs to the file
specified by RTI_logfileName (default: makRti.log).
When enabled, it is possible that multiple federates
might write to the same log file. If this option is
disabled, the logs are written to makRti###.log
where ### is replaced by the system time in
seconds. Each federate will have a different log file.
Default: 1.
For more information, please see “Logging rtiexec
Output,” on page 5-3.
Parameter Description
RTI_dumpFed Enables (1) or disables (0) dumping of the contents
of the FED file when the notification level is set to
verbose (>3). Default: 0.
RTI_dumpRid Enables (1) or disables (0) dumping of the contents
of the RID file when the notification level is set to
verbose (>3). Default: 0.
RTI_detachNotifyLevelFromStdOut Detaches all notification messages at the given level
and above from the standard output. This setting
has no affect on logging notifications to a file.
Default: 5 (no notification levels detached).
RTI_ridConsistencyChecking Enables (1) or disables (0) checking of the RID file
for consistency with the rtiexec’s RID file.
For more information, please see “The RID File
Consistency Checker,” on page 4-9.
RTI-addRidParametersToOverride Specifies a list of parameters to add to the default
list of parameters that are checked for consistency.
For more information, please see “Selecting the
Parameters to be Checked,” on page 4-10.
RTI-removeRidParametersToOverride Specifies a list of parameters to remove from the
default list of parameters to check for consistency.
For more information, please see “Selecting the
Parameters to be Checked,” on page 4-10.
RTIspy Configuration
RTI_enableNetworkMonitoring Enables (1) or disables (0) the RTIspy Network
Monitoring Tool. Default: 1.
The RTIspy web services plug-in must be loaded and
enabled to enable network monitoring.
For more information, please see “Enabling Network
Monitoring,” on page 9-10.
RTI_enableNetworkTesting Enables (1) or disables (0) network testing.
RTI_logNetworkMonitorStatistics Enables (1) or disables (0) network statistic file
logging for the RTIspy Network Monitoring Tool.
Default: 0. The RTIspy Network Monitoring Tool
must be enabled for this parameter to be relevant.
For more information, please see “Logging Network
Monitoring Statistics,” on page 9-10.
RTI_pluginDirectory Specifies a directory relative to the RTI library path
in which plug-in dynamic libraries are located.
Default: ../plugins.
RTI-addPluginName Specifies the name of a plug-in that the RTI should
load.
A-18 VT MÄK
RID File Parameters Reference — LRC-Specific Parameters
Parameter Description
For all parameters in this section, please see
RTIspy GUI
“Configuring the RTIspy,” on page 6-2.
RTI_enableRtiexecWebservice Enables (1) or disables (0) the RTIspy at the rtiexec.
RTI_enableLrcWebservice Enables (1) or disables (0) the RTIspy at this
federate.
RTI_enableLrcWebserviceEventLog Enables (1) or disables (0) the LRC web service
event log for this federate.
RTI_webserviceRtiPort Specifies the port used by RTI components to
connect to the HTTP Server back-end.
Default: 6002.
RTI_webserviceAddr Specifies the IP address of the HTTP server for this
RTI component to connect to.
RTI_webserviceEnableServerAutoStart Attempts to start an HTTP server locally if one does
not already exist (and RTI_webserviceAddr does not
equal localhost : 127.0.0.1).
RTI_webserviceEnableForwarding Allows the rtiexec to forward web client requests to
federates running the web service plug-in. This
allows the rtiexec to act as a proxy for the entire
RTI network.
RTI_webserviceNotifyLevel Specifies the notification level for messages to the
web service event log.
Service Implementation
RTI_singleCallbackPerTick Specifies how many packets should be read for
each tick. Also applies to tick(min,max).
0 — A call to RTI::tick with no arguments reads all
pending packets.
1— A single call to RTI::tick() should result in one
packet being processed from the input stream.
Default: 0.
For more information, please see “Configuring
tick(min,max),” on page A-28.
RTI_checkFlag Enables (1) or disables (0) checking the validity of
attributes and parameters and the ownership of
attributes passed to updateAttributeValues() and
sendInteraction().
Default: 1.
Setting this flag to 0 results in a small performance
gain, but it means that the AttributeNotDefined,
AttributeNotOwned, and
InteractionParameterNotDefined exceptions will
never be thrown by these services.
Parameter Description
RTI_processUnknownUpdatesForDiscovery Enables (1) or disables (0) processing unknown
objects for discovery. Default: 1.
For more information, please see “Processing
Discovery of Unknown Objects,” on page 7-22.
RTI_defaultFedFile Specifies a default FED file in the RID file to support
joining without calling create when operating in
lightweight mode. In lightweight mode and using
the default FED file, the join federation service
always associates the federation name with the
default FED file. If the value is an empty string, then
the FED file will either be established by a previous
create federation service call or federation name
“.fed”.
Default: ““.
For more information, please see “Specifying the
FED File,” on page 7-3.
RTI_crcCheckFedFile If RTI_distributeFedFile is disabled (0), specifies whether
or not a federate whose FED file has a different CRC
than the rtiexec’s FED file can join the federation.
0 — Notify federate if the CRC of its FED file is
different from the ritexec’s FED file. Allow the
federate to join.
1 — If the CRC of the federate’s FED file is different
from the ritexec’s FED file, do not allow the federate
to join.
Default: 0.
RTI_catchFedAmbExceptions Configures the RTI so that exceptions thrown by the
federate in a federate ambassador callback are
caught and handled internally by the RTI. If not
enabled, the RTI rethrows the exception to be
handled by the federate by catching exceptions
from tick(). The internal RTI state may be corrupted
if this option is disabled.
0 — Do not catch exceptions.
1 — Catch exceptions.
Default: 1.
RTI_strictFomChecking Configures the RTI to strictly check the format of
the FDD file (for example, to ensure presence of
transport and order or disallow unknown tags). If
enabled, an error in the FDD file causes the create
federation service to fail. This parameter affects the
HLA 1516 or HLA Evolved FDD files.
0 — Do not perform strict checking.
1 — Perform strict checking.
Default: 0.
A-20 VT MÄK
RID File Parameters Reference — LRC-Specific Parameters
Parameter Description
RTI_defaultTimeImplementation Configures the RTI with the name of a default time
implementation if an empty string is provided in the
createFederationExecution service call. This default
is used to override the default in the logical time
library that is returned when the logical time name is
an empty string. Default: ““.
RTI_flushTimeoutInterval Specifies the amount of time, in seconds, that an
LRC will try to flush messages to the network when
it is resigning from a federation. Default: 3.0.
Parameter Description
RTI_tcpBufferSize Specifies the size of the buffer into which TCP
packets get read. Default: 20000 bytes.
For more information, please see“Choosing Best
Effort or Reliable Transport,” on page 10-2.
RTI_socketReceiveBufferSize Specifies the size of the TCP and UDP network
receive buffers. Increasing the size can increase the
RTI’s tolerance of peak network loading.
Default: 50000.
For more information, please see “Configuring the
Network Buffer Sizes,” on page 10-8.
RTI_socketSendBufferSize Specifies the socket send buffer size.
Default: 50000.
RTI_enablePacketBundling Bundles messages together into a single TCP packet
or UDP datagram, up to the size limit specified by
RTI_packetBundlingSize.
For more information, please see “Packet Bundling
for Reliable and Best Effort Messages,” on
page 10-3.
RTI_packetBundlingSize When packet bundling is enabled, specifies the size
of the message bundles for TCP packets and UDP
datagrams. The value should be <= MTU of the
network. Default: 0.
For more information, please see “Packet Bundling
for Reliable and Best Effort Messages,” on
page 10-3.
RTI_maxUdpPacketSize Specifies the maximum size for a UDP packet. The
default is 15000 for legacy purposes. However,
packets this large are not recommended.
RTI_enableBestEffortSendRetry Enables (1) or disables (0) automatic resending of
failed attempts to send best effort messages.
Configured with RTI_bestEffortSendRetryWaitUsec and
RTI_bestEffortSendRetries. Default 0.
RTI_bestEffortSendRetries If RTI_enableBestEffortSendRetry is enabled (1),
RTI_bestEffortSendRetries configures the number of times
a failed best effort send is retried. Default: 3.
For more information, please see “Controlling
Congestion for Best Effort Sockets,” on page 10-9.
RTI_bestEffortSendRetryWaitUsec If RTI_enableBestEffortSendRetry is enabled,
RTI_bestEffortSendRetryWaitUsec configures the time to
wait between failed best effort sends, in microsec-
onds. Default: 100.
A-22 VT MÄK
RID File Parameters Reference — LRC-Specific Parameters
Parameter Description
RTI_useBusyWaitForTickMinMax Specifies that the RTI will use busy wait in
tick(min,max) when no messages are pending.
0 — Disabled (use select).
1 — Enabled.
Default: 0.
For more information, please see “Configuring
tick(min,max),” on page A-28.
RTI_enableMessageThrottling Enables (1), or disables (0) throttling of transmission
and receipt of internal messages (for all versions of
the RTI). This parameter also enables or disables
buffering of provideAttributeValueUpdate callbacks
in HLA 1516 or HLA Evolved. Default: 0 (disabled).
RTI_transmitDelay If RTI_enableMessageThrottling is enabled this parameter
configures the time to delay before processing
requests. Default 0.
For more information, please see “Configuring the
Delay Time for Processing Internal Messages,” on
page 12-3.
RTI_transmitRate If RTI_enableMessageThrottling is set to 1, RTI_transmitRate
specifies the number of messages per second that
you want to send.
Default 0.0 (disabled).
For more information, please see “Transmitting
Internal Messages Across Ticks,” on page 12-4.
RTI_autoProvideDelay If RTI_enableMessageThrottling is set to 1, enables buff-
ering of automatic provideAttributeValueUpdate
callbacks in HLA 1516 or HLA Evolved to limit the
number of provides requested if multiple federates
require updates. Default: -1 (disabled).
For more information, please see “Buffering Auto-
matic Update Requests (1516 and Evolved),” on
page 10-10.
RTI_dualTransmitFirstInteractionRegions Enables (1) or disables (0) sending the DDM interac-
tion region information both best effort and reliably
the first time. A race condition between a best
effort DDM interaction and its region information
(sent reliably) is alleviated by transmitting the region
information via best effort the first time. Default: 0.
Parameter Description
RTI-addDestAddrString Adds one or more additional destination addresses
for best effort packets, which can be broadcast,
unicast, or multicast addresses. All best effort data
is sent to all registered addresses.
Default: “0.0.0.0”.
For more information, please see “Configuring UDP
Over a WAN without Distributed Forwarding,” on
page 11-6.
RTI_maxForwarderQueue Specifies the size of the queue for messages that
exceed the size of the receive buffer.
When a federate does not tick fast enough and its
receive buffer fills, it starts placing the messages
into the queue. Once the queue has reached the
maximum size, the federate is dropped. If the size is
set to -1 (default), it queues messages indefintely
until the federate processes them all, or until all
system memory is completely consumed.
RTI_allProvideUpdateRequestsDelayed Specifies that RTI_autoProvideDelay should apply to all
update requests, not just those generated due to the
autoProvide switch.
RTI-addUpdateRateSubscription Applies update rate reduction to a specified object
class. Can be inclusive or exclusive.
A-24 VT MÄK
RID File Parameters Reference — LRC-Specific Parameters
Parameter Description
Asynchronous Processing
RTI_processingModel Specifies the synchronous/asynchronous I/O oper-
ating mode, as follows:
0 — Synchronous mode.
1 — Asynchronous I/O. Perform network reads and
writes in an asynchronous thread (reduces depen-
dency on tick rate to avoid msg drops).
2 — Asynchronous Message Processing. In addition
to performing network reads, the asynchronous
thread processes messages. However, it will not
perform any asynchronous federate ambassador
callbacks. The callbacks will be cached and deliv-
ered when the federate calls tick or evokeCallbacks.
3 — Asynchronous Callbacks. Process messages
and invoke callbacks in an asynchronous thread.
Default: 1.
RTI_tickWaitPeriod Determines the smallest increment of time that a
tick will cause a federate to wait for messages from
the I/O thread when using asynchronous I/O. If set
to 0.0, the minimum time specified in the tick
service invocation is used instead. Default 0.0.
RTI_IOPeriod Specifies the amount of time polling operations
take, in seconds. Not used in Windows, which is
event driven. Must be greater than or equal to zero.
Default: 0.01.
RTI_tickFavorsNetwork Enables (1) or disables (0) a thread yield in tick().
Default: 1.
RTI_maxIOQueue Specifies how many messages can be queued to
send before blocking. Default 20000.
RTI_maxIOCount Specifies the number of times the thread can cycle
before it must yield. Must be greater than zero.
Default: 1000.
RTI_IOLockQueue Specifies the number of messages processed per
locking of the queues. Adjustment of this value
allows for fine or coarse locking. Must be greater
than zero. Default: 500.
Parameter Description
DDM Configuration
RTI_minChannelAddr Specifies the starting network multicast address for
a pool of multicast groups used by DDM. The pool
defined by this parameter and the RTI_maxChannelAddr
parameter is used by any federate that loads this
configuration file. Default: “224.0.1.0” if using
IPv4; “ff02::3:1” if using IPv6.
RTI_maxChannelAddr Specifies the final network multicast address for a
pool of multicast groups used by DDM. The pool
defined by this parameter and the RTI_minChannelAddr
parameter is used by any federate that loads this
configuration file. Default: “239.255.255.255” if
using IPv4; “ff02::3:ffff” if using IPv6.
For more information, please see “Configuring a
Fixed Grid DDM,” on page 13-3.
RTI_addressDelay Specifies the delay by which data associated with
changed regions and associations is broadcast
(default multicast) while the DDM routing informa-
tion is propagated to remote federates. Default: 1.0.
RTI_conveyOnlyAvailableDimensions If RTI_conveyOnlyAvailableDimensions is enabled (1), the
conveyed regions only include those dimensions
that are available to the received interaction class. If
the regions used to send the interaction include
dimensions that are not available at the received
interaction class, they are removed from the
conveyed regions.
If RTI_conveyOnlyAvailableDimensions is disabled (0), the
conveyed regions include exactly those dimensions
that were in the regions used to send the interac-
tion. As a result, there may be dimensions that are
not available at the received interaction class.
Default: 0.
RTI_implicitDdmParamsFile Specifies the name of the file that has implicit DDM
configuration parameters.
Default: implicitDdmParams.mtl.
For details about all parameters in this section,
MOM Configuration
please see “Configuring MOM Services,” on
page 12-2.
RTI_momExceptionLogging Enables (1) or disables (0) MOM exception logging.
Default: 0.
RTI_momFederateUpdateInterval Specifies the default interval in seconds at which
the MOM Federate object will be updated. Default:
0 (no updates sent).
A-26 VT MÄK
RID File Parameters Reference — LRC-Specific Parameters
Parameter Description
Save/Restore Configuration
RTI_saveRestoreDirectory Specifies the directory used for writing and reading
save files. If the saved federation contains multiple
federates of the same type, each federate of a given
type must have access to all of the LRC save files of
that type. The RTI determines the save files used for
each federate. Default: “.”.
For details about all parameters in this section,
Shared Memory
please see “Configuring Use of Shared Memory,” on
page 14-2.
RTI_sharedMemoryMode Enables the RTI to use shared memory for communi-
cation between co-located federates and other RTI
components (for example, the rtiexec). Valid
settings are:
0 — disables shared memory (default).
1 — enables shared memory only (no network I/O).
2 — enable shared memory manager with network
I/O.
RTI_sharedMemoryName Specifies the name of a shared memory file. All co-
located federates must use the same shared
memory file name in order to communicate through
the same shared memory region.
Default: “RtiSharedMemory”.
RTI_sharedMemoryQueueLength Specifies the number of message queue segments
(that is, 200 byte buckets) that can be queued in
shared memory. Default: 5000.
RTI_sharedMemoryMgrMaxWait Specifies how long (in seconds) the Shared Memory
Queue Manager process waits for messages to
arrive in the message queue before it polls the
network interface for incoming messages.
Default: 0.25.
RTI_sharedMemExecLogFileName Enables logging shared memory executive output to
a file with the specified name.
Default: “shmExec.log”
For details about modular FOMs, please see “Using
Modular FOMs
FOM Modules,” on page 15-2.
RTI_fomModuleMerging Enables (1) or disables (0) merging of FOM modules.
Default: 0.
RTI-addCreateFomModule Specifies a FOM module to add when creating a
federation.
RTI-addJoinFomModule Specifies a FOM module file to add when joining a
federation.
Parameter Description
RTI_momModuleExtensionFileName Specifies that the LRC will use the local FOM
module file rather than having the rtiexec send it
back.
RTI_preferLocalFomModule Specifies a MOM module file to add when creating a
federation.
i A message may only cause internal processing and not necessarily generate a
callback. The return value of tick() or tick(min,max) will be true if a message
has been processed; otherwise, it will be false.
A-28 VT MÄK
B
Example Federates
This appendix describes the example federates provided with the MÄK RTI.
Example Federates......................................................................................... B-2
The rtisimple Example.................................................................................. B-2
The simpleDDM Example............................................................................ B-4
The simpletime Example .............................................................................. B-5
HLA Bounce................................................................................................. B-7
Running HLA Bounce ........................................................................... B-7
Demonstrating Ownership Management................................................ B-9
Demonstrating DDM .......................................................................... B-10
The MakShooter Example .......................................................................... B-11
Building MakShooter ........................................................................... B-11
Running MakShooter........................................................................... B-11
Playing MakShooter ............................................................................. B-13
B-2 VT MÄK
Example Federates — The rtisimple Example
B-4 VT MÄK
Example Federates — The simpletime Example
B-6 VT MÄK
Example Federates — HLA Bounce
B-8 VT MÄK
Example Federates — HLA Bounce
B-10 VT MÄK
Example Federates — The MakShooter Example
4. Click Connect. The Configure Game dialog box opens (Figure B-12).
B-12 VT MÄK
Example Federates — The MakShooter Example
B-14 VT MÄK
Index
-- command-line option 6-7, 14-7 A
--AutoExit command-line option 6-7, 14-6
-A command-line option 5-10, 14-6
--Daemon command-line option 14-6
accessing RID parameters 17-22
--destAddrString command-line option 5-10, 14-6
addFedAmbWrapper() function 17-7
--distributedForwarderPort command-line option
addObserver() function 17-6
5-10
addReceiveCreator() function 17-17
--doNotUseRoutesFile command-line option 5-10
address
--enableLogging command-line option 6-7
IP 11-3
--forwarderToConnectTo command-line option
RTI Assistant 5-9
5-10
sending to multiple 11-6
--graceful command-line option 14-7
addSendCreator() function 17-17
--help command-line option 5-10, 6-7, 14-6
advisory message, sending 4-3
--ignore_rest command-line option 5-10, 6-7, 14-
ambassador, child 17-7
7
ambImp.h header file 17-2
--manual command-line option 5-10
ambObserver.h header file 17-6
--networkInterfaceAddr command-line option 5-
ancillary forwarder 11-7
10
API, RTIspy 1-6
--notifyLevel command-line option 5-10, 6-7, 14-
API Call Statistics, displaying 9-13
7
application, multi-threaded 2-2
--routesFileName command-line option 5-11
argument, except 17-7
--runDaemonized command-line option 6-7
asynchronous
--ruthLess command-line option 14-6
callbacks 2-2, 2-4, 2-6
--setLogFileName command-line option 5-10, 14-
message processing 2-6
6
processing 2-4, 10-9
--setNotifyQuiet command-line option 14-7
asynchronous I/O 2-5, 17-12
--setRidFileName command-line option 5-11, 14-
concepts 2-3
7
attribute
--setTcpPort command-line option 5-11, 14-7
displaying for object 8-6
--setUdpPort command-line option 5-11, 14-7
passelization 13-9
--testPage command-line option 6-7
sending 10-2
--version command-line option 5-11, 6-7, 14-7
large 10-8
-- command-line option 5-10
B class
descriptors 17-3
bandwidth
DtAsyncConnectionMgr 17-13
minimizing use of 10-5
DtBaseMsg 17-17
reducing 10-3
DtConnectionMgr 17-3, 17-10, 17-13, 17-14,
best effort 2-7, 11-3
17-16, 17-21
See also UDP
DtConnectMsg 17-19
choosing 10-2
DtDisconnectMsg 17-19
configuring for LAN 11-3
DtFedAmbWrapper 17-7
over WAN 11-6
DtFederate 17-21
topologies 2-7
DtFederateManager 17-3
unicast distributed forwarding 11-23
DtFedExec 17-21
WAN 2-7
DtFomClassManager 17-3
binding, Java 3-8
DtInteractionManager 17-3
bookmark, RTIspy 6-9
DtInterClassInfo 17-3
broadcast 2-7
DtJoinMsg 17-17
address 11-3
DtlObjPtr 17-22
RTI Assistant 5-9
DtObjectClassInfo 17-3
broken connection 7-21
DtObjectManager 17-3
buffer
DtPdu 17-17
receive 10-8
DtRIDParameters 17-22
send 10-8
DtRtiAmbassadorImplementor 17-2
TCP 10-8
subclassing 17-10
buffering, update requests 10-10
DtRtiAmbassadorObserver 17-6
building
function 17-7
with 1.3 3-2
subclassing 17-6
with 1516 3-4
DtRtiConnection 17-14, 17-16, 17-17, 17-21
bundle, size 11-18
DtRtiExec 17-21
bundling
DtRtiMessage 17-17
enabling 11-18
DtRtiMsgFactory 17-17
message A-12
DtRtiObject 17-3
packets 10-3
DtSocket 17-14, 17-15, 17-17
DtTcpForwarderThread 17-19
C DtUpdateMsg 17-18
DtUpdateRoMsg 17-17
callback, asynchronous 2-2, 2-4, 2-6 hierarchy in FOM 17-3
centralized server HLAfloat64Interval 3-8
running 6-7 HLAfloat64Time 3-8
web services 6-2, 6-3, 6-6 HLAfloat64TimeFactory 3-8
centralized TCP forwarding 2-8 HLAinteger64Interval 3-8
configuring 11-4 HLAinteger64Time 3-8
on WAN 11-5 HLAinteger64TimeFactory 3-8
certification, HLA 1-2 interaction, displaying 8-8
chaining wrappers 17-8 LogicalTimeFactoryFactory 3-8
changing LogicalTimeFactoryImpl 3-7
notification level, LRC log 8-13 LogicalTimeFactoryImplFloat 3-7
checking, RID file consistency 4-9 LogicalTimeFactoryImplInteger 3-7
child ambassador 17-7 LogicalTimeImpl 3-7
choosing, transport type 10-2 LogicalTimeImplFloat 3-7
LogicalTimeImplInteger 3-7
i-2 VT MÄK
Index
i-4 VT MÄK
Index
i-6 VT MÄK
Index
i-8 VT MÄK
Index
i-10 VT MÄK
Index
-n command-line option 5-10, 6-7, 14-7 Objects and Interaction Statistics page 9-11
name, shared memory region 14-4 Objects View 8-6
name reservation, in lightweight mode 7-6 obj.h header file 17-3
NAT 6-8, 11-25 objMgr.h header file 17-3
See also network address translation observer
nesting wrappers 17-8 deleting 17-6
netRep() function 17-17 function 17-6
network registering 17-6
compatibility 1-5 opening, rtiexec Console 7-23
congestion 10-9 optimizing
device 10-9 distributed forwarding on WAN 11-12
overhead 9-2 performance 9-2
statistics orphaned object 7-19, 7-20
log files 9-10 overhead, RTIspy 6-9
logging 9-10 overriding
topologies, LAN 2-7 functions 17-7
network address translation 6-8, 11-25 manager 17-9
See also NAT RTI services 17-10
network map 7-7 ownership management 7-6, B-7
node 7-8 service 17-3
opening rtiexec page 7-13
network monitoring tool. See RTIspy Network
Monitoring window P
network receive buffer, configuring 10-8 -P command-line option 5-11, 14-7
node packet
information 7-9 bundling 10-3
network map 7-8 forwarding, TCP 2-7
normalization, implicit DDM 13-19 parameter
notification accessing RID 17-22
configuring 5-6 commenting out A-2
level 5-10 consistency of 4-9
notification level, changing for LRC log 8-13 forceUnlicensedForTwo A-14
RID A-4, A-5, A-14
RTI_addForwarder 11-17, 11-18, 11-19, 11-20,
O 11-26
objClassInfo.h header file 17-3 RTI_addForwarderConnection 11-26
object RTI_addForwarderRoute 11-26
attributes sent 10-2 RTI_addressDelay 13-2, A-26
class, displaying in RTIspy 8-8 RTI_allProvideUpdateRequestsDelayed 10-10, A-24
displaying attributes 8-6 RTI_autoProvideDelay 10-10, A-23
federate 9-11 RTI_autoProvideSwitch A-15
management 17-3 RTI_bestEffortSendRetries 10-9, A-22
orphan 7-19, 7-20 RTI_bestEffortSendRetryWaitUsec 10-9, A-22
undiscovering 8-7 RTI_catchFedAmbExceptions A-20
unknown 7-22 RTI_checkFlag A-19
Object Details button 8-6 RTI_configureConnectionWithRid 5-10
Object Details window 8-6 RTI_configureConnectionWithRid 8-2, A-6
Object Instances page 8-13 RTI_connectionTestInterval A-12
returning to 8-5 RTI_conveyOnlyAvailableDimensions A-26
objects, displaying FOM 8-8 RTI_conveyProducingFederateSwitch A-16
i-12 VT MÄK
Index
i-14 VT MÄK
Index
i-16 VT MÄK
Index
i-18 VT MÄK
Index
specification, obtaining HLA and RTI 1-2 tick() function 2-3, 2-4, 2-5, 17-2, 17-3, 17-15
specifying not calling 2-6
port 5-11 shared memory 14-11
shared memory queue length 14-4 tick(min,max) A-28
shared memory region name 14-4 time
Warning Tick Interval 5-7 advance grant 7-14
starting, web server automatically 6-6 defining 17-11
static routing 11-5 federation 3-5
stopping, shared memory manager 14-8 HLA Evolved 3-8
string() function 17-22 simulation 7-14
subclassing time implementation, libfedtime 3-6
DtRtiAmbassadorImplementor 17-10 time management 3-8, 5-2, 7-6, 12-2, 17-11
manager 17-9 configuring 12-2
subscription B-7 display 7-14
displaying interest in 8-9 example B-5
support, technical xv time implementation 3-5
switch value, settings 4-3 viewing in RTIspy 7-16
synchronization point 5-2, 7-6 timeout
viewing 7-17 interval, configuring 7-19
in RTIspy 7-17 TimeToLive parameter A-21
synchronous processing 2-4 topology
distributed forwarding
LAN 11-7
T WAN 11-11
-T command-line option 5-11, 14-7 network 2-7
-t command-line option 6-7, 14-7 transmit rate 12-4
table transportType 17-12
FOM 15-5
FOM in FOM modules 15-5
TCP 5-2, 10-2, 10-3 U
See also reliable transport UDP 10-2, 10-3
buffer 10-8 See also best effort
compressing messages 10-7 compressing messages 10-7
packet 10-3 datagram 10-3
port A-5 distributed forwarding 11-23
setting port 5-11 forwarding 2-7
topologies 2-7 using unicast 11-23
TCP forwarding 2-7, 2-8 over WAN 11-6
configuring centralized 11-4 port, setting for best effort 11-3
configuring smart 10-5 topologies 2-7
internal messages 10-7 undiscovering, object 8-7
on WAN 11-5 unicast, distributed UDP forwarding 11-23
smart 10-5 unimplemented service, responding to 7-22
technical support xv UNIX
terminated federate 7-19 compiling and linking 17-23
test, latency 9-2 linking on 3-2, 3-4
thread unknown objects, discovery processing for 7-22
asynchronous I/O 2-5 unsubscription B-7
federate and asynchronous 2-5 update
thread-safety 2-2, 10-9 filtering 16-2
i-20 VT MÄK
Index
V
-v command-line option 5-11, 6-7, 14-7
validating, FOM module 15-5
view log prompt, configuring 5-6
viewing
federation details 7-12
log file 8-12
RTI messages 8-10
rtiexec Console 7-23
synchronization points 7-17
time management information 7-14
virtual LAN 11-5
virtual private network 11-5
vlutil 17-17
VPN 11-5
W
wait interval, shared memory 14-5
WAN
centralized TCP forwarding 11-5
communicating over 11-6
configuring transport type 11-4
distributed forwarding
optimizing 11-12
single-portal interconnection 11-12
topology 11-11
load-balanced forwarder network 11-14
sending messages on 2-7
Warning Tick Interval, specifying 5-7
weapon range 13-17
Web GUI, See RTIspy
web services, local servers and centralized servers 6-
2, 6-3, 6-6
window
log 5-7
Object Details 8-6
i-22 VT MÄK
Link – Simulate – Visualize
RTI-4.1.1-1-120525