.. _`Configuration`:

#############
Configuration
#############

This section describes the various configuration elements and attributes available for
Vortex OpenSplice. The configuration items should be added to an XML file
and then the OSPL_URI environment variable should be set to point to the
path of that XML file with the "file://" URI prefix.

- e.g.
    - Linux: export OSPL_URI=file://$OSPL_HOME/etc/ospl.xml
    - Windows: set OSPL_URI=file://%OSPL_HOME%\\\\etc\\\\ospl.xml

The ospl.xml file supplied with Vortex OpenSplice contains the following:

.. code-block:: xml

   <OpenSplice>
      <Domain>
        <Name>ospl_sp_ddsi</Name>
        <Id>0</Id>
        <SingleProcess>true</SingleProcess>
        <Service name="ddsi2">
            <Command>ddsi2</Command>
        </Service>
        <Service name="durability">
            <Command>durability</Command>
        </Service>
        <Service name="cmsoap">
            <Command>cmsoap</Command>
        </Service>
      </Domain>
      <DDSI2Service name="ddsi2">
        <General>
            <NetworkInterfaceAddress>AUTO</NetworkInterfaceAddress>
            <AllowMulticast>true</AllowMulticast>
            <EnableMulticastLoopback>true</EnableMulticastLoopback>
            <CoexistWithNativeNetworking>false</CoexistWithNativeNetworking>
        </General>
        <Compatibility>
            <!-- see the release notes and/or the OpenSplice configurator on DDSI interoperability -->
            <StandardsConformance>lax</StandardsConformance>
            <!-- the following one is necessary only for TwinOaks CoreDX DDS compatibility -->
            <!-- <ExplicitlyPublishQosSetToDefault>true</ExplicitlyPublishQosSetToDefault> -->
        </Compatibility>
      </DDSI2Service>
      <DurabilityService name="durability">
        <Network>
            <Alignment>
                <TimeAlignment>false</TimeAlignment>
                <RequestCombinePeriod>
                    <Initial>2.5</Initial>
                    <Operational>0.1</Operational>
                </RequestCombinePeriod>
            </Alignment>
            <WaitForAttachment maxWaitCount="100">
                <ServiceName>ddsi2</ServiceName>
            </WaitForAttachment>
        </Network>
        <NameSpaces>
            <NameSpace name="defaultNamespace">
                <Partition>*</Partition>
            </NameSpace>
            <Policy alignee="Initial" aligner="true" durability="Durable" nameSpace="defaultNamespace"/>
        </NameSpaces>
      </DurabilityService>
      <TunerService name="cmsoap">
        <Server>
            <PortNr>Auto</PortNr>
        </Server>
      </TunerService>
      <Description>Stand-alone 'single-process' deployment and standard DDSI networking.</Description>
   </OpenSplice>

The tags in the XML file should be nested in the same way as they are in
the table of contents in this configuration section. The nesting and numbering of
the tags in the contents of this section allows you to see which elements are
the parent or children of one another. For example, if you wanted to find
a description of the NetworkInterfaceAddress attribute, you would first navigate
to it's parent, the General element, and inside that you would find a
heading for the child NetworkInterfaceAddress attribute along with a
description and valid values. Some attributes may state that they are required
and if so these elements must be present when the parent element is included in
the XML file.

If you wanted to add a new element, say to enable security, you would
navigate to the Security element of the section. This has a child element
called SecurityProfile which should be nested within the Security element.
Each element lists a number of occurences, this states how many times this element
can appear in your XML file. The SecurityProfile element has three attributes,
Name, which is required, and Cipher and CipherKey  which are optional.
Attributes are added within the parent element tag in the format name="value".
Adding these new elements and attributes would result in the following XML:

.. code-block:: xml

  <OpenSplice>
    <Domain>
       <Name>ospl_sp_ddsi</Name>
       <Id>0</Id>
    </Domain>
    <DDSI2E>
        <General>
            <NetworkInterfaceAddress>AUTO</NetworkInterfaceAddress>
            <AllowMulticast>true</AllowMulticast>
            <EnableMulticastLoopback>true</EnableMulticastLoopback>
        </General>
        <Compatibility>
            <StandardsConformance>lax</StandardsConformance>
        </Compatibility>
        <Tracing>
            <Verbosity>warning</Verbosity>
        </Tracing>
        <Security>
            <SecurityProfile Name="GlobalProfile" Cipher="blowfish" CipherKey="00000000000000000000000000000000"/>
        </Security>
    </DDSI2E>
  </OpenSplice>

	

OpenSplice
**********

            Vortex OpenSplice is highly configurable, even allowing the architecture of the
            DDS middleware to be chosen by the user at deployment time. Vortex OpenSplice can
            be configured to run using a **shared memory** architecture, where both the
            DDS related administration (including the optional pluggable services) and DDS
            applications interface directly with shared memory. Alternatively, Vortex OpenSplice
            also supports a **single process** architecture, where one or more DDS
            applications, together with the Vortex OpenSplice administration and services, can all be
            grouped into a single operating system process. Both deployment modes support a
            configurable and extensible set of services, providing functionality such as:

            networking - providing QoS-driven real-time networking based on multiple
                reliable multicast 'channels'

            durability - providing fault-tolerant storage for both real-time state data as well as
              persistent settings

            remote control and monitoring SOAP service - providing remote web-based
              access using the SOAP protocol from the Vortex OpenSplice Tuner tool

            dbms service - providing a connection between the real-time and the enterprise
              domain by bridging data from DDS to DBMS and vice versa

            Because of the pluggable architecture, the Vortex OpenSplice middleware
            can be easily configured on the fly by specifying which services to
            be used as well as specifying their optimal configuration for the
            application domain (networking parameters, durability levels, etc.).
            Typically, there are many nodes within a system.

            The Vortex OpenSplice middleware including its services can be configured
            by means of easy maintainable XML-file(s).

- Full path: //OpenSplice
- Occurrences min-max: 1-1
- Child elements: Description
- Optional attributes: version

Domain
******

            The Domain service is responsible for creating and initialising the DDS database which is used by the
            administration to manage a specific DDS Domain on a computing node. Without this administration, no other
            service or application is able to participate in a DDS Domain.

            Once the administration has been initialised, the Domain service starts the set of pluggable services. The
            lifecycle of the started services is under control of the Domain service, which means it will monitor the health
            of all started services, take corrective actions if needed and stop the services when it is terminated.


            When a shutdown of the Vortex OpenSplice Domain service is requested, it will react by announcing the shutdown using the
            DDS administration. Applications will not be able to use DDS functionality anymore and services are requested
            to terminate elegantly. Once this has succeeded, the Domain service will destroy the administration and
            finally terminate itself.

- Full path: //OpenSplice/Domain
- Occurrences min-max: 1-1
- Child elements: Name, Id, Role, ServiceTerminatePeriod, SingleProcess, Description, CPUAffinity, InProcessExceptionHandling, RetentionPeriod, y2038Ready

Name
====

                    This element specifies the name of the instantiated DDS domain. In general, it is recommended to change
                    this name to a name that identifies the domain. If several different DDS domains are required to run
                    simultaneously, then they all need to have their own domain name.

- Full path: //OpenSplice/Domain/Name
- Format: string
- Default value: OpenSpliceV6
- Occurrences min-max: 1-1

Id
==

                    This element specifies the domain Id of the instantiated DDS domain. If several different DDS domains are required to run
                    simultaneously, then they all need to have their own unique domain Id.
                    Note - for maximum interoperability it is recommended that you only select a domain Id from the range 0 < n < 230. The domain Id
                    value is used by the DDSI2 service to derive values for the required network communiction endpoints and service reconfiguration is
                    required to use domain id values outside of this range.
                    Please see section 9.6.1 of the Real-time Publish-Subscribe Wire Protocol DDS Interoperability Wire Protocol specification (DDSI), v2.1, formal/2009-01-05
                    or v2.2, formal/2014-09-01, at http://www.omg.org/spec/DDSI for further information.

- Full path: //OpenSplice/Domain/Id
- Format: integer
- Default value: 0
- Valid values: 0 / 2147483646
- Occurrences min-max: 0-1

Role
====

                    Within a system and depending on the hosted application a Domain Service can
                    have a specific role and interaction with other Domain Services may depend on this
                    role.
                    The Role element is a user-defined string value that is communicated through the
                    system, the behavior of other Domain Services i.e. how they interact with a Domain
                    Service can be configured depend of the role by means of string matching
                    expressions. For example, a Domain Service could limit its communication with
                    other Domain Services by only accepting specific roles. (See also
                    OpenSplice/NetworkService/Discovery[@Scope] )

- Full path: //OpenSplice/Domain/Role
- Format: string
- Default value: DefaultRole
- Occurrences min-max: 0-1

Lease
=====

                    The Lease parameter specifies the death detection time of the Domain Service. All
                    internal tasks performed by the Domain Service will periodically update their
                    liveliness; when one or more tasks fail to update its liveliness the Domain will take
                    action to either repair the failing functionality, continue in a degraded mode, or halt,
                    depending on the configured desired behaviour.

- Full path: //OpenSplice/Domain/Lease
- Occurrences min-max: 0-1
- Child elements: ExpiryTime

ExpiryTime
----------

                    This element specifies the interval(in seconds) in which services have to announce their liveliness.

                    Every Vortex OpenSplice service including the Domain service itself has to announce its liveliness regularly.
                    This allows corrective actions to be taken when one of the services becomes non-responsive. This
                    element specifies the required interval. Decreasing the interval decreases the time in which
                    non-responsiveness of a service is detected, but leads to more processing. Increasing it has
                    the opposite effect.

- Full path: //OpenSplice/Domain/Lease/ExpiryTime
- Format: float
- Dimension: seconds
- Default value: 10.0
- Valid values: 0.2 /  -
- Occurrences min-max: 1-1
- Required attributes: update_factor

update_factor
^^^^^^^^^^^^^

                        In case of a (temporary) high CPU load, the scheduling behaviour of the operating system might
                        affect the capability of a service to assert its liveliness 'on time'. The *update_factor* attribute
                        introduces some elasticity in this mechanism by making the services assert their liveliness more
                        often than required by the *ExpiryTime*. Services will report their liveliness every
                        *ExpiryTime* multiplied by this *update_factor*.

- Full path: //OpenSplice/Domain/Lease/ExpiryTime[@update_factor]
- Format: float
- Default value: 0.2
- Valid values: 0.01 / 1.0
- Required: true

GeneralWatchdog
===============

                This element controls the default characteristics of the Watchdog thread for all services.
                Individual services may overrule this default in their service specific settings.
                Every service has its own Watchdog thread, that is responsible for automatically renewing the lease for that service.
                Services that do not renew their lease in time will loose the liveliness of all their writers

- Full path: //OpenSplice/Domain/GeneralWatchdog
- Occurrences min-max: 0-1

Scheduling
----------

                    This element specifies the type of OS scheduling class will be
                    used by the thread that announces its liveliness periodically.

- Full path: //OpenSplice/Domain/GeneralWatchdog/Scheduling
- Occurrences min-max: 1-1
- Child elements: Priority, Class

Priority
^^^^^^^^

                        This element specifies the thread priority that will be used by the
                        watchdog thread. Only priorities that are supported by the
                        underlying operating system can be assigned to this element.
                        The user may need special privileges from the underlying operating
                        system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/Domain/GeneralWatchdog/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
~~~~~~~~~~~~~

                                This attribute specifies whether the specified
                                Priority is a relative or absolute priority.

- Full path: //OpenSplice/Domain/GeneralWatchdog/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Required: false

Class
^^^^^

                        This element specifies the thread scheduling class that will be used by
                        the watchdog thread. The user may need the appropriate privileges from
                        the underlying operating system to be able to assign some of the
                        privileged scheduling classes.

- Full path: //OpenSplice/Domain/GeneralWatchdog/Scheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

ServiceTerminatePeriod
======================

                This element specifies the amount of time the Domain Service,
                when instructed to terminate, should wait for the other configured
                Services to terminate. When this element is configured to '0' the
                Domain service will terminate without any wait time at all. Be
                aware that without any wait time the deamon will use a hard kill
                on any lingering service that can not terminate fast enough.
                This may prevent graceful termination and thus leave applications
                that are still attached to the DDS domain in an undefined state.
                Consequently the '0' value should only be used when there is
                some form of process management on top of Vortex OpenSplice.

- Full path: //OpenSplice/Domain/ServiceTerminatePeriod
- Format: float
- Dimension: seconds
- Default value: 10.0
- Valid values: 0.0 / 60.0
- Occurrences min-max: 0-1

SingleProcess
=============

                    The SingleProcess element specifies whether the Vortex OpenSplice Domain and other
                      Vortex OpenSplice services and applications are intended to be all deployed within the
                      same process, known in Vortex OpenSplice as a single process.

                    Please note that the choice to use the single process deployment also implies
                      the use of heap memory for the Vortex OpenSplice database management instead of shared
                      memory that would be used otherwise. If no database size or size 0 is configured
                      the heap memory is limited by the Operating System, so the Database element under
                      Domain does not take effect when SingleProcess has a value of True.
                      If the database size is configured with a value, a database will be allocated on
                      heap with that size and the domain service will use it's own memory manager to
                      manage that memory

                    There are two ways in which to deploy an Vortex OpenSplice application as a
                      single process:

                    **Single Process Application** : The user starts an application as a
                      new process. In this case, the DDS create_participant operation will
                      implicitly start the Vortex OpenSplice Domain Service as a thread in the existing
                      application process. The Vortex OpenSplice Domain Service will then also implicitly
                      start all services specified in the configuration as threads within the same
                      process.
                    **Single Process Application Cluster** : This provides the option to
                      co-locate multiple DDS applications into a single process. This can be done
                      by creating application libraries rather than application executables that
                      can be linked into the single process in a similar way to how the DDS
                      middleware services are linked into the single process. The applications
                      that are created as libraries must be described using the Application
                      configuration attribute. These are started as threads within the existing
                      process by the Domain Service after all the DDS services that are specified
                      have been started as threads.

                    Please note that the Application elements specified under Domain will only
                      take effect when this SingleProcess attribute has a value
                      of true.

- Full path: //OpenSplice/Domain/SingleProcess
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

Description
===========

          The content of this (optional) element is visualised by the Launcher tool and is meant
          to describe the configuration in a human-readable form.

- Full path: //OpenSplice/Domain/Description
- Format: string
- Occurrences min-max: 0-1

CPUAffinity
===========

          This (optional) element specifies a comma separated list of CPU numbers for the CPUs which opensplice, and its services should be restricted to use. (Supported on VxWorks kernel mode only)

- Full path: //OpenSplice/Domain/CPUAffinity
- Format: string
- Occurrences min-max: 0-1

InProcessExceptionHandling
==========================

           The InProcessExceptionHandling element determines whether a process that uses Vortex OpenSplice will
            handle exceptions by itself and try to clean up shared resources or not. If the process itself
            refrains from cleaning up its resources, the splice-daemon will attempt to clean up the application
            shared resources asynchronously. If the splice-daemon during clean-up determines that shared
            resources have been left in an inconsistent state by the application, it will
            terminate the middleware.

           Setting this option to false will make the middleware fail-safe. However, the downside of
            this approach is that there are cases in which the splice-daemon will decide to shut down the
            middleware, because it cannot determine with 100% certainty that shared resources are
            consistent (even if they are consistent in some cases). A potential approach could be to set this
            option to 'true' during development-phase and 'false' when application(s) have been deployed.

           By default this configuration item is set to true.

- Full path: //OpenSplice/Domain/InProcessExceptionHandling
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

Daemon
======

            Every domain is controlled by exactly one daemon: the Splice Daemon.
            The Splice Daemon configuration expects a root element named
            *OpenSplice/Daemon*. Within this root element, the Splice Daemon will
            look for several child-elements. Each of these child elements is
            listed and explained.

- Full path: //OpenSplice/Domain/Daemon
- Occurrences min-max: 0-1
- Child elements: Locking

Locking
-------

                This element specifies the locking policy for the Splice Deamon
                process, indicating whether its pages should be locked in physical
                memory or not.

                On platforms with a virtual memory architecture, the operating
                system decides when to swap memory pages from internal memory to disk.
                This results in execution delays for the corresponding code because it
                has to be paged back into main memory. The element *Locking* can be
                used to avoid such swapping for the Splice Deamon. The user needs the
                appropriate privileges from the underlying operating system to be able
                to use this option.

- Full path: //OpenSplice/Domain/Daemon/Locking
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

Watchdog
--------

                 This element controls the scheduling characteristics of the Watchdog thread. This
                 thread is responsible for sending domain service heartbeats, updating liveliness of
                 the service builtin DataWriters and monitoring the health of internal services and
                 heartbeats of remote domain services.

- Full path: //OpenSplice/Domain/Daemon/Watchdog
- Occurrences min-max: 0-1
- Child elements: StackSize

Scheduling
^^^^^^^^^^

                    This element specifies the type of OS scheduling class will be
                    used by the thread that announces its liveliness periodically.

- Full path: //OpenSplice/Domain/Daemon/Watchdog/Scheduling
- Occurrences min-max: 1-1
- Child elements: Priority, Class

Priority
~~~~~~~~

                        This element specifies the thread priority that will be used by the
                        watchdog thread. Only priorities that are supported by the
                        underlying operating system can be assigned to this element.
                        The user may need special privileges from the underlying operating
                        system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/Domain/Daemon/Watchdog/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
+++++++++++++

                            This attribute specifies whether the specified Priority is a relative or absolute priority

- Full path: //OpenSplice/Domain/Daemon/Watchdog/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Occurrences min-max: 0-1
- Required: false

Class
~~~~~

                        This element specifies the thread scheduling class that will be used by
                        the watchdog thread. The user may need the appropriate privileges from
                        the underlying operating system to be able to assign some of the
                        privileged scheduling classes.

- Full path: //OpenSplice/Domain/Daemon/Watchdog/Scheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

StackSize
^^^^^^^^^

                    This element specifies the thread stacksize that will be used by the
                    Watchdog thread. By default this is 512 Kb.

- Full path: //OpenSplice/Domain/Daemon/Watchdog/StackSize
- Format: integer
- Dimension: bytes
- Default value: 524288
- Occurrences min-max: 0-1

shmMonitor
----------

                 This element controls the scheduling characteristics of the shmMonitor thread. This
                 thread is responsible cleaning up resources that are left behind by unexpected termination of other
                 dds services and applications.

- Full path: //OpenSplice/Domain/Daemon/shmMonitor
- Occurrences min-max: 0-1
- Child elements: StackSize

Scheduling
^^^^^^^^^^

                    This element specifies the type of OS scheduling class will be
                    used by the thread that announces its liveliness periodically.

- Full path: //OpenSplice/Domain/Daemon/shmMonitor/Scheduling
- Occurrences min-max: 1-1
- Child elements: Priority, Class

Priority
~~~~~~~~

                        This element specifies the thread priority that will be used by the
                        shmMonitor thread. Only priorities that are supported by the
                        underlying operating system can be assigned to this element.
                        The user may need special privileges from the underlying operating
                        system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/Domain/Daemon/shmMonitor/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
+++++++++++++

                            This attribute specifies whether the specified Priority is a relative or absolute priority

- Full path: //OpenSplice/Domain/Daemon/shmMonitor/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Occurrences min-max: 0-1
- Required: false

Class
~~~~~

                        This element specifies the thread scheduling class that will be used by
                        the shmMonitor thread. The user may need the appropriate privileges from
                        the underlying operating system to be able to assign some of the
                        privileged scheduling classes.

- Full path: //OpenSplice/Domain/Daemon/shmMonitor/Scheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

StackSize
^^^^^^^^^

                    This element specifies the thread stacksize that will be used by the
                    shmMonitor thread. By default this is 512 Kb.

- Full path: //OpenSplice/Domain/Daemon/shmMonitor/StackSize
- Format: integer
- Dimension: bytes
- Default value: 524288
- Occurrences min-max: 0-1

KernelManager
-------------

                 The Kernel Manager monitors Builtin Topic on status changes of DataWriters and
                 inconsistencies between Topics and QoS policies, and it will notify all participants
                 interested in any of these events, i.e. it updates status fields and wakeup blocking
                 waitset and listener threads.
                 Controlling the scheduling behaviour of the Kernel Manager will therefore infuence
                 the reactivity on detecting events, but it will not infuence the event handling itself as
                 this is the responsibility of the participants waitset or listener thread.
                 Note that the Kernel Manager has no or limited value when Builtin Topics are
                 disabled.

- Full path: //OpenSplice/Domain/Daemon/KernelManager
- Occurrences min-max: 0-1
- Child elements: StackSize

Scheduling
^^^^^^^^^^

                    This element specifies the scheduling policies used to control
                    the KernelManager thread.

- Full path: //OpenSplice/Domain/Daemon/KernelManager/Scheduling
- Occurrences min-max: 1-1
- Child elements: Priority, Class

Priority
~~~~~~~~

                        This element specifies the thread priority that will be used by the
                        KernelManager thread. Only priorities that are supported by the
                        underlying operating system can be assigned to this element.
                        The user may need special privileges from the underlying operating
                        system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/Domain/Daemon/KernelManager/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
+++++++++++++

                            This attribute specifies whether the specified
                            Priority is a relative or absolute priority.

- Full path: //OpenSplice/Domain/Daemon/KernelManager/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Required: false

Class
~~~~~

                        This element specifies the thread scheduling class that will be
                        used by the KernelManager thread. The user may need the appropriate
                        privileges from the underlying operating system to be able to
                        assign some of the privileged scheduling classes.

- Full path: //OpenSplice/Domain/Daemon/KernelManager/Scheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

StackSize
^^^^^^^^^

              This element specifies the thread stacksize that will be used by the
              KernelManager thread. By default this is 512 Kb.

- Full path: //OpenSplice/Domain/Daemon/KernelManager/StackSize
- Format: integer
- Dimension: bytes
- Default value: 524288
- Occurrences min-max: 0-1

GarbageCollector
----------------

                This element specifies the behaviour of the GarbageCollector.

                The garbage collector is a safety mechanism and is responsible for
                reclaiming resources in case an application or remote node does not
                terminate properly.

- Full path: //OpenSplice/Domain/Daemon/GarbageCollector
- Occurrences min-max: 0-1
- Child elements: StackSize

Scheduling
^^^^^^^^^^

                    This element specifies the scheduling policies used to control the
                    GarbageCollector thread.

- Full path: //OpenSplice/Domain/Daemon/GarbageCollector/Scheduling
- Occurrences min-max: 1-1
- Child elements: Priority, Class

Priority
~~~~~~~~

                        This element specifies the thread priority that will be used by
                        the GarbageCollector thread. Only priorities that are supported
                        by the underlying operating system can be assigned to this element.
                        The user may need special privileges from the underlying operating
                        system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/Domain/Daemon/GarbageCollector/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
+++++++++++++

                            This attribute specifies whether the specified
                            Priority is a relative or absolute priority.

- Full path: //OpenSplice/Domain/Daemon/GarbageCollector/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Required: false

Class
~~~~~

                        This element specifies the thread scheduling class that will be
                        used by the GarbageCollector thread. The user may need the
                        appropriate privileges from the underlying operating system to
                        be able to assign some of the privileged scheduling classes.

- Full path: //OpenSplice/Domain/Daemon/GarbageCollector/Scheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

StackSize
^^^^^^^^^

              This element specifies the thread stacksize that will be used by the
              GarbageCollector thread. By default this is 512 Kb.

- Full path: //OpenSplice/Domain/Daemon/GarbageCollector/StackSize
- Format: integer
- Dimension: bytes
- Default value: 524288
- Occurrences min-max: 0-1

ResendManager
-------------

                Every service has its own ResendManager thread, that is responsible for attempting to resend samples in the history queue of its writers.
                A writer that cannot successfully deliver a sample to a local service or application in the
                first attempt (for example because the application or service ran out of queue space) will store that sample in its own history queue,
                from which the Resend manager will periodically try to re-transmit it.

- Full path: //OpenSplice/Domain/Daemon/ResendManager
- Occurrences min-max: 0-1
- Child elements: StackSize

Scheduling
^^^^^^^^^^

                    This element specifies the type of OS scheduling class used by
                    the thread that does local resends for the builtin participant.

- Full path: //OpenSplice/Domain/Daemon/ResendManager/Scheduling
- Occurrences min-max: 1-1
- Child elements: Priority, Class

Priority
~~~~~~~~

                        This element specifies the thread priority that will be used by the
                        ResendManager thread. Only priorities that are supported by the
                        underlying operating system can be assigned to this element.
                        The user may need special privileges from the underlying operating
                        system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/Domain/Daemon/ResendManager/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
+++++++++++++

                            This attribute specifies whether the specified
                            Priority is a relative or absolute priority.

- Full path: //OpenSplice/Domain/Daemon/ResendManager/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Required: false

Class
~~~~~

                        This element specifies the thread scheduling class that will be used by
                        the ResendManager thread. The user may need the appropriate privileges from
                        the underlying operating system to be able to assign some of the
                        privileged scheduling classes.

- Full path: //OpenSplice/Domain/Daemon/ResendManager/Scheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

StackSize
^^^^^^^^^

              This element specifies the thread stacksize that will be used by the
              ResendManager thread. By default this is 512 Kb.

- Full path: //OpenSplice/Domain/Daemon/ResendManager/StackSize
- Format: integer
- Dimension: bytes
- Default value: 524288
- Occurrences min-max: 0-1

Heartbeat
---------

                    The Splice Daemon uses an heartbeat mechanism to monitor the
                    health of the remote domain services. This element allows
                    fine-tuning of this heartbeat mechanism.

                    Please note this heartbeat mechanism is similar to but not the
                    same as the service liveliness assertion.

- Full path: //OpenSplice/Domain/Daemon/Heartbeat
- Occurrences min-max: 0-1
- Child elements: ExpiryTime, StackSize
- Optional attributes: transport_priority

transport_priority
^^^^^^^^^^^^^^^^^^

                        This attribute controls the transport priority QoS setting (in seconds) that
                        is only used by the Splice Daemom for for sending its heartbeats.

- Full path: //OpenSplice/Domain/Daemon/Heartbeat[@transport_priority]
- Format: integer
- Default value: 0
- Valid values: 0 /  -
- Required: false

Scheduling
^^^^^^^^^^

                        This element specifies the scheduling parameters used by the
                        thread that periodically sends the heartbeats.

- Full path: //OpenSplice/Domain/Daemon/Heartbeat/Scheduling
- Occurrences min-max: 0-1
- Child elements: Priority, Class

Priority
~~~~~~~~

                            This element specifies the thread priority that will be used
                            by the thread that periodically sends the heartbeats. Only
                            priorities that are supported by the underlying operating
                            system can be assigned to this element. The user may need
                            special privileges from the underlying operating system to
                            be able to assign some of the privileged priorities.

- Full path: //OpenSplice/Domain/Daemon/Heartbeat/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
+++++++++++++

                                This attribute specifies whether the specified
                                Priority is a relative or absolute priority.

- Full path: //OpenSplice/Domain/Daemon/Heartbeat/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Required: false

Class
~~~~~

                            This element specifies the thread scheduling class that will
                            be used by the thread that periodically sends the heartbeats.
                            The user may need the appropriate privileges from the underlying
                            operating system to be able to assign some of the privileged
                            scheduling classes.

- Full path: //OpenSplice/Domain/Daemon/Heartbeat/Scheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

ExpiryTime
^^^^^^^^^^

                        This element specifies the maximum amount of time(in seconds) in
                        which the Splice Daemon expects a new heartbeat of
                        remote domain services. This is obviously also the
                        same amount of time in which the Splice Daemon must
                        send a heartbeat itself.

                        Increasing this value will lead to less networking
                        traffic and overhead but also to less responsiveness with
                        respect to the liveliness of the Splice Daemon. Change
                        this value according to the need of your system with respect
                        to these aspects.

- Full path: //OpenSplice/Domain/Daemon/Heartbeat/ExpiryTime
- Default value: 4.0
- Valid values: 0.2 /  -
- Occurrences min-max: 0-1
- Required attributes: update_factor

update_factor
~~~~~~~~~~~~~

                            In case of a (temporary) high CPU load, the scheduling
                            behaviour of the operating system might affect the
                            capability of the Splice Daemon to send its
                            heartbeat 'on time'. This attribute introduces some
                            elasticity in this mechanism by making the service
                            send its heartbeat more often then required by the
                            ExpiryTime.

                            The Splice Daemon will report its liveliness
                            every *ExpiryTime* multiplied by this
                            *update_factor*.

- Full path: //OpenSplice/Domain/Daemon/Heartbeat/ExpiryTime[@update_factor]
- Default value: 0.25
- Valid values: 0.1 / 0.9
- Required: true

StackSize
^^^^^^^^^

                  This element specifies the thread stacksize that will be used by the
                  Heartbeat thread. By default this is 512 Kb.

- Full path: //OpenSplice/Domain/Daemon/Heartbeat/StackSize
- Format: integer
- Dimension: bytes
- Default value: 524288
- Occurrences min-max: 0-1

Tracing
-------

                    This element controls the amount and type of information that is
                    written into the tracing log by the Splice Daemon. This is
                    useful to track the Durability Service during application
                    development. In the runtime system it should be turned off.

- Full path: //OpenSplice/Domain/Daemon/Tracing
- Occurrences min-max: 0-1
- Child elements: OutputFile, Timestamps, Verbosity
- Optional attributes: synchronous

synchronous
^^^^^^^^^^^
- Full path: //OpenSplice/Domain/Daemon/Tracing[@synchronous]
- Format: boolean
- Default value: FALSE
- Required: false

OutputFile
^^^^^^^^^^

                    This option specifies where the logging is printed to. Note that
                    "stdout" is considered a legal value that represents "standard out"
                    and "stderr" is a legal value representing "standard error".
                    The default value is an empty string, indicating that all tracing
                    is disabled.

- Full path: //OpenSplice/Domain/Daemon/Tracing/OutputFile
- Format: string
- Default value: durability.log
- Occurrences min-max: 0-1

Timestamps
^^^^^^^^^^

                    This element specifies whether the logging must contain timestamps.

- Full path: //OpenSplice/Domain/Daemon/Tracing/Timestamps
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1
- Optional attributes: absolute

absolute
~~~~~~~~

                        This attribute specifies whether the timestamps are absolute or
                        relative to the startup time of the service.

- Full path: //OpenSplice/Domain/Daemon/Tracing/Timestamps[@absolute]
- Format: boolean
- Default value: true
- Required: false

Verbosity
^^^^^^^^^

                    This element specifies the verbosity level of the loggin
                    information. The higher the level, the more (detailed)
                    information will be logged.

- Full path: //OpenSplice/Domain/Daemon/Tracing/Verbosity
- Format: enumeration
- Default value: INFO
- Valid values: SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST
- Occurrences min-max: 0-1

Database
========

                    The Database element drives how the administration within the federation is managed.
                    In federated deployment this administration is managed in a shared memory segment
                    and in single-process deployment it is managed on heap.

- Full path: //OpenSplice/Domain/Database
- Occurrences min-max: 0-1
- Child elements: Size, Threshold, Address, Locking

Size
----

                    This element specifies the maximum size of the memory segment for maintaining
                    the nodal administration. The memory management behaviour depends on the deployment mode
                    (federated vs single-process, driven by the //OpenSplice/Domain/SingleProcess element)
                    and the size configured within this element:
                    
                    -  **Single process mode** In this mode the database is managed on heap.
                                If the size is set to zero, the heap is managed by the operating system memory
                                manager and limited to the operating system limit. If a non-zero size is
                                configured, the database is still allocated on heap, but the domain service
                                pre-allocates the entire size at once and will use its own memory manager
                                to manage this memory segment. The default value in this mode is 0 bytes.
                    -  **Federated mode** In this mode, the database is managed in shared memory segment
                                and the domain service will use its own memory manager to manage the
                                shared memory segment. The default value in this mode is 10 Mbytes.

                    Change this value if your system requires more memory than the default. Please note
                    that the operating system should be configured support the requested size.
                    On most platforms you need 'root' privileges to set large sizes.
                    The human-readable option lets the user postfix the value with
                    K(ilobyte), M(egabyte) or G(igabtye). For example, 10M results in 10485760 bytes.

- Full path: //OpenSplice/Domain/Database/Size
- Dimension: bytes
- Default value: 10485760
- Valid values: 0 /  -
- Occurrences min-max: 0-1

Threshold
---------

                        This element specifies the threshold size used by Vortex OpenSplice. Whenever there is less
                        free shared memory then indicated by the threshold then no new allocations will be allowed
                        within shared memory. Services are allowed to continue allocating shared memory until less then
                        50% of the threshold value is available. It is strongly discouraged to configure a threshold
                        value of less then the default value, but for some embedded systems it might be needed as
                        only limited memory is available.
                        The human-readable option lets the user postfix the value with K(ilobyte),
                        M(egabyte) or G(igabtye). For example, 10M results in 10485760 bytes.

- Full path: //OpenSplice/Domain/Database/Threshold
- Dimension: bytes
- Default value: 1048576
- Valid values: 0 /  -
- Occurrences min-max: 0-1

Address
-------

                    This element specifies the start address where the
                    nodal shared administration is mapped into the virtual
                    memory for each process that attaches to the current Domain.
                    The possible values are platform dependent.

                    Change this value if the default address is already in
                    use, for example by another Domain Service or another
                    product.

                    default values per platform:

                    
                    - 00x20000000 (Linux)
                    - 00x140000000 (Linux 64-bit)
                    - 00x40000000 (Windows)
                    - 00x140000000 (Windows 64-bit)
                    - 00xA0000000 (Solaris)
                    - 00xA0000000 (AIX5.3)
                    - 00x0 (VxWorks 5.5.1)
                    - 00x60000000 (VxWorks 6.x)
                    - 00x20000000 (Integrity)
                    - 00x20000000 (LynxOS)
                    - 00x140000000 (LynxOS 64-bit)
                    - 00x0 (PikeOS)
                    - 00x60000000 (QXN)
                    - 00x0 (RTEMS)
                    - 00x00220000 (Windows CE)

- Full path: //OpenSplice/Domain/Database/Address
- Format: string
- Default value: 0x40000000 
- Valid values: 0x0 /  -
- Occurrences min-max: 0-1

Locking
-------

                    This element specifies the locking policy of the Database, indicating
                    whether to lock pages in physical memory or not.

                    With the virtual memory architecture, the operating system decides when
                    to swap memory pages from internal memory to disc. This results in execution
                    delays for the corresponding code because it has to be paged back into main
                    memory. The element *Locking* can be used to avoid such swapping for the
                    shared memory where the database resides. The user needs the appropriate
                    privileges from the underlying operating system to be able to use this option.

                    The possible values are:

                    
                    - **True**: lock the pages in memory.
                    - **False**: don't lock the pages in memory.
                    - **Default**: use the platform-dependent default value.

- Full path: //OpenSplice/Domain/Database/Locking
- Format: enumeration
- Default value: Default
- Valid values: True, False, Default
- Occurrences min-max: 0-1

Listeners
=========

                    This element specifies policies for the thread that services the listeners that
                    the application specifies on the API-level.

- Full path: //OpenSplice/Domain/Listeners
- Occurrences min-max: 0-1
- Child elements: StackSize

StackSize
---------

                        This element specifies the stack size of the listener thread.

- Full path: //OpenSplice/Domain/Listeners/StackSize
- Default value: 128000
- Valid values: 64000 /  -
- Occurrences min-max: 1-1

Service
=======

                The Domain service is responsible for starting, monitoring and stopping the pluggable services.
                One Service element must be specified for every service that needs to be started by the Domain service.
                When run in shared memory mode, the Domain Service will start each service as a
                new process that will interface directly with the shared memory for DDS
                communication.
                When run in single process mode, the Domain Service will start each service as a
                new thread within the existing process that will have access to the heap memory
                for the DDS communication.

- Full path: //OpenSplice/Domain/Service
- Occurrences min-max: 0-*
- Child elements: Command, MemoryPoolSize, HeapSize, StackSize, Configuration, Locking, FailureAction
- Required attributes: name
- Optional attributes: enabled

name
----

                    This attribute specifies the name by which the corresponding service is
                    identified in the rest of the configuration file.

                    In the Vortex OpenSplice configuration file, services and their settings
                    are identified by a name. When the Domain Service starts a particular
                    service, its corresponding name is passed. The service in question uses
                    this name in order to find its own configuration settings in the rest of
                    the configuration file. The name specified here must match the name
                    attribute of the main element of the corresponding service.

- Full path: //OpenSplice/Domain/Service[@name]
- Format: string
- Default value: durability
- Required: true

enabled
-------

                    This attribute indicates whether the service is actually started or not.

                    Toggling a service between enabled and disabled is a quick alternative for
                    commenting out the corresponding lines in the configuration file.

- Full path: //OpenSplice/Domain/Service[@enabled]
- Format: boolean
- Default value: true
- Required: false

Command
-------

                    This element specifies the command to be executed in order to start the service.

                    In shared memory mode, Command element specifies the name of the actual service
                    executable or a script to launch this service (possibly including its path, but always
                    including its extension, e.g. .exe on the Windows platform). When no path is
                    included, the Domain Service will search the PATH environment variable for the
                    corresponding executable. Once located, it will be started as a separate process.

                    In single process mode, Command is the name of the entry point function to be
                    invoked and the name of the shared library to be dynamically loaded into the
                    process. The signature of the entry point function is the same as argc/argv usually
                    seen with main. The Vortex OpenSplice services are implemented in such a way that the
                    entry point name matches that of the shared library, so (for example) specifying
                    durability is all that is required.

- Full path: //OpenSplice/Domain/Service/Command
- Format: string
- Default value: durability
- Occurrences min-max: 1-1

MemoryPoolSize
--------------

            **CAUTION**: This element should only be used on the GHS Integrity platform!!

                    This element maps directly into the integrate file
                    for the address space for this service. Consult the GHS Integrate documentation for
                    further information on this setting. Valid values are decimal or hexadecimal numbers and
                    they express the number of bytes.

                    The default setting for this element is dependent on the service for which it is configured.
                    0xa00000 for spliced,
                    0x280000 for durability,
                    0x280000 for networking,
                    0x100000 for cmsoap

- Full path: //OpenSplice/Domain/Service/MemoryPoolSize
- Format: string
- Default value: 0
- Occurrences min-max: 0-1

HeapSize
--------

                    **CAUTION**: This element should only be used on the GHS Integrity platform!!

                    This element maps directly into the integrate file
                    for the address space for this service. Consult the GHS Integrate documentation for
                    further information on this setting. Valid values are decimal or hexadecimal numbers and
                    they express the number of bytes.

                    The default setting for this element is dependent on the service for which it is configured.
                    0x800000 for spliced,
                    0x240000 for durability,
                    0x240000 for networking,
                    0x200000 for cmsoap

- Full path: //OpenSplice/Domain/Service/HeapSize
- Format: string
- Default value: 0
- Occurrences min-max: 0-1

StackSize
---------

            **CAUTION**: This element should only be used on the GHS Integrity platform!!

                    This element maps directly into the integrate file
                    for the address space for this service. Consult the GHS Integrate documentation for
                    further information on this setting. Valid values are decimal or hexadecimal numbers and
                    they express the number of bytes.

                    The default setting for this element is dependent on the service for which it is configured
                    0x10000 for spliced
                    0x10000 for durability
                    0x10000 for networking
                    0x10000 for cmsoap

- Full path: //OpenSplice/Domain/Service/StackSize
- Format: string
- Default value: 0
- Occurrences min-max: 0-1

Configuration
-------------

                    This element allows overriding of the default URI (specified in the
                    *OSPL_URI* environment variable, or passed explicitly as command-
                    line parameter to the *ospl* executable) with the configuration
                    resource specified here.

                    When the Domain Service is started by the *ospl* executbale,
                    by default it passes on its own URI to the services that it starts.
                    This is valid when the configuration of the service is located in the
                    same resource file as the configuration of the Domain Service itself.
                    (This is a convenient situation in most cases).

                    If the configuration of the current service is located in a separate
                    resource file, a separate URI identifying that particular resource file
                    must be specified in this element.

- Full path: //OpenSplice/Domain/Service/Configuration
- Format: string
- Default value: ${OSPL_URI}
- Occurrences min-max: 0-1

Scheduling
----------

                    This element specifies the type of OS scheduling class will be
                    used by the Domain service to create the service process. Services
                    can only be started within the scheduling classes that are
                    supported by the underlying operating system.

- Full path: //OpenSplice/Domain/Service/Scheduling
- Occurrences min-max: 0-1
- Child elements: Priority, Class

Priority
^^^^^^^^

                        This element specifies the thread priority that the Domain Service will
                        assign to the current Service when it is started. Only priorities that
                        are supported by the underlying operating system can be assigned to this
                        element. The user may need special privileges from the underlying
                        operating system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/Domain/Service/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
~~~~~~~~~~~~~

                            This attribute specifies whether the specified Priority is a relative
                            or absolute priority.

- Full path: //OpenSplice/Domain/Service/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Required: false

Class
^^^^^

                        This element specifies the thread scheduling class that the Domain
                        Service will assign to the current Service when it is started.
                        The user may need the appropriate privileges from the underlying
                        operating system to be able to assign some of the privileged
                        scheduling classes.

- Full path: //OpenSplice/Domain/Service/Scheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

Locking
-------

                    This element specifies the locking policy of the current Service
                    process, indicating whether pages should be locked in physical memory
                    or not.

                    On platforms with a virtual memory architecture, the operating
                    system decides when to swap memory pages from internal memory to disk.
                    This results in execution delays for the corresponding code because it
                    has to be paged back into main memory. The element *Locking* can be
                    used to avoid such swapping for the current Service. The user needs the
                    appropriate privileges from the underlying operating system to be able
                    to use this option.

- Full path: //OpenSplice/Domain/Service/Locking
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

FailureAction
-------------

                    This element specifies what action to take at the moment that the service seems
                    to have become non-responsive.

                    Each service reports its liveliness regularly using the DDS administration.
                    If the service fails to do so, the Domain service will assume the service has
                    become non-responsive. This element determines what action is taken
                    by the DomainService in case this happens.

                    The following actions are available:

                    
                        - **skip**: Ignore the non-responsiveness and continue.
                        - **kill**: End the service process by force.
                        - **restart**: End the service process by force and restart it.
                        - **systemhalt**:  End all Vortex OpenSplice services including the Domain service (for the current DDS Domain on this computing node).

- Full path: //OpenSplice/Domain/Service/FailureAction
- Format: enumeration
- Default value: skip
- Valid values: kill, restart, skip, systemhalt
- Occurrences min-max: 0-1

GIDKey
======
- Full path: //OpenSplice/Domain/GIDKey
- Occurrences min-max: 0-*
- Required attributes: groups

groups
------

                    This attribute specifies the namespace by which the corresponding groups
                    will use the writer instance gid as key so that data from different writers
                    don merge as historical data for late joiners.

- Full path: //OpenSplice/Domain/GIDKey[@groups]
- Format: string
- Default value: n/a
- Required: true

Application
===========

                When in the single process deployment mode, the Domain service can deploy
                DDS applications by dynamically loading application shared libraries and
                starting threads within the existing process.
                A user can add a multiple Application elements to the configuration when they want
                to 'cluster' multiple DDS applications within an Vortex OpenSplice single process.
                The entry point and shared library for each Application can be specified by using the
                Command and Library elements that are described below.>/p>
                **Note that Applications only take effect when the single process configuration is enabled by way of the SingleProcess element.**

- Full path: //OpenSplice/Domain/Application
- Occurrences min-max: 0-*
- Child elements: Command, Arguments, Library
- Required attributes: name
- Optional attributes: enabled

name
----

                    This attribute assigns a configuration label to the application, but it is of no further
                    use; it can have any valid string value

- Full path: //OpenSplice/Domain/Application[@name]
- Format: string
- Default value: n/a
- Required: true

enabled
-------

                    This attribute indicates whether the application is actually started or not.

                    Toggling an applicatione between enabled and disabled is a quick alternative for
                    commenting out the corresponding lines in the configuration file.

- Full path: //OpenSplice/Domain/Application[@enabled]
- Format: boolean
- Default value: true
- Required: false

Command
-------

                    Command is the name of both the entry point function to invoked and the name of the
                    shared library to be dynamically loaded into the process.  The signature of the entry
                    point function is the same as argc/argv usually seen with main.

                    For example, if Command is "HelloWorld", Vortex OpenSplice will attempt to load
                    "libHelloWorld.so" on Unix (or "HelloWorld.dll" on Windows) into the existing process
                    and then  invoke the "HelloWorld" entry point to start that DDS application.

                    If the name of the shared library does not have the same name as the entry point the
                    user is able to override the name of the library by using the Application's Library attribute

                    The shared library is located by way of the current working directory, or LD_LIBRARY_PATH
                    for Unix systems, and PATH for Windows systems.

                    Note that this has the same meaning as the Service/Command element when in the
                    single process mode of operation.

- Full path: //OpenSplice/Domain/Application/Command
- Format: string
- Default value: application1
- Occurrences min-max: 1-1

Arguments
---------

                    This optional attribute allows the user to specify arguments to be passed to the
                    DDS application's entry point when it is invoked.

                    For example, if Command is "HelloWorld" and Arguments is "arg1 arg2", Vortex OpenSplice will
                    invoke the HelloWorld function with the argc = 3 and argv = {"HelloWorld", "arg1", "arg2"}

- Full path: //OpenSplice/Domain/Application/Arguments
- Format: string
- Occurrences min-max: 0-1

Library
-------

                    This optional attribute allows the user to override the name of the shared
                    library if it is different to the name of the entry point specified by Command.

                    The shared library is located by way of the current working directory, or LD_LIBRARY_PATH
                    for Unix systems, and PATH for Windows systems.

- Full path: //OpenSplice/Domain/Application/Library
- Format: string
- Occurrences min-max: 0-1

BuiltinTopics
=============

            This element specifies the granularity of the builtin topics.

- Full path: //OpenSplice/Domain/BuiltinTopics
- Occurrences min-max: 0-1
- Required attributes: enabled
- Optional attributes: logfile

enabled
-------

                This attribute enables or disables the publication of builtin topics
                for the existence of individual Participants/DataWriters/DataReaders.
                The existence of Topics will always be communicated by means of builtin
                topics, regardless of the value specified here.

- Full path: //OpenSplice/Domain/BuiltinTopics[@enabled]
- Format: boolean
- Default value: true
- Required: true

logfile
-------

                  This attribute specifies the log file for entity lifecycle messages.
                  When a logfile is specified the service will open the logfile and
                  write a corresponding log line for each update of discovered entities.

- Full path: //OpenSplice/Domain/BuiltinTopics[@logfile]
- Format: string
- Default value: builtin.log
- Required: false

PriorityInheritance
===================

            This element specifies the usage on Priority Inheritance on Muexes in this domain.

- Full path: //OpenSplice/Domain/PriorityInheritance
- Occurrences min-max: 0-1
- Required attributes: enabled

enabled
-------

                This attribute enables or disables priority inheritance for mutexes,
                if that is supported by the underlying Operating System.
                If the parent Element PriorityInheritance is not specified (does not exist), then the
                'default' value of this attribute is false.

- Full path: //OpenSplice/Domain/PriorityInheritance[@enabled]
- Format: boolean
- Default value: true
- Required: true

Report
======

            The Report element controls some aspects of the Vortex OpenSplice domain logging
            functionality.

- Full path: //OpenSplice/Domain/Report
- Occurrences min-max: 0-1
- Optional attributes: append, verbosity

append
------

            This attribute determines whether logging for this domain should continue to
            append to the previous error and info log files when the domain is (re)started or
            whether the previous file should be deleted and fresh ones created.

- Full path: //OpenSplice/Domain/Report[@append]
- Format: boolean
- Default value: true
- Required: false

verbosity
---------

               This attribute determines what level of logging should be in effect for this domain.
               The levels or logging verbosity are:
               
                - 0 DEBUG
                - 1 INFO
                - 2 WARNING
                - 3 API_INFO
                - 4 ERROR
                - 5 CRITICAL
                - 6 FATAL
                - 7 REPAIRED
                - 8 NONE
               

               The level specified as this attribute is the lowest level that will be emitted to the
               logs. All logging can be suppressed by specifying the value 8 or NONE.

- Full path: //OpenSplice/Domain/Report[@verbosity]
- Format: enumeration
- Default value: INFO
- Valid values: DEBUG, INFO, WARNING, API_INFO, ERROR, CRITICAL, FATAL, REPAIRED, NONE
- Required: false

Statistics
==========

            This element specifies the policies regarding statistics. Various statistics
            can be generated by Vortex OpenSplice to help you analyze and tune application
            behaviour during application development.  Since this introduces extra overhead,
            it is generally turned off in a runtime system.

- Full path: //OpenSplice/Domain/Statistics
- Occurrences min-max: 0-1

Category
--------

                    This element specifies the properties for a particular category of statistics.

- Full path: //OpenSplice/Domain/Statistics/Category
- Occurrences min-max: 0-*
- Required attributes: name
- Optional attributes: enabled

enabled
^^^^^^^

                        This attribute enables or disables the generation of statistics for the
                        specified category.

- Full path: //OpenSplice/Domain/Statistics/Category[@enabled]
- Format: boolean
- Default value: true
- Required: false

name
^^^^

                        This attribute specifies the name of a particular category of statistics.

- Full path: //OpenSplice/Domain/Statistics/Category[@name]
- Format: enumeration
- Default value: reader
- Valid values: durability, reader, writer, networking
- Required: true

RetentionPeriod
===============

                    This element specifies how long the administration for unregistered instances is retained in both readers and the durability service before it is definitively removed.
                    (For the durability service this time is added to the service_cleanup_delay configured for each TopicQos.) By default unregistered instances are retained for 500 ms prior to removal,
                    to avoid the revival of 'forgotten' instances when receiving delayed samples written prior to the instance's unregistration.
                    This value should only be decreased when the expected lifetime of an instance is extremely short while the instance generation frequency is extremely high, to avoid running out of resources.
                    The value should be increased when you know you can expect out-of-order deliveries with a maximum delay higher than the currently configured RetentionPeriod.

- Full path: //OpenSplice/Domain/RetentionPeriod
- Format: integer
- Default value: 500
- Valid values: 1 /  -
- Occurrences min-max: 0-1

ReportPlugin
============

            This Tag specifies user defined report functionality to be used by
            the domain. All services and applications will load a user provides
            report library that will implement the report plugin interface.
            The report interface consists of three operations;
            initialize, report and finalize.

- Full path: //OpenSplice/Domain/ReportPlugin
- Occurrences min-max: 0-*
- Child elements: SuppressDefaultLogs, ServicesOnly

Library
-------

                This tag specifies the library to be loaded.

- Full path: //OpenSplice/Domain/ReportPlugin/Library
- Occurrences min-max: 1-1
- Required attributes: file_name

file_name
^^^^^^^^^

                    This attribute specifies the library to be loaded.

- Full path: //OpenSplice/Domain/ReportPlugin/Library[@file_name]
- Format: string
- Default value: n/a
- Required: true

Initialize
----------

                This tag specifies the library symbol that will be assigned to the
                report Initialize operation. This operation will be invoked
                initially after loading the library to perform initialization of
                the report facility if needed.

- Full path: //OpenSplice/Domain/ReportPlugin/Initialize
- Occurrences min-max: 1-1
- Required attributes: symbol_name
- Optional attributes: argument

symbol_name
^^^^^^^^^^^

                This attribute specifies the name of the function to be called to initialize the report
                plugin. The symbol_name is required, if it is not specified or cannot be resolved, an
                error message will be generated and the service will not attempt to resolve other
                symbol_names for the report plugin.
                The implementation of this function must have the following signature:
                int symbol_name (const char \*argument, void \*\*context)

                The result value is used to return the status of the call. If it is 0 then the operation
                was successful. If it is not 0 then there was an error and details of the error and the
                result value are reported to the Vortex OpenSplice default report service.
                The context parameter is an out reference that can be set to plugin-specific data that
                will subsequently be passed to any of the other plugin functions. The value of the
                parameter is meaningless to the service

- Full path: //OpenSplice/Domain/ReportPlugin/Initialize[@symbol_name]
- Format: string
- Default value: n/a
- Required: true

argument
^^^^^^^^

                The argument attribute is a string value that is passed to the function specified by the
                symbol_name. The string value has no meaning to the service and is used to pass
                any context-specific information that may be required. The argument is optional; if
                it is not provided then a NULL pointer is passed to the initalize function.

- Full path: //OpenSplice/Domain/ReportPlugin/Initialize[@argument]
- Format: string
- Default value: ""
- Required: false

Report
------

                This tag specifies the library symbol that will be assigned to
                the report Report operation. This operation will be invoked
                on all reports performed by the DDS service.

- Full path: //OpenSplice/Domain/ReportPlugin/Report
- Occurrences min-max: 0-1
- Required attributes: symbol_name

symbol_name
^^^^^^^^^^^

          This attribute specifies the name of the function to be called to pass report data to
          the report plugin. The symbol_name is required; if it is not specified or cannot be
          resolved, an error message will be generated and the service will not attempt to
          resolve other symbol_names for the report plugin.
          The function is invoked slightly differently for applications using the DDS API and
          Vortex OpenSplice services. Vortex OpenSplice services invoke the function once for every report.
          For applications using the DDS API the function is invoked once per API call, in
          which case the XML is extended by one or more DETAIL elements.
          The implementation of this function must have the following signature:
          int symbol_name (void \*context, const char \*report)

          The result value is used to return the status of the call. If it is 0 then the operation
          was successful. If it is not 0 then there was an error and details of the error and the
          result value are reported to the Vortex OpenSplice default report service.
          The context parameter is a reference to the plugin-specific data retrieved from the
          initialize operation.
          The report parameter is an XML string representation of the report data.
          Below is an example of the mapping that the XML string representation will use
          when invoked by a service:
          
          
<ERROR>
          
<DESCRIPTION>The object "my_topic" not found</DESCRIPTION>
          
<CONTEXT>c_base::resolve</CONTEXT>
          
<FILE>c_base.c</FILE>
          
<LINE>1234</LINE>
          
<CODE>0</CODE>
          
<PROCESS>
          
<ID>1234</ID>
          
<NAME>ProcessName</NAME>
          
</PROCESS>
          
<THREAD>
          
<ID>1234</ID>
          
<NAME>ThreadName</NAME>
          
</THREAD>
          
<COMMERCIAL>6.5</COMMERCIAL>
          
<REVISION>...</REVISION>
          
</ERROR>


          Below is an example of the mapping that the XML string representation will use for
          applications:
          
          
<ERROR>
          
<DESCRIPTION>Operation failed.</DESCRIPTION>
          
<CONTEXT>c_base::resolve</CONTEXT>
          
<FILE>c_base.c</FILE>
          
<LINE>1234</LINE>
          
<CODE>0</CODE>
          
<PROCESS>
          
<ID>1234</ID>
          
<NAME>ProcessName</NAME>
          
</PROCESS>
          
<THREAD>
          
<ID>1234</ID>
          
<NAME>ThreadName</NAME>
          
</THREAD>
          
<COMMERCIAL>6.5</COMMERCIAL>
          
<REVISION>...</REVISION>
          
<DETAIL>
          
<REPORT>The object "my_topic" not found.</REPORT>
          
<INTERNALS>...</INTERNALS>
          
</DETAIL>
          
<!-- optionally more DETAIL elements -->
          
</ERROR>

- Full path: //OpenSplice/Domain/ReportPlugin/Report[@symbol_name]
- Format: string
- Default value: n/a
- Required: true

TypedReport
-----------

                This tag specifies the library symbol that will be assigned to
                the report TypedReport operation. This operation will be invoked
                on all reports performed by the DDS service.

- Full path: //OpenSplice/Domain/ReportPlugin/TypedReport
- Occurrences min-max: 0-1
- Required attributes: symbol_name

symbol_name
^^^^^^^^^^^

                This attribute specifies the name of the function to be called to finalize the report
                plugin, when the domain unregisters any registered plugin. The symbol_name is
                required. If it is not specified or cannot be resolved, an error message will be
                generated and the service will not attempt to resolve other symbol_names for the
                report plugin.
                The implementation of this function must have the following signature:
                int symbol_name (void \*context)

                The result value is used to return the status of the call. If it is 0 then the operation
                was successful. If it is not 0 then there was an error and details of the error and the
                result value are reported to the Vortex OpenSplice default report service.

- Full path: //OpenSplice/Domain/ReportPlugin/TypedReport[@symbol_name]
- Format: string
- Default value: n/a
- Required: true

Finalize
--------

                This tag specifies the library symbol that will be assigned
                to the report Finalize operation. This operation will be
                invoked upon process termination to perform de-initialization
                of the report facility if needed.

- Full path: //OpenSplice/Domain/ReportPlugin/Finalize
- Occurrences min-max: 1-1
- Required attributes: symbol_name

symbol_name
^^^^^^^^^^^

                This attribute specifies the name of the function to be called to finalize the report
                plugin, when the domain unregisters any registered plugin. The symbol_name is
                required. If it is not specified or cannot be resolved, an error message will be
                generated and the service will not attempt to resolve other symbol_names for the
                report plugin.
                The implementation of this function must have the following signature:
                int symbol_name (void \*context)
                The result value is used to return the status of the call. If it is 0 then the operation
                was successful. If it is not 0 then there was an error and details of the error and the
                result value are reported to the Vortex OpenSplice default report service.
                The context parameter is a reference to the plugin-specific data retrieved from the
                initialize operation.

- Full path: //OpenSplice/Domain/ReportPlugin/Finalize[@symbol_name]
- Format: string
- Default value: n/a
- Required: true

SuppressDefaultLogs
-------------------

            This attribute specifies whether the default error and info
            report logs are to be produced when a user Report Plugin has
            been defined.  If registration of the Report Plugin fails the
            default error and info logs will not be suppressed regardless of
            the value of this attribute

- Full path: //OpenSplice/Domain/ReportPlugin/SuppressDefaultLogs
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

ServicesOnly
------------

            This attribute specifies whether the log plug-in is to be effective only for processes
            that are exclusively Vortex OpenSplice services. If this value is true then the plug-in will
            not be used for user applications and/or Vortex OpenSplice services collocated with user
            applications in single process mode.

- Full path: //OpenSplice/Domain/ReportPlugin/ServicesOnly
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

ResourceLimits
==============

            This configuration tag allows for the specification of certain
            characteristics of resource limits that will be applied throughout
            the domain

- Full path: //OpenSplice/Domain/ResourceLimits
- Occurrences min-max: 0-1

MaxSamples
----------

                This configuration tag allows for the specification of certain
                characteristics of the max samples resource limit that will
                be applied throughout the domain

- Full path: //OpenSplice/Domain/ResourceLimits/MaxSamples
- Occurrences min-max: 0-1
- Child elements: WarnAt

WarnAt
^^^^^^

                        This element specifies the number of samples that, once
                        reached, will result in a warning message printed in
                        the info log. This is to allow the detection of excessive
                        use of resources within the domain more easily.

- Full path: //OpenSplice/Domain/ResourceLimits/MaxSamples/WarnAt
- Default value: 5000
- Valid values: 1 /  -
- Occurrences min-max: 0-1

MaxInstances
------------

                This configuration tag allows for the specification of certain
                characteristics of the max instances resource limit that will
                be applied throughout the domain

- Full path: //OpenSplice/Domain/ResourceLimits/MaxInstances
- Occurrences min-max: 0-1
- Child elements: WarnAt

WarnAt
^^^^^^

                        This element specifies the number of instances that, once
                        reached, will result in a warning message printed in
                        the info log. This is to allow the detection of excessive
                        use of resources within the domain more easily.

- Full path: //OpenSplice/Domain/ResourceLimits/MaxInstances/WarnAt
- Default value: 5000
- Valid values: 1 /  -
- Occurrences min-max: 0-1

MaxSamplesPerInstance
---------------------

                This configuration tag allows for the specification of certain
                characteristics of the max samples per instance resource limit
                that will be applied throughout the domain

- Full path: //OpenSplice/Domain/ResourceLimits/MaxSamplesPerInstance
- Occurrences min-max: 0-1
- Child elements: WarnAt

WarnAt
^^^^^^

                        This element specifies the number of samples per
                        instance that, once reached, will result in a warning
                        message printed in the info log. This is to allow the
                        detection of excessive use of resources within the
                        domain more easily.

- Full path: //OpenSplice/Domain/ResourceLimits/MaxSamplesPerInstance/WarnAt
- Default value: 5000
- Valid values: 1 /  -
- Occurrences min-max: 0-1

PartitionAccess
===============

                This element is used to configure the partition access rights. By default all partitions
                have read and write access, which means that subscribers and publishers may be
                created for all partitions. However by changing the access level of specific partitions
                it is possible to prevent publishers and/or subscribers from attaching to these
                partitions. The access rights is Domain Service specific, each Domain Service can
                have its own policy.
                The PartitionAccess element facilitates the configuration of such behavior. This
                is done by allowing the definition of a partition expression along with a specific
                access mode for the matched partitions. The PartitionAccess element resides as
                a child element within the Domain element. The exact definition of the
                PartitionAccess element is as follows:

- Full path: //OpenSplice/Domain/PartitionAccess
- Occurrences min-max: 0-*
- Required attributes: partition_expression, access_mode

partition_expression
--------------------

                This attribute specifies the partitions by name.
                The wildcards '\*' and '?' are allowed and the specified
                access rights will be applied to all matching partitions.
                In case partitions match multiple rules the rules will be
                applied in sequence of declaration.

- Full path: //OpenSplice/Domain/PartitionAccess[@partition_expression]
- Format: string
- Default value: *
- Required: true

access_mode
-----------

               This attribute identifies the access level for partitions specified by the
               partition_expression attribute. The following values are allowed:
               
                 - read Indicates domain participants can only read from this partition
                 - write Indicates domain participants can only write to this partition
                 - readwrite Indicates domain participants can read from and write to this partition
                 - none Indicates that domain participants have no access on partitions matching the partition_expression.
               

               When multiple expressions overlap each other, the following rules are applied:
               
                  Access mode 1 Access mode 2 Resulting access mode
                  read write readwrite
                  read readwrite readwrite
                  read none none
                  write readwrite readwrite
                  write none none
                  readwrite none none

- Full path: //OpenSplice/Domain/PartitionAccess[@access_mode]
- Format: enumeration
- Default value: readwrite
- Valid values: none, read, write, readwrite
- Required: true

SystemId
========
This configures the generation of the unique System IDs

- Full path: //OpenSplice/Domain/SystemId
- Occurrences min-max: 0-1
- Child elements: UserEntropy

Range
-----
This configures the range of the generated System IDs

- Full path: //OpenSplice/Domain/SystemId/Range
- Occurrences min-max: 0-1
- Optional attributes: min, max

min
^^^
This attribute specifies the minimum allowed System ID. In addition to being within range, it must be less than or equal to the "max" attribute.

- Full path: //OpenSplice/Domain/SystemId/Range[@min]
- Format: integer
- Default value: 1
- Valid values: 1 / 2147483647
- Required: false

max
^^^
This attribute specifies the maximum allowed System ID. In addition to being within range, it must be greater than or equal to the "min" attribute.

- Full path: //OpenSplice/Domain/SystemId/Range[@max]
- Format: integer
- Default value: 2147483647
- Valid values: 1 / 2147483647
- Required: false

UserEntropy
-----------
This attribute specifies a string that is used as an additional source of entropy in the System ID generation. The string is not interpreted.

- Full path: //OpenSplice/Domain/SystemId/UserEntropy
- Format: string
- Occurrences min-max: 0-1

TopicAccess
===========

             This element is used to configure the topic access rights. By default all topics have
             read and write access (built-in topics have a default access mode of read), which
             means that datareaders and datawriters may be created for all topics. However by
             changing the access level of specific topics it is possible to prevent datawriters
             and/or datareaders from being created for these topics. The access rights is Domain
             Service specific, each Domain Service can have its own policy.
             The TopicAccess element facilitates the configuration of such behavior. This is
             done by allowing the definition of a topic expression along with a specific access
             mode for the matched topics.
             The TopicAccess element resides as a child element within the Domain element

- Full path: //OpenSplice/Domain/TopicAccess
- Occurrences min-max: 0-*
- Required attributes: topic_expression, access_mode

topic_expression
----------------

                This attribute specifies the topics by name.
                The wildcards '\*' and '?' are allowed and the specified
                access rights will be applied to all matching topics.
                In case topics match multiple rules the rules will be
                applied in sequence of declaration.

- Full path: //OpenSplice/Domain/TopicAccess[@topic_expression]
- Format: string
- Default value: *
- Required: true

access_mode
-----------

                This attribute specifies the access rights that will be
                applied to the specified topics. The following values
                are applicable:
                
                    - none
                    - read
                    - write
                    - readwrite

- Full path: //OpenSplice/Domain/TopicAccess[@access_mode]
- Format: enumeration
- Default value: readwrite
- Valid values: none, read, write, readwrite
- Required: true

UserClock
=========

            The UserClock Service allows you to plug in a custom clock library, allowing
            Vortex OpenSplice to read the time from an external clock source. It expects a root
            element named *OpenSplice/Domain/UserClock*. Within this root element,
            the userclock will look for several child-elements. Each of these is listed
            and explained.

- Full path: //OpenSplice/Domain/UserClock
- Occurrences min-max: 0-1
- Child elements: UserClockModule, UserClockStart, UserClockStop, UserClockQuery
- Optional attributes: y2038Ready

y2038Ready
----------

                   This element specifies whether or not the registered user
                   clock is returning a 64-bit seconds field.

                   Default this setting is following the y2038Ready setting on
                   domain level. (default /domain/y2038Ready is FALSE)
                   The user is able to make some mixed environments by using this
                   configuration option. For example a 64-bit user clock can already
                   be implemented (by setting this option to true) while the node
                   must be compatible with older versions,
                   so domain/y2038Ready can not be set. A warning is printed when
                   the Domain/y2038Ready element is true and the
                   Domain/UserClock/y2038Ready attribute is false.
                   The 64-bit layout returned by the userclock must be:
                   
struct dds_userclock_t {
                   
  os_int64 seconds;
                   
  os_int32 nanoseconds;
                   
};
                   
See 'Time stamps and year 2038 limit' for more background information.

- Full path: //OpenSplice/Domain/UserClock[@y2038Ready]
- Format: boolean
- Default value: False
- Required: false

UserClockModule
---------------

                This element specifies the User Clock Service library file. On UNIX
                like and Windows platforms this will be a shared library. On VxWorks
                this will be a reallocatable object file. On VxWorks this tag may
                be empty or discarded if the functions are pre-loaded on the target.

- Full path: //OpenSplice/Domain/UserClock/UserClockModule
- Format: string
- Occurrences min-max: 1-1

UserClockStart
--------------

                This element specifies if the user clock requires a start function to
                be called  when the process first creates a participant.
                This element specifies the name of the start function.
                This start function should not have any parameters, and needs
                to return an int that represents 0 if there are no problems,
                and any other value if a problem is encountered.

- Full path: //OpenSplice/Domain/UserClock/UserClockStart
- Format: string
- Default value: clockStart
- Occurrences min-max: 0-1
- Required attributes: enabled

enabled
^^^^^^^

                  This attribute specifies if the start function is enabled and should be used.

- Full path: //OpenSplice/Domain/UserClock/UserClockStart[@enabled]
- Format: boolean
- Default value: true
- Required: true

UserClockStop
-------------

                This element specifies if the user clock requires a stop function to
                be called when the process deletes the last participant.
                This attribute specifies the name of the stop function. This stop
                function should not have any parameters, and needs to return an
                int that represents 0 if there are no problems, and any other
                value if a problem is encountered.

- Full path: //OpenSplice/Domain/UserClock/UserClockStop
- Format: string
- Default value: clockStop
- Occurrences min-max: 0-1
- Required attributes: enabled

enabled
^^^^^^^

                  This attribute specifies if the stop function is enabled and should be used.

- Full path: //OpenSplice/Domain/UserClock/UserClockStop[@enabled]
- Format: boolean
- Default value: true
- Required: true

UserClockQuery
--------------

                This element specifies the clock query function.
                This attribute specifies the name of the function that gets the
                current time. This *clockGet* function should not have any parameters,
                and needs to return the current time as an *os_time* type.

                The definition of the *os_time* type can be found in *os_time.h*.

- Full path: //OpenSplice/Domain/UserClock/UserClockQuery
- Format: string
- Default value: clockGet
- Occurrences min-max: 0-1
- Required attributes: enabled

enabled
^^^^^^^

                  This attribute specifies if the query function is enabled and should be used.

- Full path: //OpenSplice/Domain/UserClock/UserClockQuery[@enabled]
- Format: boolean
- Default value: true
- Required: true

DurablePolicies
===============

              There are two ways for a late joining reader to retrieve historical
              data as a result of calling <tt>wait_for_historical_data()</tt> or
              <tt>DDS_wait_for_historical_data()</tt>.
              
                - The first way is to configure a local durability service
                    that is responsible for the alignment of historical data (see
                    //OpenSplice/DurabilityService). In this case the local durability
                    service will provide historical data to interested readers
                    on the local federations.
                - The second way is NOT to run a local durability service, but
                    to request data from a durability service on a remote federation
                    using the client-durability feature. This makes sense in environments
                    where running a full-fledged durability service is not possible or
                    unwanted, e.g., due to resource limitations.
              

              

              The element //OpenSplice/Domain/DurablePolicies specifies how
              historical data that is retrieved from a remote durability federation
              using the client-durability feature is handled locally. More specifically,
              this element allows the user to indicate whether historical data that
              is requested by a late joining reader using the client-durability feature
              will be made available to the requesting reader only, or to all readers in the
              federation. The behaviour can be specified per partition/topic combination
              in the //OpenSplice/Domain/DurablePolicies/Policy elements.

              In most situations it is sufficient to either configure a local durability
              service to acquire historical data, or to use the client-durability feature,
              but not both. However, it is not forbidden to use both methods concurrently.
              In that case it is advised to configure the system in such a way that historical
              data for a particular partition/topic combination is either provided using
              method 1 or 2. In the event that historical data for the same partition/topic
              combination can be requested via both methods, methods 1 will be used.

- Full path: //OpenSplice/Domain/DurablePolicies
- Occurrences min-max: 0-1

Policy
------

                    The policy specifies whether historical data that matches the pattern
                    specified in the //OpenSplice/Domain/DurablePolicies/Policy[@obtain]
                    attribute is cached or not. Caching means that the same data is available
                    for late joining readers on the local federation.

                    Multiple policies can be specified. The order of these policies is
                    important: the first policy that matches (from top to bottom) will
                    be applied.

                    If no policy is specified then the default policy is applied. The
                    default policy is to deliver requested historical data to all readers.

- Full path: //OpenSplice/Domain/DurablePolicies/Policy
- Occurrences min-max: 0-*
- Required attributes: obtain
- Optional attributes: cache

obtain
^^^^^^

                    This element specifies the pattern of the partition/topic for
                    which the policy must be applied. The default is \*.\*.

- Full path: //OpenSplice/Domain/DurablePolicies/Policy[@obtain]
- Format: string
- Default value: *.*
- Required: true

cache
^^^^^

                    This element specifies whether or not to cache historical data.
                    If set to TRUE historical data is cached in the local federation
                    for potential other late joiners in the same federation. In this
                    case historical data will only be aligned once for the
                    federation, no matter how many readers are interested. This
                    saves bandwidth and CPU when more than one readers are expected
                    with (partly) the same interest. The downside is that caching
                    historical data will require additional memory even after the
                    reader has taken all its data. If set to FALSE data is not cached.

                    The recommended setting is TRUE when more than one readers
                    for the data are expected and the cost of extra memory can be afforded.
                    In all other circumstances FALSE should be used. The default is TRUE.

- Full path: //OpenSplice/Domain/DurablePolicies/Policy[@cache]
- Format: boolean
- Default value: True
- Required: false

y2038Ready
==========

            The y2038Ready element determines that Vortex OpenSplice will send timestamps to other nodes
            in a 64-bit format which is capable to contain time stamps beyond the year 2038.

            Setting this option to true will force the middleware to communicate with time stamps able to go
            beyond 2038.
            Other nodes before version 6.7 are not able to handle these new time stamps and will no longer
            interact correctly with the node configured with this option.

            From version 6.7 the middleware is internally prepared and calculating with time stamps capable with
            timestamps beyond 2038.
            From version 6.7 nodes are able to detect the timestamps containing time beyond 2038 and
            the older time format. So these nodes will interact correctly with all other nodes.
            In a mixed environment containing versions before 6.7, communication must be in the old timestamp format,
            so this configuration option can not be set.
            In a mixed environment with only versions 6.7 and higher, this configuration option may be set. The
            nodes with this configuration will send timestamps capable beyond 2038. All other nodes will be able
            to interpret these values correctly.
            
See ' time stamps and year 2038 limit' for more background information.
            

           By default this configuration item is set to false.

- Full path: //OpenSplice/Domain/y2038Ready
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

Filters
=======

          Domain Filters are expressions that are applied on the local Domain Service meaning that it affects all local readers
          including services, i.e. filtered out data will not exist on the node.
          By using filters the amount of data that is being send or received can be reduced.


          Different filters can be specified for different partition-topic
          combinations using the &lt;Filter&gt;-elements.


          Note: that when a filter is set on a partition topic combination the Durability Service can no longer be master for
          the namespace that contains the given partition-topic combination as it is incomplete by definition.

- Full path: //OpenSplice/Domain/Filters
- Occurrences min-max: 0-1

Filter
------

            This element specifies the filter that is used. The &lt;PartitionTopic&gt;-child
            elements specify the partition-topic combinations to which the
            filter expression is applied.


            If no filter is defined for a particular partition-topic then all data will be
            send for this partition-topic combination.
            If multiple filters are defined then the first one that matches will be applied.

- Full path: //OpenSplice/Domain/Filters/Filter
- Occurrences min-max: 0-*
- Child elements: PartitionTopic
- Required attributes: content

content
^^^^^^^

              This attribute specifies the expression that is used for filtering.
              The expression is a string that is used as-is without any parameters.
              The filter expression is essentially the where-clauses of an sql expression.
              When data is requested for matching partition-topics only the data
              that matches the filter expression will be aligned. The
              content attribute defaults to the empty string, which means that
              no filter is applied at all.


              The following escape sequence can be used in expressions: &amp;lt;
              (less than), &amp;gt; (greater than), &amp;quot; (double quote)
              &amp;apos; (apostrophe) and &amp;amp; (ampersand).


              Examples of expressions are:
              
                - x=1 or x=2
                - (id&amp;lt;10) and (name=&quot;test&quot;)
              

              If an invalid filter expression is provided an error will be logged
              in ospl-error.log.

- Full path: //OpenSplice/Domain/Filters/Filter[@content]
- Format: string
- Default value: n/a
- Required: true

PartitionTopic
^^^^^^^^^^^^^^

              This element specifies the partition-topics to which
              the filter expression is applied. A partition-topic
              expression may contain the wildcards '\*' to match any number of
              characters and '?' to match one single character.

- Full path: //OpenSplice/Domain/Filters/Filter/PartitionTopic
- Format: string
- Default value: *.*
- Occurrences min-max: 0-*

DurabilityService
*****************

                The responsibilities of the durability service are to realize the durable properties of
                data in an Vortex OpenSplice system. The Durability Service looks for its configuration
                within the 'OpenSplice/DurabilityService' element. The configuration parameters
                that the Durability Service will look for within this element are listed and explained
                in the following subsections.

- Full path: //OpenSplice/DurabilityService
- Occurrences min-max: 0-1
- Required attributes: name

name
====

                This attribute identifies the configuration for the Durability service.
                Multiple Durability service configurations can be specified in one single
                resource. The actual applicable configuration is determined by the value
                of the name attribute, which must match the one specified under the
                *OpenSplice/Domain/Service[@name]* in the configuration of
                the DomainService.

- Full path: //OpenSplice/DurabilityService[@name]
- Format: string
- Default value: durability
- Required: true

ClientDurability
================

                Client-durability is a feature that allows clients of this durability
                service to acquire historical data from a remote durability service
                without having to run their own durability service. This element
                controls the characteristics of the client-durability feature. When
                enabled, this durability server will be able to responds to requests
                for historical data from such clients.
                If the *OpenSplice/DurabilityService/ClientDurability* element is not
                provided, then the durability service will not respond to historical
                data requests from clients.

- Full path: //OpenSplice/DurabilityService/ClientDurability
- Occurrences min-max: 0-1
- Optional attributes: enabled

enabled
-------

                    This attribute enables or disables the ability of the durability service
                    to respond to requests for historical data from clients. When the
                    *OpenSplice/DurabilityService/ClientDurability[@enabled]* attribute
                    is not provided then it is assumed to be TRUE.

- Full path: //OpenSplice/DurabilityService/ClientDurability[@enabled]
- Format: boolean
- Default value: TRUE
- Required: false

EntityNames
-----------

                    This element specifies the names of the various entities used by the
                    client-durability feature of this DurabilityService. The names specified
                    here will be displayed in the Vortex OpenSplice Tuner when viewing the
                    DurabilityService.

- Full path: //OpenSplice/DurabilityService/ClientDurability/EntityNames
- Occurrences min-max: 0-1
- Child elements: Publisher, Subscriber, Partition

Publisher
^^^^^^^^^

                        This element specifies the name of the client-durability publisher.

- Full path: //OpenSplice/DurabilityService/ClientDurability/EntityNames/Publisher
- Format: string
- Default value: durabilityPublisher
- Occurrences min-max: 0-1

Subscriber
^^^^^^^^^^

                        This element specifies the name of the client-durability subscriber.

- Full path: //OpenSplice/DurabilityService/ClientDurability/EntityNames/Subscriber
- Format: string
- Default value: durabilitySubscriber
- Occurrences min-max: 0-1

Partition
^^^^^^^^^

                        This element specifies the name of the partition used for
                        client-durability. The default is the same partition as
                        the partition specified for durability (see
                        Opensplice/DurabilityService/EntityNames/Partition)

- Full path: //OpenSplice/DurabilityService/ClientDurability/EntityNames/Partition
- Format: string
- Default value: durabilityPartition
- Occurrences min-max: 0-1

Watchdog
========

                This element controls the characteristics of the Watchdog thread.

- Full path: //OpenSplice/DurabilityService/Watchdog
- Occurrences min-max: 0-1
- Optional attributes: deadlockDetection

deadlockDetection
-----------------

                This attribute drives whether the Watchdog will check for deadlocks and refrain
                from updating its lease and heartbeat in case one or more of its threads do not
                assert their liveliness. Typically this should not be enabled, but it can be
                helpful to ensure certain responsiveness of the durability service and the
                detection of potential deadlocks.

- Full path: //OpenSplice/DurabilityService/Watchdog[@deadlockDetection]
- Format: boolean
- Default value: False
- Required: false

Scheduling
----------

                    This element specifies the type of OS scheduling class will be
                    used by the thread that announces its liveliness periodically.

- Full path: //OpenSplice/DurabilityService/Watchdog/Scheduling
- Occurrences min-max: 1-1
- Child elements: Priority, Class

Priority
^^^^^^^^

                        This element specifies the thread priority that will be used by the
                        watchdog thread. Only priorities that are supported by the
                        underlying operating system can be assigned to this element.
                        The user may need special privileges from the underlying operating
                        system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/DurabilityService/Watchdog/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
~~~~~~~~~~~~~

                            This attribute specifies whether the specified
                            Priority is a relative or absolute priority.

- Full path: //OpenSplice/DurabilityService/Watchdog/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Required: false

Class
^^^^^

                        This element specifies the thread scheduling class that will be used by
                        the watchdog thread. The user may need the appropriate privileges from
                        the underlying operating system to be able to assign some of the
                        privileged scheduling classes.

- Full path: //OpenSplice/DurabilityService/Watchdog/Scheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

Network
=======

                    Applications need to be able to gain access to historical data in a system.
                    When the local DDS service gets connected to a remote DDS service by means
                    of the Networking service, (parts of) the historical data might not be
                    consistent between the local and remote Durability services. The Durability
                    service needs to be able to detect the other available Durability services
                    and exchange historical data with them to keep and/or restore consistency
                    in historical data between them.


                    The Network element provides handles to fine-tune the behavior of the
                    communication between Durability services on different computing nodes on
                    network level. These settings only apply when the Networking service is active.

- Full path: //OpenSplice/DurabilityService/Network
- Occurrences min-max: 0-1
- Child elements: InitialDiscoveryPeriod
- Optional attributes: latency_budget, transport_priority

latency_budget
--------------

                    This attribute controls the latency_budget QoS setting
                    that is used by the Durability service for its communication
                    with other Durability services.

                    It specfies the maximum acceptable delay (in seconds) from
                    the time the data is written until the data is insterted in the
                    cache of the receiving Durability service(s) and the receiver is
                    notified of the fact. The default value is zero, indicating the
                    delay should be minimized.

- Full path: //OpenSplice/DurabilityService/Network[@latency_budget]
- Dimension: seconds
- Default value: 0.0
- Valid values: 0.0 /  -
- Required: false

transport_priority
------------------

                    This attribute controls the transport priority QoS
                    setting that is used by the Durability service for its
                    communication with other Durability services.

                    It indicates the importance of the communication of the
                    Durability service with other Durability services in the
                    system. The transport priority specified here will be
                    interpreted by the Networking service and should be
                    used to differentiate the priority between communication
                    of user applications and communication of the Durability
                    service.

                    For example, if the latency of timing-critical application data should not be
                    disturbed by alignment activities between durability services, then this transport
                    priority should be configured lower than the application policy.

- Full path: //OpenSplice/DurabilityService/Network[@transport_priority]
- Format: integer
- Default value: 0
- Valid values: 0 /  -
- Required: false

Heartbeat
---------

                    During startup and at runtime, the network topology can change
                    dynamically. This happens when Vortex OpenSplice services are started/stopped
                    or when a network cable is plugged in/out. The Durability services
                    need to keep data consistency in that environment. To detect newly
                    joining services as well as detecting nodes that are leaving, the
                    Durability service uses a hearbeat mechanism. This element allows
                    fine-tuning of this mechanism.


                    Please note this heartbeat mechanism is similar to but not the
                    same as the service liveliness assertion.

- Full path: //OpenSplice/DurabilityService/Network/Heartbeat
- Occurrences min-max: 0-1
- Child elements: ExpiryTime
- Optional attributes: latency_budget, transport_priority

latency_budget
^^^^^^^^^^^^^^

                        This attribute controls the latency budget QoS setting that
                        is only used by the Durability service for sending its heartbeats.
                        It overrules the value of the *DurabilityService/Network[@latency_budget]*.

- Full path: //OpenSplice/DurabilityService/Network/Heartbeat[@latency_budget]
- Default value: 0.0
- Valid values: 0.0 /  -
- Required: false

transport_priority
^^^^^^^^^^^^^^^^^^

                        This attribute controls the transport priority QoS setting (in seconds) that
                        is only used by the Durability service for for sending its heartbeats.
                        It overrules the value of the *DurabilityService/Network[@transport_priorrity]*.

- Full path: //OpenSplice/DurabilityService/Network/Heartbeat[@transport_priority]
- Format: integer
- Default value: 0
- Valid values: 0 /  -
- Required: false

Scheduling
^^^^^^^^^^

                        This element specifies the scheduling parameters used by the
                        thread that periodically sends the heartbeats.

- Full path: //OpenSplice/DurabilityService/Network/Heartbeat/Scheduling
- Occurrences min-max: 0-1
- Child elements: Priority, Class

Priority
~~~~~~~~

                            This element specifies the thread priority that will be used
                            by the thread that periodically sends the heartbeats. Only
                            priorities that are supported by the underlying operating
                            system can be assigned to this element. The user may need
                            special privileges from the underlying operating system to
                            be able to assign some of the privileged priorities.

- Full path: //OpenSplice/DurabilityService/Network/Heartbeat/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
+++++++++++++

                                This attribute specifies whether the specified
                                Priority is a relative or absolute priority.

- Full path: //OpenSplice/DurabilityService/Network/Heartbeat/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Required: false

Class
~~~~~

                            This element specifies the thread scheduling class that will
                            be used by the thread that periodically sends the heartbeats.
                            The user may need the appropriate privileges from the underlying
                            operating system to be able to assign some of the privileged
                            scheduling classes.

- Full path: //OpenSplice/DurabilityService/Network/Heartbeat/Scheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

ExpiryTime
^^^^^^^^^^

                        This element specifies the maximum amount of time(in seconds) in
                        which the Durability service expects a new heartbeat of
                        other Durability services. This is obviously also the
                        same amount of time in which the Durability service must
                        send a heartbeat itself.

                        Increasing this value will lead to less networking
                        traffic and overhead but also to less responsiveness with
                        respect to the liveliness of a Durability service. Change
                        this value according to the need of your system with respect
                        to these aspects.

- Full path: //OpenSplice/DurabilityService/Network/Heartbeat/ExpiryTime
- Default value: 10.0
- Valid values: 0.2 /  -
- Occurrences min-max: 1-1
- Required attributes: update_factor

update_factor
~~~~~~~~~~~~~

                            In case of a (temporary) high CPU load, the scheduling
                            behaviour of the operating system might affect the
                            capability of the Durability service to send its
                            heartbeat 'on time'. This attribute introduces some
                            elasticity in this mechanism by making the service
                            send its heartbeat more often then required by the
                            ExpiryTime.

                            The Durability service will report its liveliness
                            every *ExpiryTime* multiplied by this
                            *update_factor*.

- Full path: //OpenSplice/DurabilityService/Network/Heartbeat/ExpiryTime[@update_factor]
- Default value: 0.2
- Valid values: 0.1 / 0.9
- Required: true

InitialDiscoveryPeriod
----------------------

                On startup the Durability Service needs to determine, for each namespace, if it has
                to align with other Durability Services in the system or if it has to load the initial
                state from disk (load persistent data). For this the Durability Service will publish a
                request for information and wait for the specified initial discovery period for all
                Durability services to respond. The Durability Service will load the persistent data
                from disk if no response is received within the specified initial discovery period.
                This initial discovery period should be configured greater than the worst case
                expected discovery time which is related to underlying hardware, type of network,
                network configuration, and expected load. If the initial discovery period is too short
                the Durability Service may conclude that there is no running system and load the
                data from disk, which will result in conflicting states ('split-brain syndrome') i.e.
                two separate systems.
                The Durabiltiy Service will wait for at least the full initial discovery period before it
                can continue and become operational, so for fast startup times it is important to keep
                the initial discovery period as small as possible.
                .The metaphoric term 'split-brain syndrome' is sometimes used to highlight the results of
                a temporary outage of communications between two parts of a system. In such a
                situation, the states of the disconnected parts evolve separately and become
                incompatible, so that by the time communication is restored the system has become
                'schizophrenic'.

- Full path: //OpenSplice/DurabilityService/Network/InitialDiscoveryPeriod
- Dimension: seconds
- Default value: 3.0
- Valid values: 0.1 / 10.0
- Occurrences min-max: 0-1

Alignment
---------

                    The Durability service is responsible for keeping its local cache
                    consistent with the other available Durability caches in the
                    system. To do this, it needs to exchange data to recover from
                    inconsistencies. The exchange of durable data to restore
                    consistency is called alignment. This element allows fine-tuning
                    alignment behaviour of the Durability service.

- Full path: //OpenSplice/DurabilityService/Network/Alignment
- Occurrences min-max: 0-1
- Child elements: TimeAlignment, TimeToWaitForAligner
- Optional attributes: latency_budget, transport_priority

latency_budget
^^^^^^^^^^^^^^

                        This attribute specifies the latency budget QoS setting (in seconds)
                        that is only used by the Durability service for the alignment of data.
                        It overrules the value of the
                        OpenSplice/DurabilityService/Network[@latency_budget].

- Full path: //OpenSplice/DurabilityService/Network/Alignment[@latency_budget]
- Default value: 0.0
- Valid values: 0.0 /  -
- Required: false

transport_priority
^^^^^^^^^^^^^^^^^^

                        This attribute specifies the transport priority QoS setting
                        that is used by the Durability service for the alignment of data.
                        It overrules the value of the
                        *DurabilityService/Network[@transport_priorrity]* for the
                        alignment of data only.

- Full path: //OpenSplice/DurabilityService/Network/Alignment[@transport_priority]
- Format: integer
- Default value: 0
- Valid values: 0 /  -
- Required: false

TimeAlignment
^^^^^^^^^^^^^

                        This attribute specifies whether time on all nodes in
                        the domain can be considered aligned or not. This setting
                        needs to be consistent for all durability services in the
                        domain. In case there is no time alignment, the durability
                        service needs to align more data to compensate for possible
                        timing gaps between different nodes in the domain.

                        When using DDSI2(e) networking service it is strongly recommended
                        to set this value to 'false'. The asynchronous nature of the DDSI2
                        discovery protocol in combination with TimeAlignment could lead to a
                        gap in transient/persistent data when Durability alignment and DDSI2
                        discovery coincide, which is normal behavior.

- Full path: //OpenSplice/DurabilityService/Network/Alignment/TimeAlignment
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

AlignerScheduling
^^^^^^^^^^^^^^^^^

                        This element specifies the scheduling parameters used to
                        control the thread that aligns other durability services.

- Full path: //OpenSplice/DurabilityService/Network/Alignment/AlignerScheduling
- Occurrences min-max: 0-1
- Child elements: Priority, Class

Priority
~~~~~~~~

                            This element specifies the thread priority that will be
                            used by the aligner thread. Only priorities that are
                            supported by the underlying operating system can be
                            assigned to this element. The user may need special
                            privileges from the underlying operating system to be
                            able to assign some of the privileged priorities.

- Full path: //OpenSplice/DurabilityService/Network/Alignment/AlignerScheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
+++++++++++++

                                This attribute specifies whether the specified
                                Priority is a relative or absolute priority.

- Full path: //OpenSplice/DurabilityService/Network/Alignment/AlignerScheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Required: false

Class
~~~~~

                            This element specifies the thread scheduling class that
                            will be used by the aligner thread. The user may need the
                            appropriate privileges from the underlying operating
                            system to be able to assign some of the privileged
                            scheduling classes.

- Full path: //OpenSplice/DurabilityService/Network/Alignment/AlignerScheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

AligneeScheduling
^^^^^^^^^^^^^^^^^

                        This element specifies the scheduling parameters used to
                        control the thread that makes sure the local node becomes
                        and stays aligned.

- Full path: //OpenSplice/DurabilityService/Network/Alignment/AligneeScheduling
- Occurrences min-max: 0-1
- Child elements: Priority, Class

Priority
~~~~~~~~

                            This element specifies the thread priority that will be
                            used by the alignee thread. Only priorities that are
                            supported by the underlying operating system can be
                            assigned to this element. The user may need special
                            privileges from the underlying operating system to be
                            able to assign some of the privileged priorities.

- Full path: //OpenSplice/DurabilityService/Network/Alignment/AligneeScheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
+++++++++++++

                                This attribute specifies whether the specified
                                Priority is a relative or absolute priority.

- Full path: //OpenSplice/DurabilityService/Network/Alignment/AligneeScheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Required: false

Class
~~~~~

                            This element specifies the thread scheduling class that
                            will be used by the alignee thread. The user may need the
                            appropriate privileges from the underlying operating
                            system to be able to assign some of the privileged
                            scheduling classes

- Full path: //OpenSplice/DurabilityService/Network/Alignment/AligneeScheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

RequestCombinePeriod
^^^^^^^^^^^^^^^^^^^^

                        When the Durability service detects an inconsistency with
                        another Durability service, it requests that service to align
                        it. The service that receives this request will restore
                        consistency by sending the requested information. In some
                        cases, the Durability service may receive alignment requests
                        from multiple Durability services for the same information
                        around the same moment in time. To reduce the processing and
                        networking load in that case, the Durability service is
                        capable of aligning multiple Durability services concurrently.

                        The RequestCombinePeriod has 2 child-elements: a setting
                        that is used when the current Durability Service is not yet
                        aligned with all others (*Initial*) and one for the period
                        after that (*Operational*). These values specify the maximum
                        amount of time the Durability service is allowed to wait with
                        alignment after an alignment request has been received.

                        Increasing the value will increase the amount of time in
                        which the Durability service restores from inconsistencies,
                        but will decrease the processing and network load in
                        case multiple Durability services need to resolve the
                        same data around the same time. Increasing the value
                        is useful in case Vortex OpenSplice is started at the same time
                        with more than two computing nodes.

- Full path: //OpenSplice/DurabilityService/Network/Alignment/RequestCombinePeriod
- Occurrences min-max: 0-1
- Child elements: Initial, Operational

Initial
~~~~~~~

                        This element specifies the maximum amount of time the Durability
                        Service is allowed to wait with alignment after an alignment
                        request has been received and the service itself is not yet
                        considered operational because it has not yet aligned itself
                        with all other Durability Services.

- Full path: //OpenSplice/DurabilityService/Network/Alignment/RequestCombinePeriod/Initial
- Default value: 0.5
- Valid values: 0.01 / 5.0
- Occurrences min-max: 0-1

Operational
~~~~~~~~~~~

                            This element specifies the maximum amount of time the Durability
                            Service is allowed to wait with alignment after an alignment
                            request has been received and the service itself is already
                            considered operational.

- Full path: //OpenSplice/DurabilityService/Network/Alignment/RequestCombinePeriod/Operational
- Default value: 0.01
- Valid values: 0.01 / 5.0
- Occurrences min-max: 0-1

Partition
^^^^^^^^^

                        This tag specified an inter durability communication
                        partition with specific qos settings. Alignment between
                        durability services managed through this partition.
                        In case multiple partitions are defined the partition
                        with the highest alignment_priority that can provide
                        the requested data will be used as data source.
                        By default (no Partition specified) the
                        durability services will use an internal partition
                        that inherits the default qos policies and has the
                        default alignment_priority.

- Full path: //OpenSplice/DurabilityService/Network/Alignment/Partition
- Occurrences min-max: 0-*
- Required attributes: Name
- Optional attributes: alignment_priority, latency_budget, transport_priority

Name
~~~~

                            The name of the partition to use for alignment.

- Full path: //OpenSplice/DurabilityService/Network/Alignment/Partition[@Name]
- Format: string
- Default value: partition
- Required: true

alignment_priority
~~~~~~~~~~~~~~~~~~

                            This attribute specifies the alignment priority of
                            the partition used by the durability service to
                            select the preferred partition to align from. If
                            no alignment_priority is configured, the service
                            uses 0 as default.

- Full path: //OpenSplice/DurabilityService/Network/Alignment/Partition[@alignment_priority]
- Format: integer
- Default value: 0
- Valid values: 0 /  -
- Required: false

latency_budget
~~~~~~~~~~~~~~

                            This attribute overrules the latency budget for
                            this partition specified at this point.

- Full path: //OpenSplice/DurabilityService/Network/Alignment/Partition[@latency_budget]
- Default value: 0.0
- Valid values: 0.0 /  -
- Required: false

transport_priority
~~~~~~~~~~~~~~~~~~

                            This attribute overrules the transport priority for
                            this partition specified at this point.

- Full path: //OpenSplice/DurabilityService/Network/Alignment/Partition[@transport_priority]
- Format: integer
- Default value: 0
- Valid values: 0 /  -
- Required: false

TimeToWaitForAligner
^^^^^^^^^^^^^^^^^^^^

                 When all Durability Services in the domain have configured their aligner element
                 as false , none of them is able
                 to act as an aligner for newly-started Durability Services. Therefore late-joining
                 Durability Services will not be able to obtain historical data that is available in the
                 domain.
                 This element specifies the period (in seconds) to wait until an aligner becomes
                 available in the domain. If an aligner does not become available within the period
                 specified by this element, the entire federation will terminate and return with error
                 code 1 (recoverable error).
                 Currently only values between 0.0 and 1.0 are supported, and all non-zero values
                 are interpreted as infinite (so basically the time-out is currently either zero or
                 infinite). The default is 1.0. Note that when the element aligner
                 is set to true the current Durability Service is able to act as aligner for
                 other Durability Services with respect to the specified namespace and the federation
                 will not terminate.

- Full path: //OpenSplice/DurabilityService/Network/Alignment/TimeToWaitForAligner
- Default value: 1.0
- Valid values: 0.0 / 1.0
- Occurrences min-max: 0-1

WaitForAttachment
-----------------

                    The Durability service depends on the Networking service for its
                    communication with other Durability services. Before it starts
                    communicating, it must make sure the Networking service is ready to
                    send the data. This element specifies what services must
                    be available and how long the Durability service must wait for them
                    to become available before sending any data.

- Full path: //OpenSplice/DurabilityService/Network/WaitForAttachment
- Occurrences min-max: 0-1
- Child elements: ServiceName
- Optional attributes: maxWaitCount

maxWaitCount
^^^^^^^^^^^^

                        This attribute specifies the number of times the Durability
                        service checks if the services specified in the
                        *DurabilityService/Network/WaitForAttachment/ServiceName*
                        elements are available before sending any data. The time between
                        two checks is 100ms, so a maxWaitCount of 100 represents 10 seconds.
                        An error is logged if one of the services still is unavailable
                        afterwards. The service will continue after that, but this indicates
                        a problem in the configuration and the service might not function
                        correctly anymore.

- Full path: //OpenSplice/DurabilityService/Network/WaitForAttachment[@maxWaitCount]
- Format: integer
- Default value: 200
- Valid values: 1 / 1000
- Required: false

ServiceName
^^^^^^^^^^^

                   This element specifies the name of the service(s) that the Durability Service waits
                   for, before starting alignment activities for a specific topic-partition combination. If
                   (for example) the communication between Durability Services is dependent on the
                   availability of certain local Network Services, then the Durability Service must wait
                   until these are operational.

- Full path: //OpenSplice/DurabilityService/Network/WaitForAttachment/ServiceName
- Format: string
- Default value: networking
- Occurrences min-max: 1-*

MasterElection
==============

                For every namespace and role a single node is elected master, the one to
                provide historical data. This optional element can be used to fine-fune the
                characteristics of the master election algorithm.

                This element is optional, and when used only applies to master election for
                namespaces with non-legacy masterPriority (see
                //OpenSplice/DurabilityService/NameSpaces/Policy[@masterPriority]).

- Full path: //OpenSplice/DurabilityService/MasterElection
- Occurrences min-max: 0-1
- Child elements: WaitTime

WaitTime
--------

                    Before the durability service elects a master it can waits some time to
                    detect other nodes in the system. Waiting might increase the possibility
                    to elect a better candidate, but slows down the master election process.
                    Electing a master too early may lead to additional alignment actions when
                    a better candidate appears later, because a handover of mastership is needed.
                    When the chance that a better master candicate appears within the WaitTime
                    is small it is advised to set this value to 0.0 (the default).

- Full path: //OpenSplice/DurabilityService/MasterElection/WaitTime
- Dimension: seconds
- Default value: 0.0
- Valid values: 0.0 / 10.0
- Occurrences min-max: 0-1

Persistent
==========

                Durable data is divided in transient and persistent data. Transient
                data must stay available for as long as at least one Durability
                service is available in the system. For persistent data it is
                the same, but that type of data must also outlive the downtime
                of the system. The Durability service stores the persistent data
                on permanent storage to realize this. This element can be used
                to fine-tune the behaviour of the Durability service concerning
                the persistent properties of the data.

                Note these elements are only available as part of the DDS
                persistence profile of Vortex OpenSplice.

- Full path: //OpenSplice/DurabilityService/Persistent
- Occurrences min-max: 0-1
- Child elements: StoreDirectory, StoreSessionTime, StoreSleepTime, StoreMode, StoreOptimizeInterval, QueueSize
- Optional attributes: SmpCount

StoreDirectory
--------------

                    This element determines the location where the persistent data will
                    be stored on disk. If this parameter is not configured,
                    the Durability service will not manage persistent data.

- Full path: //OpenSplice/DurabilityService/Persistent/StoreDirectory
- Format: string
- Default value: /tmp/pstore
- Occurrences min-max: 1-1

StoreSessionTime
----------------

                   The Durability Service has a persistency thread that periodically (in sessions) writes
                   persistent data to disk, this element together with the Element StoreSleepTime can be
                   used to optimize disk access. This element specifies the maximum session time (in
                   seconds) for the persistency thread. After this period of time, it makes sure data is
                   flushed to disk

- Full path: //OpenSplice/DurabilityService/Persistent/StoreSessionTime
- Dimension: seconds
- Default value: 20.0
- Valid values: 0.001 / 60.0
- Occurrences min-max: 0-1

StoreSleepTime
--------------

                    This element specifies the period of time (in seconds) the
                    persistency thread sleeps between two sessions. This allows
                    influencing the CPU load of the persistency thread.

                    In most use cases there is no need to change the default value.
                    Only in case the persistency thread takes up too much CPU time
                    so that it prevents other threads from progressing a non-zero value
                    should be used.

- Full path: //OpenSplice/DurabilityService/Persistent/StoreSleepTime
- Default value: 0.0
- Valid values: 0.0 / 10.0
- Occurrences min-max: 0-1

StoreMode
---------

                    This element specifies the plug-in that is used to store the
                    persistent data on disk. With "XML" mode, the service will store
                    persistent data in XML files. With "KV" mode the service will store
                    persistent data in a key-value store using either sqlite of leveldb
                    to store the data on disk.
                    !!! For "KV" stores, SQLite is supported on linux, Windows, and Solaris; LevelDB is only
                    supported on linux.

- Full path: //OpenSplice/DurabilityService/Persistent/StoreMode
- Format: enumeration
- Default value: XML
- Valid values: XML, KV
- Occurrences min-max: 0-1

SmpCount
--------

                    This element determines how many threads the Durability service will spawn to
                    write persistent data to disk. Note that this attribute is currently only supported for
                    MMF (memory mapped file) StoreMode.
                    Please also note that although technically the maximum valid value for this element
                    is maxInt, the operating system may impose a lower limit, to prevent 'runaway'
                    consumption of resources and loss of performance. It is recommended that increases
                    of this value are carefully considered!
                    !!! The "MMF" store is deprecated from version 6.3 and was only implemented on linux !!!,

- Full path: //OpenSplice/DurabilityService/Persistent[@SmpCount]
- Format: integer
- Default value: 1
- Valid values: 1 /  -
- Required: false

KeyValueStore
-------------

                    This element specifies the key-value store mode parameters. The Storage element specifies
                    the which storage type is used to implement the key-value store. The storage type defaults
                    to Sqlite3 when the storage type is not specified. Using the optional StorageParameters
                    element parameters specific to the used storage implementation can be defined which are
                    passed to the selected storage implementation.
                    This element is only valid when the Persistent/StoreMode element is set to "KV".
                    The "KV" store is currenly only supported on linux (SQLite and LevelDB), Windows (SQLite), and Solaris (SQLite).

- Full path: //OpenSplice/DurabilityService/Persistent/KeyValueStore
- Occurrences min-max: 0-1
- Child elements: StorageParameters
- Required attributes: type

type
^^^^

                        This attribute specifies the third-party product that is used to implement the KV store.
                        Products currently supported are SQLite and LevelDB.
                        The following types can be selected:
                        
                          - sqlite3 -use sqlite3 as the key value store. Data in the store is stored efficiently
                              as binary blobs. This is the default.
                          - sqlite - same as sqlite3. This option is present for backward compatibility.
                          - sqlitemt - use sqlite3 as the key value store implementation, but
                             stores the information as readable data. This mode allows a user to inspect the
                             contents of the store, but the store performance will be lower compared to sqlite3
                             because each piece of data must be  translated to readable format. This option is
                             typically used for testing purposes to inspect the contents of the store.

                             (Note: the abbreviation 'mt' stands for 'multi-table').
                          - leveldb - use leveldb as the key value store

- Full path: //OpenSplice/DurabilityService/Persistent/KeyValueStore[@type]
- Format: enumeration
- Default value: sqlite3
- Valid values: sqlite3, sqlite, sqlitemt, leveldb
- Required: true

StorageParameters
^^^^^^^^^^^^^^^^^

                       This element is used to set parameters that are specific to the third-party product
                       used to implement the KV store. The element consists of a list of parameters which
                       are separated by semicolons (';'). Each parameter is either a single name or a
                       key-value pair where the key and the value are separated by a '=' character.
                       Invalid or 'not recognized' values are ignored.
                       \* When SQLite is selected as KV store implementation, refer to the Sqlite
                       documentation for full details of the available parameters (see
                       http://www.sqlite.org/pragma.html). The only exceptions are the parameters that
                       the KV store uses itself, which are: locking_mode, journal_mode,
                       wal_autocheckpoint and synchronous.

                       \* When LevelDB is selected as the KV store the following parameters are available
                       (the information below has been taken from the current LevelDB
                       documentation the project home page is at http://code.google.com/p/leveldb/)

                       paranoid_checks - boolean
                       
If true, the implementation will do aggressive checking of the data it is
                       processing and it will stop early if it detects any errors. This may have
                       unforeseen ramifications: for example, a corruption of one database entry may
                       cause a large number of entries to become unreadable or for the entire database
                       to become unopenable.
                       Default: false

                       write_buffer_size - integer
                       
Amount of data to build up in memory (backed by an unsorted log on disk)
                       before converting to a sorted on-disk file. Larger values improve performance,
                       especially during bulk loads. Up to two write buffers may be held in memory at
                       the same time, so you may wish to adjust this parameter to control memory
                       usage. Also, a larger write buffer will result in a longer recovery time the next
                       time the database is opened.
                       Default: 4MB

                       max_open_files - integer
                       
Number of open files that can be used by the database. You may need to
                       increase this if your database has a large working set (budget one open file per
                       2MB of working set).
                       Default: 1000

                       block_size - integer
                       
Approximate size of user data packed per block. Note that the block size
                       specified here corresponds to uncompressed data. The actual size of the unit
                       read from disk may be smaller if compression is enabled. This parameter can be
                       changed dynamically.
                       Set by the KV store to 1M.

                       verify_checksums - boolean
                       
If true, all data read from underlying storage will be verified against
                       corresponding checksums.
                       Default: false

                       fill_cache - boolean
                       
Should the data read for this iteration be cached in memory? Callers may wish
                       to set this field to false for bulk scans.
                       Default: true

- Full path: //OpenSplice/DurabilityService/Persistent/KeyValueStore/StorageParameters
- Format: string
- Default value: 0
- Occurrences min-max: 0-1

Compression
^^^^^^^^^^^

                        This element specifies compression settings for the key-value store.

                        Compression for the persistent store can be used to reduce disk I/O and lower disk
                        space usage at the cost of processing power required to compress and uncompress
                        the persistent data.

                        Compression is set at store creation time. Changing these settings after the store is
                        created will result in an error.

- Full path: //OpenSplice/DurabilityService/Persistent/KeyValueStore/Compression
- Occurrences min-max: 0-1
- Required attributes: algorithm
- Optional attributes: enabled

algorithm
~~~~~~~~~

                            This attribute specifies the compression algorithm that is used to store the persistent
                            data in the key-value store.

                            The lzf and snappy compression algorithms are built into the Vortex OpenSplice
                            installation. To use the zlib algorithm a shared library needs to be available on the
                            system, and it must be locatable by way of the current working directory, or via
                            LD_LIBRARY_PATH (on Unix systems) or PATH (on Windows systems).

- Full path: //OpenSplice/DurabilityService/Persistent/KeyValueStore/Compression[@algorithm]
- Format: enumeration
- Default value: lzf
- Valid values: lzf, snappy, zlib
- Required: true

enabled
~~~~~~~

                            This attribute specifies whether the key-value store will apply compression for
                            storing persistent data to limit disk usage.

- Full path: //OpenSplice/DurabilityService/Persistent/KeyValueStore/Compression[@enabled]
- Format: boolean
- Default value: true
- Required: false

StoreOptimizeInterval
---------------------

               This element determines after how many write actions the persistent set for a
               specific partition-topic combination is optimized on disk. Persistent data is
               sequentially written to disk without removing data that according to key values and
               history policies can be removed. During a store optimize action the Durability
               Service will rewrite the file and thereby remove all disposable data. Note that a long
               interval will minimize the induced mean load but instead increases burst load.

- Full path: //OpenSplice/DurabilityService/Persistent/StoreOptimizeInterval
- Format: integer
- Default value: 0
- Valid values: 0 / 1000000000
- Occurrences min-max: 0-1

Scheduling
----------

                    This element specifies the scheduling parameters used to
                    control the thread that stores persistent data on permanent
                    storage.

- Full path: //OpenSplice/DurabilityService/Persistent/Scheduling
- Occurrences min-max: 0-1
- Child elements: Priority, Class

Priority
^^^^^^^^

                        This element specifies the thread priority that will be used by the
                        persistent thread. Only priorities that are supported by the
                        underlying operating system can be assigned to this element.
                        The user may need special privileges from the underlying operating
                        system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/DurabilityService/Persistent/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
~~~~~~~~~~~~~

                            This attribute specifies whether the specified
                            Priority is a relative or absolute priority.

- Full path: //OpenSplice/DurabilityService/Persistent/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Required: false

Class
^^^^^

                        This element specifies the thread scheduling class that will be
                        used by the persistent thread. The user may need the appropriate
                        privileges from the underlying operating system to be able to
                        assign some of the privileged scheduling classes.

- Full path: //OpenSplice/DurabilityService/Persistent/Scheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

NameSpaces
==========

             When a durability service wants to fulfill a particular role for some of the
             namespaces in a domain, it must have some way of deducing the desired behavior
             for those when encountered. For static, small-scale systems this can easily be solved
             by statically configurating this role-behavior for all relevant namespaces for each
             durability service in the domain.
             In dynamic, large scale environments, the updating and maintaining of
             configurations for each durability service when new namespaces enter the domain
             can become quite cumbersome. Dynamic namespaces offer a solution for this
             problem.
             Instead of specifying each namespace seperately, dynamic namespaces introduce
             the concept of namespace policies. A policy defines a generic role for the durability
             service, together with a namespace expression. This expression can contain
             wildcards, and is used to match against each namespace the durability service
             encounters in a domain. The first policy with a matching expression is then applied
             to the new namespace.
             Specifying policies
             Policies are specified in a fall-through manner, which means that the first (top)
             policy to match a namespace is applied. Policies specify a range of options for
             namespaces, which tell the durability service how to handle the data.
             The following items can be configured:
             \* Durability
             \* Alignee
             \* Aligner
             In the dynamic namespace configuration, the NameSpace element (a child of the
             NameSpaces element) only supports a name attribute, which is mandatory. This
             name will be used to match against policies.

- Full path: //OpenSplice/DurabilityService/NameSpaces
- Occurrences min-max: 1-1

NameSpace
---------

                    A namespace describes a dependency between data in two or
                    more partitions by means of a partition expression. The
                    dependency specifies that the data within one of the
                    partitions has no right to exist separately from the data in
                    the other partition(s). Namespaces determine which data must
                    be managed by the Durability service. Data that does not
                    match any of the namespaces, is ignored by the Durability service.

- Full path: //OpenSplice/DurabilityService/NameSpaces/NameSpace
- Occurrences min-max: 1-*
- Child elements: Partition, PartitionTopic
- Optional attributes: name, durabilityKind, alignmentKind, mergePolicy

name
^^^^

                    This element specifies the name for a namespace. A name is used
                    to match a namespace with a policy.

- Full path: //OpenSplice/DurabilityService/NameSpaces/NameSpace[@name]
- Format: string
- Default value: defaultNameSpace
- Required: false

Partition
^^^^^^^^^

                        This element specifies a partition expression that
                        matches the namespace. A namespace consists of a set of
                        partition expressions. Together they determine the
                        partitions that belong to the namespace. Make sure the
                        different namespaces do not have an overlap in partitions.
                        The default configuration has one namespace containing all
                        partitions. A partition may contain the
                        wildcards '\*' to match any number of characters and '?'
                        to match one single character.

- Full path: //OpenSplice/DurabilityService/NameSpaces/NameSpace/Partition
- Format: string
- Default value: *
- Occurrences min-max: 0-*

PartitionTopic
^^^^^^^^^^^^^^

                        This element specifies a partition-topic expression that
                        matches the namespace. A group expression is a
                        combination of a partition- and a topic expression. The
                        notation is 'partition.topic'. A namespace consists of
                        a set of partition-topic expressions. Together they
                        determine the partition-topic combinations that belong
                        to the namespace. Make sure the different namespaces do
                        not have an overlap in expressions. The default
                        configuration has one namespace containing all
                        combinations (\*.\*). A partition-topic expression may
                        contain the wildcards '\*' to match any number of
                        characters and '?' to match one single character.

- Full path: //OpenSplice/DurabilityService/NameSpaces/NameSpace/PartitionTopic
- Format: string
- Default value: *.*
- Occurrences min-max: 0-*

Policy
------

                    A namespace describes a dependency between data in two or
                    more partitions by means of a partition expression. The
                    dependency specifies that the data within one of the
                    partitions has no right to exist separately from the data in
                    the other partition(s). Namespaces determine which data must
                    be managed by the Durability service. Data that does not
                    match any of the namespaces, is ignored by the Durability service.

                    A template specifies behaviour for a namespace. It
                    matches a namespace name with an expression that may contain
                    wildcards, thereby allowing dynamic configuration for
                    namespaces. The order in which templates are specified is
                    important, as the first matching template
                    will be the one that is selected for a namespace.

- Full path: //OpenSplice/DurabilityService/NameSpaces/Policy
- Occurrences min-max: 0-*
- Required attributes: nameSpace, durability, aligner, alignee
- Optional attributes: delayedAlignment, equalityCheck, masterPriority

Merge
^^^^^

            This tag specifies the merge policy applicable for a
            specific namespace. The following merge policy values are
            applicable:
            
            - Ignore - No alignment will take place. This is also the default value if not specified.
            - Merge - Existing data will remain and data from others will be aligned.
            - Delete - Existing data is removed.
            - Replace - Existing data is removed and data from others will be aligned.
            - Catchup - Existing data that is not available from others is removed, and data
                          that is added or changed by others will made available.
            

            Note that the Replace and Catchup merge policies result in the same data set, but their
            instance states may differ after the merge policy has completed. In the Replace merge policy
            all instances present both before and after the merge transitioned through NOT_ALIVE_DISPOSED
            and end up as NEW instances with changes to the instance generation counters. In the Catchup
            merge policy the instance state of the instances that are not changed will remain untouched.

            The scope attribute specifies for which role(s) the mergepolicy will be applied.
            A scope may contain the wildcards '\*' to match any number of characters and '?' to match one
            single character.

- Full path: //OpenSplice/DurabilityService/NameSpaces/Policy/Merge
- Occurrences min-max: 0-*
- Required attributes: type, scope

type
~~~~

               The type attribute describes the kind of action required on a namespace state mismatch.
               
               - Ignore: Do nothing in case of a state mismatch. No samples are aligned, and
                 namespace states will not be updated.
               - Merge: Merge historical data from other namespace state. This will result in a
                 new namespace state for the durability service that specifies this value.
               - Delete: Dispose and delete historical data in case of a state mismatch.
                 Immediately after successful completion of the Delete merge action no transient
                 or persistent data will be available for late-joining readers, and all data in the
                 reader queue of existing readers will be disposed.
               - Replace: Dispose and delete historical data in case of a state mismatch, and merge
                 data from another namespace state. This will result in a new namespace state for
                 the durability service that specifies this value. Immediately after successful
                 completion of the Replace merge action the replacement data will be available to
                 late-joining readers, the data in the reader queue of existing readers will be
                 disposed and replaced with the replacement data, and the generation count of the
                 replacement data is increased.
               - Catchup: When a state mismatch occurs, instances that do not exist any more are
                 disposed, and instances that have been added or changed are updated. Instances
                 for which no state mismatch occurs are left untouched. Immediately after
                 successful completion of the Catchup merge action the data will be available to
                 existing readers and late-joining readers.

- Full path: //OpenSplice/DurabilityService/NameSpaces/Policy/Merge[@type]
- Format: enumeration
- Default value: Ignore
- Valid values: Ignore, Merge, Delete, Replace, Catchup
- Required: true

scope
~~~~~

               The scope attribute describes for which scope the merge policy is valid. The scope
               is a role-expression in which wildcards ('\*' and '?') are allowed. Roles are matched
               at runtime against this expression to determine which policy applies for that role.
               When a role doesn't match any policy, 'Ignore' is assumed. The order of
               specifying policies is important: the first scope expression that matches a role is
               selected for that role.

- Full path: //OpenSplice/DurabilityService/NameSpaces/Policy/Merge[@scope]
- Format: string
- Default value: *
- Required: true

nameSpace
^^^^^^^^^

                          The element specifies an expression that matches a namespace name.
                          A namespace may contain the wildcards '\*' to match any number of
                          characters and '?' to match one single character.

- Full path: //OpenSplice/DurabilityService/NameSpaces/Policy[@nameSpace]
- Format: string
- Default value: *
- Required: true

durability
^^^^^^^^^^

                        This element specifies how the durability service
                        manages the data within the NameSpace. The original
                        durability of the data (determined by the DataWriter
                        that wrote it) can be 'weakened' (Persistent > Transient
                        > Transient_local). This is useful to improve
                        resource usage of the durability service in the
                        situation where resource usage is more important
                        then fault-tolerance. This parameter cannot be used
                        to increase the original durability of samples.

                        In case the value of this parameter is larger then
                        the value a sample was published with, the sample will
                        be handled as specified in the DataWriter durability
                        QoS.

                        
                         - **Persistent**: Data is maximally handled as persistent. In practice this means a sample is handled exactly as specified in the DataWriter durability QoS that wrote it.
                         - **Transient**: A sample is maximally handled as if it were published with a transient durability QoS.
                         - **Transient_Local**: Data is maximally handled as if it were published with a transient_local durability QoS.
                         - **Durable**: Convenience value that behaves equal to Persistent.

- Full path: //OpenSplice/DurabilityService/NameSpaces/Policy[@durability]
- Format: enumeration
- Default value: Durable
- Valid values: Durable, Persistent, Transient, Transient_Local
- Required: true

aligner
^^^^^^^

This mandatory attribute determines whether the durability service can act as aligner
(provide historical data) for other durability services.

- Full path: //OpenSplice/DurabilityService/NameSpaces/Policy[@aligner]
- Format: boolean
- Default value: True
- Required: true

alignee
^^^^^^^

                        This element determines how the durability service manages
                        the data that matches the namespace. Scalability of durable
                        data is an issue in large systems. Keeping all historical data
                        on each node may not be feasible. Often nodes are interested
                        in a small part of the total system data. They are driven
                        by both performance (boot time, memory usage, network load,
                        CPU load) and fault tolerance (the need for replicates).

                        The durability service provides the following
                        mechanisms to request and provide historical data:
                        
                        - **Initial**: The durability service requests historical data at startup and caches it locally. Historical data will be available relatively fast for new local data readers and the system is more fault-tolerant. However, caching of historical data requires a relatively large amount of resources and a long boot time.
                        - **Lazy**: The Durability service caches historical data after local application interest arises for the first time and a remote Durability service aligns the first data reader. Historical data is available relatively slow for the first data reader, but for every new data reader it is relatively fast. The caching resources are only used when local interest in the data arises, so it only requires resources if there is actual local interest. However, this method provides no fault-tolerance for the domain, because the local Durability service is only partly a replica and is not able to provide historical data to remote Durability service and/or remote data readers.
                        - **On_Request**: The Durability service will not cache historical data, but will align each separate DataReader on a request basis (in the situation where it calls wait_for_historical_data). Each new DataReader that wants historical data therefore leads to a new alignment action. This is a good setting to limit the amount of resources used on the node, but will potentially lead to more network traffic. This method provides no fault-tolerance for the domain.

- Full path: //OpenSplice/DurabilityService/NameSpaces/Policy[@alignee]
- Format: enumeration
- Default value: Initial
- Valid values: Initial, Lazy, On_Request
- Required: true

delayedAlignment
^^^^^^^^^^^^^^^^

                This element determines if the durability allows delayed alignment of initial data.
                This can be usefull for systems where there can be late-joining nodes with a persistent
                dataset, which by default are then not inserted.
                When this option is enabled, durability will only insert a persistent set from a late joining
                node when no writers have been created in the partitions matched by the namespace!

- Full path: //OpenSplice/DurabilityService/NameSpaces/Policy[@delayedAlignment]
- Format: boolean
- Default value: False
- Required: false

equalityCheck
^^^^^^^^^^^^^

                This element specifies whether or not the durability service should compare its
                current data set with the data set of its aligner before applying the merge policy.
                If this option is enabled the aligner will align its data sets only in case there is
                a difference between his data sets and the data sets of this durability service.
                By default this option is NOT enabled, so data is always aligned even if there is no
                difference between data sets.


                This option applies to all merge policies except for the IGNORE and DELETE merge
                policy.


                **NOTE** Enabling this option may lead to less alignment data at the expense of
                processing power required to calculate hashes to compare the data sets. It is recommended
                to enable this option only for large data sets that do not change often. If this option is
                enabled for data sets that change often then chances of set equality are small, while the
                penalty to calculate hashes still exists.

- Full path: //OpenSplice/DurabilityService/NameSpaces/Policy[@equalityCheck]
- Format: boolean
- Default value: False
- Required: false

masterPriority
^^^^^^^^^^^^^^

                This attribute sets the master selection priority of the namespace.
                The default value is 255, this allows to modify a single durability service in
                an existing system to become both preferred master as well as non-preferred master
                without having to change the configuration of all durability services.
                The Durability Service will never become master for a namespace when the
                masterPriority is set to zero.
                When set to 255 the durability Service will not use priorities at all, and falls back
                to the legacy master selection algorithm.
                If the masterPriority is set other than 0 and 255 the Durability Service will become master if
                it has the highest masterPriority of all discovered Durability Services for the namespace.
                If multiple Durability Services exist having equally highest masterPriority
                a further selection will be made based on the highest namespace quality of each
                Durability Service (but only if persistent data has not been injected before).
                Then if there are still multiple equally suitable Durability Services the
                Durability Service with the highest system id will be selected.

- Full path: //OpenSplice/DurabilityService/NameSpaces/Policy[@masterPriority]
- Format: integer
- Default value: 255
- Valid values: 0 / 255
- Required: false

EntityNames
===========

                This element specifies the names of the various entities used by the
                DurabilityService. The names specified here will be displayed in the
                Vortex OpenSplice Tuner when viewing the DurabilityService.

- Full path: //OpenSplice/DurabilityService/EntityNames
- Occurrences min-max: 0-1
- Child elements: Publisher, Subscriber, Partition

Publisher
---------

                    This element specifies the name of the durability publisher.

- Full path: //OpenSplice/DurabilityService/EntityNames/Publisher
- Format: string
- Default value: durabilityPublisher
- Occurrences min-max: 0-1

Subscriber
----------

                    This element specifies the name of the durability subscriber.

- Full path: //OpenSplice/DurabilityService/EntityNames/Subscriber
- Format: string
- Default value: durabilitySubscriber
- Occurrences min-max: 0-1

Partition
---------

                    This element specifies the name of the durability partition.

- Full path: //OpenSplice/DurabilityService/EntityNames/Partition
- Format: string
- Default value: durabilityPartition
- Occurrences min-max: 0-1

Tracing
=======

                    This element controls the amount and type of information that is
                    written into the tracing log by the Durability Service. This is
                    useful to track the Durability Service during application
                    development. In the runtime system it should be turned off.

- Full path: //OpenSplice/DurabilityService/Tracing
- Occurrences min-max: 0-1
- Child elements: OutputFile, Timestamps, Verbosity
- Optional attributes: synchronous

synchronous
-----------

                    This attribute specifies whether tracing log updates are synchronous
                    or not. A synchronous update is immediately flushed to disk: there is
                    no buffering and therefore some performance overhead. Only use this
                    option if you are debugging and you want to make sure all Tracing info
                    is on disk when the service crashes.

- Full path: //OpenSplice/DurabilityService/Tracing[@synchronous]
- Format: boolean
- Default value: FALSE
- Required: false

OutputFile
----------

                    This option specifies where the logging is printed to. Note that
                    "stdout" is considered a legal value that represents "standard out"
                    and "stderr" is a legal value representing "standard error".
                    The default value is an empty string, indicating that all tracing
                    is disabled.

- Full path: //OpenSplice/DurabilityService/Tracing/OutputFile
- Format: string
- Default value: durability.log
- Occurrences min-max: 0-1

Timestamps
----------

                    This element specifies whether the logging must contain timestamps.

- Full path: //OpenSplice/DurabilityService/Tracing/Timestamps
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1
- Optional attributes: absolute

absolute
^^^^^^^^

                        This attribute specifies whether the timestamps are absolute or
                        relative to the startup time of the service.

- Full path: //OpenSplice/DurabilityService/Tracing/Timestamps[@absolute]
- Format: boolean
- Default value: true
- Required: false

Verbosity
---------

                    This element specifies the verbosity level of the logging
                    information. The higher the level, the more (detailed)
                    information will be logged.

- Full path: //OpenSplice/DurabilityService/Tracing/Verbosity
- Format: enumeration
- Default value: INFO
- Valid values: SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST, NONE
- Occurrences min-max: 0-1

SNetworkService
***************

            When communication endpoints are located on different computing nodes,
            the data produced using the local DDS service must be communicated to
            the remote DDS service and the other way around. The Networking service
            provides a bridge between the local DDS service and a network interface.
            Multiple Networking services can exist next to each other; each serving
            one (or more) physical network interface(s). The Secure Networking service
            is responsible for forwarding data to the network and for receiving data
            from the network. It can be configured to distinguish multiple
            communication channels with different QoS policies assigned to be able
            to schedule sending and receival of specific messages to provide optimal
            performance for a specific application domain.

- Full path: //OpenSplice/SNetworkService
- Occurrences min-max: 0-*
- Required attributes: name

name
====

                This attribute identifies the configuration for the Secure Networking service.
                Multiple Network service configurations can be specified in one single
                resource. The actual applicable configuration is determined by the value
                of the name attribute, which must match the one specified under the
                *//OpenSplice/Domain/Service[@name]* in the configuration of
                the DomainService.

- Full path: //OpenSplice/SNetworkService[@name]
- Format: string
- Default value: snetworking
- Required: true

Watchdog
========

                This element controls the characteristics of the Watchdog thread.

- Full path: //OpenSplice/SNetworkService/Watchdog
- Occurrences min-max: 0-1

Scheduling
----------

                    This element specifies the type of OS scheduling class will be
                    used by the thread that announces its liveliness periodically.

- Full path: //OpenSplice/SNetworkService/Watchdog/Scheduling
- Occurrences min-max: 1-1
- Child elements: Priority, Class

Priority
^^^^^^^^

                        This element specifies the thread priority that will be used by the
                        watchdog thread. Only priorities that are supported by the
                        underlying operating system can be assigned to this element.
                        The user may need special privileges from the underlying operating
                        system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/SNetworkService/Watchdog/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
~~~~~~~~~~~~~

                            This attribute specifies whether the specified
                            Priority is a relative or absolute priority.

- Full path: //OpenSplice/SNetworkService/Watchdog/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Required: false

Class
^^^^^

                        This element specifies the thread scheduling class that will be used by
                        the watchdog thread. The user may need the appropriate privileges from
                        the underlying operating system to be able to assign some of the
                        privileged scheduling classes.

- Full path: //OpenSplice/SNetworkService/Watchdog/Scheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

General
=======

                This element contains general parameters that concern the secure networking service
                as a whole.

- Full path: //OpenSplice/SNetworkService/General
- Occurrences min-max: 0-1
- Child elements: NetworkInterfaceAddress, EnableMulticastLoopback, LegacyCompression

NetworkInterfaceAddress
-----------------------

                    This element specifies which network interface card should be used.
                    Every Secure Networking service is bound to only one network interface card
                    (NIC). The card can be uniquely identified by its corresponding
                    IP address or by its symbolic name (e.g. eth0). If the
                    value "first available" is entered here, the Vortex OpenSplice
                    middleware will try to look up an interface that has
                    the required capabilities.

- Full path: //OpenSplice/SNetworkService/General/NetworkInterfaceAddress
- Format: string
- Default value: first available
- Occurrences min-max: 0-1
- Optional attributes: forced, ipv6, bind, allowReuse

forced
^^^^^^

                    This attribute specifies whether only the selected NetworkInterfaceAddress should be used or others can be used too.
                    
                        - false - Specifies that the NetworkInterfaceAddress is first used but when not available another, when available, is used. (default).
                        - true - Specifies that only the selected NetworkInterfaceAddress can be used.

- Full path: //OpenSplice/SNetworkService/General/NetworkInterfaceAddress[@forced]
- Format: boolean
- Default value: false
- Required: false

ipv6
^^^^

                    This attribute specifies whether IPv6 should be used for communication.
                    
                        - false - specifies that IPv4 should be used (default).
                        - true - Specifies that IPv6 should be used.
                     

                     This setting will be overriden & ignored if the element NetworkInterfaceAddress has an explicit value
                     that is unequivocally either an IPv4 or IPv6 address. This attribute is therefore only
                     optionally required to specify IPv6 communication when special values like "first available" or
                     an interface name are used instead of IP addresses.

- Full path: //OpenSplice/SNetworkService/General/NetworkInterfaceAddress[@ipv6]
- Format: boolean
- Default value: false
- Required: false

bind
^^^^

                        Specifies the bind strategy to be used by the networking
                        service for its sockets.
                        
                            - any - Specifies that the service should bind to the wildcard-address (INADDR_ANY) (default).
                            - strict - Specifies that the service should bind to the NetworkingInterfaceAddress.

- Full path: //OpenSplice/SNetworkService/General/NetworkInterfaceAddress[@bind]
- Format: enumeration
- Default value: any
- Valid values: any, strict
- Required: false

allowReuse
^^^^^^^^^^

                        By default the networking service will bind to a port
                        allowing other services to bind to the same port as well
                        (so reuse of the port is allowed). By setting this option
                        to 'false', the port is bound exclusively (SO_REUSEADDR
                        disabled).
                         
                             - true - Ports can be reused (SO_REUSEADDR enabled) (default).
                             - false - Ports are bound exclusively.

- Full path: //OpenSplice/SNetworkService/General/NetworkInterfaceAddress[@allowReuse]
- Format: boolean
- Default value: true
- Required: false

EnableMulticastLoopback
-----------------------
EnableMulticastLoopback specifies whether the secure networking service will allow
          IP multicast packets within the node to be visible to all secure networking participants in the node,
          including itself. It must be TRUE for intra-node multicast communications,
          but if a node runs only a single Vortex OpenSplice secure networking service and does not host
          any other networking-capable programs, it may be set to FALSE for improved performance.

- Full path: //OpenSplice/SNetworkService/General/EnableMulticastLoopback
- Format: boolean
- Default value: True
- Valid values: True, False
- Occurrences min-max: 0-1

LegacyCompression
-----------------

                     This element specifies if compression is applied after of before fragmentations.
                     When set to TRUE compression is applied after fragmentation which is provided for
                     backward compatibility. When set to FALSE compression is applied before fragmentation.
                     The default value is TRUE.

- Full path: //OpenSplice/SNetworkService/General/LegacyCompression
- Format: boolean
- Default value: True
- Valid values: True, False
- Occurrences min-max: 0-1

Reconnection
------------

                     This element specifies the desired secure networking-behavior with respect to the
                     validity of restoring lost connectivity with remote nodes.
                     Here 'lost connectivity' means a prolonged inability to communicate with a known
                     and still active remote node (typically because of network-issues)
                     that has resulted in such a node being declared 'dead' either by the topology-discovery or
                     lost-reliability being detected by a reliable channel's reactivity-checking mechanism.
                     If automatic reconnection is allowed, communication channels with the now-reachable-again node will be restored,
                     even though reliable data might have been lost during the disconnection period.

- Full path: //OpenSplice/SNetworkService/General/Reconnection
- Occurrences min-max: 0-1
- Required attributes: allowed

allowed
^^^^^^^

                    This attribute specifies whether the network service must
                    resume communication with an other network service when it
                    has already been seen before but has been disconnected
                    for a while.
                    
                        - false - Specifies that the network service must NOT resume communication. (default).
                        - true -  Specifies that the network service must resume communication.

- Full path: //OpenSplice/SNetworkService/General/Reconnection[@allowed]
- Format: boolean
- Default value: false
- Required: true

Partitioning
============

                The Vortex OpenSplice Secure Networking service is capable of leveraging
                the network's multicast and routing capabilities. If some a-priori
                knowledge about the participating
                nodes and their topic and partition interest is available, then the
                secure networking services in the system can be explicitly instructed to use
                specific unicast or multicast addresses for its networking traffic.
                This is done by means of so-called network partitions

                A network partition is defined by one or more unicast, multicast
                of broadcast IP addresses. Any secure networking service that is started
                will read the network partition settings and, if applicable, join
                the required multicast groups. For every sample distributed by the
                secure networking service, both its partition and topic name will be
                inspected. In combination with a set of network partition mapping rules,
                the service will determine to which network partition the sample is
                written. The mapping rules are configurable as well.

                Using
                networking configuration, nodes can be disconnected from any
                networking partition. If a node is connected via a low speed
                interface, it is not capable of receiving high volume data. If
                the DCPS partitioning is designed carefully, high volume data is
                published into a specific partition, which on its turn is mapped
                onto a specific networking partition, which on its turn is only
                connected to those nodes that are capable of handling high volume data.

- Full path: //OpenSplice/SNetworkService/Partitioning
- Occurrences min-max: 0-1

GlobalPartition
---------------

                    This element specifies the global or default secure networking partition.

- Full path: //OpenSplice/SNetworkService/Partitioning/GlobalPartition
- Occurrences min-max: 0-1
- Required attributes: Address
- Optional attributes: SecurityProfile, MulticastTimeToLive

Address
^^^^^^^

                        The global
                        networking partition transports data that is either meant
                        to be global, like discovery heartbeats, or that is not
                        mapped onto any other networking partition. The address is a list
                        of one or more unicast, multicast or broadcast addresses. If more
                        than one address is specified, then the different
                        addresses are separated by a colon (,) semicolon (;) or space ( ).
                        Samples for the global partition will be sent to all addresses
                        that are specified in this list of addresses. To specify the
                        default broadcast address, use the expression "broadcast".
                        Addresses can be entered as dotted decimal notation or as the
                        symbolic hostname, in which case the middleware will try to resolve
                        the corresponding IP address.

- Full path: //OpenSplice/SNetworkService/Partitioning/GlobalPartition[@Address]
- Format: string
- Default value: broadcast
- Required: true

SecurityProfile
^^^^^^^^^^^^^^^

                     In the context of secure networking, the GlobalPartition element provides
                     support for the attribute SecurityProfile. The attribute is referencing a security
                     profile declared in the context of the Security element.
                     If the given reference is invalid, the global partition configuration is invalid. In this
                     case, the partition will be blocked to prevent unwanted information leaks. A
                     configuration error message will be logged to the ospl-error.log file. If the
                     security feature has been enabled, but no profile is declared, then the NULL profile is
                     used by default: this means that no security is added to the transport

- Full path: //OpenSplice/SNetworkService/Partitioning/GlobalPartition[@SecurityProfile]
- Format: string
- Default value: nullProfile
- Required: false

MulticastTimeToLive
^^^^^^^^^^^^^^^^^^^

For each UDP packet sent out, The TimeToLive header value is set to this value for Multicast packets.
By specifying a value of '0', multicast traffic can be confined to the local node, and
such 'loopback' performance is typically optimized by the operating system.

- Full path: //OpenSplice/SNetworkService/Partitioning/GlobalPartition[@MulticastTimeToLive]
- Default value: 32
- Valid values: 0 / 255
- Required: false

NetworkPartitions
-----------------

                    Networking configuration can contain a set of networking partitions,
                    which are grouped under the NetworkPartitions element.

- Full path: //OpenSplice/SNetworkService/Partitioning/NetworkPartitions
- Occurrences min-max: 0-1

NetworkPartition
^^^^^^^^^^^^^^^^

                        Every NetworkPartition has a name, an address and a connected flag.

- Full path: //OpenSplice/SNetworkService/Partitioning/NetworkPartitions/NetworkPartition
- Occurrences min-max: 1-*
- Required attributes: Address
- Optional attributes: Name, Connected, Compression, SecurityProfile, MulticastTimeToLive

Name
~~~~

                      The Name attribute identifies a Network Partition; it must be unique to create
                      associations with Element PartitionMappings.

- Full path: //OpenSplice/SNetworkService/Partitioning/NetworkPartitions/NetworkPartition[@Name]
- Format: string
- Default value: networkPartition
- Required: false

Address
~~~~~~~

The address is a list of one or more unicast, multicast or broadcast addresses. If
more than one address is specified, then the different addresses should separated by
commas (,) semicolons (;) or spaces ( ). Samples for this partition will be sent to
all addresses that are specified in this list of addresses. To specify the default
broadcast address, use the expression "broadcast". Addresses can be entered as
'dotted decimal' IPv4 or 'colon-separated hexadecimal' IPv6 notation or as the
symbolic hostname, in which case Vortex OpenSplice will try to resolve the corresponding
IP address.

- Full path: //OpenSplice/SNetworkService/Partitioning/NetworkPartitions/NetworkPartition[@Address]
- Format: string
- Default value: broadcast
- Required: true

Connected
~~~~~~~~~

                            A node can choose to be not connected to a networking
                            partition by setting the Connected attribute.

                            If a node is connected to a networking partition,
                            it will join the corresponding multicast group and
                            it will receive data distributed over the partition.
                            If it is not connected, data distributed over the
                            partition will not reach the node but will be
                            filtered by the networking interface or multicast
                            enabled switches.

- Full path: //OpenSplice/SNetworkService/Partitioning/NetworkPartitions/NetworkPartition[@Connected]
- Format: boolean
- Default value: true
- Required: false

Compression
~~~~~~~~~~~

                            This attribute specifies if networking will apply compression to limit bandwidth
                            for a specific network partition. This provides great flexibility as network
                            partition are dynamically bind to logical partitions. Compression is performed
                            before fragmentation of the messages. To provide backward compatibility the option
                            LegacyCompression (see General options) can be set to provide compression after
                            fragmentation. The following compression values are allowed:
                            
                                - false - No compression is applied. This is also the default value if not specified.
                                - true - Compression is applicable

- Full path: //OpenSplice/SNetworkService/Partitioning/NetworkPartitions/NetworkPartition[@Compression]
- Format: boolean
- Default value: false
- Required: false

SecurityProfile
~~~~~~~~~~~~~~~

                       In the context of secure networking, the NetworkPartition element provides
                       support for the attribute SecurityProfile. The attribute is referencing a security
                       profile declared in the context of the Security element.
                       If the given reference is invalid, the network partition configuration is invalid. In
                       this case the partition will be blocked to prevent unwanted information leaks. A
                       configuration error message will be logged to the ospl-error.log file. If the
                       security feature has been enabled but no profile is declared, the NULL profile will be
                       used by default.
                       The ordering of network partition declarations in the OSPL configuration file must
                       be the same for all nodes within the Vortex OpenSplice domain. If certain nodes shall not
                       use one of the network partitions, the network partition in question must be declared
                       as connected="false". In this case the declared security profile would not be
                       evaluated or initialized, and the associated secret cipher keys need not to be defined
                       for the Vortex OpenSplice node in question.

- Full path: //OpenSplice/SNetworkService/Partitioning/NetworkPartitions/NetworkPartition[@SecurityProfile]
- Format: string
- Default value: nullProfile
- Required: false

MulticastTimeToLive
~~~~~~~~~~~~~~~~~~~

For each UDP packet sent out, The TimeToLive header value is set to this value for Multicast packets.
By specifying a value of '0', multicast traffic can be confined to the local node, and
such 'loopback' performance is typically optimized by the operating system

- Full path: //OpenSplice/SNetworkService/Partitioning/NetworkPartitions/NetworkPartition[@MulticastTimeToLive]
- Default value: 32
- Valid values: 0 / 255
- Required: false

IgnoredPartitions
-----------------

                    This element is used to group the set of IgnoredPartition elements.

- Full path: //OpenSplice/SNetworkService/Partitioning/IgnoredPartitions
- Occurrences min-max: 0-1

IgnoredPartition
^^^^^^^^^^^^^^^^

                        This element can be used to create a "Local Partition" that is only
                        available on the node on which it is specified, and therefore won't
                        generate network-load. Any DCPS partition-topic combination specified
                        in this element will not be distibuted by the Networking service.

- Full path: //OpenSplice/SNetworkService/Partitioning/IgnoredPartitions/IgnoredPartition
- Occurrences min-max: 1-*
- Required attributes: DCPSPartitionTopic

DCPSPartitionTopic
~~~~~~~~~~~~~~~~~~

                            The Networking service will match any DCPS messages
                            to the DCPSPartitionTopic expression and determine
                            if it matches. The PartitionExpression and
                            TopicExpression are allowed to contain a '\*' wildcard,
                            meaning that anything matches. An exact match is
                            considered better than a wildcard match. If a DCPS messages
                            matches an expression it will not be send to the network.

- Full path: //OpenSplice/SNetworkService/Partitioning/IgnoredPartitions/IgnoredPartition[@DCPSPartitionTopic]
- Format: string
- Default value: *.*
- Required: true

PartitionMappings
-----------------

                    This element is used to group the set of PartitionMapping elements.

- Full path: //OpenSplice/SNetworkService/Partitioning/PartitionMappings
- Occurrences min-max: 0-1

PartitionMapping
^^^^^^^^^^^^^^^^

                        This element specifies a mapping between a network partition
                        and a partition-topic combination.

                        In order to give networking partitions a meaning in the context
                        of DCPS, mappings from DCPS partitions and topics onto networking
                        partitions should be defined. Networking allows for a set of
                        partition mappings to be defined.

- Full path: //OpenSplice/SNetworkService/Partitioning/PartitionMappings/PartitionMapping
- Occurrences min-max: 1-*
- Required attributes: NetworkPartition, DCPSPartitionTopic

NetworkPartition
~~~~~~~~~~~~~~~~

                            The NetworkPartition attribute of a partition mapping
                            defines that networking partitition that data in a
                            specific DCPS partition of a specific DCPS topic
                            should be sent to.

- Full path: //OpenSplice/SNetworkService/Partitioning/PartitionMappings/PartitionMapping[@NetworkPartition]
- Format: string
- Default value: networkPartition
- Required: true

DCPSPartitionTopic
~~~~~~~~~~~~~~~~~~

                            The Networking service will match any DCPS messages
                            to the DCPSPartitionTopic expression and determine
                            if it matches. The PartitionExpression and
                            TopicExpression are allowed to contain a '\*' wildcard,
                            meaning that anything matches. An exact match is
                            considered better than a wildcard match. For every
                            DCPS message, the best matching partition is determined
                            and the data is sent over the corresponding networking
                            partition as specified by the matching
                            *NetworkPartition* element.

- Full path: //OpenSplice/SNetworkService/Partitioning/PartitionMappings/PartitionMapping[@DCPSPartitionTopic]
- Format: string
- Default value: *.*
- Required: true

Security
========

                The Security section defines the parameters relevant for secure networking.
                Declaring this element in the OSPL configuration file will activate the secure
                networking feature. Without any additional security settings, all network partitions
                of the node would use the NULL cipher encoding. If confidentiality and integrity is
                required for a network partition, the network partition must be associated with a
                security profile

- Full path: //OpenSplice/SNetworkService/Security
- Occurrences min-max: 0-1
- Optional attributes: enabled

enabled
-------

                        This is an optional attribute. If not defined it defaults to true and all network
                        partitions, if not specified otherwise, will be encoded using the NULL cipher. The
                        NULL cipher does not provide for any level of integrity or confidentiality, but
                        message items will be sent unencrypted.
                        In case of enabled="false" the security feature will not be activated, and the
                        node acts like any other Vortex OpenSplice node not being security aware. Security profiles
                        defined in the configuration file will not take effect, but will cause the system to log
                        warnings.

- Full path: //OpenSplice/SNetworkService/Security[@enabled]
- Format: boolean
- Default value: false
- Required: false

SecurityProfile
---------------

                   This element defines the security profile which can be applied to one or more
                   network partitions. This element is optional.

- Full path: //OpenSplice/SNetworkService/Security/SecurityProfile
- Occurrences min-max: 0-*
- Required attributes: Name, Cipher, CipherKey

Name
^^^^

                       This is a mandatory attribute. The name must be unique for all Security Profiles
                       being declared. If the name is not specified, the security profile will be ignored as it
                       cannot be referenced anyway.

- Full path: //OpenSplice/SNetworkService/Security/SecurityProfile[@Name]
- Format: string
- Default value: aSecurityProfile
- Required: true

Cipher
^^^^^^

                        This is a mandatory attribute. Depending on the declared cipher, the cipher key must
                        have a specific length, 128 bits, 192 bits, 256 bits or none at all. The following
                        case-insensitive values are supported by the current implementation:
                        
                            - aes128, implements the AES cipher with 128 bit cipher-key (16 Bytes, 32 hexadecimal characters). This cipher will occupy 34 bytes of each UDP packet being sent.
                            - aes192, implements the AES cipher with 192 bit cipher-key (24 Bytes, 48 hexadecimal characters). This cipher will occupy 34 bytes of each UDP packet being sent.
                            - aes256, implements the AES cipher with 256 bit cipher-key (32 Bytes, 64 hexadecimal characters). This cipher will occupy 34 bytes of each UDP packet being sent.
                            - blowfish, implements the Blowfish cipher with 128 bit cipher-key (16 Bytes, 32 hexadecimal characters). This cipher will occupy 26 bytes of each UDP packet being sent.
                            - null, implements the NULL cipher. The only cipher that does not require a cipher-key. This cipher will occupy 4 bytes of each UDP packet being sent.
                        

                        All ciphers except for the NULL cipher are combined with SHA1 to achieve data
                        integrity. Also, the rsa- prefix can be added to the ciphers. In this case, digital
                        signatures using RSA will be available.

- Full path: //OpenSplice/SNetworkService/Security/SecurityProfile[@Cipher]
- Format: string
- Default value: null
- Valid values: aes128, aes192, aes256, blowfish, null, rsa-aes128, rsa-aes192, rsa-aes256, rsa-blowfish, rsa-null
- Required: true

CipherKey
^^^^^^^^^

                        The CipherKey attribute is used to define the secret key required by the declared
                        cipher. The value can be a URI referencing an external file containing the secret key,
                        or the secret key can be defined in-place directly as a string value. The key must be
                        defined as a hexadecimal string, each character representing 4 bits of the key, for
                        example. 1ABC represents the 16 bit key 0001 1010 1011 1100. The key must
                        not follow a well-known pattern and must match exactly the key length required by
                        the chosen cipher. In case of malformed cipher-keys, the security profile in question
                        will be marked as invalid. Moreover, each network partition referring to the invalid
                        Security Profile will not be operational and thus traffic will be blocked to prevent
                        information leaks.
                        As all Vortex OpenSplice applications require read access to the XML configuration file,
                        for security reasons it is recommended to store the secret key in an external file in
                        the file system, referenced by the URI in the configuration file. The file must be
                        protected against read and write access from other users on the host. Verify that
                        access rights are not given to any other user or group on the host.

                        Alternatively, storing the secret key in-place in the XML configuration file will give
                        read/write access to all DDS applications joining the same Vortex OpenSplice node.
                        Because of this, the 'in-place' method is strongly discouraged.

- Full path: //OpenSplice/SNetworkService/Security/SecurityProfile[@CipherKey]
- Format: string
- Default value: n/a
- Required: true

AccessControl
-------------

                    The optional AccessControl element defines settings for access control enforcement
                    and which access control module shall be used.

- Full path: //OpenSplice/SNetworkService/Security/AccessControl
- Occurrences min-max: 0-1
- Optional attributes: enabled, policy

enabled
^^^^^^^

                        The access control feature will be activated when enabled="true"

- Full path: //OpenSplice/SNetworkService/Security/AccessControl[@enabled]
- Format: boolean
- Default value: false
- Required: false

policy
^^^^^^

                        The policy attribute references a file containing the access control policy.

- Full path: //OpenSplice/SNetworkService/Security/AccessControl[@policy]
- Format: string
- Default value: ""
- Required: false

AccessControlModule
^^^^^^^^^^^^^^^^^^^

                        The AccessControlModule element defines which access control module will be
                        used. More than one module may be defined. All defined and enabled modules will
                        be used to determine if access should be granted.

- Full path: //OpenSplice/SNetworkService/Security/AccessControl/AccessControlModule
- Occurrences min-max: 0-*
- Optional attributes: enabled, type

enabled
~~~~~~~

                            The module specified in the type attribute is used to evaluate access control rules
                            when enabled="true".

- Full path: //OpenSplice/SNetworkService/Security/AccessControl/AccessControlModule[@enabled]
- Format: boolean
- Default value: true
- Required: false

type
~~~~

                            The type attribute defines the access control model type. Currently, Vortex OpenSplice only
                            supports mandatory access control, accordingly the only valid value for this
                            attribute is "MAC".

- Full path: //OpenSplice/SNetworkService/Security/AccessControl/AccessControlModule[@type]
- Format: string
- Default value: none
- Required: false

Authentication
--------------

                     The optional Authentication element defines whether additional sender
                     authorization shall be performed. Enabling Authentication requires that a cipher,
                     including RSA (such as rsa-aes256), is used.

- Full path: //OpenSplice/SNetworkService/Security/Authentication
- Occurrences min-max: 0-1
- Optional attributes: enabled

enabled
^^^^^^^

                         Authentication is performed when enabled is set to true.

- Full path: //OpenSplice/SNetworkService/Security/Authentication[@enabled]
- Format: boolean
- Default value: true
- Required: false

X509Authentication
^^^^^^^^^^^^^^^^^^

                        The X509Authentication element defines where keys and certificates required for
                        X509 authentication may be found.

- Full path: //OpenSplice/SNetworkService/Security/Authentication/X509Authentication
- Occurrences min-max: 0-1
- Child elements: TrustedCertificates

Credentials
~~~~~~~~~~~

                           The Credentials element is an optional element. If it is missing, then the node does
                           not sign messages (in other words, does not send credentials).

- Full path: //OpenSplice/SNetworkService/Security/Authentication/X509Authentication/Credentials
- Occurrences min-max: 0-1
- Child elements: Key, Cert

Key
+++

                           The Key element references the file containing the key.

                           It is recommended that the absolute path is used. A relative path
                           will be interpreted relative to the directory from which the
                           Vortex OpenSplice daemon is started.

- Full path: //OpenSplice/SNetworkService/Security/Authentication/X509Authentication/Credentials/Key
- Format: string
- Occurrences min-max: 1-1

Cert
++++

                           The Cert element references the file containing the certificate.

                           It is recommended that the absolute path is used. A relative path
                           will be interpreted relative to the directory from which the
                           Vortex OpenSplice daemon is started.

- Full path: //OpenSplice/SNetworkService/Security/Authentication/X509Authentication/Credentials/Cert
- Format: string
- Occurrences min-max: 1-1

TrustedCertificates
~~~~~~~~~~~~~~~~~~~

                        The TrustedCertificates element references a file containing the trusted certificates.

                        It is recommended that the absolute path is used. A relative path
                        will be interpreted relative to the directory from which the
                        Vortex OpenSplice daemon is started.

- Full path: //OpenSplice/SNetworkService/Security/Authentication/X509Authentication/TrustedCertificates
- Format: string
- Occurrences min-max: 1-1

Channels
========

                This element is used to group a set of Channels.

                The set of channels define the behaviour of the 'network' concerning
                aspects as priority, reliability and latency budget. By configuring
                a set of channels, the Networking service is able to function as a
                'scheduler' for the network bandwidth. It achieves this by using the
                application-defined DDS QoS policies of the data to select the most
                appropriate channel to send the data.

- Full path: //OpenSplice/SNetworkService/Channels
- Occurrences min-max: 1-1
- Child elements: AllowedPorts

Channel
-------

                    This element specifies all properties of an individual Channel.

                    The Networking service will make sure messages with a higher
                    priority precede messages with a lower priority and it uses the
                    latency budget to assemble multiple messages into one UDP packet
                    where possible, to optimize the bandwidth usage. Of course, its
                    performance depends heavily on the compatbility of the configured
                    channels with the used DDS QoS policies of the applications.

- Full path: //OpenSplice/SNetworkService/Channels/Channel
- Occurrences min-max: 1-42
- Child elements: PortNr, FragmentSize, Resolution, AdminQueueSize, CompressionBufferSize, CompressionThreshold, AllowedPorts
- Required attributes: name, reliable, enabled
- Optional attributes: default, priority

name
^^^^

                        The name uniquely identifies the channel.

- Full path: //OpenSplice/SNetworkService/Channels/Channel[@name]
- Format: string
- Default value: aChannel
- Required: true

reliable
^^^^^^^^

                        If this attribute is set to true, the channel sends all messages reliably.
                        If not, data is sent only once (fire-and-forget).

                        The specific channel a message is written into depends on the attached
                        quality of service. Once a message has arrived in a channel, it will be
                        transported with the quality of service attached to the channel. If the
                        reliable attribute happens to be set to true, the message will be sent
                        over the network using a reliability protocol.

- Full path: //OpenSplice/SNetworkService/Channels/Channel[@reliable]
- Format: boolean
- Default value: false
- Required: true

default
^^^^^^^

                        This attribute indicates whether the channel is selected as the
                        default channel in case no channel offers the quality of service
                        requested by a message.

                        The networking channels should be configured corresponding
                        to the quality of service settings that are expected to be
                        requested by the applications. It might happen, however,
                        that none of the available channels meets the requested
                        quality of service for a specific message. In that case,
                        the message will be written into the default channel.

                        Note that only one channel is allowed to have this attribute
                        set to true

- Full path: //OpenSplice/SNetworkService/Channels/Channel[@default]
- Format: boolean
- Default value: false
- Required: false

enabled
^^^^^^^

                        This attribute toggles a channel on or off. Toggling a
                        channel between enabled and disabled is a quick alternative
                        for commenting out the corresponding lines in the configuration
                        file.

- Full path: //OpenSplice/SNetworkService/Channels/Channel[@enabled]
- Format: boolean
- Default value: false
- Required: true

priority
^^^^^^^^

                        This attribute sets the transport priority of the channel.
                        Messages sent to the network have a transport_priority
                        quality of service value. Selection of a networking channel
                        is based on the priority requested by the message and the
                        priority offered by the channel. The priority settings
                        of the different channels divide the priority range
                        into intervals. Within a channel, messages are sorted in
                        order of priority.

- Full path: //OpenSplice/SNetworkService/Channels/Channel[@priority]
- Format: integer
- Default value: 0
- Required: false

PortNr
^^^^^^

                        This element specifies the port number used by the Channel.
                        Messages for the channel are sent to the port number given.
                        Each channel needs its own unique port number. Please note
                        that 'reliable' channels use a second port, which is the
                        specified PortNr + 1.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/PortNr
- Format: integer
- Default value: 53400
- Valid values: 1 / 65535
- Occurrences min-max: 1-1

FragmentSize
^^^^^^^^^^^^

                        The networking module will fragment large message into smaller
                        fragments with size **FragmentSize**. These fragments
                        are sent as datagrams to the UDP stack. OS-settings determine
                        the maximum datagram size.
                        The human-readable option lets the user postfix the value with K(ilobyte),
                        M(egabyte) or G(igabtye). For example, 10M results in 10485760 bytes.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/FragmentSize
- Format: unsigned int
- Dimension: bytes
- Default value: 1300
- Valid values: 200 / 65535
- Occurrences min-max: 0-1

Resolution
^^^^^^^^^^

                        The resolution indicates the number of milliseconds that
                        this channel sleeps between two consecutive resend or
                        packing actions. Latency budget values are truncated to a
                        multiple of "Resolution" milliseconds.

                        It is considered good practice to specify the ThrottleTreshold consistently throughout
                        the system.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Resolution
- Format: unsigned int
- Dimension: milliseconds
- Default value: 10
- Valid values: 1 /  -
- Occurrences min-max: 0-1

AdminQueueSize
^^^^^^^^^^^^^^

                        For reliable channels the receiving side needs to keep the sending
                        side informed about the received data and the received control messages.

                        This is done by means of an "AdminQueue". This setting determines the
                        size of this queue, and it must be greater than the maximum number of reliable
                        messages send or received during each "Resolution" milliseconds.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/AdminQueueSize
- Format: integer
- Default value: 4000
- Valid values: 400 /  -
- Occurrences min-max: 0-1

CompressionBufferSize
^^^^^^^^^^^^^^^^^^^^^

                        When compression on messages is enabled then the CompressionBufferSize specifies the initial
                        size of the compression/decompression buffer. The compression buffer is used to store the messages
                        before they are compressed and send on the network. The decompression buffer is used to decompress
                        the received compressed messages. Note that the actual size of these buffers may be increased when
                        needed.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/CompressionBufferSize
- Format: integer
- Default value: 131072
- Valid values: 65536 /  -
- Occurrences min-max: 0-1

CompressionThreshold
^^^^^^^^^^^^^^^^^^^^

                        When compression on messages is enabled then the CompressionThreshold provides a threshold
                        to start compressing the accumulated data and sending the compressed data on the network.
                        The CompressionThreshold is used to estimate the size of the compressed messages.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/CompressionThreshold
- Format: integer
- Default value: 0
- Valid values: 0 /  -
- Occurrences min-max: 0-1

Sending
^^^^^^^

                        This element describes all properties for the transmitting side
                        of the Channel.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Sending
- Occurrences min-max: 0-1
- Child elements: CrcCheck, QueueSize, MaxBurstSize, ThrottleLimit, ThrottleThreshold, MaxRetries, RecoveryFactor, DiffServField, DontRoute, DontFragment, TimeToLive

CrcCheck
~~~~~~~~

                       In order to protect Vortex OpenSplice network packets from malicious attack the CrcCheck(cyclic redundancy check) configuration item has been added.
                       CRCs are specifically designed to protect against common types of errors on communication channels.
                       When enabled the integrity of delivered network packets from one DDS process to another is assured.
                       There is a small performance cost using this feature due to the addtional overhead of carrying out the crc calculation.

                       When the sending side is enabled the network packet will contain a valid crc field.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Sending/CrcCheck
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

QueueSize
~~~~~~~~~

                            This element specifies the number of messages the networking queue
                            can contain.
                            Messages sent to the network are written into the networking queue.
                            The networking service will read from this queue. If this
                            queue is full, the writer writing into the queue is suspended
                            and will retry until success. Note that a full networking queue is
                            a symptom of an improperly designed system.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Sending/QueueSize
- Format: integer
- Default value: 400
- Valid values: 1 /  -
- Occurrences min-max: 0-1

MaxBurstSize
~~~~~~~~~~~~

                            Amount in bytes to be sent at maximum every
                            "Resolution" milliseconds. The default value is set to 1GB per resolution tick. This can be
                            considered "unlimited" as this far exceeds the capacity of modern physical networks.
                            The human-readable option lets the user postfix the value with K(ilobyte),
                            M(egabyte) or G(igabtye). For example, 10M results in 10485760 bytes

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Sending/MaxBurstSize
- Dimension: bytes/(resolution interval)
- Default value: 1073741823
- Valid values: 1024 / 1073741823
- Occurrences min-max: 0-1

ThrottleLimit
~~~~~~~~~~~~~

                            Throttling will enable you to further limit (below MaxBurstSize) the amount of data that is
                            sent every Resolution interval. This happens if one of the receiving nodes in the network
                            indicates that it has trouble processing all incoming data. This value is the lower boundary
                            of the range over which the throttling can adapt the limit. If this value is set to the same
                            value (or higher) as MaxBurstSize throttling is disabled.
                            The ThrottleLimit value is not allowed be smaller than the FragmentSize. If a lower value is
                            provided, then the value of FragmentSize is used as ThrottleLimit.
                            The human-readable option lets the user postfix the value with K(ilobyte),
                            M(egabyte) or G(igabtye). For example, 10K results in 10240 bytes

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Sending/ThrottleLimit
- Dimension: bytes/(resolution interval)
- Default value: 10240
- Valid values:  - / 4294967295
- Occurrences min-max: 0-1

ThrottleThreshold
~~~~~~~~~~~~~~~~~

                            This is the number of unprocessed network fragments that a node will store before it will inform
                            the other nodes in the network that it has trouble processing the incoming data. Those other nodes
                            can use this information to adjust their throttle values, effectively reducing the amount of incoming
                            data in case of a temporary overflow, and increasing again when the node is able to catch up.

                            It is considered good practice to specify the ThrottleTreshold consistently throughout
                            the system.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Sending/ThrottleThreshold
- Format: integer
- Dimension: fragments
- Default value: 50
- Valid values: 2 /  -
- Occurrences min-max: 0-1

MaxRetries
~~~~~~~~~~

This element is only applicable for reliable channels.
A reliable channel implements a reliability protocol in which it builds a list of
connected remote services. This protocol expects all connected services to
acknowledge messages within a specific period of time, otherwise messages will be
resent. This element specifies the number of retransmissions the service has to
execute before considering that the addressed service has become unresponsive.
When this happens the remote service will be removed from the reliability protocol
and the channel will no longer expect messages to be acknowledged.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Sending/MaxRetries
- Format: integer
- Default value: 100
- Valid values: 1 /  -
- Occurrences min-max: 0-1

RecoveryFactor
~~~~~~~~~~~~~~

A reliable channel implements a reliability protocol in which it builds a list of
connected remote services. This protocol expects all connected services to
acknowledge messages within a specific period of time otherwise messages will be
resent. The expected period of time is specified by this attribute as the number of
resolution ticks. (See also Section 4.4.1.5.1.9, Element Resolution, on page 218.)
The lost message is resent after Resolution \* RecoveryFactor milliseconds.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Sending/RecoveryFactor
- Format: integer
- Default value: 3
- Valid values: 2 /  -
- Occurrences min-max: 0-1

DiffServField
~~~~~~~~~~~~~

                        This element describes the DiffServ setting the channel will apply to the networking messages.
                        This parameter determines the value of the  diffserv field of the IP version 4 packets send
                        on this channel which allows QoS setting to be applied to the network traffic send on this channel.
                        


                        Windows platform support for setting the diffserv field is dependent on the OS version.
                        For Windows versions XP SP2 and 2003 to use the diffserv field the following parameter should
                        be added to the register:
                        


                        HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\TcpIp\\Parameters\\DisableUserTOSSetting
                        


                        The type of this parameter is a DWORD and it's value should be set to 0 to allow setting of the diffserv field.
                        


                        For Windows version 7 or higher a new API (qWAVE) has been introduced For these platforms the specified
                        diffserv value is mapped to one of the support traffic types. The mapping is as follows:
                        1-8 background traffic; 9-40 excellent traffic; 41-55 audio/video traffic; 56 voice traffic; 57-63 control traffic.
                        When Vortex OpenSplice is run without Administrative priveleges then only the diffserv value of 0, 8, 40 or 56 is allowed.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Sending/DiffServField
- Format: integer
- Default value: 0
- Valid values: 0 / 255
- Occurrences min-max: 0-1

DontRoute
~~~~~~~~~
The IP DONTROUTE
                              socket option is set to the value specified.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Sending/DontRoute
- Format: boolean
- Default value: True
- Valid values: True, False
- Occurrences min-max: 0-1

DontFragment
~~~~~~~~~~~~

                        Controls whether the "don't fragment" bit (DF) is set on outgoing UDP IPv4 packets.
                        Note that not all operating systems support setting this bit. When the operating
                        system does not support setting the DF bit this option is ignored.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Sending/DontFragment
- Format: boolean
- Default value: False
- Valid values: True, False
- Occurrences min-max: 0-1

TimeToLive
~~~~~~~~~~
For each UDP packet sent out, the IP Time To Live
                              header value is set to the value specified.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Sending/TimeToLive
- Format: integer
- Default value: 0
- Valid values: 0 / 255
- Occurrences min-max: 0-1

Scheduling
~~~~~~~~~~

                            This element specifies the scheduling policies used to control the transmitter
                            thread of the current Channel.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Sending/Scheduling
- Occurrences min-max: 0-1
- Child elements: Priority, Class

Priority
++++++++

                                This element specifies the thread priority that will be used by the transmitter
                                thread. Only priorities that are supported by the underlying operating system
                                can be assigned to this element. The user may need special privileges from the
                                underlying operating system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Sending/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
%%%%%%%%%%%%%

                                    This attribute specifies whether the specified
                                    *Priority* is a relative or absolute priority.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Sending/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Required: false

Class
+++++

                                This element specifies the thread scheduling class that will be used by the transmitter
                                thread. The user may need the appropriate privileges from the underlying operating system
                                to be able to assign some of the privileged scheduling classes.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Sending/Scheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

Receiving
^^^^^^^^^

                        This element describes all properties for the receiving side
                        of the Channel.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Receiving
- Occurrences min-max: 0-1
- Child elements: CrcCheck, ReceiveBufferSize, DefragBufferSize, MaxReliabBacklog, PacketRetentionPeriod, ReliabilityRecoveryPeriod

CrcCheck
~~~~~~~~

                       In order to protect Vortex OpenSplice network packets from malicious attack the CrcCheck(cyclic redundancy check) configuration item has been added.
                       CRCs are specifically designed to protect against common types of errors on communication channels.
                       When enabled the integrity of delivered network packets from one DDS process to another is assured.
                       There is a small performance cost using this feature due to the addtional overhead of carrying out the crc calculation.

                       When the receiving side is enabled only network packets that contain a valid crc field are accepted.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Receiving/CrcCheck
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

ReceiveBufferSize
~~~~~~~~~~~~~~~~~

                            The UDP receive buffer of the best effort channel socket is
                            set to the value given. If many message are lost, the
                            receive buffer size has to be increased.
                            The human-readable option lets the user postfix the value with K(ilobyte),
                            M(egabyte) or G(igabtye). For example, 10M results in 10485760 bytes.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Receiving/ReceiveBufferSize
- Default value: 1000000
- Valid values: 1024 /  -
- Occurrences min-max: 0-1

Scheduling
~~~~~~~~~~

                            This element specifies the scheduling policies used to control the
                            receiver thread of the current Channel.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Receiving/Scheduling
- Occurrences min-max: 0-1
- Child elements: Priority, Class

Priority
++++++++

                                This element specifies the thread priority that will be used by the receiver
                                thread. Only priorities that are supported by the underlying operating system
                                can be assigned to this element. The user may need special privileges from
                                the underlying operating system to be able to assign some of the privileged
                                priorities.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Receiving/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
%%%%%%%%%%%%%

                                    This attribute specifies whether the specified
                                    *Priority* is a relative or absolute priority.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Receiving/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Required: false

Class
+++++

                                This element specifies the thread scheduling class that will be used by the receiver
                                thread. The user may need the appropriate privileges from the underlying operating
                                system to be able to assign some of the privileged scheduling classes.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Receiving/Scheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

DefragBufferSize
~~~~~~~~~~~~~~~~

                            The maximum number of Fragment buffers that will be allocated for
                            this channel. These buffers are used to store incoming fragments
                            waiting to be processed, as well as fragments that are being processed.
                            With respect to very large messages be aware that the number of buffers times the
                            fragment size must be sufficient to process the messages otherwise they will be
                            dropped. (See also Element FragmentSize)

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Receiving/DefragBufferSize
- Default value: 5000
- Valid values: 500 /  -
- Occurrences min-max: 0-1

SMPOptimization
~~~~~~~~~~~~~~~

                            This option will distribute the processing done for incoming fragements over
                            multiple threads, which will lead to an improved throughput on SMP nodes.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Receiving/SMPOptimization
- Occurrences min-max: 0-1
- Required attributes: enabled

enabled
+++++++

                                This attribute toggles the Optimization on or off.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Receiving/SMPOptimization[@enabled]
- Format: boolean
- Default value: true
- Required: true

MaxReliabBacklog
~~~~~~~~~~~~~~~~

This element specifies the maximum number of received fragments maintained in
the channel from a single sender for the purpose of order preservation because an
earlier fragment from that sender is missing. A sender is disconnected and all
maintained fragments are discarded when this number is exceeded. Future
fragments from this sender are only accepted after a disconnect if reconnection is set
to true (see Element Reconnection).

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Receiving/MaxReliabBacklog
- Format: integer
- Default value: 1000
- Valid values: 100 /  -
- Occurrences min-max: 0-1

PacketRetentionPeriod
~~~~~~~~~~~~~~~~~~~~~

                            This element specifies the number of milliseconds received packets are retained by the network
                            service for its so-called "reliability-under-publisher-crash" extended reliability
                            protocol. This protocol ensures that a consistent or aligned data-set is received by all
                            alive (receiving) nodes, even though some nodes might not have received some
                            packets at the moment a sending node disappears (for whatever reason). The
                            protocol implies that each node retains sufficient received data so that it can be
                            (re-)distributed if a publishing node disappears before all receiving nodes are
                            "up-to-date". When the PacketRetentionPeriod element is set to 0 (the default
                            value), the alignment amongst receiving nodes will not occur. To activate the
                            extended realibility protocol, this setting must be configured to a time period that
                            exceeds the worst-case death-detection time as configured for the discovery
                            protocol of the set of distributed networking services in the system.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Receiving/PacketRetentionPeriod
- Format: integer
- Default value: 0
- Valid values: 0 /  -
- Occurrences min-max: 0-1

ReliabilityRecoveryPeriod
~~~~~~~~~~~~~~~~~~~~~~~~~

                            This element specifies a timeout period (in milliseconds) for the alignment phase of the extended
                            reliability protocol. It only has an effect when the related
                            PacketRetentionperiod is set to a non-zero value. After the specified
                            reliabilityRecoveryPeriod timeout, any data retained for the purpose of
                            alignment of receiving nodes (following the disappearance or crash of a publishing
                            node) will be discarded. The value of this timeout period must be sufficient to allow
                            for the worst-case alignment-time of any "missed" data by individual receiving
                            nodes following the disappearance of a sending node in the system.

- Full path: //OpenSplice/SNetworkService/Channels/Channel/Receiving/ReliabilityRecoveryPeriod
- Format: integer
- Default value: 1000
- Valid values: 0 /  -
- Occurrences min-max: 0-1

AllowedPorts
^^^^^^^^^^^^

                AllowedPorts specifies the port numbers available for the network service to be used by the
                reliable network channels. The network channel is configured with a unique port number. However
                the reliable network channels require a second port number to provide the reliable communication
                service. For this second port number each reliable network channel will select a free port from
                the AllowedPorts.
                When the AllowedPorts is not specified for a particular channel then the default AllowedPorts which
                is configured on the Channels element is used. When also the default AllowedPorts is not specified
                each reliable network channel will first try to use the configured portNr + 1 as the second port or
                when this port number is already in use will determine a port number dynamically.
                The AllowedPorts is a list of entries where an entry is a port number or a port number range.
                When the AllowedPorts contains more than one entry then these entries must be seperated by a
                comma (,). A port number range consists of the lower and the upper bound of the port number range,
                where the lower and the upper bound are seperated by a minus (-).

- Full path: //OpenSplice/SNetworkService/Channels/Channel/AllowedPorts
- Format: string
- Occurrences min-max: 0-1

AllowedPorts
------------

                AllowedPorts specifies the port numbers available for the network service to be used by the
                reliable network channels. The network channel is configured with a unique port number. However
                the reliable network channels require a second port number to provide the reliable communication
                service. For this second port number each reliable network channel will select a free port from
                the AllowedPorts.
                When the AllowedPorts is not specified for a particular channel then the default AllowedPorts which
                is configured on the Channels element is used. When also the default AllowedPorts is not specified
                each reliable network channel will first try to use the configured portNr + 1 as the second port or
                when this port number is already in use will determine a port number dynamically.
                The AllowedPorts is a list of entries where an entry is a port number or a port number range.
                When the AllowedPorts contains more than one entry then these entries must be seperated by a
                comma (,). A port number range consists of the lower and the upper bound of the port number range,
                where the lower and the upper bound are seperated by a minus (-).

- Full path: //OpenSplice/SNetworkService/Channels/AllowedPorts
- Format: string
- Occurrences min-max: 0-1

Discovery
=========

                This element is used to configure the various parameters of the Discovery Channel,
                which is used to discover all relevant participating entities in the current Domain.
                The purpose of the discovery process is to build-up and maintain a notion of all
                relevant active nodes within the domain.  The relevance of discovered remote nodes
                can be defined statically (by definition of the so-called Global Partition) and/or
                can be dynamically expanded and maintained by the dynamic-discovery process driven
                by the node's Role and Scope.

- Full path: //OpenSplice/SNetworkService/Discovery
- Occurrences min-max: 0-1
- Child elements: PortNr, ProbeList
- Optional attributes: enabled, Scope

enabled
-------

                    This element can be used to enable or disable the Discovery Channel. In case the Discovery
                    Channel is disabled, entities will only detect each others presence implicitly once messages
                    are received for the first time.

- Full path: //OpenSplice/SNetworkService/Discovery[@enabled]
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1
- Required: false

Scope
-----

                    This attribute controls the dynamic discovery behaviour of this node within the current Domain.
                    If it is not set, dynamic discovery will be disabled and the networking service will only
                    communicate with nodes that can be reached through the predefined Global Partition. If the Scope
                    attribute is specified, dynamic discovery is enabled and the networking service will be able to
                    communicate with all nodes in the system that have a Role that matches the Scope expression.
                    The Scope expression can contain a comma separated list of wild-card role-expressions. If the
                    role of any  discovered node matches any of the wild-card expressions, the remote node is
                    considered a match and will become part of the communication reach (i.e. the Global Partition)
                    of the current domain.

- Full path: //OpenSplice/SNetworkService/Discovery[@Scope]
- Format: string
- Occurrences min-max: 0-1
- Required: false

PortNr
------

                    This element specifies the Port number used by the Discovery Channel.

- Full path: //OpenSplice/SNetworkService/Discovery/PortNr
- Format: integer
- Default value: 3369
- Valid values: 1 / 65536
- Occurrences min-max: 1-1

ProbeList
---------

                    This element contains the addresses of the nodes that will be contacted to retrieve an initial
                    list of participating nodes in the current domain that match the specified Scope. Multiple
                    ProbeList addresses can be entered by separating them by a colon (,), semicolon (;) or space( ) .
                    The addresses can be entered as dotted decimal notation or as the symbolic hostname, in which
                    case the middleware will try to resolve the corresponding IP address.

- Full path: //OpenSplice/SNetworkService/Discovery/ProbeList
- Format: string
- Occurrences min-max: 0-1

Sending
-------

                    This element describes all properties for the transmitting side
                    of the Discovery Channel.

- Full path: //OpenSplice/SNetworkService/Discovery/Sending
- Occurrences min-max: 0-1
- Child elements: CrcCheck, DiffServField, DontRoute, DontFragment, TimeToLive, Interval, SafetyFactor, SalvoSize

CrcCheck
^^^^^^^^

                       In order to protect Vortex OpenSplice network packets from malicious attack the CrcCheck(cyclic redundancy check) configuration item has been added.
                       CRCs are specifically designed to protect against common types of errors on communication channels.
                       When enabled the integrity of delivered network packets from one DDS process to another is assured.
                       There is a small performance cost using this feature due to the addtional overhead of carrying out the crc calculation.

                       When the sending side is enabled the network packet will contain a valid crc field.

- Full path: //OpenSplice/SNetworkService/Discovery/Sending/CrcCheck
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

DiffServField
^^^^^^^^^^^^^

                        This element describes the DiffServ setting the channel will apply to the networking messages.
                        This parameter determines the value of the  diffserv field of the IP version 4 packets send
                        on this channel which allows QoS setting to be applied to the network traffic send on this channel.
                        


                        Windows platform support for setting the diffserv field is dependent on the OS version.
                        For Windows versions XP SP2 and 2003 to use the diffserv field the following parameter should
                        be added to the register:
                        


                        HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\TcpIp\\Parameters\\DisableUserTOSSetting
                        


                        The type of this parameter is a DWORD and it's value should be set to 0 to allow setting of the diffserv field.
                        


                        For Windows version 7 or higher a new API (qWAVE) has been introduced For these platforms the specified
                        diffserv value is mapped to one of the support traffic types. The mapping is as follows:
                        1-8 background traffic; 9-40 excellent traffic; 41-55 audio/video traffic; 56 voice traffic; 57-63 control traffic.
                        When Vortex OpenSplice is run without Administrative priveleges then only the diffserv value of 0, 8, 40 or 56 is allowed.

- Full path: //OpenSplice/SNetworkService/Discovery/Sending/DiffServField
- Format: integer
- Default value: 0
- Valid values: 0 / 255
- Occurrences min-max: 0-1

DontRoute
^^^^^^^^^
The IP DONTROUTE
                              socket option is set to the value specified.

- Full path: //OpenSplice/SNetworkService/Discovery/Sending/DontRoute
- Format: boolean
- Default value: True
- Valid values: True, False
- Occurrences min-max: 0-1

DontFragment
^^^^^^^^^^^^

                      Controls whether the "don't fragment" bit (DF) is set on outgoing UDP IPv4 packets.
                      Note that not all operating systems support setting this bit. When the operating
                      system does not support setting the DF bit this option is ignored.

- Full path: //OpenSplice/SNetworkService/Discovery/Sending/DontFragment
- Format: boolean
- Default value: False
- Valid values: True, False
- Occurrences min-max: 0-1

TimeToLive
^^^^^^^^^^
For each UDP packet sent out, the IP Time To Live
                              header value is set to the value specified.

- Full path: //OpenSplice/SNetworkService/Discovery/Sending/TimeToLive
- Format: integer
- Default value: 0
- Valid values: 0 / 255
- Occurrences min-max: 0-1

Scheduling
^^^^^^^^^^

                        This element specifies the scheduling policies used to control the transmitter thread
                        of the Discovery Channel.

- Full path: //OpenSplice/SNetworkService/Discovery/Sending/Scheduling
- Occurrences min-max: 0-1
- Child elements: Priority, Class

Priority
~~~~~~~~

                            This element specifies the thread priority that will be used by the transmitter thread
                            of the Discovery Channel. Only priorities that are supported by the underlying operating
                            system can be assigned to this element. The user may need special privileges from the
                            underlying operating system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/SNetworkService/Discovery/Sending/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
+++++++++++++

                                This attribute specifies whether the specified
                                *Priority* is a relative or absolute priority.

- Full path: //OpenSplice/SNetworkService/Discovery/Sending/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Required: false

Class
~~~~~

                            This element specifies the thread scheduling class that will be used by the transmitter
                            thread of the Discovery Channel. The user may need the appropriate privileges from the
                            underlying operating system to be able to assign some of the privileged scheduling classes.

- Full path: //OpenSplice/SNetworkService/Discovery/Sending/Scheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

Interval
^^^^^^^^

                        This element describes the interval(in milliseconds) at which remote nodes will expect heartbeats from this node.

- Full path: //OpenSplice/SNetworkService/Discovery/Sending/Interval
- Format: integer
- Default value: 333
- Valid values: 10 /  -
- Occurrences min-max: 0-1

SafetyFactor
^^^^^^^^^^^^

                        The SafetyFactor is used to set a margin on the discovery sending. This avoids tight timing issues.

- Full path: //OpenSplice/SNetworkService/Discovery/Sending/SafetyFactor
- Default value: 0.9
- Valid values: 0.2 / 1.0
- Occurrences min-max: 0-1

SalvoSize
^^^^^^^^^

                        During starting and stopping, discovery messages are sent at higher frequency. This SalvoSize sets
                        the number of messages to send during these phases.

- Full path: //OpenSplice/SNetworkService/Discovery/Sending/SalvoSize
- Format: integer
- Default value: 3
- Valid values: 1 /  -
- Occurrences min-max: 0-1

Receiving
---------

                    This element describes all properties for the receiving side
                    of the Discovery Channel.

- Full path: //OpenSplice/SNetworkService/Discovery/Receiving
- Occurrences min-max: 0-1
- Child elements: CrcCheck, DeathDetectionCount, ReceiveBufferSize

CrcCheck
^^^^^^^^

                       In order to protect Vortex OpenSplice network packets from malicious attack the CrcCheck(cyclic redundancy check) configuration item has been added.
                       CRCs are specifically designed to protect against common types of errors on communication channels.
                       When enabled the integrity of delivered network packets from one DDS process to another is assured.
                       There is a small performance cost using this feature due to the addtional overhead of carrying out the crc calculation.

                       When the sending side is enabled the network packet will contain a valid crc field.

- Full path: //OpenSplice/SNetworkService/Discovery/Receiving/CrcCheck
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

Scheduling
^^^^^^^^^^

                        This element specifies the scheduling policies used to control the receiver thread
                        of the Discovery Channel.

- Full path: //OpenSplice/SNetworkService/Discovery/Receiving/Scheduling
- Occurrences min-max: 0-1
- Child elements: Priority, Class

Priority
~~~~~~~~

                            This element specifies the thread priority that will be used by the receiver thread
                            of the Discovery Channel. Only priorities that are supported by the underlying operating
                            system can be assigned to this element. The user may need special privileges from the
                            underlying operating system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/SNetworkService/Discovery/Receiving/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
+++++++++++++

                                This attribute specifies whether the specified
                                *Priority* is a relative or absolute priority.

- Full path: //OpenSplice/SNetworkService/Discovery/Receiving/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Required: false

Class
~~~~~

                            This element specifies the thread scheduling class that will be used by the receiver
                            thread of the Discovery Channel. The user may need the appropriate privileges from the
                            underlying operating system to be able to assign some of the privileged scheduling classes.

- Full path: //OpenSplice/SNetworkService/Discovery/Receiving/Scheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

DeathDetectionCount
^^^^^^^^^^^^^^^^^^^

                        This element specifies how often a heartbeat from a remote node must miss its Interval before
                        that remote node is considered dead.

- Full path: //OpenSplice/SNetworkService/Discovery/Receiving/DeathDetectionCount
- Format: integer
- Default value: 6
- Valid values: 1 /  -
- Occurrences min-max: 0-1

ReceiveBufferSize
^^^^^^^^^^^^^^^^^

                        The UDP receive buffer of the Discovery Channel socket is set to the value given. If
                        many message are lost, the receive buffer size has to be increased.

- Full path: //OpenSplice/SNetworkService/Discovery/Receiving/ReceiveBufferSize
- Default value: 1000000
- Valid values: 1 /  -
- Occurrences min-max: 0-1

Tracing
=======

                This element controls the amount and type of information that is written into the
                tracing log by the Networking Service. This is useful to track the Networking Service
                during application development. In the runtime system it should be turned off.

- Full path: //OpenSplice/SNetworkService/Tracing
- Occurrences min-max: 0-1
- Child elements: OutputFile, Timestamps, Verbosity
- Optional attributes: enabled

enabled
-------

                    This attribute controls whether the tracing option is enabled or not.

- Full path: //OpenSplice/SNetworkService/Tracing[@enabled]
- Format: boolean
- Default value: true
- Required: false

OutputFile
----------

                    This option specifies where the logging is printed to. Note that "stdout" is considered a
                    legal value that represents "standard out".  The default value is an empty string,
                    indicating that the tracing log will be written to standard out.

- Full path: //OpenSplice/SNetworkService/Tracing/OutputFile
- Format: string
- Default value: networking.log
- Occurrences min-max: 1-1

Timestamps
----------

                    This element specifies whether the logging must contain timestamps.

- Full path: //OpenSplice/SNetworkService/Tracing/Timestamps
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1
- Optional attributes: absolute

absolute
^^^^^^^^

                        This attribute specifies whether the timestamps are absolute
                        or relative to the startup time of the service.

- Full path: //OpenSplice/SNetworkService/Tracing/Timestamps[@absolute]
- Format: boolean
- Default value: true
- Required: false

Categories
----------

                    This element contains the logging properties for various networking categories.

- Full path: //OpenSplice/SNetworkService/Tracing/Categories
- Occurrences min-max: 1-1
- Child elements: Default, Configuration, Construction, Destruction, Mainloop, Groups, Send, Receive, Throttling, Test, Discovery

Default
^^^^^^^

                        This element specifies the tracing level used for categories that are not
                        explicitly specified. Level 0 indicates no tracing, level 6 indicates the
                        most detailed level of tracing.

- Full path: //OpenSplice/SNetworkService/Tracing/Categories/Default
- Format: integer
- Default value: 0
- Valid values: 0 / 6
- Occurrences min-max: 0-1

Configuration
^^^^^^^^^^^^^

                        This element specifies the tracing level for the *Configuration* category.
                        This includes the processing of all NetworkService parameters in the config file.
                        Level 0 indicates no tracing, level 6 indicates the most detailed level
                        of tracing.

- Full path: //OpenSplice/SNetworkService/Tracing/Categories/Configuration
- Format: integer
- Default value: 0
- Valid values: 0 / 6
- Occurrences min-max: 0-1

Construction
^^^^^^^^^^^^

                        This element specifies the tracing level for the *Construction* category.
                        This includes the creation of all internal processing entities.
                        Level 0 indicates no tracing, level 6 indicates the most detailed level
                        of tracing.

- Full path: //OpenSplice/SNetworkService/Tracing/Categories/Construction
- Format: integer
- Default value: 0
- Valid values: 0 / 6
- Occurrences min-max: 0-1

Destruction
^^^^^^^^^^^

                        This element specifies the tracing level for the *Destruction* category.
                        This includes the destruction of all internal processing entities when the
                        NetworkService terminates. Level 0 indicates no tracing, level 6 indicates the
                        most detailed level of tracing.

- Full path: //OpenSplice/SNetworkService/Tracing/Categories/Destruction
- Format: integer
- Default value: 0
- Valid values: 0 / 6
- Occurrences min-max: 0-1

Mainloop
^^^^^^^^

                        This element specifies the tracing level for the *Mainloop* category.
                        This includes information about each of the threads spawned by the NetworkService.
                        Level 0 indicates no tracing, level 6 indicates the most detailed level
                        of tracing.

- Full path: //OpenSplice/SNetworkService/Tracing/Categories/Mainloop
- Format: integer
- Default value: 0
- Valid values: 0 / 6
- Occurrences min-max: 0-1

Groups
^^^^^^

                        This element specifies the tracing level for the *Groups* category.
                        This includes the management of local groups (partition-topic combinations).
                        Level 0 indicates no tracing, level 6 indicates the most detailed level
                        of tracing.

- Full path: //OpenSplice/SNetworkService/Tracing/Categories/Groups
- Format: integer
- Default value: 0
- Valid values: 0 / 6
- Occurrences min-max: 0-1

Send
^^^^

                        This element specifies the tracing level for the *Send* category.
                        This includes information about outgoing data.
                        Level 0 indicates no tracing, level 6 indicates the most detailed level
                        of tracing.

- Full path: //OpenSplice/SNetworkService/Tracing/Categories/Send
- Format: integer
- Default value: 0
- Valid values: 0 / 6
- Occurrences min-max: 0-1

Receive
^^^^^^^

                        This element specifies the tracing level for the *Receive* category.
                        This includes information about incoming data.
                        Level 0 indicates no tracing, level 6 indicates the most detailed level
                        of tracing.

- Full path: //OpenSplice/SNetworkService/Tracing/Categories/Receive
- Format: integer
- Default value: 0
- Valid values: 0 / 6
- Occurrences min-max: 0-1

Throttling
^^^^^^^^^^

                        This element specifies the tracing level for the *Throttling* category.
                        This includes information about throttling.
                        Level 0 indicates no tracing, level 6 indicates the most detailed level
                        of tracing.

- Full path: //OpenSplice/SNetworkService/Tracing/Categories/Throttling
- Format: integer
- Default value: 0
- Valid values: 0 / 6
- Occurrences min-max: 0-1

Test
^^^^

                        This element specifies the tracing level for the *Test* category.
                        This is a reserved category used for testing purposes.
                        Level 0 indicates no tracing, level 6 indicates the most detailed level
                        of tracing.

- Full path: //OpenSplice/SNetworkService/Tracing/Categories/Test
- Format: integer
- Default value: 0
- Valid values: 0 / 6
- Occurrences min-max: 0-1

Discovery
^^^^^^^^^

                        This element specifies the tracing level for the *Discovery* category.
                        This includes all activity related to the discovery channel.
                        Level 0 indicates no tracing, level 6 indicates the most detailed level
                        of tracing.

- Full path: //OpenSplice/SNetworkService/Tracing/Categories/Discovery
- Format: integer
- Default value: 0
- Valid values: 0 / 6
- Occurrences min-max: 0-1

Verbosity
---------

The Verbosity attribute sets the level of tracing for all Tracing Catagories. This attribute is an additional method besides the Tracing/Catagories tag to specify trace levels. The difference is that Verbosity sets the level for all catagories similar as by other services whereas the Tracing/Catagories element allows to set the trace level per catagory. The verbosity levels are mapped to Catagory levels as following:

- *none*: level 0 (no Networking log)
- *severe*:   level 1 
- *warning*:  level 2 
- *info*:     level 3 
- *config*:   level 3 
- *fine*:     level 4 
- *finer*:    level 5 
- *finest*:   level 6

- Full path: //OpenSplice/SNetworkService/Tracing/Verbosity
- Format: enumeration
- Default value: none
- Valid values: finest, finer, fine, config, info, warning, severe, none
- Occurrences min-max: 0-1

Compression
===========

                      This group of attributes specifies a compression method to
                      use within the service in partitions where it is enabled. The
                      networking service includes (depending on platform) implementations
                      of zlib, lzf and snappy. Others may be implemented by writing a
                      dynamically-loadable library and configuring it here. See the
                      Vortex OpenSplice release notes for details of how to write such a
                      library.

                      It is imperative that all nodes exchanging compressed data
                      have the same configuration in this section.

- Full path: //OpenSplice/SNetworkService/Compression
- Occurrences min-max: 0-1
- Optional attributes: PluginLibrary, PluginInitFunction, PluginParameter

PluginLibrary
-------------

                        This attribute names a dynamically loadable library
                        which must contain the code for compressing and decompressing
                        the network data. This may be left blank for the built-in
                        compressors.

- Full path: //OpenSplice/SNetworkService/Compression[@PluginLibrary]
- Format: string
- Default value: ""
- Required: false

PluginInitFunction
------------------

                        This attribute specifies an initialization function for a
                        compression plugin to be used within the service. The functions
                        for the built-in compressors are named ospl_comp_zlib_init,
                        ospl_comp_lzf_init and ospl_comp_snappy_init but for convenience
                        they may be specified here as as zlib, lzf or snappy.

- Full path: //OpenSplice/SNetworkService/Compression[@PluginInitFunction]
- Format: string
- Default value: ""
- Required: false

PluginParameter
---------------

                        Some compression implementations are configurable with
                        respect to the tradeoff between speed and effectiveness. A
                        parameter may be specified here to control this. For example
                        the zlib compressor is configured with an integer between 0
                        (for no compression) to 9 (for maximum compression).

- Full path: //OpenSplice/SNetworkService/Compression[@PluginParameter]
- Format: string
- Default value: ""
- Required: false

NetworkService
**************

The Network Service provides a bridge between the local DDS service and a
network interface.
The Vortex OpenSplice NetworkService supports both Internet Protocol
Versions 4 and 6 (IPv4 & IPv6) where possible. Please refer to the Release Notes
(Known Issues section) to see if the IPv6 capability is present on your operating
system.

Note that each service instance will only communicate using one of these protocols.
It is an error to specify IPv6 ('colon-separated hexadecimal') and IPv4 ('dotted
decimal') addresses in the same NetworkService configuration.

Multiple Network Services can exist next to each other, each serving one physical
network interface.
Please refer to Applications which operate in multiple domains, for notes about
applications operating in multiple domains and interactions with the Network Service.
The Network Service is responsible for forwarding data to the network and for
receiving data from the network. It can be configured to distinguish multiple
communication channels with different QoS policies assigned to be able to schedule
sending and receival of specific messages to provide optimal performance for a
specific application domain.
The Network Service is selected by using the following configuration element to the
Domain section of the configuration file (Element Application).
*
<Service name="networking">

<Command>networking</Command>

</Service>*

The network configuration expects a root element named
Vortex OpenSplice/NetworkService. Within this root element, the Network Service
will look for several child-elements. Each of these is listed and explained.

- Full path: //OpenSplice/NetworkService
- Occurrences min-max: 0-*
- Required attributes: name

name
====

                This attribute identifies the configuration for the Networking service.
                Multiple Network service configurations can be specified in one single
                resource. The actual applicable configuration is determined by the value
                of the name attribute, which must match the one specified under the
                *//OpenSplice/Domain/Service[@name]* in the configuration of
                the DomainService.

- Full path: //OpenSplice/NetworkService[@name]
- Format: string
- Default value: networking
- Required: true

Watchdog
========

                This element controls the characteristics of the Watchdog thread.

- Full path: //OpenSplice/NetworkService/Watchdog
- Occurrences min-max: 0-1

Scheduling
----------

                    This element specifies the type of OS scheduling class will be
                    used by the thread that announces its liveliness periodically.

- Full path: //OpenSplice/NetworkService/Watchdog/Scheduling
- Occurrences min-max: 1-1
- Child elements: Priority, Class

Priority
^^^^^^^^

                        This element specifies the thread priority that will be used by the
                        watchdog thread. Only priorities that are supported by the
                        underlying operating system can be assigned to this element.
                        The user may need special privileges from the underlying operating
                        system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/NetworkService/Watchdog/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
~~~~~~~~~~~~~

                            This attribute specifies whether the specified
                            Priority is a relative or absolute priority.

- Full path: //OpenSplice/NetworkService/Watchdog/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Required: false

Class
^^^^^

                        This element specifies the thread scheduling class that will be used by
                        the watchdog thread. The user may need the appropriate privileges from
                        the underlying operating system to be able to assign some of the
                        privileged scheduling classes.

- Full path: //OpenSplice/NetworkService/Watchdog/Scheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

General
=======

                This element contains general parameters that concern the networking service
                as a whole.

- Full path: //OpenSplice/NetworkService/General
- Occurrences min-max: 0-1
- Child elements: NetworkInterfaceAddress, EnableMulticastLoopback, LegacyCompression

NetworkInterfaceAddress
-----------------------

                    This element specifies which network interface card should be used.
                    Every Networking service is bound to only one network interface card
                    (NIC). The card can be uniquely identified by its corresponding
                    IP address or by its symbolic name (e.g. eth0). If the
                    value "first available" is entered here, the Vortex OpenSplice
                    middleware will try to look up an interface that has
                    the required capabilities.

- Full path: //OpenSplice/NetworkService/General/NetworkInterfaceAddress
- Format: string
- Default value: first available
- Occurrences min-max: 0-1
- Optional attributes: forced, ipv6, bind, allowReuse

forced
^^^^^^

                    This attribute specifies whether only the selected NetworkInterfaceAddress should be used or others can be used too.
                    
                        - false - Specifies that the NetworkInterfaceAddress is first used but when not available another, when available, is used. (default).
                        - true - Specifies that only the selected NetworkInterfaceAddress can be used.

- Full path: //OpenSplice/NetworkService/General/NetworkInterfaceAddress[@forced]
- Format: boolean
- Default value: false
- Required: false

ipv6
^^^^

                    This attribute specifies whether IPv6 should be used for communication.
                    
                        - false - specifies that IPv4 should be used (default).
                        - true - Specifies that IPv6 should be used.
                     

                     This setting will be overriden & ignored if the element NetworkInterfaceAddress has an explicit value
                     that is unequivocally either an IPv4 or IPv6 address. This attribute is therefore only
                     optionally required to specify IPv6 communication when special values like "first available" or
                     an interface name are used instead of IP addresses.

- Full path: //OpenSplice/NetworkService/General/NetworkInterfaceAddress[@ipv6]
- Format: boolean
- Default value: false
- Required: false

bind
^^^^

                        Specifies the bind strategy to be used by the networking
                        service for its sockets.
                        
                            - any - Specifies that the service should bind to the wildcard-address (INADDR_ANY) (default).
                            - strict - Specifies that the service should bind to the NetworkingInterfaceAddress.

- Full path: //OpenSplice/NetworkService/General/NetworkInterfaceAddress[@bind]
- Format: enumeration
- Default value: any
- Valid values: any, strict
- Required: false

allowReuse
^^^^^^^^^^

                        By default the networking service will bind to a port
                        allowing other services to bind to the same port as well
                        (so reuse of the port is allowed). By setting this option
                        to 'false', the port is bound exclusively (SO_REUSEADDR
                        disabled).
                         
                             - true - Ports can be reused (SO_REUSEADDR enabled) (default).
                             - false - Ports are bound exclusively.

- Full path: //OpenSplice/NetworkService/General/NetworkInterfaceAddress[@allowReuse]
- Format: boolean
- Default value: true
- Required: false

EnableMulticastLoopback
-----------------------

          EnableMulticastLoopback specifies whether the networking service will allow
          IP multicast packets within the node to be visible to all networking participants in the node,
          including itself. It must be TRUE for intra-node multicast communications,
          but if a node runs only a single Vortex OpenSplice networking service and does not host
          any other networking-capable programs, it may be set to FALSE for improved performance.

- Full path: //OpenSplice/NetworkService/General/EnableMulticastLoopback
- Format: boolean
- Default value: True
- Valid values: True, False
- Occurrences min-max: 0-1

LegacyCompression
-----------------

                     This element specifies if compression is applied after of before fragmentations.
                     When set to TRUE compression is applied after fragmentation which is provided for
                     backward compatibility. When set to FALSE compression is applied before fragmentation.
                     The default value is TRUE.

- Full path: //OpenSplice/NetworkService/General/LegacyCompression
- Format: boolean
- Default value: True
- Valid values: True, False
- Occurrences min-max: 0-1

Reconnection
------------

                     This element specifies the desired networking-behavior with respect to the
                     validity of restoring lost connectivity with remote nodes.
                     Here 'lost connectivity' means a prolonged inability to communicate with a known
                     and still active remote node (typically because of network-issues)
                     that has resulted in such a node being declared 'dead' either by the topology-discovery or
                     lost-reliability being detected by a reliable channel's reactivity-checking mechanism.
                     If automatic reconnection is allowed, communication channels with the now-reachable-again node will be restored,
                     even though reliable data might have been lost during the disconnection period.

- Full path: //OpenSplice/NetworkService/General/Reconnection
- Occurrences min-max: 0-1
- Required attributes: allowed

allowed
^^^^^^^

                    This attribute specifies whether the network service must
                    resume communication with an other network service when it
                    has already been seen before but has been disconnected
                    for a while.
                    
                        - false - Specifies that the network service must NOT resume communication. (default).
                        - true -  Specifies that the network service must resume communication.

- Full path: //OpenSplice/NetworkService/General/Reconnection[@allowed]
- Format: boolean
- Default value: false
- Required: true

Partitioning
============

                The Vortex OpenSplice Networking service is capable of leveraging
                the network's multicast and routing capabilities. If some a-priori
                knowledge about the participating
                nodes and their topic and partition interest is available, then the
                networking services in the system can be explicitly instructed to use
                specific unicast or multicast addresses for its networking traffic.
                This is done by means of so-called network partitions

                A network partition is defined by one or more unicast, multicast
                of broadcast IP addresses. Any networking service that is started
                will read the network partition settings and, if applicable, join
                the required multicast groups. For every sample distributed by the
                networking service, both its partition and topic name will be
                inspected. In combination with a set of network partition mapping rules,
                the service will determine to which network partition the sample is
                written. The mapping rules are configurable as well.

                Using
                networking configuration, nodes can be disconnected from any
                networking partition. If a node is connected via a low speed
                interface, it is not capable of receiving high volume data. If
                the DCPS partitioning is designed carefully, high volume data is
                published into a specific partition, which on its turn is mapped
                onto a specific networking partition, which on its turn is only
                connected to those nodes that are capable of handling high volume data.

- Full path: //OpenSplice/NetworkService/Partitioning
- Occurrences min-max: 0-1

GlobalPartition
---------------

                    This element specifies the global or default networking partition.
                    This global network partition transports data that is either meant to be global, like discovery heartbeats,
                    or that is not mapped onto any other network partition.

- Full path: //OpenSplice/NetworkService/Partitioning/GlobalPartition
- Occurrences min-max: 0-1
- Required attributes: Address
- Optional attributes: MulticastTimeToLive

Address
^^^^^^^

                        The global
                        networking partition transports data that is either meant
                        to be global, like discovery heartbeats, or that is not
                        mapped onto any other networking partition. The address is a list
                        of one or more unicast, multicast or broadcast addresses. If more
                        than one address is specified, then the different
                        addresses are separated by a colon (,) semicolon (;) or space ( ).
                        Samples for the global partition will be sent to all addresses
                        that are specified in this list of addresses. To specify the
                        default broadcast address, use the expression "broadcast".
                        Addresses can be entered as dotted decimal notation or as the
                        symbolic hostname, in which case the middleware will try to resolve
                        the corresponding IP address.
                        If the value for this attribute is one, or more, 'colon-separated hexadecimal' Internet
                        Protocol Version 6 (IPv6) address(es), then the NetworkService will be
                        configured to use IPv6 for communication.

- Full path: //OpenSplice/NetworkService/Partitioning/GlobalPartition[@Address]
- Format: string
- Default value: broadcast
- Required: true

MulticastTimeToLive
^^^^^^^^^^^^^^^^^^^

                      For each UDP packet sent out, the TimeToLive header value is set to this value for
                      Multicast packets.
                      By specifying a value of '0', multicast traffic can be confined to the local node, and
                      such 'loopback' performance is typically optimized by the operating system

- Full path: //OpenSplice/NetworkService/Partitioning/GlobalPartition[@MulticastTimeToLive]
- Default value: 32
- Valid values: 0 / 255
- Required: false

NetworkPartitions
-----------------

                    Networking configuration can contain a set of networking partitions,
                    which are grouped under the NetworkPartitions element.

- Full path: //OpenSplice/NetworkService/Partitioning/NetworkPartitions
- Occurrences min-max: 0-1

NetworkPartition
^^^^^^^^^^^^^^^^

                        Every NetworkPartition has a name, an address and a connected flag.

- Full path: //OpenSplice/NetworkService/Partitioning/NetworkPartitions/NetworkPartition
- Occurrences min-max: 1-*
- Required attributes: Address
- Optional attributes: Name, Connected, Compression, SecurityProfile, MulticastTimeToLive

Name
~~~~

                            A networking partition is uniquely identified by its name.

- Full path: //OpenSplice/NetworkService/Partitioning/NetworkPartitions/NetworkPartition[@Name]
- Format: string
- Default value: networkPartition
- Required: false

Address
~~~~~~~

                            The address is a list
                            of one or more unicast, multicast or broadcast addresses. If more
                            than one address is specified, then the different
                            addresses are separated by a colon (,) semicolon (;) or space ( ).
                            Samples for this network partition will be sent to all addresses
                            that are specified in this list of addresses. To specify the
                            default broadcast address, use the expression "broadcast".
                            Addresses can be entered as dotted decimal notation or as the
                            symbolic hostname, in which case the middleware will try to
                            resolve the corresponding IP address.

- Full path: //OpenSplice/NetworkService/Partitioning/NetworkPartitions/NetworkPartition[@Address]
- Format: string
- Default value: broadcast
- Required: true

Connected
~~~~~~~~~

                            A node can choose to be not connected to a networking
                            partition by setting the Connected attribute.

                            If a node is connected to a networking partition,
                            it will join the corresponding multicast group and
                            it will receive data distributed over the partition.
                            If it is not connected, data distributed over the
                            partition will not reach the node but will be
                            filtered by the networking interface or multicast
                            enabled switches.

- Full path: //OpenSplice/NetworkService/Partitioning/NetworkPartitions/NetworkPartition[@Connected]
- Format: boolean
- Default value: true
- Required: false

Compression
~~~~~~~~~~~

                            This attribute specifies if networking will apply compression to limit bandwidth
                            for a specific network partition. This provides great flexibility as network
                            partition are dynamically bind to logical partitions. Compression is performed
                            before fragmentation of the messages. To provide backward compatibility the option
                            LegacyCompression (see General options) can be set to provide compression after
                            fragmentation. The following compression values are allowed:
                            
                                - false - No compression is applied. This is also the default value if not specified.
                                - true - Compression is applicable

- Full path: //OpenSplice/NetworkService/Partitioning/NetworkPartitions/NetworkPartition[@Compression]
- Format: boolean
- Default value: false
- Required: false

SecurityProfile
~~~~~~~~~~~~~~~

              In the context of secure networking, the NetworkPartition element provides
              support for the attribute SecurityProfile. The attribute is referencing a security
              profile declared in the context of the Security element.
              If the given reference is invalid, the network partition configuration is invalid. In
              this case the partition will be blocked to prevent unwanted information leaks. A
              configuration error message will be logged to the ospl-error.log file. If the
              security feature has been enabled but no profile is declared, the NULL profile will be
              used by default.
              The ordering of network partition declarations in the OSPL configuration file must
              be the same for all nodes within the Vortex OpenSplice domain. If certain nodes shall not
              use one of the network partitions, the network partition in question must be declared
              as connected="false". In this case the declared security profile would not be
              evaluated or initialized, and the associated secret cipher keys need not to be defined
              for the Vortex OpenSplice node in question.

- Full path: //OpenSplice/NetworkService/Partitioning/NetworkPartitions/NetworkPartition[@SecurityProfile]
- Format: string
- Default value: nullProfile
- Required: false

MulticastTimeToLive
~~~~~~~~~~~~~~~~~~~
For each UDP packet sent out, The TimeToLive header value is set to this value for Multicast packets.

- Full path: //OpenSplice/NetworkService/Partitioning/NetworkPartitions/NetworkPartition[@MulticastTimeToLive]
- Default value: 32
- Valid values: 0 / 255
- Required: false

IgnoredPartitions
-----------------

                    This element is used to group the set of IgnoredPartition elements.

- Full path: //OpenSplice/NetworkService/Partitioning/IgnoredPartitions
- Occurrences min-max: 0-1

IgnoredPartition
^^^^^^^^^^^^^^^^

                        This element can be used to create a "Local Partition" that is only
                        available on the node on which it is specified, and therefore won't
                        generate network-load. Any DCPS partition-topic combination specified
                        in this element will not be distibuted by the Networking service.

- Full path: //OpenSplice/NetworkService/Partitioning/IgnoredPartitions/IgnoredPartition
- Occurrences min-max: 1-*
- Required attributes: DCPSPartitionTopic

DCPSPartitionTopic
~~~~~~~~~~~~~~~~~~

                            The Networking service will match any DCPS messages
                            to the DCPSPartitionTopic expression and determine
                            if it matches. The PartitionExpression and
                            TopicExpression are allowed to contain a '\*' wildcard,
                            meaning that anything matches. An exact match is
                            considered better than a wildcard match. If a DCPS messages
                            matches an expression it will not be send to the network.

- Full path: //OpenSplice/NetworkService/Partitioning/IgnoredPartitions/IgnoredPartition[@DCPSPartitionTopic]
- Format: string
- Default value: *.*
- Required: true

PartitionMappings
-----------------

                    This element is used to group the set of PartitionMapping elements.

- Full path: //OpenSplice/NetworkService/Partitioning/PartitionMappings
- Occurrences min-max: 0-1

PartitionMapping
^^^^^^^^^^^^^^^^

                        This element specifies a mapping between a network partition
                        and a partition-topic combination.

                        In order to give networking partitions a meaning in the context
                        of DCPS, mappings from DCPS partitions and topics onto networking
                        partitions should be defined. Networking allows for a set of
                        partition mappings to be defined.

- Full path: //OpenSplice/NetworkService/Partitioning/PartitionMappings/PartitionMapping
- Occurrences min-max: 1-*
- Required attributes: NetworkPartition, DCPSPartitionTopic

NetworkPartition
~~~~~~~~~~~~~~~~

                            The NetworkPartition attribute of a partition mapping
                            defines that networking partitition that data in a
                            specific DCPS partition of a specific DCPS topic
                            should be sent to.

- Full path: //OpenSplice/NetworkService/Partitioning/PartitionMappings/PartitionMapping[@NetworkPartition]
- Format: string
- Default value: networkPartition
- Required: true

DCPSPartitionTopic
~~~~~~~~~~~~~~~~~~

                            The Networking service will match any DCPS messages
                            to the DCPSPartitionTopic expression and determine
                            if it matches. The PartitionExpression and
                            TopicExpression are allowed to contain a '\*' wildcard,
                            meaning that anything matches. An exact match is
                            considered better than a wildcard match. For every
                            DCPS message, the best matching partition is determined
                            and the data is sent over the corresponding networking
                            partition as specified by the matching
                            *NetworkPartition* element.

- Full path: //OpenSplice/NetworkService/Partitioning/PartitionMappings/PartitionMapping[@DCPSPartitionTopic]
- Format: string
- Default value: *.*
- Required: true

Channels
========

                This element is used to group a set of Channels.

                The set of channels define the behaviour of the 'network' concerning
                aspects as priority, reliability and latency budget. By configuring
                a set of channels, the Networking service is able to function as a
                'scheduler' for the network bandwidth. It achieves this by using the
                application-defined DDS QoS policies of the data to select the most
                appropriate channel to send the data.

- Full path: //OpenSplice/NetworkService/Channels
- Occurrences min-max: 1-1
- Child elements: AllowedPorts

Channel
-------

                    This element specifies all properties of an individual Channel.

                    The Networking service will make sure messages with a higher
                    priority precede messages with a lower priority and it uses the
                    latency budget to assemble multiple messages into one UDP packet
                    where possible, to optimize the bandwidth usage. Of course, its
                    performance depends heavily on the compatbility of the configured
                    channels with the used DDS QoS policies of the applications.

- Full path: //OpenSplice/NetworkService/Channels/Channel
- Occurrences min-max: 1-42
- Child elements: PortNr, FragmentSize, Resolution, AdminQueueSize, CompressionBufferSize, CompressionThreshold, AllowedPorts
- Required attributes: name, reliable, enabled
- Optional attributes: default, priority

name
^^^^

                        The name uniquely identifies the channel.

- Full path: //OpenSplice/NetworkService/Channels/Channel[@name]
- Format: string
- Default value: aChannel
- Required: true

reliable
^^^^^^^^

                        If this attribute is set to true, the channel sends all messages reliably.
                        If not, data is sent only once (fire-and-forget).

                        The specific channel a message is written into depends on the attached
                        quality of service. Once a message has arrived in a channel, it will be
                        transported with the quality of service attached to the channel. If the
                        reliable attribute happens to be set to true, the message will be sent
                        over the network using a reliability protocol.

- Full path: //OpenSplice/NetworkService/Channels/Channel[@reliable]
- Format: boolean
- Default value: false
- Required: true

default
^^^^^^^

                        This attribute indicates whether the channel is selected as the
                        default channel in case no channel offers the quality of service
                        requested by a message.

                        The networking channels should be configured corresponding
                        to the quality of service settings that are expected to be
                        requested by the applications. It might happen, however,
                        that none of the available channels meets the requested
                        quality of service for a specific message. In that case,
                        the message will be written into the default channel.

                        Note that only one channel is allowed to have this attribute
                        set to true

- Full path: //OpenSplice/NetworkService/Channels/Channel[@default]
- Format: boolean
- Default value: false
- Required: false

enabled
^^^^^^^

                        This attribute toggles a channel on or off. Toggling a
                        channel between enabled and disabled is a quick alternative
                        for commenting out the corresponding lines in the configuration
                        file.

- Full path: //OpenSplice/NetworkService/Channels/Channel[@enabled]
- Format: boolean
- Default value: false
- Required: true

priority
^^^^^^^^

                        This attribute sets the transport priority of the channel.
                        Messages sent to the network have a transport_priority
                        quality of service value. Selection of a networking channel
                        is based on the priority requested by the message and the
                        priority offered by the channel. The priority settings
                        of the different channels divide the priority range
                        into intervals. Within a channel, messages are sorted in
                        order of priority.

- Full path: //OpenSplice/NetworkService/Channels/Channel[@priority]
- Format: integer
- Default value: 0
- Required: false

PortNr
^^^^^^

                        This element specifies the port number used by the Channel.
                        Messages for the channel are sent to the port number given.
                        Each channel needs its own unique port number. Please note
                        that 'reliable' channels use a second port, which is the
                        specified PortNr + 1.

- Full path: //OpenSplice/NetworkService/Channels/Channel/PortNr
- Format: integer
- Default value: 53400
- Valid values: 1 / 65535
- Occurrences min-max: 1-1

FragmentSize
^^^^^^^^^^^^

                        The networking module will fragment large message into smaller
                        fragments with size **FragmentSize**. These fragments
                        are sent as datagrams to the UDP stack. OS-settings determine
                        the maximum datagram size.

- Full path: //OpenSplice/NetworkService/Channels/Channel/FragmentSize
- Default value: 1300
- Valid values: 200 / 65535
- Occurrences min-max: 0-1

Resolution
^^^^^^^^^^

                        The resolution indicates the number of milliseconds that
                        this channel sleeps between two consecutive resend or
                        packing actions. Latency budget values are truncated to a
                        multiple of "Resolution" milliseconds.

                        It is considered good practice to specify the ThrottleTreshold consistently throughout
                        the system.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Resolution
- Format: integer
- Default value: 10
- Valid values: 1 /  -
- Occurrences min-max: 0-1

AdminQueueSize
^^^^^^^^^^^^^^

                        For reliable channels the receiving side needs to keep the sending
                        side informed about the received data and the received control messages.

                        This is done by means of an "AdminQueue". This setting determines the
                        size of this queue, and it must be greater than the maximum number of reliable
                        messages send or received during each "Resolution" milliseconds.

- Full path: //OpenSplice/NetworkService/Channels/Channel/AdminQueueSize
- Format: integer
- Default value: 4000
- Valid values: 400 /  -
- Occurrences min-max: 0-1

CompressionBufferSize
^^^^^^^^^^^^^^^^^^^^^

                        When compression on messages is enabled then the CompressionBufferSize specifies the initial
                        size of the compression/decompression buffer. The compression buffer is used to store the messages
                        before they are compressed and send on the network. The decompression buffer is used to decompress
                        the received compressed messages. Note that the actual size of these buffers may be increased when
                        needed.

- Full path: //OpenSplice/NetworkService/Channels/Channel/CompressionBufferSize
- Format: integer
- Default value: 131072
- Valid values: 65536 /  -
- Occurrences min-max: 0-1

CompressionThreshold
^^^^^^^^^^^^^^^^^^^^

                        When compression on messages is enabled then the CompressionThreshold provides a threshold
                        to start compressing the accumulated data and sending the compressed data on the network.
                        The CompressionThreshold is used to estimate the size of the compressed messages.

- Full path: //OpenSplice/NetworkService/Channels/Channel/CompressionThreshold
- Format: integer
- Default value: 0
- Valid values: 0 /  -
- Occurrences min-max: 0-1

Sending
^^^^^^^

                        This element describes all properties for the transmitting side
                        of the Channel.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Sending
- Occurrences min-max: 0-1
- Child elements: CrcCheck, QueueSize, MaxBurstSize, ThrottleLimit, ThrottleThreshold, MaxRetries, RecoveryFactor, DiffServField, DontRoute, DontFragment, TimeToLive, ReportInterval

CrcCheck
~~~~~~~~

                       In order to protect Vortex OpenSplice network packets from malicious attack the CrcCheck(cyclic redundancy check) configuration item has been added.
                       CRCs are specifically designed to protect against common types of errors on communication channels.
                       When enabled the integrity of delivered network packets from one DDS process to another is assured.
                       There is a small performance cost using this feature due to the addtional overhead of carrying out the crc calculation.

                       When the sending side is enabled the network packet will contain a valid crc field.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Sending/CrcCheck
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

QueueSize
~~~~~~~~~

                            This element specifies the number of messages the networking queue
                            can contain.
                            Messages sent to the network are written into the networking queue.
                            The networking service will read from this queue. If this
                            queue is full, the writer writing into the queue is suspended
                            and will retry until success. Note that a full networking queue is
                            a symptom of an improperly designed system.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Sending/QueueSize
- Format: integer
- Default value: 400
- Valid values: 1 /  -
- Occurrences min-max: 0-1

MaxBurstSize
~~~~~~~~~~~~

                            Amount in bytes to be sent at maximum every
                            "Resolution" milliseconds. The default value is set to 1GB per resolution tick. This can be
                            considered "unlimited" as this far exceeds the capacity of modern physical networks.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Sending/MaxBurstSize
- Default value: 1073741823
- Valid values: 1024 / 1073741823
- Occurrences min-max: 0-1

ThrottleLimit
~~~~~~~~~~~~~

                            Throttling will enable you to further limit (below MaxBurstSize) the amount of data that is
                            sent every Resolution interval. This happens if one of the receiving nodes in the network
                            indicates that it has trouble processing all incoming data. This value is the lower boundary
                            of the range over which the throttling can adapt the limit. If this value is set to the same
                            value (or higher) as MaxBurstSize throttling is disabled.
                            The ThrottleLimit value is not allowed be smaller than the FragmentSize. If a lower value is
                            provided, then the value of FragmentSize is used as ThrottleLimit.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Sending/ThrottleLimit
- Default value: 10240
- Occurrences min-max: 0-1

ThrottleThreshold
~~~~~~~~~~~~~~~~~

                            This is the number of unprocessed network fragments that a node will store before it will inform
                            the other nodes in the network that it has trouble processing the incoming data. Those other nodes
                            can use this information to adjust their throttle values, effectively reducing the amount of incoming
                            data in case of a temporary overflow, and increasing again when the node is able to catch up.

                            It is considered good practice to specify the ThrottleTreshold consistently throughout
                            the system.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Sending/ThrottleThreshold
- Format: integer
- Default value: 50
- Valid values: 2 /  -
- Occurrences min-max: 0-1

MaxRetries
~~~~~~~~~~

                            The number of retransmissions the service has to execute before considering the addressed node
                            as not responding.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Sending/MaxRetries
- Format: integer
- Default value: 100
- Valid values: 1 /  -
- Occurrences min-max: 0-1

RecoveryFactor
~~~~~~~~~~~~~~
A lost message is resent after Resolution \* RecoveryFactor milliseconds.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Sending/RecoveryFactor
- Format: integer
- Default value: 3
- Valid values: 2 /  -
- Occurrences min-max: 0-1

DiffServField
~~~~~~~~~~~~~

                        This element describes the DiffServ setting the channel will apply to the networking messages.
                        This parameter determines the value of the  diffserv field of the IP version 4 packets send
                        on this channel which allows QoS setting to be applied to the network traffic send on this channel.
                        


                        Windows platform support for setting the diffserv field is dependent on the OS version.
                        For Windows versions XP SP2 and 2003 to use the diffserv field the following parameter should
                        be added to the register:
                        


                        HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\TcpIp\\Parameters\\DisableUserTOSSetting
                        


                        The type of this parameter is a DWORD and it's value should be set to 0 to allow setting of the diffserv field.
                        


                        For Windows version 7 or higher a new API (qWAVE) has been introduced For these platforms the specified
                        diffserv value is mapped to one of the support traffic types. The mapping is as follows:
                        1-8 background traffic; 9-40 excellent traffic; 41-55 audio/video traffic; 56 voice traffic; 57-63 control traffic.
                        When Vortex OpenSplice is run without Administrative priveleges then only the diffserv value of 0, 8, 40 or 56 is allowed.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Sending/DiffServField
- Format: integer
- Default value: 0
- Valid values: 0 / 255
- Occurrences min-max: 0-1

DontRoute
~~~~~~~~~
The IP DONTROUTE
                              socket option is set to the value specified.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Sending/DontRoute
- Format: boolean
- Default value: True
- Valid values: True, False
- Occurrences min-max: 0-1

DontFragment
~~~~~~~~~~~~

                        Controls whether the "don't fragment" bit (DF) is set on outgoing UDP IPv4 packets.
                        Note that not all operating systems support setting this bit. When the operating
                        system does not support setting the DF bit this option is ignored.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Sending/DontFragment
- Format: boolean
- Default value: False
- Valid values: True, False
- Occurrences min-max: 0-1

TimeToLive
~~~~~~~~~~
For each UDP packet sent out, the IP Time To Live
                              header value is set to the value specified.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Sending/TimeToLive
- Format: integer
- Default value: 1
- Valid values: 1 / 255
- Occurrences min-max: 0-1

Scheduling
~~~~~~~~~~

                            This element specifies the scheduling policies used to control the transmitter
                            thread of the current Channel.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Sending/Scheduling
- Occurrences min-max: 0-1
- Child elements: Priority, Class

Priority
++++++++

                                This element specifies the thread priority that will be used by the transmitter
                                thread. Only priorities that are supported by the underlying operating system
                                can be assigned to this element. The user may need special privileges from the
                                underlying operating system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Sending/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
%%%%%%%%%%%%%

                                    This attribute specifies whether the specified
                                    *Priority* is a relative or absolute priority.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Sending/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Required: false

Class
+++++

                                This element specifies the thread scheduling class that will be used by the transmitter
                                thread. The user may need the appropriate privileges from the underlying operating system
                                to be able to assign some of the privileged scheduling classes.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Sending/Scheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

Receiving
^^^^^^^^^

                        This element describes all properties for the receiving side
                        of the Channel.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Receiving
- Occurrences min-max: 0-1
- Child elements: CrcCheck, ReceiveBufferSize, DefragBufferSize, MaxReliabBacklog, PacketRetentionPeriod, ReliabilityRecoveryPeriod

CrcCheck
~~~~~~~~

                       In order to protect Vortex OpenSplice network packets from malicious attack the CrcCheck(cyclic redundancy check) configuration item has been added.
                       CRCs are specifically designed to protect against common types of errors on communication channels.
                       When enabled the integrity of delivered network packets from one DDS process to another is assured.
                       There is a small performance cost using this feature due to the addtional overhead of carrying out the crc calculation.

                       When the receiving side is enabled only network packets that contain a valid crc field are accepted.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Receiving/CrcCheck
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

ReceiveBufferSize
~~~~~~~~~~~~~~~~~

                            The UDP receive buffer of the best effort channel socket is
                            set to the value given. If many message are lost, the
                            receive buffer size has to be increased.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Receiving/ReceiveBufferSize
- Default value: 1000000
- Valid values: 1024 /  -
- Occurrences min-max: 0-1

Scheduling
~~~~~~~~~~

                            This element specifies the scheduling policies used to control the
                            receiver thread of the current Channel.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Receiving/Scheduling
- Occurrences min-max: 0-1
- Child elements: Priority, Class, ReportInterval

Priority
++++++++

                                This element specifies the thread priority that will be used by the receiver
                                thread. Only priorities that are supported by the underlying operating system
                                can be assigned to this element. The user may need special privileges from
                                the underlying operating system to be able to assign some of the privileged
                                priorities.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Receiving/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
%%%%%%%%%%%%%

                                    This attribute specifies whether the specified
                                    *Priority* is a relative or absolute priority.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Receiving/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Required: false

Class
+++++

                                This element specifies the thread scheduling class that will be used by the receiver
                                thread. The user may need the appropriate privileges from the underlying operating
                                system to be able to assign some of the privileged scheduling classes.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Receiving/Scheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

DefragBufferSize
~~~~~~~~~~~~~~~~

                            The maximum number of Fragment buffers that will be allocated for
                            this channel. These buffers are used to store incoming fragments
                            waiting to be processed, as well as fragments that are being processed.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Receiving/DefragBufferSize
- Default value: 5000
- Valid values: 500 /  -
- Occurrences min-max: 0-1

SMPOptimization
~~~~~~~~~~~~~~~

                            This option will distribute the processing done for incoming fragements over
                            multiple threads, which will lead to an improved throughput on SMP nodes.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Receiving/SMPOptimization
- Occurrences min-max: 0-1
- Required attributes: enabled

enabled
+++++++

                                This attribute toggles the Optimization on or off.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Receiving/SMPOptimization[@enabled]
- Format: boolean
- Default value: true
- Required: true

MaxReliabBacklog
~~~~~~~~~~~~~~~~

                            This is a lower limit to the DefragBufferSize that specifies the number of received fragments
                            from a single remote node allocated for the purpose of order preservation because an earlier
                            fragment from that remote node is missing. If this number is exceeded, then that particular
                            remote node that didn't resend the missing fragent in time is considered dead for this channel.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Receiving/MaxReliabBacklog
- Format: integer
- Default value: 1000
- Valid values: 100 /  -
- Occurrences min-max: 0-1

PacketRetentionPeriod
~~~~~~~~~~~~~~~~~~~~~

              This element specifies the number of milliseconds received packets are retained by the network
              service for its so-called "reliability-under-publisher-crash" extended reliability
              protocol. This protocol ensures that a consistent or aligned data-set is received by all
              alive (receiving) nodes, even though some nodes might not have received some
              packets at the moment a sending node disappears (for whatever reason). The
              protocol implies that each node retains sufficient received data so that it can be
              (re-)distributed if a publishing node disappears before all receiving nodes are
              "up-to-date". When the PacketRetentionPeriod element is set to 0 (the default
              value), the alignment amongst receiving nodes will not occur. To activate the
              extended realibility protocol, this setting must be configured to a time period that
              exceeds the worst-case death-detection time as configured for the discovery
              protocol of the set of distributed networking services in the system.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Receiving/PacketRetentionPeriod
- Format: integer
- Default value: 0
- Valid values: 0 /  -
- Occurrences min-max: 0-1

ReliabilityRecoveryPeriod
~~~~~~~~~~~~~~~~~~~~~~~~~

              This element specifies a timeout period (in milliseconds) for the alignment phase of the extended
              reliability protocol. It only has an effect when the related
              PacketRetentionperiod is set to a non-zero value. After the specified
              reliabilityRecoveryPeriod timeout, any data retained for the purpose of
              alignment of receiving nodes (following the disappearance or crash of a publishing
              node) will be discarded. The value of this timeout period must be sufficient to allow
              for the worst-case alignment-time of any "missed" data by individual receiving
              nodes following the disappearance of a sending node in the system.

- Full path: //OpenSplice/NetworkService/Channels/Channel/Receiving/ReliabilityRecoveryPeriod
- Format: integer
- Default value: 1000
- Valid values: 0 /  -
- Occurrences min-max: 0-1

AllowedPorts
^^^^^^^^^^^^

                AllowedPorts specifies the port numbers available for the network service to be used by the
                reliable network channels. The network channel is configured with a unique port number. However
                the reliable network channels require a second port number to provide the reliable communication
                service. For this second port number each reliable network channel will select a free port from
                the AllowedPorts.
                When the AllowedPorts is not specified for a particular channel then the default AllowedPorts which
                is configured on the Channels element is used. When also the default AllowedPorts is not specified
                each reliable network channel will first try to use the configured portNr + 1 as the second port or
                when this port number is already in use will determine a port number dynamically.
                The AllowedPorts is a list of entries where an entry is a port number or a port number range.
                When the AllowedPorts contains more than one entry then these entries must be seperated by a
                comma (,). A port number range consists of the lower and the upper bound of the port number range,
                where the lower and the upper bound are seperated by a minus (-).

- Full path: //OpenSplice/NetworkService/Channels/Channel/AllowedPorts
- Format: string
- Occurrences min-max: 0-1

AllowedPorts
------------

                AllowedPorts specifies the port numbers available for the network service to be used by the
                reliable network channels. The network channel is configured with a unique port number. However
                the reliable network channels require a second port number to provide the reliable communication
                service. For this second port number each reliable network channel will select a free port from
                the AllowedPorts.
                When the AllowedPorts is not specified for a particular channel then the default AllowedPorts which
                is configured on the Channels element is used. When also the default AllowedPorts is not specified
                each reliable network channel will first try to use the configured portNr + 1 as the second port or
                when this port number is already in use will determine a port number dynamically.
                The AllowedPorts is a list of entries where an entry is a port number or a port number range.
                When the AllowedPorts contains more than one entry then these entries must be seperated by a
                comma (,). A port number range consists of the lower and the upper bound of the port number range,
                where the lower and the upper bound are seperated by a minus (-).

- Full path: //OpenSplice/NetworkService/Channels/AllowedPorts
- Format: string
- Occurrences min-max: 0-1

Discovery
=========

This element controls various parameters of the Network Services Discovery
mechanism.
Discovery reduces the Network Service configuration and minimizes network
traffic. Without Discovery, data is always sent to the network and all Networking
Services need to configure the addresses (This can be multicast addresses and/or
uni-cast addresses, especially in an uni-cast environment with many nodes the
configuration of the Network Service's lists can be cumbersome.)
of all Network Services they need to
communicate with. With Discovery, data is only sent to where interest exists and
connectivity is discovered based on a minimum configuration (Only a subset of
addresses of nodes are initially specified, these nodes are assumed to be
available as a discovery source, all nodes will make themselves known to these discovery
nodes and thereby making its existence and address available for all other nodes) (see Element ProbeList).
Discovery is based on a heartbeat mechanism to advertize the service's availability.
The Network Service starts by announcing its existence by sending heartbeats to the
Global Partition (The Global Partition contains all the addresses that the Network Service communicate
with) which is initially filled with the addresses specified in the
ProbeList; remote Network Services receiving the heartbeat will start sending
heartbeats in return. All Network Services that discover new heartbeats will
automatically request address information that match their Scope (see Attribute Scope)
from the Network Service sending the
heartbeat, and add the retrieved address information to their Global Partition.
Currently only uni-cast addresses are exchanged. Addresses are removed from the
Global Partition when a remote Network Service stops and heartbeats are no longer
received.

- Full path: //OpenSplice/NetworkService/Discovery
- Occurrences min-max: 0-1
- Child elements: PortNr, ProbeList
- Optional attributes: enabled, Scope

enabled
-------

                    This element can be used to enable or disable the Discovery Channel. In case the Discovery
                    Channel is disabled, entities will only detect each others presence implicitly once messages
                    are received for the first time.

- Full path: //OpenSplice/NetworkService/Discovery[@enabled]
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1
- Required: false

Scope
-----

                    This attribute controls the dynamic discovery behaviour of this node within the current Domain.
                    If it is not set, dynamic discovery will be disabled and the networking service will only
                    communicate with nodes that can be reached through the predefined Global Partition. If the Scope
                    attribute is specified, dynamic discovery is enabled and the networking service will be able to
                    communicate with all nodes in the system that have a Role that matches the Scope expression.
                    The Scope expression can contain a comma separated list of wild-card role-expressions. If the
                    role of any  discovered node matches any of the wild-card expressions, the remote node is
                    considered a match and will become part of the communication reach (i.e. the Global Partition)
                    of the current domain.

- Full path: //OpenSplice/NetworkService/Discovery[@Scope]
- Format: string
- Occurrences min-max: 0-1
- Required: false

PortNr
------

                    This element specifies the Port number used by the Discovery Channel.

- Full path: //OpenSplice/NetworkService/Discovery/PortNr
- Format: integer
- Default value: 3369
- Valid values: 1 / 65536
- Occurrences min-max: 1-1

ProbeList
---------

                    This element contains the addresses of the nodes that will be contacted to retrieve an initial
                    list of participating nodes in the current domain that match the specified Scope. Multiple
                    ProbeList addresses can be entered by separating them by a colon (,), semicolon (;) or space( ) .
                    The addresses can be entered as dotted decimal notation or as the symbolic hostname, in which
                    case the middleware will try to resolve the corresponding IP address.

- Full path: //OpenSplice/NetworkService/Discovery/ProbeList
- Format: string
- Occurrences min-max: 0-1

Sending
-------

                    This element describes all properties for the transmitting side
                    of the Discovery Channel.

- Full path: //OpenSplice/NetworkService/Discovery/Sending
- Occurrences min-max: 0-1
- Child elements: CrcCheck, DiffServField, DontRoute, DontFragment, TimeToLive, Interval, SafetyFactor, SalvoSize

CrcCheck
^^^^^^^^

                       In order to protect Vortex OpenSplice network packets from malicious attack the CrcCheck(cyclic redundancy check) configuration item has been added.
                       CRCs are specifically designed to protect against common types of errors on communication channels.
                       When enabled the integrity of delivered network packets from one DDS process to another is assured.
                       There is a small performance cost using this feature due to the addtional overhead of carrying out the crc calculation.

                       When the sending side is enabled the network packet will contain a valid crc field.

- Full path: //OpenSplice/NetworkService/Discovery/Sending/CrcCheck
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

DiffServField
^^^^^^^^^^^^^

                        This element describes the DiffServ setting the channel will apply to the networking messages.
                        This parameter determines the value of the  diffserv field of the IP version 4 packets send
                        on this channel which allows QoS setting to be applied to the network traffic send on this channel.
                        


                        Windows platform support for setting the diffserv field is dependent on the OS version.
                        For Windows versions XP SP2 and 2003 to use the diffserv field the following parameter should
                        be added to the register:
                        


                        HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\TcpIp\\Parameters\\DisableUserTOSSetting
                        


                        The type of this parameter is a DWORD and it's value should be set to 0 to allow setting of the diffserv field.
                        


                        For Windows version 7 or higher a new API (qWAVE) has been introduced For these platforms the specified
                        diffserv value is mapped to one of the support traffic types. The mapping is as follows:
                        1-8 background traffic; 9-40 excellent traffic; 41-55 audio/video traffic; 56 voice traffic; 57-63 control traffic.
                        When Vortex OpenSplice is run without Administrative priveleges then only the diffserv value of 0, 8, 40 or 56 is allowed.

- Full path: //OpenSplice/NetworkService/Discovery/Sending/DiffServField
- Format: integer
- Default value: 0
- Valid values: 0 / 255
- Occurrences min-max: 0-1

DontRoute
^^^^^^^^^
The IP DONTROUTE
                              socket option is set to the value specified.

- Full path: //OpenSplice/NetworkService/Discovery/Sending/DontRoute
- Format: boolean
- Default value: True
- Valid values: True, False
- Occurrences min-max: 0-1

DontFragment
^^^^^^^^^^^^

                      Controls whether the "don't fragment" bit (DF) is set on outgoing UDP IPv4 packets.
                      Note that not all operating systems support setting this bit. When the operating
                      system does not support setting the DF bit this option is ignored.

- Full path: //OpenSplice/NetworkService/Discovery/Sending/DontFragment
- Format: boolean
- Default value: False
- Valid values: True, False
- Occurrences min-max: 0-1

TimeToLive
^^^^^^^^^^
For each UDP packet sent out, the IP Time To Live
                              header value is set to the value specified.

- Full path: //OpenSplice/NetworkService/Discovery/Sending/TimeToLive
- Format: integer
- Default value: 1
- Valid values: 1 / 255
- Occurrences min-max: 0-1

Scheduling
^^^^^^^^^^

                        This element specifies the scheduling policies used to control the transmitter thread
                        of the Discovery Channel.

- Full path: //OpenSplice/NetworkService/Discovery/Sending/Scheduling
- Occurrences min-max: 0-1
- Child elements: Priority, Class

Priority
~~~~~~~~

                            This element specifies the thread priority that will be used by the transmitter thread
                            of the Discovery Channel. Only priorities that are supported by the underlying operating
                            system can be assigned to this element. The user may need special privileges from the
                            underlying operating system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/NetworkService/Discovery/Sending/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
+++++++++++++

                                This attribute specifies whether the specified
                                *Priority* is a relative or absolute priority.

- Full path: //OpenSplice/NetworkService/Discovery/Sending/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Required: false

Class
~~~~~

                            This element specifies the thread scheduling class that will be used by the transmitter
                            thread of the Discovery Channel. The user may need the appropriate privileges from the
                            underlying operating system to be able to assign some of the privileged scheduling classes.

- Full path: //OpenSplice/NetworkService/Discovery/Sending/Scheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

Interval
^^^^^^^^

                        This element describes the interval(in milliseconds) at which remote nodes will expect heartbeats from this node.

- Full path: //OpenSplice/NetworkService/Discovery/Sending/Interval
- Format: integer
- Dimension: milliseconds
- Default value: 333
- Valid values: 10 /  -
- Occurrences min-max: 0-1

SafetyFactor
^^^^^^^^^^^^

The SafetyFactor is used to set a margin (< 1) on the expected heartbeat interval.
The actual interval at which the heartbeats are sent is the specified interval
multiplied by this factor, so the actual interval will be equal to or smaller than the
specified value. This can be used to avoid timing issues such as those caused by
typical scheduling or network latencies.

- Full path: //OpenSplice/NetworkService/Discovery/Sending/SafetyFactor
- Default value: 0.9
- Valid values: 0.2 / 1.0
- Occurrences min-max: 0-1

SalvoSize
^^^^^^^^^

                   The reactivity of discovery depends on the heartbeat frequency, a higher heartbeat
                   frequency gives a faster reactivity but also imposes a higher network load, which is
                   not desirable. Ideally the heartbeat frequency must be kept as low as possible but
                   from a startup (and shutdown) perspective a high reactivity is often desired. So the
                   Network Service has the capability to send an additional salvo of heartbeats at
                   startup and shutdown at ten times the normal heartbeat speed to maximize reactivity
                   during these phases without requiring a continuous high heartbeat frequency. The
                   SalvoSize sets the number of messages to send during these phases.

- Full path: //OpenSplice/NetworkService/Discovery/Sending/SalvoSize
- Format: integer
- Default value: 3
- Valid values: 1 /  -
- Occurrences min-max: 0-1

Receiving
---------

                    This element describes all properties for the receiving side
                    of the Discovery Channel.

- Full path: //OpenSplice/NetworkService/Discovery/Receiving
- Occurrences min-max: 0-1
- Child elements: CrcCheck, DeathDetectionCount, ReceiveBufferSize

CrcCheck
^^^^^^^^

                       In order to protect Vortex OpenSplice network packets from malicious attack the CrcCheck(cyclic redundancy check) configuration item has been added.
                       CRCs are specifically designed to protect against common types of errors on communication channels.
                       When enabled the integrity of delivered network packets from one DDS process to another is assured.
                       There is a small performance cost using this feature due to the addtional overhead of carrying out the crc calculation.

                       When the sending side is enabled the network packet will contain a valid crc field.

- Full path: //OpenSplice/NetworkService/Discovery/Receiving/CrcCheck
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

Scheduling
^^^^^^^^^^

                        This element specifies the scheduling policies used to control the receiver thread
                        of the Discovery Channel.

- Full path: //OpenSplice/NetworkService/Discovery/Receiving/Scheduling
- Occurrences min-max: 0-1
- Child elements: Priority, Class

Priority
~~~~~~~~

                            This element specifies the thread priority that will be used by the receiver thread
                            of the Discovery Channel. Only priorities that are supported by the underlying operating
                            system can be assigned to this element. The user may need special privileges from the
                            underlying operating system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/NetworkService/Discovery/Receiving/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
+++++++++++++

                                This attribute specifies whether the specified
                                *Priority* is a relative or absolute priority.

- Full path: //OpenSplice/NetworkService/Discovery/Receiving/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Required: false

Class
~~~~~

                            This element specifies the thread scheduling class that will be used by the receiver
                            thread of the Discovery Channel. The user may need the appropriate privileges from the
                            underlying operating system to be able to assign some of the privileged scheduling classes.

- Full path: //OpenSplice/NetworkService/Discovery/Receiving/Scheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

DeathDetectionCount
^^^^^^^^^^^^^^^^^^^

                        This element specifies how often a heartbeat from a remote node must miss its Interval before
                        that remote node is considered dead.

- Full path: //OpenSplice/NetworkService/Discovery/Receiving/DeathDetectionCount
- Format: integer
- Default value: 6
- Valid values: 1 /  -
- Occurrences min-max: 0-1

ReceiveBufferSize
^^^^^^^^^^^^^^^^^

                        The UDP receive buffer of the Discovery Channel socket is set to the value given. If
                        many message are lost, the receive buffer size has to be increased.

- Full path: //OpenSplice/NetworkService/Discovery/Receiving/ReceiveBufferSize
- Dimension: bytes
- Default value: 1000000
- Valid values: 1 /  -
- Occurrences min-max: 0-1

Tracing
=======

                This element controls the amount and type of information that is written into the
                tracing log by the Networking Service. This is useful to track the Networking Service
                during application development. In the runtime system it should be turned off.

- Full path: //OpenSplice/NetworkService/Tracing
- Occurrences min-max: 0-1
- Child elements: OutputFile, Timestamps, Verbosity
- Optional attributes: enabled

enabled
-------

                    This attribute controls whether the tracing option is enabled or not.

- Full path: //OpenSplice/NetworkService/Tracing[@enabled]
- Format: boolean
- Default value: true
- Required: false

OutputFile
----------

                    This option specifies where the logging is printed to. Note that "stdout" is considered a
                    legal value that represents "standard out".  The default value is an empty string,
                    indicating that the tracing log will be written to standard out.

- Full path: //OpenSplice/NetworkService/Tracing/OutputFile
- Format: string
- Default value: networking.log
- Occurrences min-max: 1-1

Timestamps
----------

                    This element specifies whether the logging must contain timestamps.

- Full path: //OpenSplice/NetworkService/Tracing/Timestamps
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1
- Optional attributes: absolute

absolute
^^^^^^^^

                        This attribute specifies whether the timestamps are absolute
                        or relative to the startup time of the service.

- Full path: //OpenSplice/NetworkService/Tracing/Timestamps[@absolute]
- Format: boolean
- Default value: true
- Required: false

Categories
----------

                    This element contains the logging properties for various networking categories.

- Full path: //OpenSplice/NetworkService/Tracing/Categories
- Occurrences min-max: 1-1
- Child elements: Default, Configuration, Construction, Destruction, Mainloop, Groups, Send, Receive, Throttling, Test, Discovery

Default
^^^^^^^

                        This element specifies the tracing level used for categories that are not
                        explicitly specified. Level 0 indicates no tracing, level 6 indicates the
                        most detailed level of tracing.

- Full path: //OpenSplice/NetworkService/Tracing/Categories/Default
- Format: integer
- Default value: 0
- Valid values: 0 / 6
- Occurrences min-max: 0-1

Configuration
^^^^^^^^^^^^^

                        This element specifies the tracing level for the *Configuration* category.
                        This includes the processing of all NetworkService parameters in the config file.
                        Level 0 indicates no tracing, level 6 indicates the most detailed level
                        of tracing.

- Full path: //OpenSplice/NetworkService/Tracing/Categories/Configuration
- Format: integer
- Default value: 0
- Valid values: 0 / 6
- Occurrences min-max: 0-1

Construction
^^^^^^^^^^^^

                        This element specifies the tracing level for the *Construction* category.
                        This includes the creation of all internal processing entities.
                        Level 0 indicates no tracing, level 6 indicates the most detailed level
                        of tracing.

- Full path: //OpenSplice/NetworkService/Tracing/Categories/Construction
- Format: integer
- Default value: 0
- Valid values: 0 / 6
- Occurrences min-max: 0-1

Destruction
^^^^^^^^^^^

                        This element specifies the tracing level for the *Destruction* category.
                        This includes the destruction of all internal processing entities when the
                        NetworkService terminates. Level 0 indicates no tracing, level 6 indicates the
                        most detailed level of tracing.

- Full path: //OpenSplice/NetworkService/Tracing/Categories/Destruction
- Format: integer
- Default value: 0
- Valid values: 0 / 6
- Occurrences min-max: 0-1

Mainloop
^^^^^^^^

                        This element specifies the tracing level for the *Mainloop* category.
                        This includes information about each of the threads spawned by the NetworkService.
                        Level 0 indicates no tracing, level 6 indicates the most detailed level
                        of tracing.

- Full path: //OpenSplice/NetworkService/Tracing/Categories/Mainloop
- Format: integer
- Default value: 0
- Valid values: 0 / 6
- Occurrences min-max: 0-1

Groups
^^^^^^

                        This element specifies the tracing level for the *Groups* category.
                        This includes the management of local groups (partition-topic combinations).
                        Level 0 indicates no tracing, level 6 indicates the most detailed level
                        of tracing.

- Full path: //OpenSplice/NetworkService/Tracing/Categories/Groups
- Format: integer
- Default value: 0
- Valid values: 0 / 6
- Occurrences min-max: 0-1

Send
^^^^

                        This element specifies the tracing level for the *Send* category.
                        This includes information about outgoing data.
                        Level 0 indicates no tracing, level 6 indicates the most detailed level
                        of tracing.

- Full path: //OpenSplice/NetworkService/Tracing/Categories/Send
- Format: integer
- Default value: 0
- Valid values: 0 / 6
- Occurrences min-max: 0-1

Receive
^^^^^^^

                        This element specifies the tracing level for the *Receive* category.
                        This includes information about incoming data.
                        Level 0 indicates no tracing, level 6 indicates the most detailed level
                        of tracing.

- Full path: //OpenSplice/NetworkService/Tracing/Categories/Receive
- Format: integer
- Default value: 0
- Valid values: 0 / 6
- Occurrences min-max: 0-1

Throttling
^^^^^^^^^^

                        This element specifies the tracing level for the *Throttling* category.
                        This includes information about throttling.
                        Level 0 indicates no tracing, level 6 indicates the most detailed level
                        of tracing.

- Full path: //OpenSplice/NetworkService/Tracing/Categories/Throttling
- Format: integer
- Default value: 0
- Valid values: 0 / 6
- Occurrences min-max: 0-1

Test
^^^^

                        This element specifies the tracing level for the *Test* category.
                        This is a reserved category used for testing purposes.
                        Level 0 indicates no tracing, level 6 indicates the most detailed level
                        of tracing.

- Full path: //OpenSplice/NetworkService/Tracing/Categories/Test
- Format: integer
- Default value: 0
- Valid values: 0 / 6
- Occurrences min-max: 0-1

Discovery
^^^^^^^^^

                        This element specifies the tracing level for the *Discovery* category.
                        This includes all activity related to the discovery channel.
                        Level 0 indicates no tracing, level 6 indicates the most detailed level
                        of tracing.

- Full path: //OpenSplice/NetworkService/Tracing/Categories/Discovery
- Format: integer
- Default value: 0
- Valid values: 0 / 6
- Occurrences min-max: 0-1

Verbosity
---------

The Verbosity attribute sets the level of tracing for all Tracing Catagories. This attribute is an additional method besides the Tracing/Catagories tag to specify trace levels. The difference is that Verbosity sets the level for all catagories similar as by other services whereas the Tracing/Catagories element allows to set the trace level per catagory. The verbosity levels are mapped to Catagory levels as following:

- *none*: level 0 (no Networking log)
- *severe*:   level 1 
- *warning*:  level 2 
- *info*:     level 3 
- *config*:   level 3 
- *fine*:     level 4 
- *finer*:    level 5 
- *finest*:   level 6

- Full path: //OpenSplice/NetworkService/Tracing/Verbosity
- Format: enumeration
- Default value: none
- Valid values: finest, finer, fine, config, info, warning, severe, none
- Occurrences min-max: 0-1

Compression
===========

                      This group of attributes specifies a compression method to
                      use within the service in partitions where it is enabled. The
                      networking service includes (depending on platform) implementations
                      of zlib, lzf and snappy. Others may be implemented by writing a
                      dynamically-loadable library and configuring it here. See the
                      Vortex OpenSplice release notes for details of how to write such a
                      library.

                      It is imperative that all nodes exchanging compressed data
                      have the same configuration in this section.

- Full path: //OpenSplice/NetworkService/Compression
- Occurrences min-max: 0-1
- Optional attributes: PluginLibrary, PluginInitFunction, PluginParameter

PluginLibrary
-------------

                        This attribute names a dynamically loadable library
                        which must contain the code for compressing and decompressing
                        the network data. This may be left blank for the built-in
                        compressors.

- Full path: //OpenSplice/NetworkService/Compression[@PluginLibrary]
- Format: string
- Default value: ""
- Required: false

PluginInitFunction
------------------

                        This attribute specifies an initialization function for a
                        compression plugin to be used within the service. The functions
                        for the built-in compressors are named ospl_comp_zlib_init,
                        ospl_comp_lzf_init and ospl_comp_snappy_init but for convenience
                        they may be specified here as as zlib, lzf or snappy.

- Full path: //OpenSplice/NetworkService/Compression[@PluginInitFunction]
- Format: string
- Default value: ""
- Required: false

PluginParameter
---------------

                        Some compression implementations are configurable with
                        respect to the tradeoff between speed and effectiveness. A
                        parameter may be specified here to control this. For example
                        the zlib compressor is configured with an integer between 0
                        (for no compression) to 9 (for maximum compression).

- Full path: //OpenSplice/NetworkService/Compression[@PluginParameter]
- Format: string
- Default value: ""
- Required: false

NetworkingBridgeService
***********************

The root element of a networking bridge service configuration.

- Full path: //OpenSplice/NetworkingBridgeService
- Occurrences min-max: 0-*
- Required attributes: name

name
====

This attribute identifies the configuration for the Networking Bridge Service. Multiple service configurations can be specified in one single XML file. The actual applicable configuration is determined by the value of the name attribute, which must match the specified under the element OpenSplice/Domain/Service[@name] in the Domain Service configuration.

- Full path: //OpenSplice/NetworkingBridgeService[@name]
- Format: string
- Default value: networkingbridge
- Required: true

Exclude
=======

This element specifies which partition/topic combinations may not be forwarded.

- Full path: //OpenSplice/NetworkingBridgeService/Exclude
- Occurrences min-max: 0-*

Entry
-----

This element configures a single partition/topic combination for exclusion in the set of forwarded partition/topic combinations.

- Full path: //OpenSplice/NetworkingBridgeService/Exclude/Entry
- Occurrences min-max: 0-*
- Required attributes: DCPSPartitionTopic

DCPSPartitionTopic
^^^^^^^^^^^^^^^^^^

This attribute specifies a partition and a topic expression, separated by a single '.', that are used to determine if a given partition and topic will be excluded w.r.t. forwarding. The expressions may use the usual wildcards '\*' and '?'.

- Full path: //OpenSplice/NetworkingBridgeService/Exclude/Entry[@DCPSPartitionTopic]
- Format: string
- Default value: n/a
- Required: true

Include
=======

This element specifies which partition/topic combinations are to be forwarded, provided they are not listed in the Exclude section.

- Full path: //OpenSplice/NetworkingBridgeService/Include
- Occurrences min-max: 0-*

Entry
-----

This element configures a single partition/topic combination for inclusion in the set of forwarded partition/topic combinations.

- Full path: //OpenSplice/NetworkingBridgeService/Include/Entry
- Occurrences min-max: 0-*
- Required attributes: DCPSPartitionTopic

DCPSPartitionTopic
^^^^^^^^^^^^^^^^^^

This attribute specifies a partition and a topic expression, separated by a single '.', that are used to determine if a given partition and topic will be included w.r.t. forwarding. The expressions may use the usual wildcards '\*' and '?'.

- Full path: //OpenSplice/NetworkingBridgeService/Include/Entry[@DCPSPartitionTopic]
- Format: string
- Default value: n/a
- Required: true

Tracing
=======

The Tracing element controls the amount and type of information that is written into the tracing log by the DDSI service. This is useful to track the DDSI service during application development.

- Full path: //OpenSplice/NetworkingBridgeService/Tracing
- Occurrences min-max: 0-*
- Child elements: AppendToFile, EnableCategory, OutputFile, Verbosity

AppendToFile
------------

This option specifies whether the output is to be appended to an existing log file. The default is to create a new log file each time, which is generally the best option if a detailed log is generated.

- Full path: //OpenSplice/NetworkingBridgeService/Tracing/AppendToFile
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

EnableCategory
--------------

This element enables individual logging categories. These are enabled in addition to those enabled by Tracing/Verbosity. Recognised categories are:
- *fatal*: all fatal errors, errors causing immediate termination
- *error*: failures probably impacting correctness but not necessarily causing immediate termination
- *warning*: abnormal situations that will likely not impact correctness
- *config*: full dump of the configuration
- *info*: general informational notices

In addition, there is the keyword *trace* that enables all but *radmin*

- Full path: //OpenSplice/NetworkingBridgeService/Tracing/EnableCategory
- Format: string
- Occurrences min-max: 0-1

OutputFile
----------

This option specifies where the logging is printed to. Note that *stdout* and *stderr* are treated as special values, representing "standard out" and "standard error" respectively. No file is created unless logging categories are enabled using the Tracing/Verbosity or Tracing/EnabledCategory settings.

- Full path: //OpenSplice/NetworkingBridgeService/Tracing/OutputFile
- Format: string
- Default value: nwbridge.log
- Occurrences min-max: 0-1

Verbosity
---------

This element enables standard groups of categories, based on a desired verbosity level. This is in addition to the categories enabled by the Tracing/EnableCategory setting. Recognised verbosity levels and the categories they map to are:
- *none*: no NetworkingBridge log
- *severe*: error and fatal
- *warning*: *severe* + warning
- *info*: *warning* + general information messages
- *config*: *info* + config
- *fine*: equivalent to *config*
- *finest*: *fine* + trace

While *none* prevents any message from being written to a NetworkingBridge log file, warnings and errors are still logged in the ospl-info.log and ospl-error.log files.

- Full path: //OpenSplice/NetworkingBridgeService/Tracing/Verbosity
- Format: enumeration
- Default value: none
- Valid values: finest, fine, config, info, warning, severe, none
- Occurrences min-max: 0-1

Watchdog
========

This element specifies the type of OS scheduling class will be used by the thread that announces its liveliness periodically.

- Full path: //OpenSplice/NetworkingBridgeService/Watchdog
- Occurrences min-max: 0-*

Scheduling
----------

This element specifies the type of OS scheduling class will be used by the thread that announces its liveliness periodically.

- Full path: //OpenSplice/NetworkingBridgeService/Watchdog/Scheduling
- Occurrences min-max: 0-1
- Child elements: Class, Priority

Class
^^^^^

This element specifies the thread scheduling class that will be used by the watchdog thread. The user may need the appropriate privileges from the underlying operating system to be able to assign some of the privileged scheduling classes.

- Full path: //OpenSplice/NetworkingBridgeService/Watchdog/Scheduling/Class
- Format: enumeration
- Default value: default
- Valid values: realtime, timeshare, default
- Occurrences min-max: 0-1

Priority
^^^^^^^^

This element specifies the thread priority. Only priorities that are supported by the underlying operating system can be assigned to this element. The user may need special privileges from the underlying operating system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/NetworkingBridgeService/Watchdog/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 0-1
- Optional attributes: priority_kind

priority_kind
~~~~~~~~~~~~~

This attribute specifies whether the specified Priority is a relative or absolute priority.

- Full path: //OpenSplice/NetworkingBridgeService/Watchdog/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: relative
- Valid values: relative, absolute
- Required: false

DDSI2EService
*************

The root element of a DDSI2E networking service configuration.

- Full path: //OpenSplice/DDSI2EService
- Occurrences min-max: 0-*
- Required attributes: name

name
====

This attribute identifies the configuration for the DDSI2E Service. Multiple DDSI2E service configurations can be specified in one single resource. The actual applicable configuration is determined by the value of the name attribute, which must match the specified under the element OpenSplice/Domain/Service[@name] in the Domain Service configuration.

- Full path: //OpenSplice/DDSI2EService[@name]
- Format: string
- Default value: ddsi2e
- Required: true

Channels
========

This element is used to group a set of channels. The channels are independent data paths through DDSI2E and by using separate threads and setting their priorities appropriately, chanenls can be used to map transport priorities to operating system scheduler priorities, ensuring system-wide end-to-end priority preservation.

- Full path: //OpenSplice/DDSI2EService/Channels
- Occurrences min-max: 0-1

Channel
-------

This element defines a channel.

- Full path: //OpenSplice/DDSI2EService/Channels/Channel
- Occurrences min-max: 0-42
- Child elements: AuxiliaryBandwidthLimit, DataBandwidthLimit, DiffServField, QueueSize
- Required attributes: Name
- Optional attributes: TransportPriority, Resolution

Name
^^^^

This attribute specifies name of this channel. The name should uniquely identify the channel.

- Full path: //OpenSplice/DDSI2EService/Channels/Channel[@Name]
- Format: string
- Default value: n/a
- Required: true

TransportPriority
^^^^^^^^^^^^^^^^^

This attribute sets the transport priority threshold for the channel. Each DCPS data writer has a "transport_priority" QoS and this QoS is used to select a channel for use by this writer. The selected channel is the one with the largest threshold not greater than the writer's transport priority, and if no such channel exists, the channel with the lowest threshold.

- Full path: //OpenSplice/DDSI2EService/Channels/Channel[@TransportPriority]
- Format: integer
- Default value: 0
- Required: false

AuxiliaryBandwidthLimit
^^^^^^^^^^^^^^^^^^^^^^^

This element specifies the maximum transmit rate of auxiliary traffic on this channel (e.g. retransmits, heartbeats, etc). Bandwidth limiting uses a leaky bucket scheme. The default value "inf" means DDSI2E imposes no limitation, the underlying operating system and hardware will likely limit the maimum transmit rate.

The unit must be specified explicitly. Recognised units: *X*b/s, *X*bps for bits/s or *X*B/s, *X*Bps for bytes/s; where *X* is an optional prefix: k for 10 :sup:`3`, Ki for 2 :sup:`10`, M for 10 :sup:`6`, Mi for 2 :sup:`20`, G for 10 :sup:`9`, Gi for 2 :sup:`30`.

- Full path: //OpenSplice/DDSI2EService/Channels/Channel/AuxiliaryBandwidthLimit
- Format: string
- Default value: inf
- Occurrences min-max: 0-1

DataBandwidthLimit
^^^^^^^^^^^^^^^^^^

This element specifies the maximum transmit rate of new samples and directly related data, for this channel. Bandwidth limiting uses a leaky bucket scheme. The default value "inf" means DDSI2E imposes no limitation, the underlying operating system and hardware will likely limit the maimum transmit rate.

The unit must be specified explicitly. Recognised units: *X*b/s, *X*bps for bits/s or *X*B/s, *X*Bps for bytes/s; where *X* is an optional prefix: k for 10 :sup:`3`, Ki for 2 :sup:`10`, M for 10 :sup:`6`, Mi for 2 :sup:`20`, G for 10 :sup:`9`, Gi for 2 :sup:`30`.

- Full path: //OpenSplice/DDSI2EService/Channels/Channel/DataBandwidthLimit
- Format: string
- Default value: inf
- Occurrences min-max: 0-1

DiffServField
^^^^^^^^^^^^^

This element describes the DiffServ setting the channel will apply to the networking messages. This parameter determines the value of the diffserv field of the IP version 4 packets sent on this channel which allows QoS setting to be applied to the network traffic send on this channel.

Windows platform support for setting the diffserv field is dependent on the OS version.

For Windows versions XP SP2 and 2003 to use the diffserv field the following parameter should be added to the register:


HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\TcpIp\\Parameters\\DisableUserTOSSetting


The type of this parameter is a DWORD and its value should be set to 0 to allow setting of the diffserv field.


For Windows version 7 or higher a new API (qWAVE) has been introduced. For these platforms the specified diffserv value is mapped to one of the support traffic types.
The mapping is as follows: 1-8 background traffic; 9-40 excellent traffic; 41-55 audio/video traffic; 56 voice traffic; 57-63 control traffic.
When an application is run without Administrative priveleges then only the diffserv value of 0, 8, 40 or 56 is allowed.

- Full path: //OpenSplice/DDSI2EService/Channels/Channel/DiffServField
- Format: integer
- Default value: 0
- Occurrences min-max: 0-1

QueueSize
^^^^^^^^^

This element specifies the number of messages the network queue for this channel can contain. The Vortex OpenSplice kernel writes data to be transmitted to the network queue, and DDSI2E takes them from this queue. If this queue is full when an application tries to write a sample, the sample will be dropped or the writer suspended, depending on the QoS settings of the writer. Vortex OpenSplice and its services are optimised for a well-balanced system design, where the queue never becomes full.

- Full path: //OpenSplice/DDSI2EService/Channels/Channel/QueueSize
- Format: integer
- Default value: 0
- Occurrences min-max: 0-1

Resolution
^^^^^^^^^^

This element specifies the interval at which the DDSI2E transmit thread for this channel wakes up, and which controls the smallest latency_budget that has an effect. A shorter latency_budget is rounded to 0. The downside of a reducing this setting is that it increases the number of idle wake-ups of the transmit thread when there is no data to be sent.

The unit must be specified explicitly. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2EService/Channels/Channel[@Resolution]
- Format: string
- Default value: 1s
- Valid values: 0 / 1s
- Required: false

Compatibility
=============

The Compatibility elements allows specifying various settings related to compatability with standards and with other DDSI implementations.

- Full path: //OpenSplice/DDSI2EService/Compatibility
- Occurrences min-max: 0-1
- Child elements: AckNackNumbitsEmptySet, ArrivalOfDataAssertsPpAndEpLiveliness, AssumeRtiHasPmdEndpoints, ExplicitlyPublishQosSetToDefault, ManySocketsMode, RespondToRtiInitZeroAckWithInvalidHeartbeat, StandardsConformance

AckNackNumbitsEmptySet
----------------------

This element governs the representation of an acknowledgement message that does not also negatively-acknowledge some samples. If set to 0, the generated acknowledgements have an invalid form and will be reject by the strict and pedantic conformance modes, but several other implementation require this setting for smooth interoperation.

If set to 1, all acknowledgements sent by DDSI2E adhere the form of acknowledgement messages allowed by the standard, but this causes problems when interoperating with these other implementations. The strict and pedantic standards conformance modes always overrule an AckNackNumbitsEmptySet=0 to prevent the transmitting of invalid messages.

- Full path: //OpenSplice/DDSI2EService/Compatibility/AckNackNumbitsEmptySet
- Format: integer
- Default value: 0
- Occurrences min-max: 0-1

ArrivalOfDataAssertsPpAndEpLiveliness
-------------------------------------

When set to true, arrival of a message from a peer asserts liveliness of that peer. When set to false, only SPDP and explicit lease renewals have this effect.

- Full path: //OpenSplice/DDSI2EService/Compatibility/ArrivalOfDataAssertsPpAndEpLiveliness
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

AssumeRtiHasPmdEndpoints
------------------------

This option assumes ParticipantMessageData endpoints required by the liveliness protocol are present in RTI participants even when not properly advertised by the participant discovery protocol.

- Full path: //OpenSplice/DDSI2EService/Compatibility/AssumeRtiHasPmdEndpoints
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

ExplicitlyPublishQosSetToDefault
--------------------------------

This element specifies whether QoS settings set to default values are explicitly published in the discovery protocol. Implementations are to use the default value for QoS settings not published, which allows a significant reduction of the amount of data that needs to be exchanged for the discovery protocol, but this requires all implementations to adhere to the default values specified by the specifications.

When interoperability is required with an implementation that does not follow the specifications in this regard, setting this option to true will help.

- Full path: //OpenSplice/DDSI2EService/Compatibility/ExplicitlyPublishQosSetToDefault
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

ManySocketsMode
---------------

This option specifies whether a network socket will be created for each domain participant on a host. The specification seems to assume that each participant has a unique address, and setting this option will ensure this to be the case. This is not the defeault.

Disabling it slightly improves performance and reduces network traffic somewhat. It also causes the set of port numbers needed by DDSI2E to become predictable, which may be useful for firewall and NAT configuration.

- Full path: //OpenSplice/DDSI2EService/Compatibility/ManySocketsMode
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

RespondToRtiInitZeroAckWithInvalidHeartbeat
-------------------------------------------

This element allows a closer mimicking of the behaviour of some other DDSI implementations, albeit at the cost of generating even more invalid messages. Setting it to true ensures a Heartbeat can be sent at any time when a remote node requests one, setting it to false delays it until a valid one can be sent.

The latter is fully compliant with the specification, and no adverse effects have been observed. It is the default.

- Full path: //OpenSplice/DDSI2EService/Compatibility/RespondToRtiInitZeroAckWithInvalidHeartbeat
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

StandardsConformance
--------------------

This element sets the level of standards conformance of this instance of the DDSI2E Service. Stricter conformance typically means less interoperability with other implementations. Currently three modes are defined:

- *pedantic*: very strictly conform to the specification, ultimately for compliancy testing, but currently of little value because it adheres even to what will most likely turn out to be editing errors in the DDSI standard. Arguably, as long as no errata have been published it is the current text that is in effect, and that is what pedantic currently does.
- *strict*: a slightly less strict view of the standard than does pedantic: it follows the established behaviour where the standard is obviously in error.
- *lax*: attempt to provide the smoothest possible interoperability, anticipating future revisions of elements in the standard in areas that other implementations do not adhere to, even though there is no good reason not to.

The default setting is "lax".

- Full path: //OpenSplice/DDSI2EService/Compatibility/StandardsConformance
- Format: enumeration
- Default value: lax
- Valid values: lax, strict, pedantic
- Occurrences min-max: 0-1

Discovery
=========

The Discovery element allows specifying various parameters related to the discovery of peers.

- Full path: //OpenSplice/DDSI2EService/Discovery
- Occurrences min-max: 0-1
- Child elements: AdvertiseBuiltinTopicWriters, DSGracePeriod, DefaultMulticastAddress, DomainId, GenerateBuiltinTopics, LocalDiscoveryPartition, MaxAutoParticipantIndex, ParticipantIndex, SPDPInterval, SPDPMulticastAddress

AdvertiseBuiltinTopicWriters
----------------------------

This element controls whether or not DDSI2E advertises writers for the built-in topics from its discovery for backwards compatibility with older Vortex OpenSplice versions.

- Full path: //OpenSplice/DDSI2EService/Discovery/AdvertiseBuiltinTopicWriters
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

DSGracePeriod
-------------

This setting controls for how long endpoints discovered via a Cloud discovery service will survive after the discovery service disappeared, allowing reconnect without loss of data when the discovery service restarts (or another instance takes over).

Valid values are finite durations with an explicit unit or the keyword 'inf' for infinity. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2EService/Discovery/DSGracePeriod
- Format: string
- Default value: 30 s
- Occurrences min-max: 0-1

DefaultMulticastAddress
-----------------------

This element specifies the default multicast address for all traffic other than participant discovery packets. It defaults to Discovery/SPDPMulticastAddress.

- Full path: //OpenSplice/DDSI2EService/Discovery/DefaultMulticastAddress
- Format: string
- Default value: auto
- Occurrences min-max: 0-1

DomainId
--------

This element allows overriding of the DDS Domain Id that is used for DDSI2E.

- Full path: //OpenSplice/DDSI2EService/Discovery/DomainId
- Format: string
- Default value: default
- Occurrences min-max: 0-1

GenerateBuiltinTopics
---------------------

This element controls whether or not DDSI2E generates built-in topics from its discovery. When disabled, it relies on the durability service.

- Full path: //OpenSplice/DDSI2EService/Discovery/GenerateBuiltinTopics
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

LocalDiscoveryPartition
-----------------------

This element controls which partition is monitored by DDSI2E for built-in topics describing entities the it mirrors in DDSI.

- Full path: //OpenSplice/DDSI2EService/Discovery/LocalDiscoveryPartition
- Format: string
- Default value: __BUILT-IN PARTITION\__
- Occurrences min-max: 0-1

MaxAutoParticipantIndex
-----------------------

This element specifies the maximum DDSI participant index selected by this instance of the DDSI2E service if the Discovery/ParticipantIndex is "auto".

- Full path: //OpenSplice/DDSI2EService/Discovery/MaxAutoParticipantIndex
- Format: integer
- Default value: 9
- Occurrences min-max: 0-1

ParticipantIndex
----------------

This element specifies the DDSI participant index used by this instance of the DDSI2E service for discovery purposes. Only one such participant id is used, independent of the number of actual DomainParticipants on the node. It is either:

- *auto*: which will attempt to automatically determine an available participant index (see also Discovery/MaxAutoParticipantIndex), or
- a non-negative integer less than 120, or
- *none*:, which causes it to use arbitrary port numbers for unicast sockets which entirely removes the constraints on the participant index but makes unicast discovery impossible.

The default is *auto*. The participant index is part of the port number calculation and if predictable port numbers are needed and fixing the participant index has no adverse effects, it is recommended that the second be option be used.

- Full path: //OpenSplice/DDSI2EService/Discovery/ParticipantIndex
- Format: string
- Default value: auto
- Occurrences min-max: 0-1

Peers
-----

This element statically configures addresses for discovery.

Valid values are finite durations with an explicit unit or the keyword 'inf' for infinity. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2EService/Discovery/Peers
- Occurrences min-max: 0-1

Group
^^^^^

This element statically configures a fault tolerant group of addresses for discovery. Each member of the group is tried in sequence until one succeeds.

- Full path: //OpenSplice/DDSI2EService/Discovery/Peers/Group
- Occurrences min-max: 0-*

Peer
~~~~

This element statically configures an addresses for discovery.

- Full path: //OpenSplice/DDSI2EService/Discovery/Peers/Group/Peer
- Occurrences min-max: 0-*
- Required attributes: Address

Address
+++++++

This element specifies an IP address to which discovery packets must be sent, in addition to the default multicast address (see also General/AllowMulticast). Both a hostnames and a numerical IP address is accepted; the hostname or IP address may be suffixed with :PORT to explicitly set the port to which it must be sent. Multiple Peers may be specified.

- Full path: //OpenSplice/DDSI2EService/Discovery/Peers/Group/Peer[@Address]
- Format: string
- Default value: n/a
- Required: true

Peer
^^^^

This element statically configures an addresses for discovery.

- Full path: //OpenSplice/DDSI2EService/Discovery/Peers/Peer
- Occurrences min-max: 0-*
- Required attributes: Address

Address
~~~~~~~

This element specifies an IP address to which discovery packets must be sent, in addition to the default multicast address (see also General/AllowMulticast). Both a hostnames and a numerical IP address is accepted; the hostname or IP address may be suffixed with :PORT to explicitly set the port to which it must be sent. Multiple Peers may be specified.

- Full path: //OpenSplice/DDSI2EService/Discovery/Peers/Peer[@Address]
- Format: string
- Default value: n/a
- Required: true

Ports
-----

The Ports element allows specifying various parameters related to the port numbers used for discovery. These all have default values specified by the DDSI 2.1 (and 2.2) specification and rarely need to be changed.

- Full path: //OpenSplice/DDSI2EService/Discovery/Ports
- Occurrences min-max: 0-1
- Child elements: Base, DomainGain, MulticastDataOffset, MulticastMetaOffset, ParticipantGain, UnicastDataOffset, UnicastMetaOffset

Base
^^^^

This element specifies the base port number (refer to the DDSI 2.1 or 2.2 specification, section 9.6.1, constant PB).

- Full path: //OpenSplice/DDSI2EService/Discovery/Ports/Base
- Format: integer
- Default value: 7400
- Valid values: 1 / 65535
- Occurrences min-max: 0-1

DomainGain
^^^^^^^^^^

This element specifies the domain gain, relating domain ids to sets of port numbers (refer to the DDSI 2.1 or 2.2 specification, section 9.6.1, constant DG).

- Full path: //OpenSplice/DDSI2EService/Discovery/Ports/DomainGain
- Format: integer
- Default value: 250
- Occurrences min-max: 0-1

MulticastDataOffset
^^^^^^^^^^^^^^^^^^^

This element specifies the port number for multicast meta traffic (refer to the DDSI 2.1 or 2.2 specification, section 9.6.1, constant d2).

- Full path: //OpenSplice/DDSI2EService/Discovery/Ports/MulticastDataOffset
- Format: integer
- Default value: 1
- Occurrences min-max: 0-1

MulticastMetaOffset
^^^^^^^^^^^^^^^^^^^

This element specifies the port number for multicast meta traffic (refer to the DDSI 2.1 or 2.2 specification, section 9.6.1, constant d0).

- Full path: //OpenSplice/DDSI2EService/Discovery/Ports/MulticastMetaOffset
- Format: integer
- Default value: 0
- Occurrences min-max: 0-1

ParticipantGain
^^^^^^^^^^^^^^^

This element specifies the participant gain, relating p0, articipant index to sets of port numbers (refer to the DDSI 2.1 or 2.2 specification, section 9.6.1, constant PG).

- Full path: //OpenSplice/DDSI2EService/Discovery/Ports/ParticipantGain
- Format: integer
- Default value: 2
- Occurrences min-max: 0-1

UnicastDataOffset
^^^^^^^^^^^^^^^^^

This element specifies the port number for unicast meta traffic (refer to the DDSI 2.1 or 2.2 specification, section 9.6.1, constant d3).

- Full path: //OpenSplice/DDSI2EService/Discovery/Ports/UnicastDataOffset
- Format: integer
- Default value: 11
- Occurrences min-max: 0-1

UnicastMetaOffset
^^^^^^^^^^^^^^^^^

This element specifies the port number for unicast meta traffic (refer to the DDSI 2.1 or 2.2 specification, section 9.6.1, constant d1).

- Full path: //OpenSplice/DDSI2EService/Discovery/Ports/UnicastMetaOffset
- Format: integer
- Default value: 10
- Occurrences min-max: 0-1

SPDPInterval
------------

This element specifies the interval between spontaneous transmissions of participant discovery packets.

The unit must be specified explicitly. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2EService/Discovery/SPDPInterval
- Format: string
- Default value: 30 s
- Valid values: 0 / 1hr
- Occurrences min-max: 0-1

SPDPMulticastAddress
--------------------

This element specifies the multicast address that is used as the destination for the participant discovery packets. In IPv4 mode the default is the (standardised) 239.255.0.1, in IPv6 mode it becomes ff02::ffff:239.255.0.1, which is a non-standardised link-local multicast address.

- Full path: //OpenSplice/DDSI2EService/Discovery/SPDPMulticastAddress
- Format: string
- Default value: 239.255.0.1
- Occurrences min-max: 0-1

General
=======

The General element specifies overall DDSI2E service settings.

- Full path: //OpenSplice/DDSI2EService/General
- Occurrences min-max: 0-1
- Child elements: AllowMulticast, CoexistWithNativeNetworking, DontRoute, EnableMulticastLoopback, ExternalNetworkAddress, ExternalNetworkMask, FragmentSize, MaxMessageSize, MulticastRecvNetworkInterfaceAddresses, MulticastTimeToLive, NetworkInterfaceAddress, StartupModeCoversTransient, StartupModeDuration, UseIPv6

AllowMulticast
--------------

This element controls whether DDSI2E uses multicasts for data traffic.

It is a comma-separated list of some of the following keywords: "spdp", "asm", "ssm", or either of "false" or "true".


- *spdp*: enables the use of ASM (any-source multicast) for participant discovery
- *asm*: enables the use of ASM for all traffic (including SPDP)
- *ssm*: enables the use of SSM (source-specific multicast) for all non-SPDP traffic (if supported)


When set to "false" all multicasting is disabled. The default, "true" enables full use of multicasts. Listening for multicasts can be controlled by General/MulticastRecvNetworkInterfaceAddresses.

- Full path: //OpenSplice/DDSI2EService/General/AllowMulticast
- Format: string
- Default value: true
- Occurrences min-max: 0-1

CoexistWithNativeNetworking
---------------------------

This element specifies whether the DDSI2E service operates in conjunction with the Vortex OpenSplice RT Networking service. When "false", the DDSI2E service will take care of all communications, including those between Vortex OpenSplice nodes; when "true", the DDSI2E service only communicates with DDS implementations other than Vortex OpenSplice. In this case the RT Networking service should be configured as well.

- Full path: //OpenSplice/DDSI2EService/General/CoexistWithNativeNetworking
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

DontRoute
---------

This element allows setting the SO_DONTROUTE option for outgoing packets, to bypass the local routing tables. This is generally useful only when the routing tables cannot be trusted, which is highly unusual.

- Full path: //OpenSplice/DDSI2EService/General/DontRoute
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

EnableMulticastLoopback
-----------------------

This element specifies whether DDSI2E allows IP multicast packets to be visible to all DDSI participants in the same node, including itself. It must be "true" for intra-node multicast communications, but if a node runs only a single DDSI2E service and does not host any other DDSI-capable programs, it should be set to "false" for improved performance.

- Full path: //OpenSplice/DDSI2EService/General/EnableMulticastLoopback
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

ExternalNetworkAddress
----------------------

This element allows explicitly overruling the network address DDSI2E advertises in the discovery protocol, which by default is the address of the preferred network interface (General/NetworkInterfaceAddress), to allow DDSI2E to communicate across a Network Address Translation (NAT) device.

- Full path: //OpenSplice/DDSI2EService/General/ExternalNetworkAddress
- Format: string
- Default value: auto
- Occurrences min-max: 0-1

ExternalNetworkMask
-------------------

This element specifies the network mask of the external network address. This element is relevant only when an external network address (General/ExternalNetworkAddress) is explicitly configured. In this case locators received via the discovery protocol that are within the same external subnet (as defined by this mask) will be translated to an internal address by replacing the network portion of the external address with the corresponding portion of the preferred network interface address. This option is IPv4-only.

- Full path: //OpenSplice/DDSI2EService/General/ExternalNetworkMask
- Format: string
- Default value: 0.0.0.0
- Occurrences min-max: 0-1

FragmentSize
------------

This element specifies the size of DDSI sample fragments generated by DDSI2E. Samples larger than FragmentSize are fragmented into fragments of FragmentSize bytes each, except the last one, which may be smaller. The DDSI spec mandates a minimum fragment size of 1025 bytes, but DDSI2E will do whatever size is requested, accepting fragments of which the size is at least the minimum of 1025 and FragmentSize.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2EService/General/FragmentSize
- Format: string
- Default value: 1280 B
- Occurrences min-max: 0-1

MaxMessageSize
--------------

This element specifies the maximum size of the UDP payload that DDSI2E will generate. DDSI2E will try to maintain this limit within the bounds of the DDSI specification, which means that in some cases (especially for very low values of MaxMessageSize) larger payloads may sporadically be observed (currently up to 1192 B).

On some networks it may be necessary to set this item to keep the packetsize below the MTU to prevent IP fragmentation. In those cases, it is generally advisable to also consider reducing Internal/FragmentSize.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2EService/General/MaxMessageSize
- Format: string
- Default value: 4096 B
- Occurrences min-max: 0-1

MulticastRecvNetworkInterfaceAddresses
--------------------------------------

This element specifies on which network interfaces DDSI2E listens to multicasts. The following options are available:


- *all*: listen for multicasts on all multicast-capable interfaces; or
- *any*: listen for multicasts on the operating system default interface; or
- *preferred*: listen for multicasts on the preferred interface (General/NetworkInterfaceAddress); or
- *none*: does not listen for multicasts on any interface; or
- a comma-separated list of network addresses: configures DDSI2E to listen for multicasts on all of the listed addresses.


If DDSI2E is in IPv6 mode and the address of the preferred network interface is a link-local address, "all" is treated as a synonym for "preferred" and a comma-separated list is treated as "preferred" if it contains the preferred interface and as "none" if not.

- Full path: //OpenSplice/DDSI2EService/General/MulticastRecvNetworkInterfaceAddresses
- Format: string
- Default value: preferred
- Occurrences min-max: 0-1

MulticastTimeToLive
-------------------

This element specifies the time-to-live setting for outgoing multicast packets.

- Full path: //OpenSplice/DDSI2EService/General/MulticastTimeToLive
- Format: integer
- Default value: 32
- Valid values: 0 / 255
- Occurrences min-max: 0-1

NetworkInterfaceAddress
-----------------------

This element specifies the preferred network interface for use by DDSI2E. The preferred network interface determines the IP address that DDSI2E advertises in the discovery protocol (but see also General/ExternalNetworkAddress), and is also the only interface over which multicasts are transmitted. The interface can be identified by its IP address, network interface name or network portion of the address. If the value "auto" is entered here, DDSI2E will select what it considers the most suitable interface.

- Full path: //OpenSplice/DDSI2EService/General/NetworkInterfaceAddress
- Format: string
- Default value: auto
- Occurrences min-max: 0-1

StartupModeCoversTransient
--------------------------

This element configures whether startup-mode should also cover transient and persistent data, for configurations where the durability service does not take care of it. Configurations without defined merge policies best leave this enabled.

- Full path: //OpenSplice/DDSI2EService/General/StartupModeCoversTransient
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

StartupModeDuration
-------------------

This element specifies how long the DDSI2E remains in its "startup" mode. While in "startup" mode all volatile reliable data published on the local node is retained as-if it were transient-local data, allowing existing readers on remote nodes to obtain the data even though discovering them takes some time. Best-effort data by definition need not arrive, and transient and persistent data are covered by the durability service.

Once the system is stable, DDSI2E keeps track of the existence of remote readers whether or not matching writers exist locally, avoiding this discovery delay and ensuring this is merely a node startup issue.

Setting General/StartupModeDuration to 0s will disable it.

The unit must be specified explicitly. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2EService/General/StartupModeDuration
- Format: string
- Default value: 2 s
- Valid values: 0 / 60000
- Occurrences min-max: 0-1

UseIPv6
-------

This element can be used to DDSI2E use IPv6 instead of IPv4. This is currently an either/or switch.

- Full path: //OpenSplice/DDSI2EService/General/UseIPv6
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

Internal
========

The Internal elements deal with a variety of settings that evolving and that are not necessarily fully supported. For the vast majority of the Internal settings, the functionality per-se is supported, but the right to change the way the options control the functionality is reserved. This includes renaming or moving options.

- Full path: //OpenSplice/DDSI2EService/Internal
- Occurrences min-max: 0-1
- Child elements: AccelerateRexmitBlockSize, AggressiveKeepLastWhc, AggressiveKeepLastWhc, AssumeMulticastCapable, AutoReschedNackDelay, AuxiliaryBandwidthLimit, BuiltinEndpointSet, ConservativeBuiltinReaderStartup, DDSI2DirectMaxThreads, DefragReliableMaxSamples, DefragUnreliableMaxSamples, DeliveryQueueMaxSamples, ForwardAllMessages, ForwardRemoteData, GenerateKeyhash, HeartbeatInterval, LateAckMode, LeaseDuration, LegacyFragmentation, LogStackTraces, MaxParticipants, MaxQueuedRexmitBytes, MaxQueuedRexmitMessages, MaxSampleSize, MeasureHbToAckLatency, MinimumSocketReceiveBufferSize, MinimumSocketSendBufferSize, MirrorRemoteEntities, MonitorPort, NackDelay, PreEmptiveAckDelay, PrimaryReorderMaxSamples, PrioritizeRetransmit, RediscoveryBlacklistDuration, ResponsivenessTimeout, RetransmitMerging, RetransmitMergingPeriod, RetryOnRejectBestEffort, RetryOnRejectDuration, SPDPResponseMaxDelay, ScheduleTimeRounding, SecondaryReorderMaxSamples, SquashParticipants, SuppressSPDPMulticast, SynchronousDeliveryLatencyBound, SynchronousDeliveryPriorityThreshold, UnicastResponseToSPDPMessages, UseMulticastIfMreqn, WriterLingerDuration

AccelerateRexmitBlockSize
-------------------------

**Internal** Proxy readers that are assumed to sill be retrieving historical data get this many samples retransmitted when they NACK something, even if some of these samples have sequence numbers outside the set covered by the NACK.

- Full path: //OpenSplice/DDSI2EService/Internal/AccelerateRexmitBlockSize
- Format: integer
- Default value: 0
- Occurrences min-max: 0-1

AggressiveKeepLastWhc
---------------------

**Internal** This element controls whether to drop a reliable sample from a DDSI2E WHC before all readers have acknowledged it as soon as a later sample becomes available. It only affects DCPS data writers with a history QoS setting of KEEP_LAST with depth 1. The default setting, *false*, mimics the behaviour of the Vortex OpenSplice RT networking and is necessary to make the behaviour of wait_for_acknowledgements() consistent across the networking services.

- Full path: //OpenSplice/DDSI2EService/Internal/AggressiveKeepLastWhc
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

AggressiveKeepLastWhc
---------------------

**Internal** This element controls whether to drop a reliable sample from a DDSI2E WHC before all readers have acknowledged it as soon as a later sample becomes available. It only affects DCPS data writers with a history QoS setting of KEEP_LAST with depth 1. The default setting, *false*, mimics the behaviour of the Vortex OpenSplice RT networking and is necessary to make the behaviour of wait_for_acknowledgements() consistent across the networking services.

- Full path: //OpenSplice/DDSI2EService/Internal/AggressiveKeepLastWhc
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

AssumeMulticastCapable
----------------------

**Internal** This element controls which network interfaces are assumed to be capable of multicasting even when the interface flags returned by the operating system state it is not (this provides a workaround for some platforms). It is a comma-separated lists of patterns (with ? and \* wildcards) against which the interface names are matched.

- Full path: //OpenSplice/DDSI2EService/Internal/AssumeMulticastCapable
- Format: string
- Occurrences min-max: 0-1

AutoReschedNackDelay
--------------------

**Internal** This setting controls the interval with which a reader will continue NACK'ing missing samples in the absence of a response from the writer, as a protection mechanism against writers incorrectly stopping the sending of HEARTBEAT messages.

Valid values are finite durations with an explicit unit or the keyword 'inf' for infinity. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2EService/Internal/AutoReschedNackDelay
- Format: string
- Default value: 1 s
- Occurrences min-max: 0-1

AuxiliaryBandwidthLimit
-----------------------

**Internal** This element specifies the maximum transmit rate of auxiliary traffic not bound to a specific channel, such as discovery traffic, as well as auxiliary traffic related to a certain channel if that channel has elected to share this global AuxiliaryBandwidthLimit. Bandwidth limiting uses a leaky bucket scheme. The default value "inf" means DDSI2E imposes no limitation, the underlying operating system and hardware will likely limit the maimum transmit rate.

The unit must be specified explicitly. Recognised units: *X*b/s, *X*bps for bits/s or *X*B/s, *X*Bps for bytes/s; where *X* is an optional prefix: k for 10 :sup:`3`, Ki for 2 :sup:`10`, M for 10 :sup:`6`, Mi for 2 :sup:`20`, G for 10 :sup:`9`, Gi for 2 :sup:`30`.

- Full path: //OpenSplice/DDSI2EService/Internal/AuxiliaryBandwidthLimit
- Format: string
- Default value: inf
- Occurrences min-max: 0-1

BuiltinEndpointSet
------------------

**Internal** This element controls which participants will have which built-in endpoints for the discovery and liveliness protocols. Valid values are:

- *full*: all participants have all endpoints;
- *writers*: all participants have the writers, but just one has the readers;
- *minimal*: only one participant has built-in endpoints.

The default is *writers*, as this is thought to be compliant and reasonably efficient. *Minimal* may or may not be compliant but is most efficient, and *full* is inefficient but certain to be compliant. See also Internal/ConservativeBuiltinReaderStartup.

- Full path: //OpenSplice/DDSI2EService/Internal/BuiltinEndpointSet
- Format: enumeration
- Default value: writers
- Valid values: full, writers, minimal
- Occurrences min-max: 0-1

ConservativeBuiltinReaderStartup
--------------------------------

**Internal** This element forces all DDSI2E built-in discovery-related readers to request all historical data, instead of just one for each "topic". There is no indication that any of the current DDSI implementations requires changing of this setting, but it is conceivable that an implementation might track which participants have been informed of the existence of endpoints and which have not been, refusing communication with those that have "can't" know.

Should it be necessary to hide DDSI2E's shared discovery behaviour, set this to *true* and Internal/BuiltinEndpointSet to *full*.

- Full path: //OpenSplice/DDSI2EService/Internal/ConservativeBuiltinReaderStartup
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

ControlTopic
------------

**Internal** The ControlTopic element allows configured whether DDSI2E provides a special control interface via a predefined topic or not.

- Full path: //OpenSplice/DDSI2EService/Internal/ControlTopic
- Occurrences min-max: 0-1
- Child elements: Deaf, Mute
- Optional attributes: enable, initialreset

enable
^^^^^^

**Internal** This attribute controls whether the DDSI2E control topic is defined and acted upon by DDSI2

- Full path: //OpenSplice/DDSI2EService/Internal/ControlTopic[@enable]
- Format: boolean
- Default value: false
- Required: false

initialreset
^^^^^^^^^^^^

**Internal** This attribute sets the time until the deaf and mute settings are automatically reset to false

Valid values are finite durations with an explicit unit or the keyword 'inf' for infinity. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2EService/Internal/ControlTopic[@initialreset]
- Format: string
- Default value: inf
- Required: false

Deaf
^^^^

**Internal** This element controls whether DDSI2E defaults to deaf mode or to normal mode. This controls both the initial behaviour and what behaviour it auto-reverts to.

- Full path: //OpenSplice/DDSI2EService/Internal/ControlTopic/Deaf
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

Mute
^^^^

**Internal** This element controls whether DDSI2E defaults to mute mode or to normal mode. This controls both the initial behaviour and what behaviour it auto-reverts to.

- Full path: //OpenSplice/DDSI2EService/Internal/ControlTopic/Mute
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

DDSI2DirectMaxThreads
---------------------

**Internal** This element sets the maximum number of extra threads for an experimental, undocumented and unsupported direct mode.

- Full path: //OpenSplice/DDSI2EService/Internal/DDSI2DirectMaxThreads
- Format: integer
- Default value: 1
- Occurrences min-max: 0-1

DefragReliableMaxSamples
------------------------

**Internal** This element sets the maximum number of samples that can be defragmented simultaneously for a reliable writer. This has to be large enough to handle retransmissions of historical data in addition to new samples.

- Full path: //OpenSplice/DDSI2EService/Internal/DefragReliableMaxSamples
- Format: integer
- Default value: 16
- Occurrences min-max: 0-1

DefragUnreliableMaxSamples
--------------------------

**Internal** This element sets the maximum number of samples that can be defragmented simultaneously for a best-effort writers.

- Full path: //OpenSplice/DDSI2EService/Internal/DefragUnreliableMaxSamples
- Format: integer
- Default value: 4
- Occurrences min-max: 0-1

DeliveryQueueMaxSamples
-----------------------

**Internal** This element controls the Maximum size of a delivery queue, expressed in samples. Once a delivery queue is full, incoming samples destined for that queue are dropped until space becomes available again.

- Full path: //OpenSplice/DDSI2EService/Internal/DeliveryQueueMaxSamples
- Format: integer
- Default value: 256
- Occurrences min-max: 0-1

ForwardAllMessages
------------------

**Internal** Forward all messages from a writer, rather than trying to forward each sample only once. The default of trying to forward each sample only once filters out duplicates for writers in multiple partitions under nearly all circumstances, but may still publish the odd duplicate. Note: the current implementation also can lose in contrived test cases, that publish more than 2\*\*32 samples using a single data writer in conjunction with carefully controlled management of the writer history via cooperating local readers.

- Full path: //OpenSplice/DDSI2EService/Internal/ForwardAllMessages
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

ForwardRemoteData
-----------------

**Internal** This element controls whether DDSI2E forwards data received from other network services in the domain.

- Full path: //OpenSplice/DDSI2EService/Internal/ForwardRemoteData
- Format: enumeration
- Default value: default
- Valid values: false, true, default
- Occurrences min-max: 0-1

GenerateKeyhash
---------------

**Internal** When true, include keyhashes in outgoing data for topics with keys.

- Full path: //OpenSplice/DDSI2EService/Internal/GenerateKeyhash
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

HeartbeatInterval
-----------------

**Internal** This element sets the base interval for the asynchronous, periodic writer heartbeats when unacknowledged data is present in its writer history cache. The actual interval is dynamically adjusted, the attributes of this element allow further configuration.

Valid values are finite durations with an explicit unit or the keyword 'inf' for infinity. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2EService/Internal/HeartbeatInterval
- Format: string
- Default value: 100 ms
- Occurrences min-max: 0-1
- Optional attributes: max, min, minsched

max
^^^

**Internal** This attribute sets the maximum interval for periodic heartbeats.

Valid values are finite durations with an explicit unit or the keyword 'inf' for infinity. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2EService/Internal/HeartbeatInterval[@max]
- Format: string
- Default value: 8 s
- Required: false

min
^^^

**Internal** This attribute sets the minimum interval that must have passed since the most recent heartbeat from a writer, before another asynchronous (not directly related to writing) will be sent.

Valid values are finite durations with an explicit unit or the keyword 'inf' for infinity. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2EService/Internal/HeartbeatInterval[@min]
- Format: string
- Default value: 5 ms
- Required: false

minsched
^^^^^^^^

**Internal** This attribute sets the minimum interval for periodic heartbeats. Other events may still cause heartbeats to go out.

Valid values are finite durations with an explicit unit or the keyword 'inf' for infinity. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2EService/Internal/HeartbeatInterval[@minsched]
- Format: string
- Default value: 20 ms
- Required: false

LateAckMode
-----------

**Internal** Ack a sample only when it has been delivered, instead of when committed to delivering it.

- Full path: //OpenSplice/DDSI2EService/Internal/LateAckMode
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

LeaseDuration
-------------

**Internal** This setting controls the default participant lease duration. 
The unit must be specified explicitly. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2EService/Internal/LeaseDuration
- Format: string
- Default value: 0 s
- Valid values: 0 / 1hr
- Occurrences min-max: 0-1

LegacyFragmentation
-------------------

**Internal** This option enables a backwards-compatible, non-compliant setting and interpretation of the control flags in fragmented data messages. To be enabled *only* when requiring interoperability between compliant and non-compliant versions of DDSI2E for large messages.

- Full path: //OpenSplice/DDSI2EService/Internal/LegacyFragmentation
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

LogStackTraces
--------------

**Internal** This element controls whether or not to write stack traces to the DDSI2 trace when a thread fails to make progress (on select platforms only).

- Full path: //OpenSplice/DDSI2EService/Internal/LogStackTraces
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

MaxParticipants
---------------

**Internal** This elements configures the maximum number of DCPS domain participants this DDSI2E instance is willing to service. 0 is unlimited.

- Full path: //OpenSplice/DDSI2EService/Internal/MaxParticipants
- Format: integer
- Default value: 0
- Occurrences min-max: 0-1

MaxQueuedRexmitBytes
--------------------

**Internal** This setting limits the maximum number of bytes queued for retransmission. The default value of 0 is unlimited unless an AuxiliaryBandwidthLimit has been set, in which case it becomes NackDelay \* AuxiliaryBandwidthLimit. It must be large enough to contain the largest sample that may need to be retransmitted.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2EService/Internal/MaxQueuedRexmitBytes
- Format: string
- Default value: 50 kB
- Occurrences min-max: 0-1

MaxQueuedRexmitMessages
-----------------------

**Internal** This settings limits the maximum number of samples queued for retransmission.

- Full path: //OpenSplice/DDSI2EService/Internal/MaxQueuedRexmitMessages
- Format: integer
- Default value: 200
- Occurrences min-max: 0-1

MaxSampleSize
-------------

**Internal** This setting controls the maximum (CDR) serialised size of samples that DDSI2E will forward in either direction. Samples larger than this are discarded with a warning.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2EService/Internal/MaxSampleSize
- Format: string
- Default value: 2147483647 B
- Occurrences min-max: 0-1

MeasureHbToAckLatency
---------------------

**Internal** This element enables heartbeat-to-ack latency among DDSI2E services by prepending timestamps to Heartbeat and AckNack messages and calculating round trip times. This is non-standard behaviour. The measured latencies are quite noisy and are currently not used anywhere.

- Full path: //OpenSplice/DDSI2EService/Internal/MeasureHbToAckLatency
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

MinimumSocketReceiveBufferSize
------------------------------

**Internal** This setting controls the minimum size of socket receive buffers. The operating system provides some size receive buffer upon creation of the socket, this option can be used to increase the size of the buffer beyond that initially provided by the operating system. If the buffer size cannot be increased to the specified size, an error is reported.

The default setting is the word "default", which means DDSI2E will attempt to increase the buffer size to 1MB, but will silently accept a smaller buffer should that attempt fail.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2EService/Internal/MinimumSocketReceiveBufferSize
- Format: string
- Default value: default
- Occurrences min-max: 0-1

MinimumSocketSendBufferSize
---------------------------

**Internal** This setting controls the minimum size of socket send buffers. This setting can only increase the size of the send buffer, if the operating system by default creates a larger buffer, it is left unchanged.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2EService/Internal/MinimumSocketSendBufferSize
- Format: string
- Default value: 64 KiB
- Occurrences min-max: 0-1

MirrorRemoteEntities
--------------------

**Internal** This element controls whether DDSI2 mirrors all entities in the domain in DDSI or only local ones. Default is to discover remote ones iff General/LocalDiscoveryPartition is not the built-in partition.

- Full path: //OpenSplice/DDSI2EService/Internal/MirrorRemoteEntities
- Format: enumeration
- Default value: default
- Valid values: false, true, default
- Occurrences min-max: 0-1

MonitorPort
-----------

**Internal** This element allows configuring a service that dumps a text description of part the internal state to TCP clients. By default (-1), this is disabled; specifying 0 means a kernel-allocated port is used; a positive number is used as the TCP port number.

- Full path: //OpenSplice/DDSI2EService/Internal/MonitorPort
- Format: integer
- Default value: -1
- Occurrences min-max: 0-1

NackDelay
---------

**Internal** This setting controls the delay between receipt of a HEARTBEAT indicating missing samples and a NACK (ignored when the HEARTBEAT requires an answer). However, no NACK is sent if a NACK had been scheduled already for a response earlier than the delay requests: then that NACK will incorporate the latest information.

The unit must be specified explicitly. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2EService/Internal/NackDelay
- Format: string
- Default value: 10 ms
- Valid values: 0 / 1hr
- Occurrences min-max: 0-1

PreEmptiveAckDelay
------------------

**Internal** This setting controls the delay between the discovering a remote writer and sending a pre-emptive AckNack to discover the range of data available.

The unit must be specified explicitly. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2EService/Internal/PreEmptiveAckDelay
- Format: string
- Default value: 10 ms
- Valid values: 0 / 1hr
- Occurrences min-max: 0-1

PrimaryReorderMaxSamples
------------------------

**Internal** This element sets the maximum size in samples of a primary re-order administration. Each proxy writer has one primary re-order administration to buffer the packet flow in case some packets arrive out of order. Old samples are forwarded to secondary re-order administrations associated with readers in need of historical data.

- Full path: //OpenSplice/DDSI2EService/Internal/PrimaryReorderMaxSamples
- Format: integer
- Default value: 64
- Occurrences min-max: 0-1

PrioritizeRetransmit
--------------------

**Internal** This element controls whether retransmits are prioritized over new data, speeding up recovery.

- Full path: //OpenSplice/DDSI2EService/Internal/PrioritizeRetransmit
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

RediscoveryBlacklistDuration
----------------------------

**Internal** This element controls for how long a remote participant that was previously deleted will remain on a blacklist to prevent rediscovery, giving the software on a node time to perform any cleanup actions it needs to do. To some extent this delay is required internally by DDSI2E, but in the default configuration with the 'enforce' attribute set to false, DDSI2E will reallow rediscovery as soon as it has cleared its internal administration. Setting it to too small a value may result in the entry being pruned from the blacklist before DDSI2E is ready, it is therefore recommended to set it to at least several seconds.

Valid values are finite durations with an explicit unit or the keyword 'inf' for infinity. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2EService/Internal/RediscoveryBlacklistDuration
- Format: string
- Default value: 10s
- Occurrences min-max: 0-1
- Optional attributes: enforce

enforce
^^^^^^^

**Internal** This attribute controls whether the configured time during which recently deleted participants will not be rediscovered (i.e., "black listed") is enforced and following complete removal of the participant in DDSI2E, or whether it can be rediscovered earlier provided all traces of that participant have been removed already.

- Full path: //OpenSplice/DDSI2EService/Internal/RediscoveryBlacklistDuration[@enforce]
- Format: boolean
- Default value: false
- Required: false

ResponsivenessTimeout
---------------------

**Internal** This element controls for how long an unresponsive reader can block the transmit thread by failing to acknowledge data when a writer's DDSI2E write cache is full. If after this time the writer's cache has not shrunk to below the low-water mark, the reader is considered unresponsive and degraded to unreliable. It will be restored to reliable service once it resumes acknowledging samples.

Valid values are finite durations with an explicit unit or the keyword 'inf' for infinity. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2EService/Internal/ResponsivenessTimeout
- Format: string
- Default value: inf
- Occurrences min-max: 0-1

RetransmitMerging
-----------------

**Internal** This elements controls the addressing and timing of retransmits. Possible values are:

- *never*: retransmit only to the NACK-ing reader;
- *adaptive*: attempt to combine retransmits needed for reliability, but send historical (transient-local) data to the requesting reader only;
- *always*: do not distinguish between different causes, always try to merge.

The default is *adaptive*. See also Internal/RetransmitMergingPeriod.

- Full path: //OpenSplice/DDSI2EService/Internal/RetransmitMerging
- Format: enumeration
- Default value: adaptive
- Valid values: never, adaptive, always
- Occurrences min-max: 0-1

RetransmitMergingPeriod
-----------------------

**Internal** This setting determines the size of the time window in which a NACK of some sample is ignored because a retransmit of that sample has been multicasted too recently. This setting has no effect on unicasted retransmits.

See also Internal/RetransmitMerging.

The unit must be specified explicitly. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2EService/Internal/RetransmitMergingPeriod
- Format: string
- Default value: 5 ms
- Valid values: 0 / 1s
- Occurrences min-max: 0-1

RetryOnRejectBestEffort
-----------------------

**Internal** Whether or not to locally retry pushing a received best-effort sample into the reader caches when resource limits are reached.

- Full path: //OpenSplice/DDSI2EService/Internal/RetryOnRejectBestEffort
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

RetryOnRejectDuration
---------------------

**Internal** How long to keep locally retrying pushing a received sample into the reader caches when resource limits are reached. Default is dependent on Internal/LateAckMode: if the latter is false, it is 80% of Internal/ResponsivenessTimeout, otherwise it is 0.

Valid values are finite durations with an explicit unit or the keyword 'inf' for infinity. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2EService/Internal/RetryOnRejectDuration
- Format: string
- Default value: default
- Occurrences min-max: 0-1

SPDPResponseMaxDelay
--------------------

**Internal** Maximum pseudo-random delay in milliseconds between discovering a remote participant and responding to it.

The unit must be specified explicitly. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2EService/Internal/SPDPResponseMaxDelay
- Format: string
- Default value: 0 ms
- Valid values: 0 / 1s
- Occurrences min-max: 0-1

ScheduleTimeRounding
--------------------

**Internal** This setting allows the timing of scheduled events to be rounded up so that more events can be handled in a single cycle of the event queue. The default is 0 and causes no rounding at all, i.e. are scheduled exactly, whereas a value of 10ms would mean that events are rounded up to the nearest 10 milliseconds.

The unit must be specified explicitly. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2EService/Internal/ScheduleTimeRounding
- Format: string
- Default value: 0 ms
- Valid values: 0 / 1hr
- Occurrences min-max: 0-1

SecondaryReorderMaxSamples
--------------------------

**Internal** This element sets the maximum size in samples of a secondary re-order administration. The secondary re-order administration is per reader in need of historical data.

- Full path: //OpenSplice/DDSI2EService/Internal/SecondaryReorderMaxSamples
- Format: integer
- Default value: 16
- Occurrences min-max: 0-1

SquashParticipants
------------------

**Internal** This element controls whether DDSI2E advertises all the domain participants it serves in DDSI (when set to *false*), or rather only one domain participant (the one corresponding to the DDSI2E process; when set to *true*). In the latter case DDSI2E becomes the virtual owner of all readers and writers of all domain participants, dramatically reducing discovery traffic (a similar effect can be obtained by setting Internal/BuiltinEndpointSet to "minimal" but with less loss of information).

- Full path: //OpenSplice/DDSI2EService/Internal/SquashParticipants
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

SuppressSPDPMulticast
---------------------

**Internal** The element controls whether the mandatory multicasting of the participant discovery packets occurs. Completely disabling multicasting requires this element be set to *true*, and generally requires explicitly listing peers to ping for unicast discovery.

See also General/AllowMulticast.

- Full path: //OpenSplice/DDSI2EService/Internal/SuppressSPDPMulticast
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

SynchronousDeliveryLatencyBound
-------------------------------

**Internal** This element controls whether samples sent by a writer with QoS settings transport_priority >= SynchronousDeliveryPriorityThreshold and a latency_budget at most this element's value will be delivered synchronously from the "recv" thread, all others will be delivered asynchronously through delivery queues. This reduces latency at the expense of aggregate bandwidth.

Valid values are finite durations with an explicit unit or the keyword 'inf' for infinity. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2EService/Internal/SynchronousDeliveryLatencyBound
- Format: string
- Default value: inf
- Occurrences min-max: 0-1

SynchronousDeliveryPriorityThreshold
------------------------------------

**Internal** This element controls whether samples sent by a writer with QoS settings latency_budget <= SynchronousDeliveryLatencyBound and transport_priority greater than or equal to this element's value will be delivered synchronously from the "recv" thread, all others will be delivered asynchronously through delivery queues. This reduces latency at the expense of aggregate bandwidth.

- Full path: //OpenSplice/DDSI2EService/Internal/SynchronousDeliveryPriorityThreshold
- Format: integer
- Default value: 0
- Occurrences min-max: 0-1

Test
----

**Internal** Testing options.

- Full path: //OpenSplice/DDSI2EService/Internal/Test
- Occurrences min-max: 0-1
- Child elements: XmitLossiness

XmitLossiness
^^^^^^^^^^^^^

**Internal** This element controls the fraction of outgoing packets to drop, specified as samples per thousand.

- Full path: //OpenSplice/DDSI2EService/Internal/Test/XmitLossiness
- Format: integer
- Default value: 0
- Occurrences min-max: 0-1

UnicastResponseToSPDPMessages
-----------------------------

**Internal** This element controls whether the response to a newly discovered participant is sent as a unicasted SPDP packet, instead of rescheduling the periodic multicasted one. There is no known benefit to setting this to *false*.

- Full path: //OpenSplice/DDSI2EService/Internal/UnicastResponseToSPDPMessages
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

UseMulticastIfMreqn
-------------------

**Internal** Do not use.

- Full path: //OpenSplice/DDSI2EService/Internal/UseMulticastIfMreqn
- Format: integer
- Default value: 0
- Occurrences min-max: 0-1

Watermarks
----------

**Internal** Watermarks for flow-control.

- Full path: //OpenSplice/DDSI2EService/Internal/Watermarks
- Occurrences min-max: 0-1
- Child elements: WhcAdaptive, WhcHigh, WhcHighInit, WhcLow

WhcAdaptive
^^^^^^^^^^^

**Internal** This element controls whether DDSI2E will adapt the high-water mark to current traffic conditions, based on retransmit requests and transmit pressure.

- Full path: //OpenSplice/DDSI2EService/Internal/Watermarks/WhcAdaptive
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

WhcHigh
^^^^^^^

**Internal** This element sets the maximum allowed high-water mark for the DDSI2E WHCs, expressed in bytes. A writer is suspended when the WHC reaches this size.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2EService/Internal/Watermarks/WhcHigh
- Format: string
- Default value: 100 kB
- Occurrences min-max: 0-1

WhcHighInit
^^^^^^^^^^^

**Internal** This element sets the initial level of the high-water mark for the DDSI2E WHCs, expressed in bytes.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2EService/Internal/Watermarks/WhcHighInit
- Format: string
- Default value: 30 kB
- Occurrences min-max: 0-1

WhcLow
^^^^^^

**Internal** This element sets the low-water mark for the DDSI2E WHCs, expressed in bytes. A suspended writer resumes transmitting when its DDSI2E WHC shrinks to this size.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2EService/Internal/Watermarks/WhcLow
- Format: string
- Default value: 1 kB
- Occurrences min-max: 0-1

WriterLingerDuration
--------------------

**Internal** This setting controls the maximum duration for which actual deletion of a reliable writer with unacknowledged data in its history will be postponed to provide proper reliable transmission.
The unit must be specified explicitly. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2EService/Internal/WriterLingerDuration
- Format: string
- Default value: 1 s
- Valid values: 0 / 1hr
- Occurrences min-max: 0-1

Partitioning
============

The Partitioning element specifies DDSI2E network partitions and how DCPS partition/topic combinations are mapped onto the network partitions.

- Full path: //OpenSplice/DDSI2EService/Partitioning
- Occurrences min-max: 0-1

IgnoredPartitions
-----------------

The IgnoredPartitions element specifies DCPS partition/topic combinations that are not distributed over the network.

- Full path: //OpenSplice/DDSI2EService/Partitioning/IgnoredPartitions
- Occurrences min-max: 0-*

IgnoredPartition
^^^^^^^^^^^^^^^^

This element can be used to prevent certain combinations of DCPS partition and topic from being transmitted over the network. DDSI2E will complete ignore readers and writers for which all DCPS partitions as well as their topic is ignored, not even creating DDSI readers and writers to mirror the DCPS ones.

- Full path: //OpenSplice/DDSI2EService/Partitioning/IgnoredPartitions/IgnoredPartition
- Occurrences min-max: 0-*
- Required attributes: DCPSPartitionTopic

DCPSPartitionTopic
~~~~~~~~~~~~~~~~~~

This attribute specifies a partition and a topic expression, separated by a single '.', that are used to determine if a given partition and topic will be ignored or not. The expressions may use the usual wildcards '\*' and '?'. DDSI2E will consider an wildcard DCPS partition to match an expression iff there exists a string that satisfies both expressions.

- Full path: //OpenSplice/DDSI2EService/Partitioning/IgnoredPartitions/IgnoredPartition[@DCPSPartitionTopic]
- Format: string
- Default value: n/a
- Required: true

NetworkPartitions
-----------------

The NetworkPartitions element specifies the DDSI2E network partitions.

- Full path: //OpenSplice/DDSI2EService/Partitioning/NetworkPartitions
- Occurrences min-max: 0-*

NetworkPartition
^^^^^^^^^^^^^^^^

This element defines a DDSI2E network partition.

- Full path: //OpenSplice/DDSI2EService/Partitioning/NetworkPartitions/NetworkPartition
- Occurrences min-max: 0-*
- Required attributes: Address, Name
- Optional attributes: Connected, SecurityProfile

Address
~~~~~~~

This attribute specifies the multicast addresses associated with the network partition as a comma-separated list. Readers matching this network partition (cf. Partitioning/PartitionMappings) will listen for multicasts on all of these addresses and advertise them in the discovery protocol. The writers will select the most suitable address from the addresses advertised by the readers.

- Full path: //OpenSplice/DDSI2EService/Partitioning/NetworkPartitions/NetworkPartition[@Address]
- Format: string
- Default value: n/a
- Required: true

Connected
~~~~~~~~~

This attribute is a placeholder.

- Full path: //OpenSplice/DDSI2EService/Partitioning/NetworkPartitions/NetworkPartition[@Connected]
- Format: boolean
- Default value: true
- Required: false

Name
~~~~

This attribute specifies the name of this DDSI2E network partition. Two network partitions cannot have the same name.

- Full path: //OpenSplice/DDSI2EService/Partitioning/NetworkPartitions/NetworkPartition[@Name]
- Format: string
- Default value: n/a
- Required: true

SecurityProfile
~~~~~~~~~~~~~~~

This attribute selects the DDSI2E security profile for encrypting the traffic mapped to this DDSI2E network partition. The default "null" means the network partition is unsecured; any other name refers to a security profile defined using the Security/SecurityProfile elements.

- Full path: //OpenSplice/DDSI2EService/Partitioning/NetworkPartitions/NetworkPartition[@SecurityProfile]
- Format: string
- Default value: null
- Required: false

PartitionMappings
-----------------

The PartitionMappings element specifies the mapping from DCPS partition/topic combinations to DDSI2E network partitions.

- Full path: //OpenSplice/DDSI2EService/Partitioning/PartitionMappings
- Occurrences min-max: 0-*

PartitionMapping
^^^^^^^^^^^^^^^^

This element defines a mapping from a DCPS partition/topic combination to a DDSI2E network partition. This allows partitioning data flows by using special multicast addresses for part of the data and possibly also encrypting the data flow.

- Full path: //OpenSplice/DDSI2EService/Partitioning/PartitionMappings/PartitionMapping
- Occurrences min-max: 0-*
- Required attributes: DCPSPartitionTopic, NetworkPartition

DCPSPartitionTopic
~~~~~~~~~~~~~~~~~~

This attribute specifies a partition and a topic expression, separated by a single '.', that are used to determine if a given partition and topic maps to the DDSI2E network partition named by the NetworkPartition attribute in this PartitionMapping element. The expressions may use the usual wildcards '\*' and '?'. DDSI2E will consider a wildcard DCPS partition to match an expression if there exists a string that satisfies both expressions.

- Full path: //OpenSplice/DDSI2EService/Partitioning/PartitionMappings/PartitionMapping[@DCPSPartitionTopic]
- Format: string
- Default value: n/a
- Required: true

NetworkPartition
~~~~~~~~~~~~~~~~

This attribute specifies which DDSI2E network partition is to be used for DCPS partition/topic combinations matching the DCPSPartitionTopic attribute within this PartitionMapping element.

- Full path: //OpenSplice/DDSI2EService/Partitioning/PartitionMappings/PartitionMapping[@NetworkPartition]
- Format: string
- Default value: n/a
- Required: true

SSL
===

The SSL element allows specifying various parameters related to using SSL/TLS for DDSI over TCP.

- Full path: //OpenSplice/DDSI2EService/SSL
- Occurrences min-max: 0-1
- Child elements: CertificateVerification, Ciphers, Enable, EntropyFile, KeyPassphrase, KeystoreFile, SelfSignedCertificates, VerifyClient

CertificateVerification
-----------------------

If disabled this allows SSL connections to occur even if an X509 certificate fails verification.

- Full path: //OpenSplice/DDSI2EService/SSL/CertificateVerification
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

Ciphers
-------

The set of ciphers used by SSL/TLS

- Full path: //OpenSplice/DDSI2EService/SSL/Ciphers
- Format: string
- Default value: ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH
- Occurrences min-max: 0-1

Enable
------

This enables SSL/TLS for TCP.

- Full path: //OpenSplice/DDSI2EService/SSL/Enable
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

EntropyFile
-----------

The SSL/TLS random entropy file name.

- Full path: //OpenSplice/DDSI2EService/SSL/EntropyFile
- Format: string
- Occurrences min-max: 0-1

KeyPassphrase
-------------

The SSL/TLS key pass phrase for encrypted keys.

- Full path: //OpenSplice/DDSI2EService/SSL/KeyPassphrase
- Format: string
- Default value: secret
- Occurrences min-max: 0-1

KeystoreFile
------------

The SSL/TLS key and certificate store file name. The keystore must be in PEM format.

- Full path: //OpenSplice/DDSI2EService/SSL/KeystoreFile
- Format: string
- Default value: keystore
- Occurrences min-max: 0-1

SelfSignedCertificates
----------------------

This enables the use of self signed X509 certificates.

- Full path: //OpenSplice/DDSI2EService/SSL/SelfSignedCertificates
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

VerifyClient
------------

This enables an SSL server checking the X509 certificate of a connecting client.

- Full path: //OpenSplice/DDSI2EService/SSL/VerifyClient
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

Security
========

The Security element specifies DDSI2E security profiles that can be used to encrypt traffic mapped to DDSI2E network partitions.

- Full path: //OpenSplice/DDSI2EService/Security
- Occurrences min-max: 0-1

SecurityProfile
---------------

This element defines a DDSI2E security profile.

- Full path: //OpenSplice/DDSI2EService/Security/SecurityProfile
- Occurrences min-max: 0-*
- Required attributes: Name
- Optional attributes: Cipher, CipherKey

Cipher
^^^^^^

This attribute specifies the cipher to be used for encrypting traffic over network partitions secured by this security profile. The possible ciphers are:

- *aes128*: AES with a 128-bit key;
- *aes192*: AES with a 192-bit key;
- *aes256*: AES with a 256-bit key;
- *blowfish*: the Blowfish cipher with a 128 bit key;
- *null*: no encryption;

SHA1 is used on conjunction with all ciphers except "null" to ensure data integrity.

- Full path: //OpenSplice/DDSI2EService/Security/SecurityProfile[@Cipher]
- Format: enumeration
- Default value: null
- Valid values: null, blowfish, aes128, aes192, aes256
- Required: false

CipherKey
^^^^^^^^^

The CipherKey attribute is used to define the secret key required by the cipher selected using the Cipher attribute. The value can be a URI referencing an external file containing the secret key, or the secret key can be defined in-place as a string value.

The key must be specified as a hexadecimal string with each character representing 4 bits of the key. E.g., 1ABC represents the 16-bit key 0001 1010 1011 1100. The key should not follow a well-known pattern and must exactly match the key length of the selected cipher.

A malformed key will cause the security profile to be marked as invalid, and disable all network partitions secured by the (invalid) security profile to prevent information leaks.

As all DDS applications require read access to the XML configuration file, for security reasons it is recommended to store the secret key in an external file in the file system, referenced by its URI. The file should be protected against read and write access from other users on the host.

- Full path: //OpenSplice/DDSI2EService/Security/SecurityProfile[@CipherKey]
- Format: string
- Default value: ""
- Required: false

Name
^^^^

This attribute specifies the name of this DDSI2E security profile. Two security profiles cannot have the same name.

- Full path: //OpenSplice/DDSI2EService/Security/SecurityProfile[@Name]
- Format: string
- Default value: n/a
- Required: true

Sizing
======

The Sizing element specifies a variety of configuration settings dealing with expected system sizes, buffer sizes, &c.

- Full path: //OpenSplice/DDSI2EService/Sizing
- Occurrences min-max: 0-1
- Child elements: EndpointsInSystem, EndpointsInSystem, LocalEndpoints, NetworkQueueSize, NetworkQueueSize, ReceiveBufferChunkSize, ReceiveBufferChunkSize

EndpointsInSystem
-----------------

This endpoint specifies the expected maximum number of endpoints in the network. Underestimating this number will have a significant performance impact, but will not affect correctness; signficantly overestimating it will cause more memory to be used than necessary.

- Full path: //OpenSplice/DDSI2EService/Sizing/EndpointsInSystem
- Format: integer
- Default value: 20000
- Occurrences min-max: 0-1

EndpointsInSystem
-----------------

This endpoint specifies the expected maximum number of endpoints in the network. Underestimating this number will have a significant performance impact, but will not affect correctness; signficantly overestimating it will cause more memory to be used than necessary.

- Full path: //OpenSplice/DDSI2EService/Sizing/EndpointsInSystem
- Format: integer
- Default value: 20000
- Occurrences min-max: 0-1

LocalEndpoints
--------------

This element specifies the expected maximum number of endpoints local to one DDSI2E service. Underestimating this number will have a significant performance impact, but will not affect correctness; signficantly overestimating it will cause more memory to be used than necessary.

- Full path: //OpenSplice/DDSI2EService/Sizing/LocalEndpoints
- Format: integer
- Default value: 1000
- Occurrences min-max: 0-1

NetworkQueueSize
----------------

This element specifies the maximum number of samples in the network queue. Write/dispose operations add samples to this queue, the DDSI2E service drains it. Larger values allow large bursts of writes to occur without forcing synchronization between the application and the DDSI2E service, but do introduce the potential for longer latencies and increase the maximum amount of memory potentially occupied by messages in the queue.

- Full path: //OpenSplice/DDSI2EService/Sizing/NetworkQueueSize
- Format: integer
- Default value: 1000
- Occurrences min-max: 0-1

NetworkQueueSize
----------------

This element specifies the maximum number of samples in the network queue. Write/dispose operations add samples to this queue, the DDSI2E service drains it. Larger values allow large bursts of writes to occur without forcing synchronization between the application and the DDSI2E service, but do introduce the potential for longer latencies and increase the maximum amount of memory potentially occupied by messages in the queue.

- Full path: //OpenSplice/DDSI2EService/Sizing/NetworkQueueSize
- Format: integer
- Default value: 1000
- Occurrences min-max: 0-1

ReceiveBufferChunkSize
----------------------

This element specifies the size of one allocation unit in the receive buffer. Must be greater than the maximum packet size by a modest amount (too large packets are dropped). Each allocation is shrunk immediately after processing a message, or freed straightaway.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2EService/Sizing/ReceiveBufferChunkSize
- Format: string
- Default value: 128 KiB
- Occurrences min-max: 0-1

ReceiveBufferChunkSize
----------------------

This element specifies the size of one allocation unit in the receive buffer. Must be greater than the maximum packet size by a modest amount (too large packets are dropped). Each allocation is shrunk immediately after processing a message, or freed straightaway.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2EService/Sizing/ReceiveBufferChunkSize
- Format: string
- Default value: 128 KiB
- Occurrences min-max: 0-1

Watermarks
----------

#if LITE  { LEAF ("ReceiveBufferSize"), 1, "128 KiB", ABSOFF (rbuf_size), 0, uf_memsize, 0, pf_memsize,    "This element sets the size of a single receive buffer. Many receive buffers may be needed. Their size must be greater than ReceiveBufferChunkSize by a modest amount.

- Full path: //OpenSplice/DDSI2EService/Sizing/Watermarks
- Occurrences min-max: 0-1
- Child elements: WhcAdaptive, WhcHigh, WhcHighInit, WhcLow

WhcAdaptive
^^^^^^^^^^^

This element controls whether DDSI2E will adapt the high-water mark to current traffic conditions, based on retransmit requests and transmit pressure.

- Full path: //OpenSplice/DDSI2EService/Sizing/Watermarks/WhcAdaptive
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

WhcHigh
^^^^^^^

This element sets the maximum allowed high-water mark for the DDSI2E WHCs, expressed in bytes. A writer is suspended when the WHC reaches this size.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2EService/Sizing/Watermarks/WhcHigh
- Format: string
- Default value: 100 kB
- Occurrences min-max: 0-1

WhcHighInit
^^^^^^^^^^^

This element sets the initial level of the high-water mark for the DDSI2E WHCs, expressed in bytes.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2EService/Sizing/Watermarks/WhcHighInit
- Format: string
- Default value: 30 kB
- Occurrences min-max: 0-1

WhcLow
^^^^^^

This element sets the low-water mark for the DDSI2E WHCs, expressed in bytes. A suspended writer resumes transmitting when its DDSI2E WHC shrinks to this size.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2EService/Sizing/Watermarks/WhcLow
- Format: string
- Default value: 1 kB
- Occurrences min-max: 0-1

TCP
===

The TCP element allows specifying various parameters related to running DDSI over TCP.

- Full path: //OpenSplice/DDSI2EService/TCP
- Occurrences min-max: 0-1
- Child elements: Enable, NoDelay, Port, ReadTimeout, WriteTimeout

Enable
------

This element enables the optional TCP transport.

- Full path: //OpenSplice/DDSI2EService/TCP/Enable
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

NoDelay
-------

This element enables the TCP_NODELAY socket option, preventing multiple DDSI messages being sent in the same TCP request. Setting this option typically optimises latency over throughput.

- Full path: //OpenSplice/DDSI2EService/TCP/NoDelay
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

Port
----

This element specifies the TCP port number on which DDSI2E accepts connections. If the port is set it is used in entity locators, published with DDSI discovery. Dynamically allocated if zero. Disabled if -1 or not configured. If disabled other DDSI services will not be able to establish connections with the service, the service can only communicate by establishing connections to other services.

- Full path: //OpenSplice/DDSI2EService/TCP/Port
- Format: integer
- Default value: -1
- Valid values: -1 / 65535
- Occurrences min-max: 0-1

ReadTimeout
-----------

This element specifies the timeout for blocking TCP read operations. If this timeout expires then the connection is closed.

The unit must be specified explicitly. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2EService/TCP/ReadTimeout
- Format: string
- Default value: 2 s
- Valid values: 0 / 1hr
- Occurrences min-max: 0-1

WriteTimeout
------------

This element specifies the timeout for blocking TCP write operations. If this timeout expires then the connection is closed.

The unit must be specified explicitly. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2EService/TCP/WriteTimeout
- Format: string
- Default value: 2 s
- Valid values: 0 / 1hr
- Occurrences min-max: 0-1

ThreadPool
==========

The ThreadPool element allows specifying various parameters related to using a thread pool to send DDSI messages to multiple unicast addresses (TCP or UDP).

- Full path: //OpenSplice/DDSI2EService/ThreadPool
- Occurrences min-max: 0-1
- Child elements: Enable, ThreadMax, Threads

Enable
------

This element enables the optional thread pool.

- Full path: //OpenSplice/DDSI2EService/ThreadPool/Enable
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

ThreadMax
---------

This elements configures the maximum number of threads in the thread pool.

- Full path: //OpenSplice/DDSI2EService/ThreadPool/ThreadMax
- Format: integer
- Default value: 8
- Occurrences min-max: 0-1

Threads
-------

This elements configures the initial number of threads in the thread pool.

- Full path: //OpenSplice/DDSI2EService/ThreadPool/Threads
- Format: integer
- Default value: 4
- Occurrences min-max: 0-1

Threads
=======

This element is used to set thread properties.

- Full path: //OpenSplice/DDSI2EService/Threads
- Occurrences min-max: 0-1

Thread
------

This element is used to set thread properties.

- Full path: //OpenSplice/DDSI2EService/Threads/Thread
- Occurrences min-max: 0-1000
- Child elements: StackSize
- Required attributes: Name

Name
^^^^

The Name of the thread for which properties are being set. The following threads exist:

- *gc*: garbage collector thread involved in deleting entities;
- *recv*: receive thread, taking data from the network and running the protocol state machine;
- *dq.builtins*: delivery thread for DDSI-builtin data, primarily for discovery;
- *lease*: DDSI liveliness monitoring;
- *tev*: general timed-event handling, retransmits and discovery;
- *xmit.CHAN*: transmit thread for channel CHAN;
- *dq.CHAN*: delivery thread for channel CHAN;
- *tev.CHAN*: timed-even thread for channel CHAN.

- Full path: //OpenSplice/DDSI2EService/Threads/Thread[@Name]
- Format: string
- Default value: n/a
- Required: true

Scheduling
^^^^^^^^^^

This element configures the scheduling properties of the thread.

- Full path: //OpenSplice/DDSI2EService/Threads/Thread/Scheduling
- Occurrences min-max: 0-1
- Child elements: Class, Priority

Class
~~~~~

This element specifies the thread scheduling class (*realtime*, *timeshare* or *default*). The user may need special privileges from the underlying operating system to be able to assign some of the privileged scheduling classes.

- Full path: //OpenSplice/DDSI2EService/Threads/Thread/Scheduling/Class
- Format: enumeration
- Default value: default
- Valid values: realtime, timeshare, default
- Occurrences min-max: 0-1

Priority
~~~~~~~~

This element specifies the thread priority (decimal integer or *default*). Only priorities that are supported by the underlying operating system can be assigned to this element. The user may need special privileges from the underlying operating system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/DDSI2EService/Threads/Thread/Scheduling/Priority
- Format: string
- Default value: default
- Occurrences min-max: 0-1

StackSize
^^^^^^^^^

This element configures the stack size for this thread. The default value *default* leaves the stack size at the operating system default.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2EService/Threads/Thread/StackSize
- Format: string
- Default value: default
- Occurrences min-max: 0-1

Tracing
=======

The Tracing element controls the amount and type of information that is written into the tracing log by the DDSI service. This is useful to track the DDSI service during application development.

- Full path: //OpenSplice/DDSI2EService/Tracing
- Occurrences min-max: 0-1
- Child elements: AppendToFile, EnableCategory, OutputFile, PacketCaptureFile, Timestamps, Verbosity

AppendToFile
------------

This option specifies whether the output is to be appended to an existing log file. The default is to create a new log file each time, which is generally the best option if a detailed log is generated.

- Full path: //OpenSplice/DDSI2EService/Tracing/AppendToFile
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

EnableCategory
--------------

This element enables individual logging categories. These are enabled in addition to those enabled by Tracing/Verbosity. Recognised categories are:

- *fatal*: all fatal errors, errors causing immediate termination
- *error*: failures probably impacting correctness but not necessarily causing immediate termination
- *warning*: abnormal situations that will likely not impact correctness
- *config*: full dump of the configuration
- *info*: general informational notices
- *discovery*: all discovery activity
- *data*: include data content of samples in traces
- *radmin*: receive buffer administration
- *timing*: periodic reporting of CPU loads per thread
- *traffic*: periodic reporting of total outgoing data
- *whc*: tracing of writer history cache changes
- *tcp*: tracing of TCP-specific activity
- *topic*: tracing of topic definitions
- >i>plist*: tracing of discovery parameter list interpretation 

In addition, there is the keyword *trace* that enables all but *radmin*, *topic*, *plist* and *whc*
.
The categorisation of tracing output is incomplete and hence most of the verbosity levels and categories are not of much use in the current release. This is an ongoing process and here we describe the target situation rather than the current situation. Currently, the most useful is *trace*.

- Full path: //OpenSplice/DDSI2EService/Tracing/EnableCategory
- Format: string
- Occurrences min-max: 0-1

OutputFile
----------

This option specifies where the logging is printed to. Note that *stdout* and *stderr* are treated as special values, representing "standard out" and "standard error" respectively. No file is created unless logging categories are enabled using the Tracing/Verbosity or Tracing/EnabledCategory settings.

- Full path: //OpenSplice/DDSI2EService/Tracing/OutputFile
- Format: string
- Default value: ddsi2.log
- Occurrences min-max: 0-1

PacketCaptureFile
-----------------

This option specifies the file to which received and sent packets will be logged in the "pcap" format suitable for analysis using common networking tools, such as WireShark. IP and UDP headers are ficitious, in particular the destination address of received packets. The TTL may be used to distinguish between sent and received packets: it is 255 for sent packets and 128 for received ones. Currently IPv4 only.

- Full path: //OpenSplice/DDSI2EService/Tracing/PacketCaptureFile
- Format: string
- Occurrences min-max: 0-1

Timestamps
----------

This option has no effect.

- Full path: //OpenSplice/DDSI2EService/Tracing/Timestamps
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1
- Optional attributes: absolute

absolute
^^^^^^^^

This option has no effect

- Full path: //OpenSplice/DDSI2EService/Tracing/Timestamps[@absolute]
- Format: boolean
- Default value: true
- Required: false

Verbosity
---------

This element enables standard groups of categories, based on a desired verbosity level. This is in addition to the categories enabled by the Tracing/EnableCategory setting. Recognised verbosity levels and the categories they map to are:

- *none*: no DDSI2E log
- *severe*: error and fatal
- *warning*: *severe* + warning
- *info*: *warning* + info
- *config*: *info* + config
- *fine*: *config* + discovery
- *finer*: *fine* + traffic and timing
- *finest*: *finer* + trace

The categorisation of tracing output is incomplete and hence most of the verbosity levels and categories are not of much use in the current release. This is an ongoing process and here we describe the target situation rather than the current situation. Currently, the most useful verbosity levels are *config*, *fine* and *finest*.

- Full path: //OpenSplice/DDSI2EService/Tracing/Verbosity
- Format: enumeration
- Default value: none
- Valid values: finest, finer, fine, config, info, warning, severe, none
- Occurrences min-max: 0-1

Watchdog
========

This element specifies the type of OS scheduling class will be used by the thread that announces its liveliness periodically.

- Full path: //OpenSplice/DDSI2EService/Watchdog
- Occurrences min-max: 0-1

Scheduling
----------

This element specifies the type of OS scheduling class will be used by the thread that announces its liveliness periodically.

- Full path: //OpenSplice/DDSI2EService/Watchdog/Scheduling
- Occurrences min-max: 0-1
- Child elements: Class, Priority

Class
^^^^^

This element specifies the thread scheduling class that will be used by the watchdog thread. The user may need the appropriate privileges from the underlying operating system to be able to assign some of the privileged scheduling classes.

- Full path: //OpenSplice/DDSI2EService/Watchdog/Scheduling/Class
- Format: enumeration
- Default value: default
- Valid values: realtime, timeshare, default
- Occurrences min-max: 0-1

Priority
^^^^^^^^

This element specifies the thread priority. Only priorities that are supported by the underlying operating system can be assigned to this element. The user may need special privileges from the underlying operating system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/DDSI2EService/Watchdog/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 0-1
- Optional attributes: priority_kind

priority_kind
~~~~~~~~~~~~~

This attribute specifies whether the specified Priority is a relative or absolute priority.

- Full path: //OpenSplice/DDSI2EService/Watchdog/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: relative
- Valid values: relative, absolute
- Required: false

DDSI2Service
************

The root element of a DDSI2 networking service configuration.

- Full path: //OpenSplice/DDSI2Service
- Occurrences min-max: 0-*
- Required attributes: name

name
====

This attribute identifies the configuration for the DDSI2 Service. Multiple DDSI2 service configurations can be specified in one single resource. The actual applicable configuration is determined by the value of the name attribute, which must match the specified under the element OpenSplice/Domain/Service[@name] in the Domain Service configuration.

- Full path: //OpenSplice/DDSI2Service[@name]
- Format: string
- Default value: ddsi2
- Required: true

Compatibility
=============

The Compatibility elements allows specifying various settings related to compatability with standards and with other DDSI implementations.

- Full path: //OpenSplice/DDSI2Service/Compatibility
- Occurrences min-max: 0-1
- Child elements: AckNackNumbitsEmptySet, ArrivalOfDataAssertsPpAndEpLiveliness, AssumeRtiHasPmdEndpoints, ExplicitlyPublishQosSetToDefault, ManySocketsMode, RespondToRtiInitZeroAckWithInvalidHeartbeat, StandardsConformance

AckNackNumbitsEmptySet
----------------------

This element governs the representation of an acknowledgement message that does not also negatively-acknowledge some samples. If set to 0, the generated acknowledgements have an invalid form and will be reject by the strict and pedantic conformance modes, but several other implementation require this setting for smooth interoperation.

If set to 1, all acknowledgements sent by DDSI2 adhere the form of acknowledgement messages allowed by the standard, but this causes problems when interoperating with these other implementations. The strict and pedantic standards conformance modes always overrule an AckNackNumbitsEmptySet=0 to prevent the transmitting of invalid messages.

- Full path: //OpenSplice/DDSI2Service/Compatibility/AckNackNumbitsEmptySet
- Format: integer
- Default value: 0
- Occurrences min-max: 0-1

ArrivalOfDataAssertsPpAndEpLiveliness
-------------------------------------

When set to true, arrival of a message from a peer asserts liveliness of that peer. When set to false, only SPDP and explicit lease renewals have this effect.

- Full path: //OpenSplice/DDSI2Service/Compatibility/ArrivalOfDataAssertsPpAndEpLiveliness
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

AssumeRtiHasPmdEndpoints
------------------------

This option assumes ParticipantMessageData endpoints required by the liveliness protocol are present in RTI participants even when not properly advertised by the participant discovery protocol.

- Full path: //OpenSplice/DDSI2Service/Compatibility/AssumeRtiHasPmdEndpoints
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

ExplicitlyPublishQosSetToDefault
--------------------------------

This element specifies whether QoS settings set to default values are explicitly published in the discovery protocol. Implementations are to use the default value for QoS settings not published, which allows a significant reduction of the amount of data that needs to be exchanged for the discovery protocol, but this requires all implementations to adhere to the default values specified by the specifications.

When interoperability is required with an implementation that does not follow the specifications in this regard, setting this option to true will help.

- Full path: //OpenSplice/DDSI2Service/Compatibility/ExplicitlyPublishQosSetToDefault
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

ManySocketsMode
---------------

This option specifies whether a network socket will be created for each domain participant on a host. The specification seems to assume that each participant has a unique address, and setting this option will ensure this to be the case. This is not the defeault.

Disabling it slightly improves performance and reduces network traffic somewhat. It also causes the set of port numbers needed by DDSI2 to become predictable, which may be useful for firewall and NAT configuration.

- Full path: //OpenSplice/DDSI2Service/Compatibility/ManySocketsMode
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

RespondToRtiInitZeroAckWithInvalidHeartbeat
-------------------------------------------

This element allows a closer mimicking of the behaviour of some other DDSI implementations, albeit at the cost of generating even more invalid messages. Setting it to true ensures a Heartbeat can be sent at any time when a remote node requests one, setting it to false delays it until a valid one can be sent.

The latter is fully compliant with the specification, and no adverse effects have been observed. It is the default.

- Full path: //OpenSplice/DDSI2Service/Compatibility/RespondToRtiInitZeroAckWithInvalidHeartbeat
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

StandardsConformance
--------------------

This element sets the level of standards conformance of this instance of the DDSI2 Service. Stricter conformance typically means less interoperability with other implementations. Currently three modes are defined:

- *pedantic*: very strictly conform to the specification, ultimately for compliancy testing, but currently of little value because it adheres even to what will most likely turn out to be editing errors in the DDSI standard. Arguably, as long as no errata have been published it is the current text that is in effect, and that is what pedantic currently does.
- *strict*: a slightly less strict view of the standard than does pedantic: it follows the established behaviour where the standard is obviously in error.
- *lax*: attempt to provide the smoothest possible interoperability, anticipating future revisions of elements in the standard in areas that other implementations do not adhere to, even though there is no good reason not to.

The default setting is "lax".

- Full path: //OpenSplice/DDSI2Service/Compatibility/StandardsConformance
- Format: enumeration
- Default value: lax
- Valid values: lax, strict, pedantic
- Occurrences min-max: 0-1

Discovery
=========

The Discovery element allows specifying various parameters related to the discovery of peers.

- Full path: //OpenSplice/DDSI2Service/Discovery
- Occurrences min-max: 0-1
- Child elements: AdvertiseBuiltinTopicWriters, DSGracePeriod, DefaultMulticastAddress, DomainId, GenerateBuiltinTopics, LocalDiscoveryPartition, MaxAutoParticipantIndex, ParticipantIndex, SPDPInterval, SPDPMulticastAddress

AdvertiseBuiltinTopicWriters
----------------------------

This element controls whether or not DDSI2 advertises writers for the built-in topics from its discovery for backwards compatibility with older Vortex OpenSplice versions.

- Full path: //OpenSplice/DDSI2Service/Discovery/AdvertiseBuiltinTopicWriters
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

DSGracePeriod
-------------

This setting controls for how long endpoints discovered via a Cloud discovery service will survive after the discovery service disappeared, allowing reconnect without loss of data when the discovery service restarts (or another instance takes over).

Valid values are finite durations with an explicit unit or the keyword 'inf' for infinity. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2Service/Discovery/DSGracePeriod
- Format: string
- Default value: 30 s
- Occurrences min-max: 0-1

DefaultMulticastAddress
-----------------------

This element specifies the default multicast address for all traffic other than participant discovery packets. It defaults to Discovery/SPDPMulticastAddress.

- Full path: //OpenSplice/DDSI2Service/Discovery/DefaultMulticastAddress
- Format: string
- Default value: auto
- Occurrences min-max: 0-1

DomainId
--------

This element allows overriding of the DDS Domain Id that is used for DDSI2.

- Full path: //OpenSplice/DDSI2Service/Discovery/DomainId
- Format: string
- Default value: default
- Occurrences min-max: 0-1

GenerateBuiltinTopics
---------------------

This element controls whether or not DDSI2 generates built-in topics from its discovery. When disabled, it relies on the durability service.

- Full path: //OpenSplice/DDSI2Service/Discovery/GenerateBuiltinTopics
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

LocalDiscoveryPartition
-----------------------

This element controls which partition is monitored by DDSI2 for built-in topics describing entities the it mirrors in DDSI.

- Full path: //OpenSplice/DDSI2Service/Discovery/LocalDiscoveryPartition
- Format: string
- Default value: __BUILT-IN PARTITION\__
- Occurrences min-max: 0-1

MaxAutoParticipantIndex
-----------------------

This element specifies the maximum DDSI participant index selected by this instance of the DDSI2 service if the Discovery/ParticipantIndex is "auto".

- Full path: //OpenSplice/DDSI2Service/Discovery/MaxAutoParticipantIndex
- Format: integer
- Default value: 9
- Occurrences min-max: 0-1

ParticipantIndex
----------------

This element specifies the DDSI participant index used by this instance of the DDSI2 service for discovery purposes. Only one such participant id is used, independent of the number of actual DomainParticipants on the node. It is either:

- *auto*: which will attempt to automatically determine an available participant index (see also Discovery/MaxAutoParticipantIndex), or
- a non-negative integer less than 120, or
- *none*:, which causes it to use arbitrary port numbers for unicast sockets which entirely removes the constraints on the participant index but makes unicast discovery impossible.

The default is *auto*. The participant index is part of the port number calculation and if predictable port numbers are needed and fixing the participant index has no adverse effects, it is recommended that the second be option be used.

- Full path: //OpenSplice/DDSI2Service/Discovery/ParticipantIndex
- Format: string
- Default value: auto
- Occurrences min-max: 0-1

Peers
-----

This element statically configures addresses for discovery.

Valid values are finite durations with an explicit unit or the keyword 'inf' for infinity. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2Service/Discovery/Peers
- Occurrences min-max: 0-1

Group
^^^^^

This element statically configures a fault tolerant group of addresses for discovery. Each member of the group is tried in sequence until one succeeds.

- Full path: //OpenSplice/DDSI2Service/Discovery/Peers/Group
- Occurrences min-max: 0-*

Peer
~~~~

This element statically configures an addresses for discovery.

- Full path: //OpenSplice/DDSI2Service/Discovery/Peers/Group/Peer
- Occurrences min-max: 0-*
- Required attributes: Address

Address
+++++++

This element specifies an IP address to which discovery packets must be sent, in addition to the default multicast address (see also General/AllowMulticast). Both a hostnames and a numerical IP address is accepted; the hostname or IP address may be suffixed with :PORT to explicitly set the port to which it must be sent. Multiple Peers may be specified.

- Full path: //OpenSplice/DDSI2Service/Discovery/Peers/Group/Peer[@Address]
- Format: string
- Default value: n/a
- Required: true

Peer
^^^^

This element statically configures an addresses for discovery.

- Full path: //OpenSplice/DDSI2Service/Discovery/Peers/Peer
- Occurrences min-max: 0-*
- Required attributes: Address

Address
~~~~~~~

This element specifies an IP address to which discovery packets must be sent, in addition to the default multicast address (see also General/AllowMulticast). Both a hostnames and a numerical IP address is accepted; the hostname or IP address may be suffixed with :PORT to explicitly set the port to which it must be sent. Multiple Peers may be specified.

- Full path: //OpenSplice/DDSI2Service/Discovery/Peers/Peer[@Address]
- Format: string
- Default value: n/a
- Required: true

Ports
-----

The Ports element allows specifying various parameters related to the port numbers used for discovery. These all have default values specified by the DDSI 2.1 (and 2.2) specification and rarely need to be changed.

- Full path: //OpenSplice/DDSI2Service/Discovery/Ports
- Occurrences min-max: 0-1
- Child elements: Base, DomainGain, MulticastDataOffset, MulticastMetaOffset, ParticipantGain, UnicastDataOffset, UnicastMetaOffset

Base
^^^^

This element specifies the base port number (refer to the DDSI 2.1 or 2.2 specification, section 9.6.1, constant PB).

- Full path: //OpenSplice/DDSI2Service/Discovery/Ports/Base
- Format: integer
- Default value: 7400
- Valid values: 1 / 65535
- Occurrences min-max: 0-1

DomainGain
^^^^^^^^^^

This element specifies the domain gain, relating domain ids to sets of port numbers (refer to the DDSI 2.1 or 2.2 specification, section 9.6.1, constant DG).

- Full path: //OpenSplice/DDSI2Service/Discovery/Ports/DomainGain
- Format: integer
- Default value: 250
- Occurrences min-max: 0-1

MulticastDataOffset
^^^^^^^^^^^^^^^^^^^

This element specifies the port number for multicast meta traffic (refer to the DDSI 2.1 or 2.2 specification, section 9.6.1, constant d2).

- Full path: //OpenSplice/DDSI2Service/Discovery/Ports/MulticastDataOffset
- Format: integer
- Default value: 1
- Occurrences min-max: 0-1

MulticastMetaOffset
^^^^^^^^^^^^^^^^^^^

This element specifies the port number for multicast meta traffic (refer to the DDSI 2.1 or 2.2 specification, section 9.6.1, constant d0).

- Full path: //OpenSplice/DDSI2Service/Discovery/Ports/MulticastMetaOffset
- Format: integer
- Default value: 0
- Occurrences min-max: 0-1

ParticipantGain
^^^^^^^^^^^^^^^

This element specifies the participant gain, relating p0, articipant index to sets of port numbers (refer to the DDSI 2.1 or 2.2 specification, section 9.6.1, constant PG).

- Full path: //OpenSplice/DDSI2Service/Discovery/Ports/ParticipantGain
- Format: integer
- Default value: 2
- Occurrences min-max: 0-1

UnicastDataOffset
^^^^^^^^^^^^^^^^^

This element specifies the port number for unicast meta traffic (refer to the DDSI 2.1 or 2.2 specification, section 9.6.1, constant d3).

- Full path: //OpenSplice/DDSI2Service/Discovery/Ports/UnicastDataOffset
- Format: integer
- Default value: 11
- Occurrences min-max: 0-1

UnicastMetaOffset
^^^^^^^^^^^^^^^^^

This element specifies the port number for unicast meta traffic (refer to the DDSI 2.1 or 2.2 specification, section 9.6.1, constant d1).

- Full path: //OpenSplice/DDSI2Service/Discovery/Ports/UnicastMetaOffset
- Format: integer
- Default value: 10
- Occurrences min-max: 0-1

SPDPInterval
------------

This element specifies the interval between spontaneous transmissions of participant discovery packets.

The unit must be specified explicitly. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2Service/Discovery/SPDPInterval
- Format: string
- Default value: 30 s
- Valid values: 0 / 1hr
- Occurrences min-max: 0-1

SPDPMulticastAddress
--------------------

This element specifies the multicast address that is used as the destination for the participant discovery packets. In IPv4 mode the default is the (standardised) 239.255.0.1, in IPv6 mode it becomes ff02::ffff:239.255.0.1, which is a non-standardised link-local multicast address.

- Full path: //OpenSplice/DDSI2Service/Discovery/SPDPMulticastAddress
- Format: string
- Default value: 239.255.0.1
- Occurrences min-max: 0-1

General
=======

The General element specifies overall DDSI2 service settings.

- Full path: //OpenSplice/DDSI2Service/General
- Occurrences min-max: 0-1
- Child elements: AllowMulticast, CoexistWithNativeNetworking, DontRoute, EnableMulticastLoopback, ExternalNetworkAddress, ExternalNetworkMask, FragmentSize, MaxMessageSize, MulticastRecvNetworkInterfaceAddresses, MulticastTimeToLive, NetworkInterfaceAddress, StartupModeCoversTransient, StartupModeDuration, UseIPv6

AllowMulticast
--------------

This element controls whether DDSI2 uses multicasts for data traffic.

It is a comma-separated list of some of the following keywords: "spdp", "asm", "ssm", or either of "false" or "true".


- *spdp*: enables the use of ASM (any-source multicast) for participant discovery
- *asm*: enables the use of ASM for all traffic (including SPDP)
- *ssm*: enables the use of SSM (source-specific multicast) for all non-SPDP traffic (if supported)


When set to "false" all multicasting is disabled. The default, "true" enables full use of multicasts. Listening for multicasts can be controlled by General/MulticastRecvNetworkInterfaceAddresses.

- Full path: //OpenSplice/DDSI2Service/General/AllowMulticast
- Format: string
- Default value: true
- Occurrences min-max: 0-1

CoexistWithNativeNetworking
---------------------------

This element specifies whether the DDSI2 service operates in conjunction with the Vortex OpenSplice RT Networking service. When "false", the DDSI2 service will take care of all communications, including those between Vortex OpenSplice nodes; when "true", the DDSI2 service only communicates with DDS implementations other than Vortex OpenSplice. In this case the RT Networking service should be configured as well.

- Full path: //OpenSplice/DDSI2Service/General/CoexistWithNativeNetworking
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

DontRoute
---------

This element allows setting the SO_DONTROUTE option for outgoing packets, to bypass the local routing tables. This is generally useful only when the routing tables cannot be trusted, which is highly unusual.

- Full path: //OpenSplice/DDSI2Service/General/DontRoute
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

EnableMulticastLoopback
-----------------------

This element specifies whether DDSI2 allows IP multicast packets to be visible to all DDSI participants in the same node, including itself. It must be "true" for intra-node multicast communications, but if a node runs only a single DDSI2 service and does not host any other DDSI-capable programs, it should be set to "false" for improved performance.

- Full path: //OpenSplice/DDSI2Service/General/EnableMulticastLoopback
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

ExternalNetworkAddress
----------------------

This element allows explicitly overruling the network address DDSI2 advertises in the discovery protocol, which by default is the address of the preferred network interface (General/NetworkInterfaceAddress), to allow DDSI2 to communicate across a Network Address Translation (NAT) device.

- Full path: //OpenSplice/DDSI2Service/General/ExternalNetworkAddress
- Format: string
- Default value: auto
- Occurrences min-max: 0-1

ExternalNetworkMask
-------------------

This element specifies the network mask of the external network address. This element is relevant only when an external network address (General/ExternalNetworkAddress) is explicitly configured. In this case locators received via the discovery protocol that are within the same external subnet (as defined by this mask) will be translated to an internal address by replacing the network portion of the external address with the corresponding portion of the preferred network interface address. This option is IPv4-only.

- Full path: //OpenSplice/DDSI2Service/General/ExternalNetworkMask
- Format: string
- Default value: 0.0.0.0
- Occurrences min-max: 0-1

FragmentSize
------------

This element specifies the size of DDSI sample fragments generated by DDSI2. Samples larger than FragmentSize are fragmented into fragments of FragmentSize bytes each, except the last one, which may be smaller. The DDSI spec mandates a minimum fragment size of 1025 bytes, but DDSI2 will do whatever size is requested, accepting fragments of which the size is at least the minimum of 1025 and FragmentSize.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2Service/General/FragmentSize
- Format: string
- Default value: 1280 B
- Occurrences min-max: 0-1

MaxMessageSize
--------------

This element specifies the maximum size of the UDP payload that DDSI2 will generate. DDSI2 will try to maintain this limit within the bounds of the DDSI specification, which means that in some cases (especially for very low values of MaxMessageSize) larger payloads may sporadically be observed (currently up to 1192 B).

On some networks it may be necessary to set this item to keep the packetsize below the MTU to prevent IP fragmentation. In those cases, it is generally advisable to also consider reducing Internal/FragmentSize.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2Service/General/MaxMessageSize
- Format: string
- Default value: 4096 B
- Occurrences min-max: 0-1

MulticastRecvNetworkInterfaceAddresses
--------------------------------------

This element specifies on which network interfaces DDSI2 listens to multicasts. The following options are available:


- *all*: listen for multicasts on all multicast-capable interfaces; or
- *any*: listen for multicasts on the operating system default interface; or
- *preferred*: listen for multicasts on the preferred interface (General/NetworkInterfaceAddress); or
- *none*: does not listen for multicasts on any interface; or
- a comma-separated list of network addresses: configures DDSI2 to listen for multicasts on all of the listed addresses.


If DDSI2 is in IPv6 mode and the address of the preferred network interface is a link-local address, "all" is treated as a synonym for "preferred" and a comma-separated list is treated as "preferred" if it contains the preferred interface and as "none" if not.

- Full path: //OpenSplice/DDSI2Service/General/MulticastRecvNetworkInterfaceAddresses
- Format: string
- Default value: preferred
- Occurrences min-max: 0-1

MulticastTimeToLive
-------------------

This element specifies the time-to-live setting for outgoing multicast packets.

- Full path: //OpenSplice/DDSI2Service/General/MulticastTimeToLive
- Format: integer
- Default value: 32
- Valid values: 0 / 255
- Occurrences min-max: 0-1

NetworkInterfaceAddress
-----------------------

This element specifies the preferred network interface for use by DDSI2. The preferred network interface determines the IP address that DDSI2 advertises in the discovery protocol (but see also General/ExternalNetworkAddress), and is also the only interface over which multicasts are transmitted. The interface can be identified by its IP address, network interface name or network portion of the address. If the value "auto" is entered here, DDSI2 will select what it considers the most suitable interface.

- Full path: //OpenSplice/DDSI2Service/General/NetworkInterfaceAddress
- Format: string
- Default value: auto
- Occurrences min-max: 0-1

StartupModeCoversTransient
--------------------------

This element configures whether startup-mode should also cover transient and persistent data, for configurations where the durability service does not take care of it. Configurations without defined merge policies best leave this enabled.

- Full path: //OpenSplice/DDSI2Service/General/StartupModeCoversTransient
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

StartupModeDuration
-------------------

This element specifies how long the DDSI2 remains in its "startup" mode. While in "startup" mode all volatile reliable data published on the local node is retained as-if it were transient-local data, allowing existing readers on remote nodes to obtain the data even though discovering them takes some time. Best-effort data by definition need not arrive, and transient and persistent data are covered by the durability service.

Once the system is stable, DDSI2 keeps track of the existence of remote readers whether or not matching writers exist locally, avoiding this discovery delay and ensuring this is merely a node startup issue.

Setting General/StartupModeDuration to 0s will disable it.

The unit must be specified explicitly. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2Service/General/StartupModeDuration
- Format: string
- Default value: 2 s
- Valid values: 0 / 60000
- Occurrences min-max: 0-1

UseIPv6
-------

This element can be used to DDSI2 use IPv6 instead of IPv4. This is currently an either/or switch.

- Full path: //OpenSplice/DDSI2Service/General/UseIPv6
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

Internal
========

The Internal elements deal with a variety of settings that evolving and that are not necessarily fully supported. For the vast majority of the Internal settings, the functionality per-se is supported, but the right to change the way the options control the functionality is reserved. This includes renaming or moving options.

- Full path: //OpenSplice/DDSI2Service/Internal
- Occurrences min-max: 0-1
- Child elements: AccelerateRexmitBlockSize, AggressiveKeepLastWhc, AssumeMulticastCapable, AutoReschedNackDelay, BuiltinEndpointSet, ConservativeBuiltinReaderStartup, DDSI2DirectMaxThreads, DefragReliableMaxSamples, DefragUnreliableMaxSamples, DeliveryQueueMaxSamples, ForwardAllMessages, ForwardRemoteData, GenerateKeyhash, HeartbeatInterval, LateAckMode, LeaseDuration, LegacyFragmentation, LogStackTraces, MaxParticipants, MaxQueuedRexmitBytes, MaxQueuedRexmitMessages, MaxSampleSize, MeasureHbToAckLatency, MinimumSocketReceiveBufferSize, MinimumSocketSendBufferSize, MirrorRemoteEntities, MonitorPort, NackDelay, PreEmptiveAckDelay, PrimaryReorderMaxSamples, PrioritizeRetransmit, RediscoveryBlacklistDuration, ResponsivenessTimeout, RetransmitMerging, RetransmitMergingPeriod, RetryOnRejectBestEffort, RetryOnRejectDuration, SPDPResponseMaxDelay, ScheduleTimeRounding, SecondaryReorderMaxSamples, SquashParticipants, SuppressSPDPMulticast, SynchronousDeliveryLatencyBound, SynchronousDeliveryPriorityThreshold, UnicastResponseToSPDPMessages, UseMulticastIfMreqn, WriterLingerDuration

AccelerateRexmitBlockSize
-------------------------

**Internal** Proxy readers that are assumed to sill be retrieving historical data get this many samples retransmitted when they NACK something, even if some of these samples have sequence numbers outside the set covered by the NACK.

- Full path: //OpenSplice/DDSI2Service/Internal/AccelerateRexmitBlockSize
- Format: integer
- Default value: 0
- Occurrences min-max: 0-1

AggressiveKeepLastWhc
---------------------

**Internal** This element controls whether to drop a reliable sample from a DDSI2 WHC before all readers have acknowledged it as soon as a later sample becomes available. It only affects DCPS data writers with a history QoS setting of KEEP_LAST with depth 1. The default setting, *false*, mimics the behaviour of the Vortex OpenSplice RT networking and is necessary to make the behaviour of wait_for_acknowledgements() consistent across the networking services.

- Full path: //OpenSplice/DDSI2Service/Internal/AggressiveKeepLastWhc
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

AssumeMulticastCapable
----------------------

**Internal** This element controls which network interfaces are assumed to be capable of multicasting even when the interface flags returned by the operating system state it is not (this provides a workaround for some platforms). It is a comma-separated lists of patterns (with ? and \* wildcards) against which the interface names are matched.

- Full path: //OpenSplice/DDSI2Service/Internal/AssumeMulticastCapable
- Format: string
- Occurrences min-max: 0-1

AutoReschedNackDelay
--------------------

**Internal** This setting controls the interval with which a reader will continue NACK'ing missing samples in the absence of a response from the writer, as a protection mechanism against writers incorrectly stopping the sending of HEARTBEAT messages.

Valid values are finite durations with an explicit unit or the keyword 'inf' for infinity. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2Service/Internal/AutoReschedNackDelay
- Format: string
- Default value: 1 s
- Occurrences min-max: 0-1

BuiltinEndpointSet
------------------

**Internal** This element controls which participants will have which built-in endpoints for the discovery and liveliness protocols. Valid values are:

- *full*: all participants have all endpoints;
- *writers*: all participants have the writers, but just one has the readers;
- *minimal*: only one participant has built-in endpoints.

The default is *writers*, as this is thought to be compliant and reasonably efficient. *Minimal* may or may not be compliant but is most efficient, and *full* is inefficient but certain to be compliant. See also Internal/ConservativeBuiltinReaderStartup.

- Full path: //OpenSplice/DDSI2Service/Internal/BuiltinEndpointSet
- Format: enumeration
- Default value: writers
- Valid values: full, writers, minimal
- Occurrences min-max: 0-1

ConservativeBuiltinReaderStartup
--------------------------------

**Internal** This element forces all DDSI2 built-in discovery-related readers to request all historical data, instead of just one for each "topic". There is no indication that any of the current DDSI implementations requires changing of this setting, but it is conceivable that an implementation might track which participants have been informed of the existence of endpoints and which have not been, refusing communication with those that have "can't" know.

Should it be necessary to hide DDSI2's shared discovery behaviour, set this to *true* and Internal/BuiltinEndpointSet to *full*.

- Full path: //OpenSplice/DDSI2Service/Internal/ConservativeBuiltinReaderStartup
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

ControlTopic
------------

**Internal** The ControlTopic element allows configured whether DDSI2 provides a special control interface via a predefined topic or not.

- Full path: //OpenSplice/DDSI2Service/Internal/ControlTopic
- Occurrences min-max: 0-1
- Child elements: Deaf, Mute
- Optional attributes: enable

enable
^^^^^^

**Internal** This attribute controls whether the DDSI2 control topic is defined and acted upon by DDSI2

- Full path: //OpenSplice/DDSI2Service/Internal/ControlTopic[@enable]
- Format: boolean
- Default value: false
- Required: false

Deaf
^^^^

**Internal** This element controls whether DDSI2 defaults to deaf mode or to normal mode. This controls both the initial behaviour and what behaviour it auto-reverts to.

- Full path: //OpenSplice/DDSI2Service/Internal/ControlTopic/Deaf
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

Mute
^^^^

**Internal** This element controls whether DDSI2 defaults to mute mode or to normal mode. This controls both the initial behaviour and what behaviour it auto-reverts to.

- Full path: //OpenSplice/DDSI2Service/Internal/ControlTopic/Mute
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

DDSI2DirectMaxThreads
---------------------

**Internal** This element sets the maximum number of extra threads for an experimental, undocumented and unsupported direct mode.

- Full path: //OpenSplice/DDSI2Service/Internal/DDSI2DirectMaxThreads
- Format: integer
- Default value: 1
- Occurrences min-max: 0-1

DefragReliableMaxSamples
------------------------

**Internal** This element sets the maximum number of samples that can be defragmented simultaneously for a reliable writer. This has to be large enough to handle retransmissions of historical data in addition to new samples.

- Full path: //OpenSplice/DDSI2Service/Internal/DefragReliableMaxSamples
- Format: integer
- Default value: 16
- Occurrences min-max: 0-1

DefragUnreliableMaxSamples
--------------------------

**Internal** This element sets the maximum number of samples that can be defragmented simultaneously for a best-effort writers.

- Full path: //OpenSplice/DDSI2Service/Internal/DefragUnreliableMaxSamples
- Format: integer
- Default value: 4
- Occurrences min-max: 0-1

DeliveryQueueMaxSamples
-----------------------

**Internal** This element controls the Maximum size of a delivery queue, expressed in samples. Once a delivery queue is full, incoming samples destined for that queue are dropped until space becomes available again.

- Full path: //OpenSplice/DDSI2Service/Internal/DeliveryQueueMaxSamples
- Format: integer
- Default value: 256
- Occurrences min-max: 0-1

ForwardAllMessages
------------------

**Internal** Forward all messages from a writer, rather than trying to forward each sample only once. The default of trying to forward each sample only once filters out duplicates for writers in multiple partitions under nearly all circumstances, but may still publish the odd duplicate. Note: the current implementation also can lose in contrived test cases, that publish more than 2\*\*32 samples using a single data writer in conjunction with carefully controlled management of the writer history via cooperating local readers.

- Full path: //OpenSplice/DDSI2Service/Internal/ForwardAllMessages
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

ForwardRemoteData
-----------------

**Internal** This element controls whether DDSI2 forwards data received from other network services in the domain.

- Full path: //OpenSplice/DDSI2Service/Internal/ForwardRemoteData
- Format: enumeration
- Default value: default
- Valid values: false, true, default
- Occurrences min-max: 0-1

GenerateKeyhash
---------------

**Internal** When true, include keyhashes in outgoing data for topics with keys.

- Full path: //OpenSplice/DDSI2Service/Internal/GenerateKeyhash
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

HeartbeatInterval
-----------------

**Internal** This element sets the base interval for the asynchronous, periodic writer heartbeats when unacknowledged data is present in its writer history cache. The actual interval is dynamically adjusted, the attributes of this element allow further configuration.

Valid values are finite durations with an explicit unit or the keyword 'inf' for infinity. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2Service/Internal/HeartbeatInterval
- Format: string
- Default value: 100 ms
- Occurrences min-max: 0-1
- Optional attributes: max, min, minsched

max
^^^

**Internal** This attribute sets the maximum interval for periodic heartbeats.

Valid values are finite durations with an explicit unit or the keyword 'inf' for infinity. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2Service/Internal/HeartbeatInterval[@max]
- Format: string
- Default value: 8 s
- Required: false

min
^^^

**Internal** This attribute sets the minimum interval that must have passed since the most recent heartbeat from a writer, before another asynchronous (not directly related to writing) will be sent.

Valid values are finite durations with an explicit unit or the keyword 'inf' for infinity. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2Service/Internal/HeartbeatInterval[@min]
- Format: string
- Default value: 5 ms
- Required: false

minsched
^^^^^^^^

**Internal** This attribute sets the minimum interval for periodic heartbeats. Other events may still cause heartbeats to go out.

Valid values are finite durations with an explicit unit or the keyword 'inf' for infinity. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2Service/Internal/HeartbeatInterval[@minsched]
- Format: string
- Default value: 20 ms
- Required: false

LateAckMode
-----------

**Internal** Ack a sample only when it has been delivered, instead of when committed to delivering it.

- Full path: //OpenSplice/DDSI2Service/Internal/LateAckMode
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

LeaseDuration
-------------

**Internal** This setting controls the default participant lease duration. 
The unit must be specified explicitly. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2Service/Internal/LeaseDuration
- Format: string
- Default value: 0 s
- Valid values: 0 / 1hr
- Occurrences min-max: 0-1

LegacyFragmentation
-------------------

**Internal** This option enables a backwards-compatible, non-compliant setting and interpretation of the control flags in fragmented data messages. To be enabled *only* when requiring interoperability between compliant and non-compliant versions of DDSI2 for large messages.

- Full path: //OpenSplice/DDSI2Service/Internal/LegacyFragmentation
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

LogStackTraces
--------------

**Internal** This element controls whether or not to write stack traces to the DDSI2 trace when a thread fails to make progress (on select platforms only).

- Full path: //OpenSplice/DDSI2Service/Internal/LogStackTraces
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

MaxParticipants
---------------

**Internal** This elements configures the maximum number of DCPS domain participants this DDSI2 instance is willing to service. 0 is unlimited.

- Full path: //OpenSplice/DDSI2Service/Internal/MaxParticipants
- Format: integer
- Default value: 0
- Occurrences min-max: 0-1

MaxQueuedRexmitBytes
--------------------

**Internal** This setting limits the maximum number of bytes queued for retransmission. The default value of 0 is unlimited unless an AuxiliaryBandwidthLimit has been set, in which case it becomes NackDelay \* AuxiliaryBandwidthLimit. It must be large enough to contain the largest sample that may need to be retransmitted.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2Service/Internal/MaxQueuedRexmitBytes
- Format: string
- Default value: 50 kB
- Occurrences min-max: 0-1

MaxQueuedRexmitMessages
-----------------------

**Internal** This settings limits the maximum number of samples queued for retransmission.

- Full path: //OpenSplice/DDSI2Service/Internal/MaxQueuedRexmitMessages
- Format: integer
- Default value: 200
- Occurrences min-max: 0-1

MaxSampleSize
-------------

**Internal** This setting controls the maximum (CDR) serialised size of samples that DDSI2 will forward in either direction. Samples larger than this are discarded with a warning.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2Service/Internal/MaxSampleSize
- Format: string
- Default value: 2147483647 B
- Occurrences min-max: 0-1

MeasureHbToAckLatency
---------------------

**Internal** This element enables heartbeat-to-ack latency among DDSI2 services by prepending timestamps to Heartbeat and AckNack messages and calculating round trip times. This is non-standard behaviour. The measured latencies are quite noisy and are currently not used anywhere.

- Full path: //OpenSplice/DDSI2Service/Internal/MeasureHbToAckLatency
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

MinimumSocketReceiveBufferSize
------------------------------

**Internal** This setting controls the minimum size of socket receive buffers. The operating system provides some size receive buffer upon creation of the socket, this option can be used to increase the size of the buffer beyond that initially provided by the operating system. If the buffer size cannot be increased to the specified size, an error is reported.

The default setting is the word "default", which means DDSI2 will attempt to increase the buffer size to 1MB, but will silently accept a smaller buffer should that attempt fail.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2Service/Internal/MinimumSocketReceiveBufferSize
- Format: string
- Default value: default
- Occurrences min-max: 0-1

MinimumSocketSendBufferSize
---------------------------

**Internal** This setting controls the minimum size of socket send buffers. This setting can only increase the size of the send buffer, if the operating system by default creates a larger buffer, it is left unchanged.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2Service/Internal/MinimumSocketSendBufferSize
- Format: string
- Default value: 64 KiB
- Occurrences min-max: 0-1

MirrorRemoteEntities
--------------------

**Internal** This element controls whether DDSI2 mirrors all entities in the domain in DDSI or only local ones. Default is to discover remote ones iff General/LocalDiscoveryPartition is not the built-in partition.

- Full path: //OpenSplice/DDSI2Service/Internal/MirrorRemoteEntities
- Format: enumeration
- Default value: default
- Valid values: false, true, default
- Occurrences min-max: 0-1

MonitorPort
-----------

**Internal** This element allows configuring a service that dumps a text description of part the internal state to TCP clients. By default (-1), this is disabled; specifying 0 means a kernel-allocated port is used; a positive number is used as the TCP port number.

- Full path: //OpenSplice/DDSI2Service/Internal/MonitorPort
- Format: integer
- Default value: -1
- Occurrences min-max: 0-1

NackDelay
---------

**Internal** This setting controls the delay between receipt of a HEARTBEAT indicating missing samples and a NACK (ignored when the HEARTBEAT requires an answer). However, no NACK is sent if a NACK had been scheduled already for a response earlier than the delay requests: then that NACK will incorporate the latest information.

The unit must be specified explicitly. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2Service/Internal/NackDelay
- Format: string
- Default value: 10 ms
- Valid values: 0 / 1hr
- Occurrences min-max: 0-1

PreEmptiveAckDelay
------------------

**Internal** This setting controls the delay between the discovering a remote writer and sending a pre-emptive AckNack to discover the range of data available.

The unit must be specified explicitly. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2Service/Internal/PreEmptiveAckDelay
- Format: string
- Default value: 10 ms
- Valid values: 0 / 1hr
- Occurrences min-max: 0-1

PrimaryReorderMaxSamples
------------------------

**Internal** This element sets the maximum size in samples of a primary re-order administration. Each proxy writer has one primary re-order administration to buffer the packet flow in case some packets arrive out of order. Old samples are forwarded to secondary re-order administrations associated with readers in need of historical data.

- Full path: //OpenSplice/DDSI2Service/Internal/PrimaryReorderMaxSamples
- Format: integer
- Default value: 64
- Occurrences min-max: 0-1

PrioritizeRetransmit
--------------------

**Internal** This element controls whether retransmits are prioritized over new data, speeding up recovery.

- Full path: //OpenSplice/DDSI2Service/Internal/PrioritizeRetransmit
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

RediscoveryBlacklistDuration
----------------------------

**Internal** This element controls for how long a remote participant that was previously deleted will remain on a blacklist to prevent rediscovery, giving the software on a node time to perform any cleanup actions it needs to do. To some extent this delay is required internally by DDSI2, but in the default configuration with the 'enforce' attribute set to false, DDSI2 will reallow rediscovery as soon as it has cleared its internal administration. Setting it to too small a value may result in the entry being pruned from the blacklist before DDSI2 is ready, it is therefore recommended to set it to at least several seconds.

Valid values are finite durations with an explicit unit or the keyword 'inf' for infinity. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2Service/Internal/RediscoveryBlacklistDuration
- Format: string
- Default value: 10s
- Occurrences min-max: 0-1
- Optional attributes: enforce

enforce
^^^^^^^

**Internal** This attribute controls whether the configured time during which recently deleted participants will not be rediscovered (i.e., "black listed") is enforced and following complete removal of the participant in DDSI2, or whether it can be rediscovered earlier provided all traces of that participant have been removed already.

- Full path: //OpenSplice/DDSI2Service/Internal/RediscoveryBlacklistDuration[@enforce]
- Format: boolean
- Default value: false
- Required: false

ResponsivenessTimeout
---------------------

**Internal** This element controls for how long an unresponsive reader can block the transmit thread by failing to acknowledge data when a writer's DDSI2 write cache is full. If after this time the writer's cache has not shrunk to below the low-water mark, the reader is considered unresponsive and degraded to unreliable. It will be restored to reliable service once it resumes acknowledging samples.

Valid values are finite durations with an explicit unit or the keyword 'inf' for infinity. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2Service/Internal/ResponsivenessTimeout
- Format: string
- Default value: inf
- Occurrences min-max: 0-1

RetransmitMerging
-----------------

**Internal** This elements controls the addressing and timing of retransmits. Possible values are:

- *never*: retransmit only to the NACK-ing reader;
- *adaptive*: attempt to combine retransmits needed for reliability, but send historical (transient-local) data to the requesting reader only;
- *always*: do not distinguish between different causes, always try to merge.

The default is *adaptive*. See also Internal/RetransmitMergingPeriod.

- Full path: //OpenSplice/DDSI2Service/Internal/RetransmitMerging
- Format: enumeration
- Default value: adaptive
- Valid values: never, adaptive, always
- Occurrences min-max: 0-1

RetransmitMergingPeriod
-----------------------

**Internal** This setting determines the size of the time window in which a NACK of some sample is ignored because a retransmit of that sample has been multicasted too recently. This setting has no effect on unicasted retransmits.

See also Internal/RetransmitMerging.

The unit must be specified explicitly. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2Service/Internal/RetransmitMergingPeriod
- Format: string
- Default value: 5 ms
- Valid values: 0 / 1s
- Occurrences min-max: 0-1

RetryOnRejectBestEffort
-----------------------

**Internal** Whether or not to locally retry pushing a received best-effort sample into the reader caches when resource limits are reached.

- Full path: //OpenSplice/DDSI2Service/Internal/RetryOnRejectBestEffort
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

RetryOnRejectDuration
---------------------

**Internal** How long to keep locally retrying pushing a received sample into the reader caches when resource limits are reached. Default is dependent on Internal/LateAckMode: if the latter is false, it is 80% of Internal/ResponsivenessTimeout, otherwise it is 0.

Valid values are finite durations with an explicit unit or the keyword 'inf' for infinity. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2Service/Internal/RetryOnRejectDuration
- Format: string
- Default value: default
- Occurrences min-max: 0-1

SPDPResponseMaxDelay
--------------------

**Internal** Maximum pseudo-random delay in milliseconds between discovering a remote participant and responding to it.

The unit must be specified explicitly. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2Service/Internal/SPDPResponseMaxDelay
- Format: string
- Default value: 0 ms
- Valid values: 0 / 1s
- Occurrences min-max: 0-1

ScheduleTimeRounding
--------------------

**Internal** This setting allows the timing of scheduled events to be rounded up so that more events can be handled in a single cycle of the event queue. The default is 0 and causes no rounding at all, i.e. are scheduled exactly, whereas a value of 10ms would mean that events are rounded up to the nearest 10 milliseconds.

The unit must be specified explicitly. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2Service/Internal/ScheduleTimeRounding
- Format: string
- Default value: 0 ms
- Valid values: 0 / 1hr
- Occurrences min-max: 0-1

SecondaryReorderMaxSamples
--------------------------

**Internal** This element sets the maximum size in samples of a secondary re-order administration. The secondary re-order administration is per reader in need of historical data.

- Full path: //OpenSplice/DDSI2Service/Internal/SecondaryReorderMaxSamples
- Format: integer
- Default value: 16
- Occurrences min-max: 0-1

SquashParticipants
------------------

**Internal** This element controls whether DDSI2 advertises all the domain participants it serves in DDSI (when set to *false*), or rather only one domain participant (the one corresponding to the DDSI2 process; when set to *true*). In the latter case DDSI2 becomes the virtual owner of all readers and writers of all domain participants, dramatically reducing discovery traffic (a similar effect can be obtained by setting Internal/BuiltinEndpointSet to "minimal" but with less loss of information).

- Full path: //OpenSplice/DDSI2Service/Internal/SquashParticipants
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

SuppressSPDPMulticast
---------------------

**Internal** The element controls whether the mandatory multicasting of the participant discovery packets occurs. Completely disabling multicasting requires this element be set to *true*, and generally requires explicitly listing peers to ping for unicast discovery.

See also General/AllowMulticast.

- Full path: //OpenSplice/DDSI2Service/Internal/SuppressSPDPMulticast
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

SynchronousDeliveryLatencyBound
-------------------------------

**Internal** This element controls whether samples sent by a writer with QoS settings transport_priority >= SynchronousDeliveryPriorityThreshold and a latency_budget at most this element's value will be delivered synchronously from the "recv" thread, all others will be delivered asynchronously through delivery queues. This reduces latency at the expense of aggregate bandwidth.

Valid values are finite durations with an explicit unit or the keyword 'inf' for infinity. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2Service/Internal/SynchronousDeliveryLatencyBound
- Format: string
- Default value: inf
- Occurrences min-max: 0-1

SynchronousDeliveryPriorityThreshold
------------------------------------

**Internal** This element controls whether samples sent by a writer with QoS settings latency_budget <= SynchronousDeliveryLatencyBound and transport_priority greater than or equal to this element's value will be delivered synchronously from the "recv" thread, all others will be delivered asynchronously through delivery queues. This reduces latency at the expense of aggregate bandwidth.

- Full path: //OpenSplice/DDSI2Service/Internal/SynchronousDeliveryPriorityThreshold
- Format: integer
- Default value: 0
- Occurrences min-max: 0-1

Test
----

**Internal** Testing options.

- Full path: //OpenSplice/DDSI2Service/Internal/Test
- Occurrences min-max: 0-1
- Child elements: XmitLossiness

XmitLossiness
^^^^^^^^^^^^^

**Internal** This element controls the fraction of outgoing packets to drop, specified as samples per thousand.

- Full path: //OpenSplice/DDSI2Service/Internal/Test/XmitLossiness
- Format: integer
- Default value: 0
- Occurrences min-max: 0-1

UnicastResponseToSPDPMessages
-----------------------------

**Internal** This element controls whether the response to a newly discovered participant is sent as a unicasted SPDP packet, instead of rescheduling the periodic multicasted one. There is no known benefit to setting this to *false*.

- Full path: //OpenSplice/DDSI2Service/Internal/UnicastResponseToSPDPMessages
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

UseMulticastIfMreqn
-------------------

**Internal** Do not use.

- Full path: //OpenSplice/DDSI2Service/Internal/UseMulticastIfMreqn
- Format: integer
- Default value: 0
- Occurrences min-max: 0-1

Watermarks
----------

**Internal** Watermarks for flow-control.

- Full path: //OpenSplice/DDSI2Service/Internal/Watermarks
- Occurrences min-max: 0-1
- Child elements: WhcAdaptive, WhcHigh, WhcHighInit, WhcLow

WhcAdaptive
^^^^^^^^^^^

**Internal** This element controls whether DDSI2 will adapt the high-water mark to current traffic conditions, based on retransmit requests and transmit pressure.

- Full path: //OpenSplice/DDSI2Service/Internal/Watermarks/WhcAdaptive
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

WhcHigh
^^^^^^^

**Internal** This element sets the maximum allowed high-water mark for the DDSI2 WHCs, expressed in bytes. A writer is suspended when the WHC reaches this size.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2Service/Internal/Watermarks/WhcHigh
- Format: string
- Default value: 100 kB
- Occurrences min-max: 0-1

WhcHighInit
^^^^^^^^^^^

**Internal** This element sets the initial level of the high-water mark for the DDSI2 WHCs, expressed in bytes.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2Service/Internal/Watermarks/WhcHighInit
- Format: string
- Default value: 30 kB
- Occurrences min-max: 0-1

WhcLow
^^^^^^

**Internal** This element sets the low-water mark for the DDSI2 WHCs, expressed in bytes. A suspended writer resumes transmitting when its DDSI2 WHC shrinks to this size.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2Service/Internal/Watermarks/WhcLow
- Format: string
- Default value: 1 kB
- Occurrences min-max: 0-1

WriterLingerDuration
--------------------

**Internal** This setting controls the maximum duration for which actual deletion of a reliable writer with unacknowledged data in its history will be postponed to provide proper reliable transmission.
The unit must be specified explicitly. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2Service/Internal/WriterLingerDuration
- Format: string
- Default value: 1 s
- Valid values: 0 / 1hr
- Occurrences min-max: 0-1

SSL
===

The SSL element allows specifying various parameters related to using SSL/TLS for DDSI over TCP.

- Full path: //OpenSplice/DDSI2Service/SSL
- Occurrences min-max: 0-1
- Child elements: CertificateVerification, Ciphers, Enable, EntropyFile, KeyPassphrase, KeystoreFile, SelfSignedCertificates, VerifyClient

CertificateVerification
-----------------------

If disabled this allows SSL connections to occur even if an X509 certificate fails verification.

- Full path: //OpenSplice/DDSI2Service/SSL/CertificateVerification
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

Ciphers
-------

The set of ciphers used by SSL/TLS

- Full path: //OpenSplice/DDSI2Service/SSL/Ciphers
- Format: string
- Default value: ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH
- Occurrences min-max: 0-1

Enable
------

This enables SSL/TLS for TCP.

- Full path: //OpenSplice/DDSI2Service/SSL/Enable
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

EntropyFile
-----------

The SSL/TLS random entropy file name.

- Full path: //OpenSplice/DDSI2Service/SSL/EntropyFile
- Format: string
- Occurrences min-max: 0-1

KeyPassphrase
-------------

The SSL/TLS key pass phrase for encrypted keys.

- Full path: //OpenSplice/DDSI2Service/SSL/KeyPassphrase
- Format: string
- Default value: secret
- Occurrences min-max: 0-1

KeystoreFile
------------

The SSL/TLS key and certificate store file name. The keystore must be in PEM format.

- Full path: //OpenSplice/DDSI2Service/SSL/KeystoreFile
- Format: string
- Default value: keystore
- Occurrences min-max: 0-1

SelfSignedCertificates
----------------------

This enables the use of self signed X509 certificates.

- Full path: //OpenSplice/DDSI2Service/SSL/SelfSignedCertificates
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

VerifyClient
------------

This enables an SSL server checking the X509 certificate of a connecting client.

- Full path: //OpenSplice/DDSI2Service/SSL/VerifyClient
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

Sizing
======

The Sizing element specifies a variety of configuration settings dealing with expected system sizes, buffer sizes, &c.

- Full path: //OpenSplice/DDSI2Service/Sizing
- Occurrences min-max: 0-1
- Child elements: EndpointsInSystem, LocalEndpoints, NetworkQueueSize, ReceiveBufferChunkSize

EndpointsInSystem
-----------------

This endpoint specifies the expected maximum number of endpoints in the network. Underestimating this number will have a significant performance impact, but will not affect correctness; signficantly overestimating it will cause more memory to be used than necessary.

- Full path: //OpenSplice/DDSI2Service/Sizing/EndpointsInSystem
- Format: integer
- Default value: 20000
- Occurrences min-max: 0-1

LocalEndpoints
--------------

This element specifies the expected maximum number of endpoints local to one DDSI2 service. Underestimating this number will have a significant performance impact, but will not affect correctness; signficantly overestimating it will cause more memory to be used than necessary.

- Full path: //OpenSplice/DDSI2Service/Sizing/LocalEndpoints
- Format: integer
- Default value: 1000
- Occurrences min-max: 0-1

NetworkQueueSize
----------------

This element specifies the maximum number of samples in the network queue. Write/dispose operations add samples to this queue, the DDSI2 service drains it. Larger values allow large bursts of writes to occur without forcing synchronization between the application and the DDSI2 service, but do introduce the potential for longer latencies and increase the maximum amount of memory potentially occupied by messages in the queue.

- Full path: //OpenSplice/DDSI2Service/Sizing/NetworkQueueSize
- Format: integer
- Default value: 1000
- Occurrences min-max: 0-1

ReceiveBufferChunkSize
----------------------

This element specifies the size of one allocation unit in the receive buffer. Must be greater than the maximum packet size by a modest amount (too large packets are dropped). Each allocation is shrunk immediately after processing a message, or freed straightaway.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2Service/Sizing/ReceiveBufferChunkSize
- Format: string
- Default value: 128 KiB
- Occurrences min-max: 0-1

Watermarks
----------

  { LEAF ("ReceiveBufferSize"), 1, "1 MiB", ABSOFF (rbuf_size), 0, uf_memsize, 0, pf_memsize,    "This element sets the size of a single receive buffer. Many receive buffers may be needed. Their size must be greater than ReceiveBufferChunkSize by a modest amount.

- Full path: //OpenSplice/DDSI2Service/Sizing/Watermarks
- Occurrences min-max: 0-1
- Child elements: WhcAdaptive, WhcHigh, WhcHighInit, WhcLow

WhcAdaptive
^^^^^^^^^^^

This element controls whether DDSI2 will adapt the high-water mark to current traffic conditions, based on retransmit requests and transmit pressure.

- Full path: //OpenSplice/DDSI2Service/Sizing/Watermarks/WhcAdaptive
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

WhcHigh
^^^^^^^

This element sets the maximum allowed high-water mark for the DDSI2 WHCs, expressed in bytes. A writer is suspended when the WHC reaches this size.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2Service/Sizing/Watermarks/WhcHigh
- Format: string
- Default value: 100 kB
- Occurrences min-max: 0-1

WhcHighInit
^^^^^^^^^^^

This element sets the initial level of the high-water mark for the DDSI2 WHCs, expressed in bytes.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2Service/Sizing/Watermarks/WhcHighInit
- Format: string
- Default value: 30 kB
- Occurrences min-max: 0-1

WhcLow
^^^^^^

This element sets the low-water mark for the DDSI2 WHCs, expressed in bytes. A suspended writer resumes transmitting when its DDSI2 WHC shrinks to this size.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2Service/Sizing/Watermarks/WhcLow
- Format: string
- Default value: 1 kB
- Occurrences min-max: 0-1

TCP
===

The TCP element allows specifying various parameters related to running DDSI over TCP.

- Full path: //OpenSplice/DDSI2Service/TCP
- Occurrences min-max: 0-1
- Child elements: Enable, NoDelay, Port, ReadTimeout, WriteTimeout

Enable
------

This element enables the optional TCP transport.

- Full path: //OpenSplice/DDSI2Service/TCP/Enable
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

NoDelay
-------

This element enables the TCP_NODELAY socket option, preventing multiple DDSI messages being sent in the same TCP request. Setting this option typically optimises latency over throughput.

- Full path: //OpenSplice/DDSI2Service/TCP/NoDelay
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1

Port
----

This element specifies the TCP port number on which DDSI2 accepts connections. If the port is set it is used in entity locators, published with DDSI discovery. Dynamically allocated if zero. Disabled if -1 or not configured. If disabled other DDSI services will not be able to establish connections with the service, the service can only communicate by establishing connections to other services.

- Full path: //OpenSplice/DDSI2Service/TCP/Port
- Format: integer
- Default value: -1
- Valid values: -1 / 65535
- Occurrences min-max: 0-1

ReadTimeout
-----------

This element specifies the timeout for blocking TCP read operations. If this timeout expires then the connection is closed.

The unit must be specified explicitly. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2Service/TCP/ReadTimeout
- Format: string
- Default value: 2 s
- Valid values: 0 / 1hr
- Occurrences min-max: 0-1

WriteTimeout
------------

This element specifies the timeout for blocking TCP write operations. If this timeout expires then the connection is closed.

The unit must be specified explicitly. Recognised units: ns, us, ms, s, min, hr, day.

- Full path: //OpenSplice/DDSI2Service/TCP/WriteTimeout
- Format: string
- Default value: 2 s
- Valid values: 0 / 1hr
- Occurrences min-max: 0-1

ThreadPool
==========

The ThreadPool element allows specifying various parameters related to using a thread pool to send DDSI messages to multiple unicast addresses (TCP or UDP).

- Full path: //OpenSplice/DDSI2Service/ThreadPool
- Occurrences min-max: 0-1
- Child elements: Enable, ThreadMax, Threads

Enable
------

This element enables the optional thread pool.

- Full path: //OpenSplice/DDSI2Service/ThreadPool/Enable
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

ThreadMax
---------

This elements configures the maximum number of threads in the thread pool.

- Full path: //OpenSplice/DDSI2Service/ThreadPool/ThreadMax
- Format: integer
- Default value: 8
- Occurrences min-max: 0-1

Threads
-------

This elements configures the initial number of threads in the thread pool.

- Full path: //OpenSplice/DDSI2Service/ThreadPool/Threads
- Format: integer
- Default value: 4
- Occurrences min-max: 0-1

Threads
=======

This element is used to set thread properties.

- Full path: //OpenSplice/DDSI2Service/Threads
- Occurrences min-max: 0-1

Thread
------

This element is used to set thread properties.

- Full path: //OpenSplice/DDSI2Service/Threads/Thread
- Occurrences min-max: 0-1000
- Child elements: StackSize
- Required attributes: Name

Name
^^^^

The Name of the thread for which properties are being set. The following threads exist:

- *gc*: garbage collector thread involved in deleting entities;
- *recv*: receive thread, taking data from the network and running the protocol state machine;
- *dq.builtins*: delivery thread for DDSI-builtin data, primarily for discovery;
- *lease*: DDSI liveliness monitoring;
- *tev*: general timed-event handling, retransmits and discovery;
- *xmit.CHAN*: transmit thread for channel CHAN;
- *dq.CHAN*: delivery thread for channel CHAN;
- *tev.CHAN*: timed-even thread for channel CHAN.

- Full path: //OpenSplice/DDSI2Service/Threads/Thread[@Name]
- Format: string
- Default value: n/a
- Required: true

Scheduling
^^^^^^^^^^

This element configures the scheduling properties of the thread.

- Full path: //OpenSplice/DDSI2Service/Threads/Thread/Scheduling
- Occurrences min-max: 0-1
- Child elements: Class, Priority

Class
~~~~~

This element specifies the thread scheduling class (*realtime*, *timeshare* or *default*). The user may need special privileges from the underlying operating system to be able to assign some of the privileged scheduling classes.

- Full path: //OpenSplice/DDSI2Service/Threads/Thread/Scheduling/Class
- Format: enumeration
- Default value: default
- Valid values: realtime, timeshare, default
- Occurrences min-max: 0-1

Priority
~~~~~~~~

This element specifies the thread priority (decimal integer or *default*). Only priorities that are supported by the underlying operating system can be assigned to this element. The user may need special privileges from the underlying operating system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/DDSI2Service/Threads/Thread/Scheduling/Priority
- Format: string
- Default value: default
- Occurrences min-max: 0-1

StackSize
^^^^^^^^^

This element configures the stack size for this thread. The default value *default* leaves the stack size at the operating system default.

The unit must be specified explicitly. Recognised units: B (bytes), kB & KiB (2 :sup:`10` bytes), MB & MiB (2 :sup:`20` bytes), GB & GiB (2 :sup:`30` bytes).

- Full path: //OpenSplice/DDSI2Service/Threads/Thread/StackSize
- Format: string
- Default value: default
- Occurrences min-max: 0-1

Tracing
=======

The Tracing element controls the amount and type of information that is written into the tracing log by the DDSI service. This is useful to track the DDSI service during application development.

- Full path: //OpenSplice/DDSI2Service/Tracing
- Occurrences min-max: 0-1
- Child elements: AppendToFile, EnableCategory, OutputFile, PacketCaptureFile, Timestamps, Verbosity

AppendToFile
------------

This option specifies whether the output is to be appended to an existing log file. The default is to create a new log file each time, which is generally the best option if a detailed log is generated.

- Full path: //OpenSplice/DDSI2Service/Tracing/AppendToFile
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

EnableCategory
--------------

This element enables individual logging categories. These are enabled in addition to those enabled by Tracing/Verbosity. Recognised categories are:

- *fatal*: all fatal errors, errors causing immediate termination
- *error*: failures probably impacting correctness but not necessarily causing immediate termination
- *warning*: abnormal situations that will likely not impact correctness
- *config*: full dump of the configuration
- *info*: general informational notices
- *discovery*: all discovery activity
- *data*: include data content of samples in traces
- *radmin*: receive buffer administration
- *timing*: periodic reporting of CPU loads per thread
- *traffic*: periodic reporting of total outgoing data
- *whc*: tracing of writer history cache changes
- *tcp*: tracing of TCP-specific activity
- *topic*: tracing of topic definitions
- >i>plist*: tracing of discovery parameter list interpretation 

In addition, there is the keyword *trace* that enables all but *radmin*, *topic*, *plist* and *whc*
.
The categorisation of tracing output is incomplete and hence most of the verbosity levels and categories are not of much use in the current release. This is an ongoing process and here we describe the target situation rather than the current situation. Currently, the most useful is *trace*.

- Full path: //OpenSplice/DDSI2Service/Tracing/EnableCategory
- Format: string
- Occurrences min-max: 0-1

OutputFile
----------

This option specifies where the logging is printed to. Note that *stdout* and *stderr* are treated as special values, representing "standard out" and "standard error" respectively. No file is created unless logging categories are enabled using the Tracing/Verbosity or Tracing/EnabledCategory settings.

- Full path: //OpenSplice/DDSI2Service/Tracing/OutputFile
- Format: string
- Default value: ddsi2.log
- Occurrences min-max: 0-1

PacketCaptureFile
-----------------

This option specifies the file to which received and sent packets will be logged in the "pcap" format suitable for analysis using common networking tools, such as WireShark. IP and UDP headers are ficitious, in particular the destination address of received packets. The TTL may be used to distinguish between sent and received packets: it is 255 for sent packets and 128 for received ones. Currently IPv4 only.

- Full path: //OpenSplice/DDSI2Service/Tracing/PacketCaptureFile
- Format: string
- Occurrences min-max: 0-1

Timestamps
----------

This option has no effect.

- Full path: //OpenSplice/DDSI2Service/Tracing/Timestamps
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1
- Optional attributes: absolute

absolute
^^^^^^^^

This option has no effect

- Full path: //OpenSplice/DDSI2Service/Tracing/Timestamps[@absolute]
- Format: boolean
- Default value: true
- Required: false

Verbosity
---------

This element enables standard groups of categories, based on a desired verbosity level. This is in addition to the categories enabled by the Tracing/EnableCategory setting. Recognised verbosity levels and the categories they map to are:

- *none*: no DDSI2 log
- *severe*: error and fatal
- *warning*: *severe* + warning
- *info*: *warning* + info
- *config*: *info* + config
- *fine*: *config* + discovery
- *finer*: *fine* + traffic and timing
- *finest*: *finer* + trace

The categorisation of tracing output is incomplete and hence most of the verbosity levels and categories are not of much use in the current release. This is an ongoing process and here we describe the target situation rather than the current situation. Currently, the most useful verbosity levels are *config*, *fine* and *finest*.

- Full path: //OpenSplice/DDSI2Service/Tracing/Verbosity
- Format: enumeration
- Default value: none
- Valid values: finest, finer, fine, config, info, warning, severe, none
- Occurrences min-max: 0-1

Watchdog
========

This element specifies the type of OS scheduling class will be used by the thread that announces its liveliness periodically.

- Full path: //OpenSplice/DDSI2Service/Watchdog
- Occurrences min-max: 0-1

Scheduling
----------

This element specifies the type of OS scheduling class will be used by the thread that announces its liveliness periodically.

- Full path: //OpenSplice/DDSI2Service/Watchdog/Scheduling
- Occurrences min-max: 0-1
- Child elements: Class, Priority

Class
^^^^^

This element specifies the thread scheduling class that will be used by the watchdog thread. The user may need the appropriate privileges from the underlying operating system to be able to assign some of the privileged scheduling classes.

- Full path: //OpenSplice/DDSI2Service/Watchdog/Scheduling/Class
- Format: enumeration
- Default value: default
- Valid values: realtime, timeshare, default
- Occurrences min-max: 0-1

Priority
^^^^^^^^

This element specifies the thread priority. Only priorities that are supported by the underlying operating system can be assigned to this element. The user may need special privileges from the underlying operating system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/DDSI2Service/Watchdog/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 0-1
- Optional attributes: priority_kind

priority_kind
~~~~~~~~~~~~~

This attribute specifies whether the specified Priority is a relative or absolute priority.

- Full path: //OpenSplice/DDSI2Service/Watchdog/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: relative
- Valid values: relative, absolute
- Required: false

TunerService
************

The TunerService configuration determines how the Tuner Service handles the
incoming client connections. It expects a root element named
OpenSplice/TunerService, in which several child-elements may be specified.
Each of these are listed and explained.

- Full path: //OpenSplice/TunerService
- Occurrences min-max: 0-*
- Required attributes: name

name
====

                This attribute identifies a configuration for the Tuner Service by name.
                Multiple Tuner Service configurations can be specified in one single
                resource file. The actual applicable configuration is determined by the
                value of the *name* attribute, which must match the one specified
                under the *OpenSplice/Domain/Service[@name]* in the configuration of
                the Domain Service.

- Full path: //OpenSplice/TunerService[@name]
- Format: string
- Default value: cmsoap
- Required: true

Watchdog
========

                This element controls the characteristics of the Watchdog thread.

- Full path: //OpenSplice/TunerService/Watchdog
- Occurrences min-max: 0-1

Scheduling
----------

                    This element specifies the type of OS scheduling class will be
                    used by the thread that announces its liveliness periodically.

- Full path: //OpenSplice/TunerService/Watchdog/Scheduling
- Occurrences min-max: 1-1
- Child elements: Priority, Class

Priority
^^^^^^^^

                        This element specifies the thread priority that will be used by the
                        watchdog thread. Only priorities that are supported by the
                        underlying operating system can be assigned to this element.
                        The user may need special privileges from the underlying operating
                        system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/TunerService/Watchdog/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
~~~~~~~~~~~~~

                            This attribute specifies whether the specified
                            Priority is a relative or absolute priority.

- Full path: //OpenSplice/TunerService/Watchdog/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Required: false

Class
^^^^^

                        This element specifies the thread scheduling class that will be used by
                        the watchdog thread. The user may need the appropriate privileges from
                        the underlying operating system to be able to assign some of the
                        privileged scheduling classes.

- Full path: //OpenSplice/TunerService/Watchdog/Scheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

Server
======

                This element determines the serverside behaviour of the Tuner service.

- Full path: //OpenSplice/TunerService/Server
- Occurrences min-max: 0-1
- Child elements: PortNr, Backlog, Verbosity

PortNr
------

                    This element determines the port number that the TunerService
                    will use to listen for incoming requests. This port number
                    must also be used by the Tuner tool to connect to this service.
                    Valid portnumbers are 1 till 65535.
                    When using the single process option set this value to Auto.

- Full path: //OpenSplice/TunerService/Server/PortNr
- Format: string
- Default value: 8000
- Occurrences min-max: 0-1

Backlog
-------

                    This element specifies the maximum number of client requests
                    that are allowed to be waiting when the maximum number of
                    concurrent requests is reached.

- Full path: //OpenSplice/TunerService/Server/Backlog
- Format: integer
- Default value: 5
- Valid values: 0 /  -
- Occurrences min-max: 0-1

Verbosity
---------

                    This element specifies the verbosity level of the logging of the service.

- Full path: //OpenSplice/TunerService/Server/Verbosity
- Format: enumeration
- Default value: 0
- Valid values: 0, 1, 2, 3, 4, 5
- Occurrences min-max: 0-1

Client
======

                This element determines how the Tuner service handles the
                incoming client connections.

- Full path: //OpenSplice/TunerService/Client
- Occurrences min-max: 0-1
- Child elements: MaxClients, MaxThreadsPerClient, LeasePeriod

MaxClients
----------

                    This element determines the maximum allowed number of clients
                    that are allowed to be concurrently connected to the Tuner
                    service. Clients are identified by IP-address.

- Full path: //OpenSplice/TunerService/Client/MaxClients
- Format: integer
- Default value: 10
- Valid values: 1 /  -
- Occurrences min-max: 0-1

MaxThreadsPerClient
-------------------

                    This element specifies the maximum number of threads that
                    the Tuner service will create for one specific client.
                    The number of threads determines the maximum number of
                    concurrent requests for a client.

- Full path: //OpenSplice/TunerService/Client/MaxThreadsPerClient
- Format: integer
- Default value: 10
- Valid values: 1 /  -
- Occurrences min-max: 0-1

LeasePeriod
-----------

                    This element determines the maximum amount of time in which a
                    connected client must update its lease. This can be done
                    implicitly by calling any function or explicitly by calling
                    the update lease function. The Tuner tool will automatically
                    update its lease when it is connected to the Tuner service.
                    This ensures that all resources are cleaned up automatically
                    if the client fails to update its lease within this period.

- Full path: //OpenSplice/TunerService/Client/LeasePeriod
- Dimension: seconds
- Default value: 15.0
- Valid values: 10.0 /  -
- Occurrences min-max: 0-1

Scheduling
----------

                    This element specifies the scheduling policies used to control the threads
                    that handle the client requests to the Tuner Service.

- Full path: //OpenSplice/TunerService/Client/Scheduling
- Occurrences min-max: 0-1
- Child elements: Priority, Class

Priority
^^^^^^^^

                        This element specifies the thread priority that will be used by the threads that handle
                        client requests to the Tuner Service. Only priorities that are supported by the underlying
                        operating system can be assigned to this element. The user may need special privileges from
                        the underlying operating system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/TunerService/Client/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
~~~~~~~~~~~~~

                            This attribute specifies whether the specified *Priority* is a relative
                            or absolute priority.

- Full path: //OpenSplice/TunerService/Client/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Required: false

Class
^^^^^

                        This element specifies the thread scheduling class that will be used by the threads that
                        handle client requests to the Tuner Service. The user may need the appropriate privileges
                        from the underlying operating system to be able to assign some of the privileged scheduling
                        classes.

- Full path: //OpenSplice/TunerService/Client/Scheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

GarbageCollector
================

                This element specifies the behaviour of the garbage collection
                thread of the service.

- Full path: //OpenSplice/TunerService/GarbageCollector
- Occurrences min-max: 0-1

Scheduling
----------

                    This element specifies the scheduling policies used to control the garbagage
                    collection thread of the Tuner Service.

- Full path: //OpenSplice/TunerService/GarbageCollector/Scheduling
- Occurrences min-max: 0-1
- Child elements: Priority, Class

Priority
^^^^^^^^

                        This element specifies the thread priority that will be used by the garbage collection
                        thread of the Tuner Service. Only priorities that are supported by the underlying
                        operating system can be assigned to this element. The user may need special privileges from
                        the underlying operating system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/TunerService/GarbageCollector/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
~~~~~~~~~~~~~

                            This attribute specifies whether the specified *Priority* is a relative
                            or absolute priority.

- Full path: //OpenSplice/TunerService/GarbageCollector/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Required: false

Class
^^^^^

                        This element specifies the thread scheduling class that will be used by the garbage
                        collection thread of the Tuner Service. The user may need the appropriate privileges
                        from the underlying operating system to be able to assign some of the privileged
                        scheduling classes.

- Full path: //OpenSplice/TunerService/GarbageCollector/Scheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

LeaseManagement
===============

                This element specifies the behaviour of the lease management
                thread of the Tuner Service.

- Full path: //OpenSplice/TunerService/LeaseManagement
- Occurrences min-max: 0-1

Scheduling
----------

                    This element specifies the scheduling policies used to control the lease
                    management thread of the Tuner Service.

- Full path: //OpenSplice/TunerService/LeaseManagement/Scheduling
- Occurrences min-max: 0-1
- Child elements: Priority, Class

Priority
^^^^^^^^

                        This element specifies the thread priority that will be used by the lease management
                        thread of the Tuner Service. Only priorities that are supported by the underlying
                        operating system can be assigned to this element. The user may need special privileges from
                        the underlying operating system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/TunerService/LeaseManagement/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
~~~~~~~~~~~~~

                            This attribute specifies whether the specified *Priority* is a relative
                            or absolute priority.

- Full path: //OpenSplice/TunerService/LeaseManagement/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Required: false

Class
^^^^^

                        This element specifies the thread scheduling class that will be used by the lease
                        management thread of the Tuner Service. The user may need the appropriate privileges
                        from the underlying operating system to be able to assign some of the privileged
                        scheduling classes.

- Full path: //OpenSplice/TunerService/LeaseManagement/Scheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

DbmsConnectService
******************

               The DbmsConnect Service configuration is responsible for DDS to DBMS bridging
               and expects a root element named *OpenSplice/DbmsConnectService*. Within
               this root element, the DbmsConnect Service will look for several child-elements.
               Each of these is listed and explained.

- Full path: //OpenSplice/DbmsConnectService
- Occurrences min-max: 0-*
- Required attributes: name

name
====

                This attribute identifies the configuration for the DBMS connect service by
                name. Multiple DBMS connect service configurations can be specified in one
                single resource file. The actual applicable configuration is determined by
                the value of the name attribute, which must match the one specified under the
                *OpenSplice/Domain/Service[@name]* in the configuration of
                the DomainService.

- Full path: //OpenSplice/DbmsConnectService[@name]
- Format: string
- Default value: dbmsconnect
- Required: true

Watchdog
========

                This element controls the characteristics of the Watchdog thread

- Full path: //OpenSplice/DbmsConnectService/Watchdog
- Occurrences min-max: 0-1

Scheduling
----------

                    This element specifies the type of OS scheduling class will be
                    used by the thread that announces its liveliness periodically.

- Full path: //OpenSplice/DbmsConnectService/Watchdog/Scheduling
- Occurrences min-max: 1-1
- Child elements: Priority, Class

Priority
^^^^^^^^

                        This element specifies the thread priority that will be used by the
                        watchdog thread. Only priorities that are supported by the
                        underlying operating system can be assigned to this element.
                        The user may need special privileges from the underlying operating
                        system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/DbmsConnectService/Watchdog/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
~~~~~~~~~~~~~

                            This attribute specifies whether the specified
                            Priority is a relative or absolute priority.

- Full path: //OpenSplice/DbmsConnectService/Watchdog/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Required: false

Class
^^^^^

                        This element specifies the thread scheduling class that will be used by
                        the watchdog thread. The user may need the appropriate privileges from
                        the underlying operating system to be able to assign some of the
                        privileged scheduling classes.

- Full path: //OpenSplice/DbmsConnectService/Watchdog/Scheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

DdsToDbms
=========

                This element specifies the configuration properties concerning DDS to DBMS bridging.

- Full path: //OpenSplice/DbmsConnectService/DdsToDbms
- Occurrences min-max: 0-1
- Optional attributes: replication_mode

replication_mode
----------------

                    This attribute specifies the default replication mode for
                    all NameSpaces in the *DdsToDbms* element.

                    When replicating databases through DDS, the *NameSpace*
                    elements in the *DbmsToDds* and *DdsToDbms* elements
                    map a Table and Topic circularly. To prevent data-modifications
                    from continuously cascading, modifications made by the
                    DBMSConnect service itself should not trigger new updates
                    in the DBMS nor in the DDS.

                    In replication mode, the DBMS-connect service ignores
                    samples that were published by itself. (Currently that means
                    that everything that is published on the same node as the
                    DBMSConnect Service is considered to be of DBMSConnect
                    origin and therefore ignored). That way, replication of
                    changes that were copied from Dbms to DDS back into Dbms
                    is avoided.

                    **WARNING**: This setting does not avoid replication
                    of changes that were copied from DDS to Dbms back into DDS.
                    For that purpose, the *replication_user* attribute of the
                    *DbmsToDds* or *DbmsToDds/NameSpace* elements should
                    be set appropriately as well!

- Full path: //OpenSplice/DbmsConnectService/DdsToDbms[@replication_mode]
- Format: boolean
- Default value: FALSE
- Required: false

NameSpace
---------

                    This element specifies the responsibilities of the service
                    concerning the bridging of particular data from DDS to DBMS.
                    At least one *NameSpace* element has to be present in
                    a *DdsToDbms* element.

- Full path: //OpenSplice/DbmsConnectService/DdsToDbms/NameSpace
- Occurrences min-max: 1-*
- Required attributes: dsn, usr, pwd
- Optional attributes: name, odbc, partition, topic, update_frequency, schema, catalog, replication_mode

name
^^^^

                        The name of the namespace. If not specified, the namespace
                        will be named "(nameless)".

- Full path: //OpenSplice/DbmsConnectService/DdsToDbms/NameSpace[@name]
- Format: string
- Default value: (nameless)
- Required: false

odbc
^^^^

                        The service dynamically loads an ODBC library at runtime. This attribute
                        specifies the name of the ODBC library to be loaded. Platform specific
                        pre- and postfixes and extensions are automatically added.

                        If this attribute is not provided, the service will attempt to load the
                        generic ODBC library. The resulting behaviour is dependent on the platform
                        on which the DbmsConnect Service is running.

- Full path: //OpenSplice/DbmsConnectService/DdsToDbms/NameSpace[@odbc]
- Format: string
- Default value: ""
- Required: false

partition
^^^^^^^^^

                        This attribute specifies an expression that represents one or more DDS
                        partitions. It is allowed to use wildcards in the expression: a '\*'
                        represents any sequence of characters and a '?' represents one
                        single character.

                        This expression is used to specify the DDS partition(s) from which
                        DDS samples must be 'bridged' to the DBMS domain.

- Full path: //OpenSplice/DbmsConnectService/DdsToDbms/NameSpace[@partition]
- Format: string
- Default value: *
- Required: false

topic
^^^^^

                        This attribute specifies an expression that represents one or more DDS
                        topic names. It is allowed to use wildcards in the expression: a '\*'
                        represents any sequence of characters and a '?' represents one
                        single character.

                        This expression is used to specify the topics from which DDS
                        samples must be 'bridged' to the DBMS domain.  For every matching
                        topic encountered in one or more of the specified partitions, it
                        creates a separate table in the DBMS. The table name will match that
                        of the topic, unless specified otherwise in the *table* attribute
                        of a *Mapping* element.

- Full path: //OpenSplice/DbmsConnectService/DdsToDbms/NameSpace[@topic]
- Format: string
- Default value: *
- Required: false

update_frequency
^^^^^^^^^^^^^^^^

                        This attribute specifies the frequency (in Hz) at which the service
                        will update the DBMS domain with DDS data. By default, it is 0.0Hz
                        which means it is done event based (every time new DDS data arrives).

- Full path: //OpenSplice/DbmsConnectService/DdsToDbms/NameSpace[@update_frequency]
- Dimension: Hz
- Default value: 0.0
- Valid values: 0.0 /  -
- Required: false

dsn
^^^

                        Represents the ODBC Data Source Name, that represents the DBMS where
                        the service must bridge the DDS data to.

- Full path: //OpenSplice/DbmsConnectService/DdsToDbms/NameSpace[@dsn]
- Format: string
- Default value: n/a
- Required: true

usr
^^^

                        Represents the user name that is used when connecting to the DBMS.

- Full path: //OpenSplice/DbmsConnectService/DdsToDbms/NameSpace[@usr]
- Format: string
- Default value: n/a
- Required: true

pwd
^^^

                        Represents the password that is used when connecting to the DBMS.

- Full path: //OpenSplice/DbmsConnectService/DdsToDbms/NameSpace[@pwd]
- Format: string
- Default value: n/a
- Required: true

schema
^^^^^^

                        Represents the schema that is used when communicating with the DBMS.
                        The exact schema content may be dependent on the DBMS that is being
                        used, so consult your DBMS documentation for more details on this subject.

- Full path: //OpenSplice/DbmsConnectService/DdsToDbms/NameSpace[@schema]
- Format: string
- Default value: ""
- Required: false

catalog
^^^^^^^

                        Represents the catalog that is used when communicating with the DBMS.
                        The exact catalog content may be dependent on the DBMS that is being
                        used, so consult your DBMS documentation for more details on this subject.

- Full path: //OpenSplice/DbmsConnectService/DdsToDbms/NameSpace[@catalog]
- Format: string
- Default value: ""
- Required: false

replication_mode
^^^^^^^^^^^^^^^^

                        This attribute specifies the replication mode for the
                        current *NameSpace* element. If not specified, the value
                        will be inherited from the *replication_mode* of the parent
                        *DdsToDbms* element, which if not explicitly specified
                        defaults to false

                        When replicating databases through DDS, the *NameSpace*
                        elements in the *DbmsToDds* and *DdsToDbms* elements
                        map a Table and Topic circularly. To prevent data-modifications
                        from continuously cascading, modifications made by the
                        DBMSConnect service itself should not trigger new updates
                        in the DBMS.

                        In replication mode, the DBMS-connect service ignores
                        samples that were published by itself. (Currently that means
                        that everything that is published on the same node as the
                        DBMSConnect Service is considered to be of DBMSConnect
                        origin and therefore ignored). That way, replication of
                        changes that were copied from Dbms to DDS back into Dbms
                        is avoided.

                        **WARNING**: This setting does not avoid replication
                        of changes that were copied from DDS to Dbms back into DDS.
                        For that purpose, the *replication_user* attribute of the
                        *DbmsToDds* or *DbmsToDds/NameSpace* elements should
                        be set appropriately as well!

- Full path: //OpenSplice/DbmsConnectService/DdsToDbms/NameSpace[@replication_mode]
- Format: boolean
- Default value: FALSE
- Required: false

Mapping
^^^^^^^

                            This element specifies a modification to the way that the service handles
                            a pre-configured set of data within the specified NameSpace. Its attributes
                            are used to configure the responsibilities of the service concerning the
                            bridging of data from DDS to DBMS.

- Full path: //OpenSplice/DbmsConnectService/DdsToDbms/NameSpace/Mapping
- Occurrences min-max: 0-*
- Required attributes: topic
- Optional attributes: table, query, filter

topic
~~~~~

                     This attribute specifies the name of the topic where the Mapping applies to. If you
                     specify no particular topic, it will create tables for all topics

- Full path: //OpenSplice/DbmsConnectService/DdsToDbms/NameSpace/Mapping[@topic]
- Format: string
- Default value: n/a
- Required: true

table
~~~~~

                            This attribute specifies an alternative name for the table that
                            must be associated with the topic. By default the table name is
                            equal to the topic name.

- Full path: //OpenSplice/DbmsConnectService/DdsToDbms/NameSpace/Mapping[@table]
- Format: string
- Default value: ""
- Required: false

query
~~~~~

                            This attribute specifies an SQL query expression. Only DDS data
                            that matches the query will be bridged to the DBMS domain. This
                            is realized by means of a DCPS query condition. The default value
                            is an empty string, representing all available samples of the
                            selected topic.

- Full path: //OpenSplice/DbmsConnectService/DdsToDbms/NameSpace/Mapping[@query]
- Format: string
- Default value: ""
- Required: false

filter
~~~~~~

                            This attribute specifies an SQL content filter. Only DDS data
                            that matches the filter will be bridged to the DBMS domain. This
                            is realized by means of a DCPS ContentFilteredTopic. The default
                            value is an empty string, representing all available samples of
                            the selected topic.

- Full path: //OpenSplice/DbmsConnectService/DdsToDbms/NameSpace/Mapping[@filter]
- Format: string
- Default value: ""
- Required: false

DbmsToDds
=========

                Holds the configuration of the service concerning DBMS to DDS bridging

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds
- Occurrences min-max: 0-1
- Optional attributes: publish_initial_data, event_table_policy, trigger_policy, replication_user

publish_initial_data
--------------------

                    This attribute specifies the default behaviour with respect to publishing
                    initially available data in the DBMS to the DDS for all NameSpace elements
                    in the current DbmsToDds element. If not specified, it defaults to true.
                    The value of this attribute is ignored when the corresponding
                    event_table_policy is set to NONE.

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds[@publish_initial_data]
- Format: boolean
- Default value: true
- Required: false

event_table_policy
------------------

                    This attribute specifies the default setting of the event table policy for all *NameSpace* elements in the current *DbmsToDds* element.

                    An event table (sometimes referred to as 'change table' or 'shadow table') is a support-table that is slaved to an application-table, adding some status flags that are under the control of a trigger mechanism that responds to creation/modification/ deletion events in the application-table.

                    The following policies are currently supported:

                    
                    - **FULL**: *(default)* An 'event table' will always be created when the service connects, and will always be deleted when the service disconnects. In this mode, the service will replace the table if it already exists.
                    - **LAZY**: An 'event table' will only be created if it is not available when the service connects, and it will not be deleted when the service disconnects.
                    - **NONE**: An 'event table' will neither be created nor deleted by the service. For each specified *NameSpace*, the service will poll for the existence of a consistent table with a frequency specified in the coresponding *update_frequency* attribute. It will start using the table as soon as it is available. With this policy set, no initial data will be published regardless of the value of the applicable *publish_initial_data* attribute.

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds[@event_table_policy]
- Format: enumeration
- Default value: FULL
- Valid values: FULL, LAZY, NONE
- Required: false

trigger_policy
--------------

                    This attribute specifies the default trigger policy for all *NameSpace* elements in the current *DbmsToDds* element.

                    Triggers are used to to update the event table in case of creation/modification/ deletion events on the application-table. 

                    The following policies are currently supported:

                    
                    - **FULL**: *(default)* Triggers will always be created when the service connects, and will always be deleted when the service disconnects. In this mode, the service will replace the triggers if they already exists.
                    - **LAZY**: Triggers will only be created if they are not available when the service connects, and will not be deleted when the service disconnects.
                    - **NONE**: Triggers will neither be created nor deleted by the service. This allows you to build your own custom triggering mechanism.

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds[@trigger_policy]
- Format: enumeration
- Default value: FULL
- Valid values: FULL, LAZY, NONE
- Required: false

replication_user
----------------

                    This attribute specifies the default replication user for
                    all *NameSpace* elements in the current *DdsToDbms*
                    element.

                    When replicating databases through DDS, the *NameSpace*
                    elements in the *DbmsToDds* and *DdsToDbms* elements
                    map a Table and Topic circularly. To prevent data-modifications
                    from continuously cascading, modifications made by the
                    service itself should not trigger new updates in the
                    DBMS nor in the DDS.

                    To distinguish between DBMS updates coming from an
                    application and DBMS updates coming from DDS, an extra
                    database user (the replication user) has to be introduced
                    that differs from the application users. That way,
                    replication of changes that were copied from DDS to Dbms
                    back into DDS is avoided. The replication_user attribute
                    specifies the user name of that replication user. An empty
                    string (default value) indicates that there is no separate
                    replication user.

                    **WARNING**: This setting does not avoid replication
                    of changes that were copied from Dbms to DDS back into Dbms.
                    For that purpose, the *replication_mode* attribute of
                    the *DssToDbms* or *DssToDbms/NameSpace* elements
                    should be set appropriately as well!

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds[@replication_user]
- Format: string
- Default value: ""
- Required: false

NameSpace
---------

                    This element specifies the responsibilities of the service concerning
                    the bridging of data from DBMS to DDS. At least one *NameSpace*
                    element has to be present in a *DbmsToDds* element.

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds/NameSpace
- Occurrences min-max: 1-*
- Required attributes: dsn, usr, pwd
- Optional attributes: name, odbc, partition, table, update_frequency, publish_initial_data, force_key_equality, event_table_policy, trigger_policy, schema, catalog, replication_user

name
^^^^

                        The name of the namespace. If not specified, the namespace
                        will be named "(nameless)".

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds/NameSpace[@name]
- Format: string
- Default value: (nameless)
- Required: false

odbc
^^^^

                        The service dynamically loads an ODBC library at runtime. This attribute
                        specifies the name of the ODBC library to be loaded. Platform specific
                        pre- and postfixes and extensions are automatically added.

                        If this attribute is not provided, the service will attempt to load the
                        generic ODBC library. The resulting behaviour is dependent on the platform
                        on which the DbmsConnect Service is running.

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds/NameSpace[@odbc]
- Format: string
- Default value: ""
- Required: false

partition
^^^^^^^^^

                        This attribute specifies an expression represents one or more DDS partitions.
                        It is allowed to use wildcards in the expression: a '\*' represents any
                        sequence of characters and a '?' represents one single character.

                        This expression is used to specify the DDS partition(s) where DBMS records
                        will be written to as DDS samples by the service.

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds/NameSpace[@partition]
- Format: string
- Default value: *
- Required: false

table
^^^^^

                        This attribute specifies an expression that represents one or more DBMS
                        table names.  It is allowed to use wildcards in the expression: a '\*'
                        represents any sequence of characters and a '?' represents one single
                        character.

                        This expression is used to specify the tables from which DBMS data must
                        be 'bridged' to the DDS domain.

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds/NameSpace[@table]
- Format: string
- Default value: *
- Required: false

update_frequency
^^^^^^^^^^^^^^^^

                        This attribute specifies the frequency (in Hz) at which
                        the service will update the DDS domain with DBMS data.
                        By default, it is 2.0Hz. Event-based updates are not
                        supported. If 0.0Hz is specified, the default of 2.0Hz
                        will be used.

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds/NameSpace[@update_frequency]
- Dimension: Hz
- Default value: 2.0
- Valid values: 0.0 /  -
- Required: false

dsn
^^^

                        Represents the Data Source Name, that represents the DBMS where
                        the service must bridge the DDS data from.

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds/NameSpace[@dsn]
- Format: string
- Default value: n/a
- Required: true

usr
^^^

                        Represents the user name that is used when connecting to the DBMS.

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds/NameSpace[@usr]
- Format: string
- Default value: n/a
- Required: true

pwd
^^^

                        Represents the password that is used when connecting to the DBMS.

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds/NameSpace[@pwd]
- Format: string
- Default value: n/a
- Required: true

publish_initial_data
^^^^^^^^^^^^^^^^^^^^

                        This attribute specifies the default behaviour with respect to publishing
                        initially available data in the DBMS to the DDS for all *Mapping*
                        elements in the current *NameSpace* element. If not specified, the value
                        will be inherited from the *publish_initial_data* of the parent
                        *DbmsToDds* element, which defaults to true. The value of this attribute
                        is ignored when the corresponding *event_table_policy* is set to NONE.

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds/NameSpace[@publish_initial_data]
- Format: boolean
- Default value: true
- Required: false

force_key_equality
^^^^^^^^^^^^^^^^^^

                        This attribute specifies the default setting for *Mapping* elements
                        in the current *NameSpace* element with regard to the enforcement of
                        key equality between table and topic definitions. If true, key definitions
                        from the table and topic must match, otherwise key definitions may differ.

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds/NameSpace[@force_key_equality]
- Format: boolean
- Default value: true
- Required: false

event_table_policy
^^^^^^^^^^^^^^^^^^

                        This attribute specifies the default setting of the event table policy for all *Mapping* elements in the current *NameSpace* element. If not specified, the value will be inherited from the *event_table_policy* of the parent *DbmsToDds* element, which if not explicitly specified defaults to FULL.

                        An event table (sometimes referred to as 'change table' or 'shadow table') is a support-table that is slaved to an application-table, adding some status flags that are under the control of a trigger mechanism that responds to creation/modification/ deletion events in the application-table.

                        The following policies are currently supported:

                        
                        - **FULL**: An 'event table' will always be created when the service connects, and will always be deleted when the service disconnects. In this mode, the service will replace the table if it already exists.
                        - **LAZY**: An 'event table' will only be created if it is not available when the service connects, and it will not be deleted when the service disconnects.
                        - **NONE**: An 'event table' will neither be created nor deleted by the service. For each specified *NameSpace*, the service will poll for the existence of a consistent table with a frequency specified in the coresponding *update_frequency* attribute. It will start using the table as soon as it is available. With this policy set, no initial data will be published regardless of the value of the applicable *publish_initial_data* attribute.

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds/NameSpace[@event_table_policy]
- Format: enumeration
- Default value: FULL
- Valid values: FULL, LAZY, NONE
- Required: false

trigger_policy
^^^^^^^^^^^^^^

                        This attribute specifies the default trigger policy for all *Mapping* elements in the current *NameSpace* element. If not specified, the value will be inherited from the *trigger_policy* of the parent *DbmsToDds* element, which if not explicitly specified defaults to FULL.

                        Triggers are used to to update the event table in case of creation/modification/ deletion events on the application-table.

                        The following policies are currently supported:

                        
                        - **FULL**: *(default)* Triggers will always be created when the service connects, and will always be deleted when the service disconnects. In this mode, the service will replace the triggers if they already exists.
                        - **LAZY**: Triggers will only be created if they are not available when the service connects, and will not be deleted when the service disconnects.
                        - **NONE**: Triggers will neither be created nor deleted by the service. This allows you to build your own custom triggering mechanism.

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds/NameSpace[@trigger_policy]
- Format: enumeration
- Default value: FULL
- Valid values: FULL, LAZY, NONE
- Required: false

schema
^^^^^^

                        Represents the schema that is used when communicating with the DBMS.

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds/NameSpace[@schema]
- Format: string
- Default value: ""
- Required: false

catalog
^^^^^^^

                        Represents the catalog that is used when communicating with the DBMS.

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds/NameSpace[@catalog]
- Format: string
- Default value: ""
- Required: false

replication_user
^^^^^^^^^^^^^^^^

                        This attribute specifies the default replication user for
                        all *Mapping* elements in the current *NameSpace*
                        element. If not specified, the value will be inherited from
                        the *replication_user* of the parent *DbmsToDds* element,
                        which by default has no separate replication user specified.

                        When replicating databases through DDS, the *NameSpace*
                        elements in the *DbmsToDds* and *DdsToDbms* elements
                        map a Table and Topic circularly. To prevent data-modifications
                        from continuously cascading, modifications made by the
                        service itself should not trigger new updates in the
                        DBMS nor in the DDS.

                        To distinguish between DBMS updates coming from an
                        application and DBMS updates coming from DDS, an extra
                        database user (the replication user) has to be introduced
                        that differs from the application users. That way,
                        replication of changes that were copied from DDS to Dbms
                        back into DDS is avoided. The replication_user attribute
                        specifies the user name of that replication user. An empty
                        string (default value) indicates that there is no separate
                        replication user.

                        **WARNING**: This setting does not avoid replication
                        of changes that were copied from Dbms to DDS back into Dbms.
                        For that purpose, the *replication_mode* attribute of
                        the *DssToDbms* or *DssToDbms/NameSpace* elements
                        should be set appropriately as well!

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds/NameSpace[@replication_user]
- Format: string
- Default value: ""
- Required: false

Mapping
^^^^^^^

                           This element specifies a modification to the way that the service handles
                           a pre-configured set of data within the specified NameSpace. Its attributes
                           are used to configure the responsibilities of the service concerning the
                           bridging of data from DBMS to DDS

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds/NameSpace/Mapping
- Occurrences min-max: 0-*
- Required attributes: table
- Optional attributes: topic, query, publish_initial_data, force_key_equality, event_table_policy, trigger_policy

table
~~~~~

                            This attribute specifies the name of the table where the Mapping applies to.

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds/NameSpace/Mapping[@table]
- Format: string
- Default value: n/a
- Required: true

topic
~~~~~

                            This attribute specifies an alternative name for the topic that
                            must be associated with the table. By default the topic name is
                            equal to the table name.

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds/NameSpace/Mapping[@topic]
- Format: string
- Default value: ""
- Required: false

query
~~~~~

                            Optional DBMS query expression. Only DBMS data that matches the
                            query will be bridged to the DDS domain. This is realized by
                            means of a SQL query. The default value is an empty string,
                            representing all available data in the selected table.

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds/NameSpace/Mapping[@query]
- Format: string
- Default value: ""
- Required: false

publish_initial_data
~~~~~~~~~~~~~~~~~~~~

                        This attribute specifies the behaviour with respect to publishing the
                        initially available data specified in the current *Mapping* element
                        from DBMS to DDS. If not specified, the value will be inherited from
                        the *publish_initial_data* of the parent *NameSpace* element,
                        which if not explicitly specified inherits from the *publish_initial_data*
                        of the parent *DbmsToDds* element, which defaults to true.
                        The value of this attribute is ignored when the corresponding
                        *event_table_policy* is set to NONE.

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds/NameSpace/Mapping[@publish_initial_data]
- Format: boolean
- Default value: true
- Required: false

force_key_equality
~~~~~~~~~~~~~~~~~~

                           This attribute specifies the enforcement of key equality between table
                           and topic definitions. If true, key definitions from the table and
                           topic must match, otherwise key definitions may differ. If not specified,
                           the value will be inherited from the *force_key_equality* of the parent
                           *NameSpace* element, which if not explicitly specified defaults to true.

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds/NameSpace/Mapping[@force_key_equality]
- Format: boolean
- Default value: true
- Required: false

event_table_policy
~~~~~~~~~~~~~~~~~~

                        This attribute specifies the event table policy in the current *Mapping* element. If not specified, the value will be inherited from the *event_table_policy* of the parent *NameSpace* element, which if not explicitly specified inherits from the *event_table_policy* of the parent *DbmsToDds* element, which defaults to FULL.

                        An event table (sometimes referred to as 'change table' or 'shadow table') is a support-table that is slaved to an application-table, adding some status flags that are under the control of a trigger mechanism that responds to creation/modification/ deletion events in the application-table.

                        The following policies are currently supported:

                        
                        - **FULL**: An 'event table' will always be created when the service connects, and will always be deleted when the service disconnects. In this mode, the service will replace the table if it already exists.
                        - **LAZY**: An 'event table' will only be created if it is not available when the service connects, and it will not be deleted when the service disconnects.
                        - **NONE**: An 'event table' will neither be created nor deleted by the service. For the specified table, the service will poll with a frequency specified in the coresponding *update_frequency* attribute of the parent *NameSpace*. It will start using the table as soon as it is available. With this policy set, no initial data will be published regardless of the value of the applicable *publish_initial_data* attribute.

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds/NameSpace/Mapping[@event_table_policy]
- Format: enumeration
- Default value: FULL
- Valid values: FULL, LAZY, NONE
- Required: false

trigger_policy
~~~~~~~~~~~~~~

                        This attribute specifies the trigger policy for the current *Mapping* element. If not specified, the value will be inherited from the *trigger_policy* of the parent *DbmsToDds* element, which if not explicitly specified inherits from the *trigger_policy* of the parent *DbmsToDds* element, which defaults to FULL.

                        Triggers are used to to update the event table in case of creation/modification/ deletion events on the application-table.

                        The following policies are currently supported:

                        
                        - **FULL**: *(default)* Triggers will always be created when the service connects, and will always be deleted when the service disconnects. In this mode, the service will replace the triggers if they already exists.
                        - **LAZY**: Triggers will only be created if they are not available when the service connects, and will not be deleted when the service disconnects.
                        - **NONE**: Triggers will neither be created nor deleted by the service. This allows you to build your own custom triggering mechanism.

- Full path: //OpenSplice/DbmsConnectService/DbmsToDds/NameSpace/Mapping[@trigger_policy]
- Format: enumeration
- Default value: FULL
- Valid values: FULL, LAZY, NONE
- Required: false

Tracing
=======

                This element controls the amount and type of information that is
                written into the tracing log file by the DbmsConnect Service.
                This is useful to track the DbmsConnect Service during application
                development. In the runtime system it should be turned off.

- Full path: //OpenSplice/DbmsConnectService/Tracing
- Occurrences min-max: 0-1
- Child elements: OutputFile, Timestamps, Verbosity

OutputFile
----------

                    This element specifies where the logging is printed to. Note that
                    "stdout" and "stderr" are considered legal values that represent
                    "standard out" and "standard error" respectively. The default
                    value is an empty string, indicating that all tracing is disabled.

- Full path: //OpenSplice/DbmsConnectService/Tracing/OutputFile
- Format: string
- Dimension: file name
- Default value: dbmsconnect.log
- Occurrences min-max: 0-1

Timestamps
----------

                    This element specifies whether the logging must contain timestamps.

- Full path: //OpenSplice/DbmsConnectService/Tracing/Timestamps
- Format: boolean
- Default value: true
- Occurrences min-max: 0-1
- Optional attributes: absolute

absolute
^^^^^^^^

                        This attribute specifies whether the timestamps are absolute or
                        relative to the startup time of the service.

- Full path: //OpenSplice/DbmsConnectService/Tracing/Timestamps[@absolute]
- Format: boolean
- Default value: true
- Required: false

Verbosity
---------

                    This element specifies the verbosity level of the logging.

- Full path: //OpenSplice/DbmsConnectService/Tracing/Verbosity
- Format: enumeration
- Default value: INFO
- Valid values: SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST
- Occurrences min-max: 0-1

RnRService
**********

      The Record and Replay Service allows to record data from a DDS domain to a storage, and
      replay data from a storage back into the DDS domain.

- Full path: //OpenSplice/RnRService
- Occurrences min-max: 0-*
- Required attributes: name

name
====

        This attribute identifies a configuration for the Record and Replay Service by name.
        Multiple service configurations can be specified in one single resource file. The actual
        applicable configuration is determined by the value of the *name* attribute, which
        must match the one specified under the *OpenSplice/Domain/Service[@name]* in the
        configuration of the Domain Service.

- Full path: //OpenSplice/RnRService[@name]
- Format: string
- Default value: rnr
- Required: true

Watchdog
========

        This element controls the characteristics of the Watchdog thread.

- Full path: //OpenSplice/RnRService/Watchdog
- Occurrences min-max: 0-1

Scheduling
----------

          This element specifies the type of OS scheduling class will be
          used by the thread that announces its liveliness periodically.

- Full path: //OpenSplice/RnRService/Watchdog/Scheduling
- Occurrences min-max: 1-1
- Child elements: Priority, Class

Priority
^^^^^^^^

            This element specifies the thread priority that will be used by the
            watchdog thread. Only priorities that are supported by the
            underlying operating system can be assigned to this element.
            The user may need special privileges from the underlying operating
            system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/RnRService/Watchdog/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 1-1
- Optional attributes: priority_kind

priority_kind
~~~~~~~~~~~~~

              This attribute specifies whether the specified
              Priority is a relative or absolute priority.

- Full path: //OpenSplice/RnRService/Watchdog/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: Relative
- Valid values: Relative, Absolute
- Required: false

Class
^^^^^

            This element specifies the thread scheduling class that will be used by
            the watchdog thread. The user may need the appropriate privileges from
            the underlying operating system to be able to assign some of the
            privileged scheduling classes.

- Full path: //OpenSplice/RnRService/Watchdog/Scheduling/Class
- Format: enumeration
- Default value: Default
- Valid values: Timeshare, Realtime, Default
- Occurrences min-max: 1-1

Storage
=======
This element specifies a storage to use for recording and/or replaying data.
        Currently the supported storage backends are XML and CDR.
        Note that storages can also be created, or their properties modified, by Record and Replay configuration-commands.
        These commands use the same syntax to specify configuration data as the Vortex OpenSplice configuration file,
        so the description given here also applies to commands.

- Full path: //OpenSplice/RnRService/Storage
- Occurrences min-max: 0-*
- Required attributes: name

name
----
The name used to identify the storage in Record and Replay commands.

- Full path: //OpenSplice/RnRService/Storage[@name]
- Format: string
- Default value: default
- Required: true

rr_storageAttrXML
-----------------
Attributes describing an XML storage.

- Full path: //OpenSplice/RnRService/Storage/rr_storageAttrXML
- Occurrences min-max: 0-1
- Child elements: filename, MaxFileSize

filename
^^^^^^^^
The filename template used for files that comprise a storage.
            The filename may contain a relative or absolute path. If a path is omitted,
            the storage files are created in the current working directory.

- Full path: //OpenSplice/RnRService/Storage/rr_storageAttrXML/filename
- Format: string
- Default value: rnr-storage.dat
- Occurrences min-max: 1-1

MaxFileSize
^^^^^^^^^^^
The maximum size per storage file. When approaching the maximum size while recording,
            a new storage file is automatically created with a sequence number appended to the filename.
            The active file is also switched transparently while replaying from a storage that contains
            multiple data files.
            The human-readable option lets the user postfix the value with K(ilobyte), M(egabyte) or
            G(igabtye). For example, 10M results in 10485760 bytes.
            This element is optional, when omitted or when 0 is configured, the file size is not monitored
            by the service and limited only by filesystem and/or platform-specific limits.

- Full path: //OpenSplice/RnRService/Storage/rr_storageAttrXML/MaxFileSize
- Dimension: bytes
- Default value: 0
- Valid values: 0 /  -
- Occurrences min-max: 0-1

rr_storageAttrCDR
-----------------
Attributes describing an CDR storage.

- Full path: //OpenSplice/RnRService/Storage/rr_storageAttrCDR
- Occurrences min-max: 0-1
- Child elements: filename, MaxFileSize

filename
^^^^^^^^
The filename template used for files that comprise a storage.
            The filename may contain a relative or absolute path. If a path is omitted,
            the storage files are created in the current working directory.

- Full path: //OpenSplice/RnRService/Storage/rr_storageAttrCDR/filename
- Format: string
- Default value: rnr-storage.dat
- Occurrences min-max: 1-1

MaxFileSize
^^^^^^^^^^^
The maximum size per storage file. When approaching the maximum size while recording,
            a new storage file is automatically created with a sequence number appended to the filename.
            The active file is also switched transparently while replaying from a storage that contains
            multiple data files.
            The human-readable option lets the user postfix the value with K(ilobyte), M(egabyte) or
            G(igabtye). For example, 10M results in 10485760 bytes.
            This element is optional, when omitted or when 0 is configured, the file size is not monitored
            by the service and limited only by filesystem and/or platform-specific limits.

- Full path: //OpenSplice/RnRService/Storage/rr_storageAttrCDR/MaxFileSize
- Dimension: bytes
- Default value: 0
- Valid values: 0 /  -
- Occurrences min-max: 0-1

Statistics
----------
Maintain and optionally publish statistics for this storage.

- Full path: //OpenSplice/RnRService/Storage/Statistics
- Occurrences min-max: 0-1
- Optional attributes: enabled, publish_interval, reset

enabled
^^^^^^^
This attribute specifies if statistics should be maintained for this storage.

- Full path: //OpenSplice/RnRService/Storage/Statistics[@enabled]
- Format: boolean
- Default value: true
- Occurrences min-max: 1-1
- Required: false

publish_interval
^^^^^^^^^^^^^^^^
This attribute specifies the publication interval of the statistics belonging to this storage,
            in a Record and Replay storage-statistics topic. The publish interval is a value in seconds but may also
            be set to -1. This means the statistics are published when the storage is closed. Note that a value of 0 means
            statistics are never published.

- Full path: //OpenSplice/RnRService/Storage/Statistics[@publish_interval]
- Format: integer
- Dimension: seconds
- Default value: 30
- Occurrences min-max: 1-1
- Required: false

reset
^^^^^
This attribute allows to reset the current values of statistics belonging to the storage. Note
            that this only makes sense in a configuration-command for an existing storage, since new storages created
            from the Vortex OpenSplice configuration file always start out with empty statistics.

- Full path: //OpenSplice/RnRService/Storage/Statistics[@reset]
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1
- Required: false

Tracing
=======
This element enables debug output of the R&R service to a logfile.

- Full path: //OpenSplice/RnRService/Tracing
- Occurrences min-max: 0-1
- Child elements: OutputFile, AppendToFile, Verbosity, EnableCategory

OutputFile
----------
This option specifies where the logging is printed to.
          Note that "stdout" is considered a legal value that represents "standard out"
          and "stderr" is a legal value representing "standard error".

- Full path: //OpenSplice/RnRService/Tracing/OutputFile
- Format: string
- Default value: rnr.log
- Occurrences min-max: 1-1

AppendToFile
------------
This option specifies whether the output is to be appended to an existing log file.
          The default is to overwrite the log file if it exists.

- Full path: //OpenSplice/RnRService/Tracing/AppendToFile
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

Verbosity
---------
This element specifies the verbosity level of the logging information.
          The higher the level, the more (detailed) information will be logged.

- Full path: //OpenSplice/RnRService/Tracing/Verbosity
- Format: enumeration
- Default value: INFO
- Valid values: SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST, NONE
- Occurrences min-max: 0-1

EnableCategory
--------------
This option allows to enable specific logging categories independently of the
          categories selected by specifiying a verbosity level.
          Multiple categories, seperated by a comma, can be supplied.
          The following categories are available:
          
            - **FATAL**: Errors that are potentially fatal for the correct operation of the service.
            - **ERROR**: Non-fatal errors.
            - **WARNING**: Warnings that indicate for example incorrect or unsupported usage of the service.
            - **INFO**: Descriptive messages, logged when certain important events occur.
            - **CONFIG**: Events related to the service configuration.
            - **TRACE**: Detailed messages describing the behaviour of the service.
            - **RECORD**: Messages for each recorded sample.
            - **REPLAY**: Messages for each replayed sample.

- Full path: //OpenSplice/RnRService/Tracing/EnableCategory
- Format: string
- Occurrences min-max: 0-1

Agent
*****
The root element of a Control and Monitoring Agent configuration.

- Full path: //OpenSplice/Agent
- Occurrences min-max: 0-1
- Required attributes: name

name
====
This attribute identifies the configuration for the Control and Monitoring Agent. Multiple service configurations can be specified in one single XML file. The actual applicable configuration is determined by the value of the name attribute, which must match the string specified in the element OpenSplice/Domain/Service[@name] in the Domain Service configuration.

- Full path: //OpenSplice/Agent[@name]
- Format: string
- Default value: cmagent
- Required: true

Tracing
=======
The Tracing element controls the amount and type of information that is written into the tracing log by the Control and Monitoring Agent service. This is useful to track the service during application development.

- Full path: //OpenSplice/Agent/Tracing
- Occurrences min-max: 0-1
- Child elements: EnableCategory, Verbosity, OutputFile, AppendToFile

EnableCategory
--------------
This element enables individual logging categories. These are enabled in addition to those enabled by Tracing/Verbosity. Recognised categories are:- *fatal*: all fatal errors, errors causing immediate termination- *error*: failures probably impacting correctness but not necessarily causing immediate termination- *warning*: abnormal situations that will likely not impact correctness- *config*: full dump of the configuration- *info*: general informational notices
In addition, there is the keyword *trace* that enables all categories

- Full path: //OpenSplice/Agent/Tracing/EnableCategory
- Format: string
- Occurrences min-max: 0-1

Verbosity
---------
This element enables standard groups of categories, based on a desired verbosity level. This is in addition to the categories enabled by the Tracing/EnableCategory setting. Recognised verbosity levels and the categories they map to are:- *none*: no Control and Monitoring Agent log- *severe*: error and fatal- *warning*: *severe* + warning- *info*: *warning* + general information messages- *config*: *info* + config- *fine*: equivalent to *config*- *finest*: *fine* + trace
While *none* prevents any message from being written to a Control and Monitoring Agent log file, warnings and errors are still logged in the ospl-info.log and ospl-error.log files.

- Full path: //OpenSplice/Agent/Tracing/Verbosity
- Format: enumeration
- Default value: none
- Valid values: finest, finer, fine, config, info, warning, severe, none
- Occurrences min-max: 0-1

OutputFile
----------
This option specifies where the logging is printed to. Note that *stdout* and *stderr* are treated as special values, representing "standard out" and "standard error" respectively. No file is created unless logging categories are enabled using the Tracing/Verbosity or Tracing/EnabledCategory settings.

- Full path: //OpenSplice/Agent/Tracing/OutputFile
- Format: string
- Dimension: file path
- Default value: cmagent.log
- Occurrences min-max: 0-1

AppendToFile
------------
This option specifies whether the output is to be appended to an existing log file. The default is to create a new log file each time, which is generally the best option if a detailed log is generated.

- Full path: //OpenSplice/Agent/Tracing/AppendToFile
- Format: boolean
- Default value: false
- Occurrences min-max: 0-1

Watchdog
========
This element specifies the type of OS scheduling class will be used by the thread that announces its liveliness periodically.

- Full path: //OpenSplice/Agent/Watchdog
- Occurrences min-max: 0-1

Scheduling
----------
This element specifies the type of OS scheduling class will be used by the thread that announces its liveliness periodically.

- Full path: //OpenSplice/Agent/Watchdog/Scheduling
- Occurrences min-max: 0-1
- Child elements: Class, Priority

Class
^^^^^
This element specifies the thread scheduling class that will be used by the watchdog thread. The user may need the appropriate privileges from the underlying operating system to be able to assign some of the privileged scheduling classes.

- Full path: //OpenSplice/Agent/Watchdog/Scheduling/Class
- Format: enumeration
- Default value: default
- Valid values: realtime, timeshare, default
- Occurrences min-max: 0-1

Priority
^^^^^^^^
This element specifies the thread priority. Only priorities that are supported by the underlying operating system can be assigned to this element. The user may need special privileges from the underlying operating system to be able to assign some of the privileged priorities.

- Full path: //OpenSplice/Agent/Watchdog/Scheduling/Priority
- Format: integer
- Default value: 0
- Occurrences min-max: 0-1
- Required attributes: priority_kind

priority_kind
~~~~~~~~~~~~~
This attribute specifies whether the specified Priority is a relative or absolute priority.

- Full path: //OpenSplice/Agent/Watchdog/Scheduling/Priority[@priority_kind]
- Format: enumeration
- Default value: relative
- Valid values: relative, absolute
- Required: true

