Merge branch 'master' into merge6

Signed-off-by: Martin Bremmer <martin.bremmer@adlinktech.com>
This commit is contained in:
Martin Bremmer 2019-12-13 12:59:37 +01:00
commit 660d495746
124 changed files with 5049 additions and 1672 deletions

View file

@ -8,5 +8,43 @@
# http://www.eclipse.org/org/documents/edl-v10.php.
#
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
add_subdirectory(manual)
include(FindPerl)
if(PERL_FOUND)
add_custom_command(
OUTPUT
options.md cyclonedds.rnc
COMMAND
${PERL_EXECUTABLE} -w "${CMAKE_CURRENT_SOURCE_DIR}/makernc.pl" "${CMAKE_CURRENT_SOURCE_DIR}/../src/core/ddsi/src/q_config.c" options.md cyclonedds.rnc
COMMAND
${PERL_EXECUTABLE} -w "${CMAKE_CURRENT_SOURCE_DIR}/compare.pl" options.md "${CMAKE_CURRENT_SOURCE_DIR}/manual/options.md"
COMMAND
${PERL_EXECUTABLE} -w "${CMAKE_CURRENT_SOURCE_DIR}/compare.pl" cyclonedds.rnc "${CMAKE_CURRENT_SOURCE_DIR}/../etc/cyclonedds.rnc"
DEPENDS
"${CMAKE_CURRENT_SOURCE_DIR}/makernc.pl"
"${CMAKE_CURRENT_SOURCE_DIR}/../src/core/ddsi/src/q_config.c")
add_custom_target(options_doc ALL DEPENDS "options.md" "cyclonedds.rnc")
find_package(Java COMPONENTS Runtime)
if(JAVA_FOUND AND EXISTS "${TRANG_PATH}" OR EXISTS "$ENV{TRANG}")
if(NOT EXISTS "${TRANG_PATH}" AND EXISTS "$ENV{TRANG}")
message(STATUS "Setting TRANG_PATH to $ENV{TRANG}")
set(TRANG_PATH "$ENV{TRANG}" CACHE FILEPATH "Location of 'trang' for converting XML schemas" FORCE)
endif()
add_custom_command(
OUTPUT
cyclonedds.xsd
COMMAND
${Java_JAVA_EXECUTABLE} -jar "${TRANG_PATH}" -I rnc -O xsd cyclonedds.rnc cyclonedds.xsd
COMMAND
${PERL_EXECUTABLE} -w "${CMAKE_CURRENT_SOURCE_DIR}/compare.pl" cyclonedds.xsd "${CMAKE_CURRENT_SOURCE_DIR}/../etc/cyclonedds.xsd"
DEPENDS
"cyclonedds.rnc")
add_custom_target(options_xsd ALL DEPENDS "cyclonedds.xsd")
else()
message(STATUS "Java or not trang not found: not converting/checking RNC to XSD")
endif()
else()
message(STATUS "perl not found: not generating/checking options documentation and RNC")
endif()
add_subdirectory(manual)

8
docs/compare.pl Normal file
View file

@ -0,0 +1,8 @@
open A, "< $ARGV[0]" or die "can't open $ARGV[0]";
open B, "< $ARGV[1]" or die "can't open $ARGV[1]";
while (defined ($a = <A>) && defined ($b = <B>)) {
$a =~ s/[\r\n]+$//s;
$b =~ s/[\r\n]+$//s;
print "$ARGV[0] difference detected\n" and exit 1 unless $a eq $b;
}
exit 0;

View file

@ -156,7 +156,8 @@ my %tables;
my @root = read_config ($input);
{
open my $fh, ">", "$output_rnc" or die "can't open $output_rnc";
open my $fh, ">:unix", "$output_rnc" or die "can't open $output_rnc";
print $fh "default namespace = \"https://cdds.io/config\"\n";
print $fh "namespace a = \"http://relaxng.org/ns/compatibility/annotations/1.0\"\n";
print $fh "grammar {\n";
print $fh " start =\n";
@ -170,7 +171,7 @@ my @root = read_config ($input);
}
{
open my $fh, ">", "$output_md" or die "can't open $output_md";
open my $fh, ">:unix", "$output_md" or die "can't open $output_md";
my $sep_blurb = "";
conv_table($fh, \&conv_to_md, \@root, "/", " ", "", \$sep_blurb);
close $fh;
@ -315,12 +316,14 @@ sub conv_to_rnc {
print_description_rnc ($fh, $fs->{description}, $indent);
printf $fh "${indent}%s %s {\n", ($fs->{kind} eq "ATTR" ? "attribute" : "element"), $name;
my $sub_isfirst = 1;
conv_table($fh, \&conv_to_rnc, $fs->{subtables}, $fqname, "${indent} ", $prefix, \$sub_isfirst);
my $sep = $sub_isfirst ? "" : "& ";
if ($fs->{kind} eq "GROUP" || $fs->{kind} eq "MGROUP") {
my $sub_isfirst = 1;
conv_table($fh, \&conv_to_rnc, $fs->{subtables}, $fqname, "${indent} ", $prefix, \$sub_isfirst);
printf $fh "${indent} empty\n" if $sub_isfirst;
printf $fh "${indent} ${sep}empty\n" if $sub_isfirst;
} elsif ($fs->{kstr} eq "Boolean") {
printf $fh "${indent} xsd:boolean\n";
printf $fh "${indent} ${sep}xsd:boolean\n";
} elsif ($fs->{kstr} eq "Comma") {
die unless exists $comma_values{$fs->{typehint}};
my $pat = "";
@ -337,13 +340,13 @@ sub conv_to_rnc {
}
}
$pat .= "|" if $allowempty;
printf $fh "${indent} xsd:token { pattern = \"%s\" }\n", $pat;
printf $fh "${indent} ${sep}xsd:token { pattern = \"%s\" }\n", $pat;
} elsif ($fs->{kstr} eq "Enum") {
die unless exists $enum_values{$fs->{typehint}};
my @vs = split /;/, $enum_values{$fs->{typehint}};
printf $fh "${indent} %s\n", (join '|', map { "\"$_\"" } @vs);
printf $fh "${indent} ${sep}%s\n", (join '|', map { "\"$_\"" } @vs);
} elsif ($fs->{kstr} eq "Int") {
printf $fh "${indent} xsd:integer\n";
printf $fh "${indent} ${sep}xsd:integer\n";
#if (exists $range{$lctn} || exists $range{$fs->{typehint}}) {
# # integer with range
# my $rr = exists $range{$lctn} ? $range{$lctn} : $range{$fs->{typehint}};
@ -351,9 +354,9 @@ sub conv_to_rnc {
#}
} elsif ($typehint2unit{$fs->{typehint}}) {
# number with unit
printf $fh "${indent} $typehint2unit{$fs->{typehint}}\n";
printf $fh "${indent} ${sep}$typehint2unit{$fs->{typehint}}\n";
} elsif ($typehint2xmltype{$fs->{typehint}} =~ /String$/) {
printf $fh "${indent} text\n";
printf $fh "${indent} ${sep}text\n";
} else {
die;
}
@ -393,7 +396,7 @@ sub conv_to_md {
# Describe type (boolean, integer, &c.); for a group list its attributes and children as
# links to their descriptions
if ($fs->{kind} eq "GROUP" || $fs->{kind} eq "MGROUP") {
{
my %children = ("attributes" => [], "elements" => []);
conv_table($fh, \&list_children_md, $fs->{subtables}, "", "${indent} ", $prefix, \%children);
if (@{$children{attributes}} > 0) {
@ -406,6 +409,10 @@ sub conv_to_md {
my @ys = map { my $lt = lc "$fqname\[\@$_]"; $lt =~ s/[^a-z0-9]//g; "[$_](#$lt)" } @xs;
printf $fh "Children: %s\n\n", (join ', ', @ys);
}
}
if ($fs->{kind} eq "GROUP" || $fs->{kind} eq "MGROUP") {
# nothing to see here
} elsif ($fs->{kstr} eq "Boolean") {
printf $fh "Boolean\n";
} elsif ($fs->{kstr} eq "Comma") {
@ -451,9 +458,7 @@ sub conv_to_md {
print_description_md ($fh, $fs->{description}, $indent);
# Generate attributes & children
if ($fs->{kind} eq "GROUP" || $fs->{kind} eq "MGROUP") {
conv_table($fh, \&conv_to_md, $fs->{subtables}, $fqname, "${indent} ", $prefix, $separator_blurb_ref);
}
conv_table($fh, \&conv_to_md, $fs->{subtables}, $fqname, "${indent} ", $prefix, $separator_blurb_ref);
}
sub conv_table {
@ -481,6 +486,7 @@ sub read_config {
'DDSI_INCLUDE_SSL' => 1,
'DDSI_INCLUDE_NETWORK_PARTITIONS' => 1,
'DDSI_INCLUDE_SSM' => 1,
'DDSI_INCLUDE_SECURITY' => 1,
# excluded options
'DDSI_INCLUDE_NETWORK_CHANNELS' => 0,
'DDSI_INCLUDE_BANDWIDTH_LIMITING' => 0);
@ -490,7 +496,7 @@ sub read_config {
my @stk = (); # stack of conditional nesting, for each: copy/discard/ignore
open FH, "<", $input or die "can't open $input\n";
while (<FH>) {
chomp;
s/[\r\n]+$//s;
# ignore parts guarded by #if/#ifdef/#if!/#ifndef if $incl says so
if (/^\s*\#\s*if(n?def|\s*!)?\s*([A-Za-z_][A-Za-z_0-9]*)\s*(?:\/(?:\/.*|\*.*?\*\/)\s*)?$/) {

View file

@ -46,99 +46,7 @@ used for building your own applications.
Build Files
===========
Three files are available *Hello World!* root directory to support
building the example. Both
:ref:`Windows native <WindowsNativeBuild>` (HelloWorld.sln) and
:ref:`Linux native <LinuxNativeBuild>` (Makefile) build files
will only be available for this *Hello World!* example. All the
other examples make use of the :ref:`CMake <CMakeIntro>` build
system and thus only have the CMakeLists.txt build related file.
.. _`LinuxNativeBuild`:
Linux Native Build
==================
A Linux native :code:`Makefile` is provided in the
:code:`examples/helloworld` directory within the destination location
entered in the
:ref:`vdds_install_examples script <CopyLinuxExamplesToUserFriendlyLocation>`.
In a terminal, go to that directory and type
::
make
The build process should have access to the include files and
the ddsc library. The Makefile expects them to be present at
system default locations so that it can find them automatically.
If this isn't the case on your machine, then please
update the commented out :code:`CFLAGS` and :code:`LDFLAGS` within the
:code:`Makefile` to point to the proper locations.
This will build the HelloworldSubscriber and HelloworldPublisher
executables in the helloworld source directory (not the bin
directory that contains the pre-build binaries).
The *Hello World!* example can now be executed,
like described in :ref:`Test your installation <TestYourInstallation>`,
using the binaries that were just build. Be sure to use the right directories.
.. _`WindowsNativeBuild`:
Windows Native Build
====================
For the Windows Native Build, a Visual Studio solution file is
available in the :code:`examples/helloworld` directory. Use a
file explorer to navigate to that directory and double click on
the :code:`HelloWorld.sln` file. Visual Studio should now start
with the HelloWorld solution that contains three projects.
+----------------------+-------------------------------------------------+
| Project | Description |
+======================+=================================================+
| HelloWorldPublisher | Information to build the example publisher. |
+----------------------+-------------------------------------------------+
| HelloWorldSubscriber | Information to build the example subcriber. |
+----------------------+-------------------------------------------------+
| HelloWorldType | Information to (re)generate |
| | :ref:`HelloWorldData_Msg <HelloWorldDataFiles>` |
| | data type. |
+----------------------+-------------------------------------------------+
Creating the *Hello World!* example executables is as simple as
selecting the required configuration and building the solution.
:code:`helloworld\vs\directories.props` contains the location of where
the Eclipse Cyclone DDS header files and libraries are be placed. These locations
are based on the default installation directory structure. When Eclipse Cyclone DDS
is installed in a different directory, the following paths in
:code:`helloworld\vs\directories.props` should be changed, like:
.. code-block:: xml
<CycloneDDS_lib_dir>C:/Path/To/CycloneDDS/Installation/lib</CycloneDDS_lib_dir>
<CycloneDDS_inc_dir>C:/Path/To/CycloneDDS/Installation/include</CycloneDDS_inc_dir>
<CycloneDDS_idlc_dir>C:/Path/To/CycloneDDS/Installation/share/CycloneDDS/idlc</CycloneDDS_idlc_dir>
To run the example, Visual Studio should run both the publisher
and subscriber simultaneously. It is capable of doing so, but
it's not its default setting. To change it, open the HelloWorld
solution property page by right clicking the solution and
selecting :code:`Properties`. Then go to :code:`Common Properties`
-> :code:`Startup Project`, select :code:`Multiple startup project`
and set :code:`Action "Start"` for HelloWorldPublisher and
HelloWorldSubscriber. Finish the change by selecting :code:`OK`.
Visual Studio is now ready to actually run the *Hello World!*
example, which can be done by selecting :code:`Debug` ->
:code:`Start without debugging`.
Both the HelloworldSubscriber and the HelloworldPublisher will be
started and the HelloworldPublisher will write a message that is
received by the HelloworldSubscriber.
.. _`BuildingWithCMake`:
@ -146,11 +54,6 @@ received by the HelloworldSubscriber.
Building With CMake
*******************
In the earlier chapters, building the *Hello World!* example is done
natively. However, the *Hello World!* example can also be build using the
`CMake tool <http://cmake.org>`_. This is what is recommended. In fact,
all the other examples don't provide native makefiles, only CMake files.
.. _`CMakeIntro`:
@ -190,10 +93,8 @@ scope of this document.
Hello World! CMake (CycloneDDS Package)
=======================================
After the CMake digression, we're back with the *Hello World!*
example. Apart from the native build files, CMake build files
are provided as well. See
:code:`examples/helloworld/CMakeLists.txt`
Specifying how to build the *Hello World!* example requires only a few
lines of configuration in :code:`examples/helloworld/CMakeLists.txt`
.. literalinclude:: ../../../examples/helloworld/CMakeLists.export
:linenos:
@ -206,13 +107,12 @@ look in the default locations for the code:`CycloneDDS` package.
.. _`IdlcGenerate`:
The :code:`CycloneDDS` package provides the :code:`ddsc` library
that contains the DDS API that the application needs. But apart
from that, it also contains helper functionality
(:code:`idlc_generate`) to generate library targets from IDL
files. These library targets can be easily used when compiling
an application that depends on a data type described
in an IDL file.
The :code:`CycloneDDS` package provides the :code:`ddsc` library that
contains the DDS API that the application needs. It also provides a
component "idlc" that provides helper functionality for generating
library targets from IDL files (:code:`idlc_generate`). These library
targets can be easily used when compiling an application that depends on
a data type described in an IDL file.
Two applications will be created, :code:`HelloworldPublisher`
and :code:`HelloworldSubscriber`. Both consist only out of one
@ -241,7 +141,7 @@ Here, we can let CMake configure the build environment for
us by typing:
::
cmake ../
cmake ..
.. note::
CMake does a pretty good job at guessing which generator to use, but some

View file

@ -1110,21 +1110,3 @@ an endless loop.
There is furthermore also a difference of interpretation of the meaning of the
autodispose_unregistered_instances QoS on the writer. Eclipse Cyclone DDS aligns with
OpenSplice.
.. _`Compatibility issues with TwinOaks`:
Compatibility issues with TwinOaks
----------------------------------
In the default configuration there should be no interoperability issues with TwinOaks CoreDX,
although there is the aforementioned difference in interpretation of the meaning of the
autodispose_unregistered_instances QoS on the writer.
Interoperability with very old versions of CoreDX may require setting:
+ ``Compatibility/ManySocketsMode``: *true*
+ ``Compatibility/ExplicitlyPublishQosSetToDefault``: *true*
The exact version number of CoreDX starting with which these settings are no longer needed is
unknown, but it has certainly not been needed for several years.

View file

@ -8,7 +8,7 @@ CycloneDDS configuration
## //CycloneDDS/Domain
Attributes: [Id](#cycloneddsdomainid)
Children: [Compatibility](#cycloneddsdomaincompatibility), [Discovery](#cycloneddsdomaindiscovery), [General](#cycloneddsdomaingeneral), [Internal](#cycloneddsdomaininternal), [Partitioning](#cycloneddsdomainpartitioning), [SSL](#cycloneddsdomainssl), [Sizing](#cycloneddsdomainsizing), [TCP](#cycloneddsdomaintcp), [ThreadPool](#cycloneddsdomainthreadpool), [Threads](#cycloneddsdomainthreads), [Tracing](#cycloneddsdomaintracing)
Children: [Compatibility](#cycloneddsdomaincompatibility), [DDSSecurity](#cycloneddsdomainddssecurity), [Discovery](#cycloneddsdomaindiscovery), [General](#cycloneddsdomaingeneral), [Internal](#cycloneddsdomaininternal), [Partitioning](#cycloneddsdomainpartitioning), [SSL](#cycloneddsdomainssl), [Sizing](#cycloneddsdomainsizing), [TCP](#cycloneddsdomaintcp), [ThreadPool](#cycloneddsdomainthreadpool), [Threads](#cycloneddsdomainthreads), [Tracing](#cycloneddsdomaintracing)
The General element specifying Domain related settings.
@ -100,8 +100,354 @@ The default setting is "lax".
The default value is: "lax".
### //CycloneDDS/Domain/DDSSecurity
Children: [AccessControl](#cycloneddsdomainddssecurityaccesscontrol), [Authentication](#cycloneddsdomainddssecurityauthentication), [Cryptographic](#cycloneddsdomainddssecuritycryptographic)
This element is used to configure Cyclone DDS with the DDS Security
specification plugins and settings.
#### //CycloneDDS/Domain/DDSSecurity/AccessControl
Children: [Governance](#cycloneddsdomainddssecurityaccesscontrolgovernance), [Library](#cycloneddsdomainddssecurityaccesscontrollibrary), [Permissions](#cycloneddsdomainddssecurityaccesscontrolpermissions), [PermissionsCA](#cycloneddsdomainddssecurityaccesscontrolpermissionsca)
This element configures the Access Control plugin of the DDS Security
specification.
##### //CycloneDDS/Domain/DDSSecurity/AccessControl/Governance
RELOFF (cfg.access_control_properties.governance), pf_string, BLURB("
URI to the shared Governance Document signed by the Permissions CA in
S/MIME format
URI schemes: file, data<br>
Examples file URIs:
<Governance>file:governance.smime</Governance>
<Governance>file:/home/myuser/governance.smime</Governance><br>
<Governance><![CDATA[data:,MIME-Version: 1.0
Content-Type: multipart/signed; protocol="application/x-pkcs7-signature";
micalg="sha-256"; boundary="----F9A8A198D6F08E1285A292ADF14DD04F"
This is an S/MIME signed message
------F9A8A198D6F08E1285A292ADF14DD04F
<?xml version="1.0" encoding="UTF-8"?>
<dds xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="omg_shared_ca_governance.xsd">
<domain_access_rules>
. . .
</domain_access_rules>
</dds>
...
------F9A8A198D6F08E1285A292ADF14DD04F
Content-Type: application/x-pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"
MIIDuAYJKoZIhv ...al5s=
------F9A8A198D6F08E1285A292ADF14DD04F-]]</Governance>
##### //CycloneDDS/Domain/DDSSecurity/AccessControl/Library
Children: [finalizeFunction](#cycloneddsdomainddssecurityaccesscontrollibraryfinalizefunction), [initFunction](#cycloneddsdomainddssecurityaccesscontrollibraryinitfunction), [path](#cycloneddsdomainddssecurityaccesscontrollibrarypath)
RELOFF (cfg.access_control_plugin), pf_string, BLURB("
This element specifies the library to be loaded as the DDS Security
Access Control plugin.
###### //CycloneDDS/Domain/DDSSecurity/AccessControl/Library/finalizeFunction
RELOFF (cfg.access_control_plugin.library_finalize), pf_string, BLURB("
This element names the finalization function of Access Control plugin.
This function is called to let the plugin release its resources.
###### //CycloneDDS/Domain/DDSSecurity/AccessControl/Library/initFunction
RELOFF (cfg.access_control_plugin.library_init), pf_string, BLURB("
This element names the initialization function of Access Control plugin.
This function is called after loading the plugin library for
instantiation purposes. Init function must return an object that
implements DDS Security Access Control interface.
###### //CycloneDDS/Domain/DDSSecurity/AccessControl/Library/path
RELOFF (cfg.access_control_plugin.library_path), pf_string, BLURB("
This element points to the path of Access Control plugin library.
It can be either absolute path excluding file extension (
/usr/lib/dds_security_ac ) or single file without extension (
dds_security_ac ).
If single file is supplied, the library located by way of the current
working directory, or LD_LIBRARY_PATH for Unix systems, and PATH for
Windows systems.
##### //CycloneDDS/Domain/DDSSecurity/AccessControl/Permissions
RELOFF (cfg.access_control_properties.permissions), pf_string, BLURB("
URI to the DomainParticipant permissions document signed by the
Permissions CA in S/MIME format
The permissions document specifies the permissions to be applied to a
domain.<br>
Example file URIs:
<Permissions>file:permissions_document.p7s</Permissions>
<Permissions>file:/path_to/permissions_document.p7s</Permissions>
Example data URI:
<Permissions><![CDATA[data:,.........]]</Permissions>
##### //CycloneDDS/Domain/DDSSecurity/AccessControl/PermissionsCA
RELOFF (cfg.access_control_properties.permissions_ca), pf_string, BLURB("
URI to a X509 certificate for the PermissionsCA in PEM format.
Supported URI schemes: file, data
The file and data schemas shall refer to a X.509 v3 certificate (see
X.509 v3 ITU-T Recommendation X.509 (2005) [39]) in PEM format.<br>
Examples:<br>
<PermissionsCA>file:permissions_ca.pem</PermissionsCA>
<PermissionsCA>file:/home/myuser/permissions_ca.pem</PermissionsCA><br>
<PermissionsCA>data:<strong>,</strong>-----BEGIN CERTIFICATE-----
MIIC3DCCAcQCCQCWE5x+Z ... PhovK0mp2ohhRLYI0ZiyYQ==
-----END CERTIFICATE-----</PermissionsCA>
#### //CycloneDDS/Domain/DDSSecurity/Authentication
Children: [IdentityCA](#cycloneddsdomainddssecurityauthenticationidentityca), [IdentityCertificate](#cycloneddsdomainddssecurityauthenticationidentitycertificate), [Library](#cycloneddsdomainddssecurityauthenticationlibrary), [Password](#cycloneddsdomainddssecurityauthenticationpassword), [PrivateKey](#cycloneddsdomainddssecurityauthenticationprivatekey), [TrustedCADirectory](#cycloneddsdomainddssecurityauthenticationtrustedcadirectory)
This element configures the Authentication plugin of the DDS Security
specification.
##### //CycloneDDS/Domain/DDSSecurity/Authentication/IdentityCA
RELOFF (cfg.authentication_properties.identity_ca), pf_string, BLURB("
URI to the X509 certificate [39] of the Identity CA that is the signer of
Identity Certificate.
Supported URI schemes: file, data
The file and data schemas shall refer to a X.509 v3 certificate (see
X.509 v3 ITU-T Recommendation X.509 (2005) [39]) in PEM format.
Examples:
<IdentityCA>file:identity_ca.pem</IdentityCA>
<IdentityCA>data:,-----BEGIN CERTIFICATE-----<br>
MIIC3DCCAcQCCQCWE5x+Z...PhovK0mp2ohhRLYI0ZiyYQ==<br>
-----END CERTIFICATE-----</IdentityCA>
##### //CycloneDDS/Domain/DDSSecurity/Authentication/IdentityCertificate
RELOFF (cfg.authentication_properties.identity_certificate), pf_string,
BLURB("
Identity certificate that will be used for identifying all participants
in the OSPL instance.<br>The content is URI to a X509 certificate signed
by the IdentityCA in PEM format containing the signed public key.
Supported URI schemes: file, data
Examples:
<IdentityCertificate>file:participant1_identity_cert.pem</IdentityCertificate>
<IdentityCertificate>data:,-----BEGIN CERTIFICATE-----<br>
MIIDjjCCAnYCCQDCEu9...6rmT87dhTo=<br>
-----END CERTIFICATE-----</IdentityCertificate>
##### //CycloneDDS/Domain/DDSSecurity/Authentication/Library
Children: [finalizeFunction](#cycloneddsdomainddssecurityauthenticationlibraryfinalizefunction), [initFunction](#cycloneddsdomainddssecurityauthenticationlibraryinitfunction), [path](#cycloneddsdomainddssecurityauthenticationlibrarypath)
RELOFF (cfg.authentication_plugin), pf_string, BLURB("
This element specifies the library to be loaded as the DDS Security
Access Control plugin.
###### //CycloneDDS/Domain/DDSSecurity/Authentication/Library/finalizeFunction
RELOFF (cfg.authentication_plugin.library_finalize), pf_string, BLURB("
This element names the finalization function of Authentication plugin.
This function is called to let the plugin release its resources.
###### //CycloneDDS/Domain/DDSSecurity/Authentication/Library/initFunction
RELOFF (cfg.authentication_plugin.library_init), pf_string, BLURB("
This element names the initialization function of Authentication plugin.
This function is called after loading the plugin library for
instantiation purposes. Init function must return an object that
implements DDS Security Authentication interface.
###### //CycloneDDS/Domain/DDSSecurity/Authentication/Library/path
RELOFF (cfg.authentication_plugin.library_path), pf_string, BLURB("
This element points to the path of Authentication plugin library.
It can be either absolute path excluding file extension (
/usr/lib/dds_security_auth ) or single file without extension (
dds_security_auth ).
If single file is supplied, the library located by way of the current
working directory, or LD_LIBRARY_PATH for Unix systems, and PATH for
Windows systems.
##### //CycloneDDS/Domain/DDSSecurity/Authentication/Password
RELOFF (cfg.authentication_properties.password), pf_string, BLURB("
A password used to decrypt the private_key.
The value of the password property shall be interpreted as the Base64
encoding of the AES-128 key that shall be used to decrypt the private_key
using AES128-CBC.
If the password property is not present, then the value supplied in the
private_key property must contain the unencrypted private key.
##### //CycloneDDS/Domain/DDSSecurity/Authentication/PrivateKey
RELOFF (cfg.authentication_properties.private_key), pf_string, BLURB("
URI to access the private Private Key for all of the participants in the
OSPL federation.
Supported URI schemes: file, data
Examples:
<PrivateKey>file:identity_ca_private_key.pem</PrivateKey>
<PrivateKey>data:,-----BEGIN RSA PRIVATE KEY-----<br>
MIIEpAIBAAKCAQEA3HIh...AOBaaqSV37XBUJg==<br>
-----END RSA PRIVATE KEY-----</PrivateKey>
##### //CycloneDDS/Domain/DDSSecurity/Authentication/TrustedCADirectory
RELOFF (cfg.authentication_properties.trusted_ca_dir), pf_string, BLURB("
Trusted CA Directory which contains trusted CA certificates as separated
files.
#### //CycloneDDS/Domain/DDSSecurity/Cryptographic
Children: [Library](#cycloneddsdomainddssecuritycryptographiclibrary)
This element configures the Cryptographic plugin of the DDS Security
specification.
##### //CycloneDDS/Domain/DDSSecurity/Cryptographic/Library
Children: [finalizeFunction](#cycloneddsdomainddssecuritycryptographiclibraryfinalizefunction), [initFunction](#cycloneddsdomainddssecuritycryptographiclibraryinitfunction), [path](#cycloneddsdomainddssecuritycryptographiclibrarypath)
RELOFF (cfg.cryptography_plugin), pf_string, BLURB("
This element specifies the library to be loaded as the DDS Security
Cryptographic plugin.
###### //CycloneDDS/Domain/DDSSecurity/Cryptographic/Library/finalizeFunction
RELOFF (cfg.cryptography_plugin.library_finalize), pf_string, BLURB("
This element names the finalization function of Cryptographic plugin.
This function is called to let the plugin release its resources.
###### //CycloneDDS/Domain/DDSSecurity/Cryptographic/Library/initFunction
RELOFF (cfg.cryptography_plugin.library_init), pf_string, BLURB("
This element names the initialization function of Cryptographic plugin.
This function is called after loading the plugin library for
instantiation purposes. Init function must return an object that
implements DDS Security Cryptographic interface.
###### //CycloneDDS/Domain/DDSSecurity/Cryptographic/Library/path
RELOFF (cfg.cryptography_plugin.library_path), pf_string, BLURB("
This element points to the path of Cryptographic plugin library.
It can be either absolute path excluding file extension (
/usr/lib/dds_security_crypto ) or single file without extension (
dds_security_crypto ).
If single file is supplied, the library located by way of the current
working directory, or LD_LIBRARY_PATH for Unix systems, and PATH for
Windows systems.
### //CycloneDDS/Domain/Discovery
Children: [DSGracePeriod](#cycloneddsdomaindiscoverydsgraceperiod), [DefaultMulticastAddress](#cycloneddsdomaindiscoverydefaultmulticastaddress), [EnableTopicDiscovery](#cycloneddsdomaindiscoveryenabletopicdiscovery), [MaxAutoParticipantIndex](#cycloneddsdomaindiscoverymaxautoparticipantindex), [ParticipantIndex](#cycloneddsdomaindiscoveryparticipantindex), [Peers](#cycloneddsdomaindiscoverypeers), [Ports](#cycloneddsdomaindiscoveryports), [SPDPInterval](#cycloneddsdomaindiscoveryspdpinterval), [SPDPMulticastAddress](#cycloneddsdomaindiscoveryspdpmulticastaddress)
Children: [DSGracePeriod](#cycloneddsdomaindiscoverydsgraceperiod), [DefaultMulticastAddress](#cycloneddsdomaindiscoverydefaultmulticastaddress), [EnableTopicDiscovery](#cycloneddsdomaindiscoveryenabletopicdiscovery), [ExternalDomainId](#cycloneddsdomaindiscoveryexternaldomainid), [MaxAutoParticipantIndex](#cycloneddsdomaindiscoverymaxautoparticipantindex), [ParticipantIndex](#cycloneddsdomaindiscoveryparticipantindex), [Peers](#cycloneddsdomaindiscoverypeers), [Ports](#cycloneddsdomaindiscoveryports), [SPDPInterval](#cycloneddsdomaindiscoveryspdpinterval), [SPDPMulticastAddress](#cycloneddsdomaindiscoveryspdpmulticastaddress), [Tag](#cycloneddsdomaindiscoverytag)
The Discovery element allows specifying various parameters related to the
@ -140,6 +486,17 @@ Do not use.
The default value is: "true".
#### //CycloneDDS/Domain/Discovery/ExternalDomainId
Text
An override for the domain id, to be used in discovery and for
determining the port number mapping. This allows creating multiple
domains in a single process while making them appear as a single domain
on the network. The value "default" disables the override.
The default value is: "default".
#### //CycloneDDS/Domain/Discovery/MaxAutoParticipantIndex
Integer
@ -261,7 +618,7 @@ The default value is: "250".
##### //CycloneDDS/Domain/Discovery/Ports/MulticastDataOffset
Integer
This element specifies the port number for multicast meta traffic (refer
This element specifies the port number for multicast data traffic (refer
to the DDSI 2.1 specification, section 9.6.1, constant d2).
The default value is: "1".
@ -289,7 +646,7 @@ The default value is: "2".
##### //CycloneDDS/Domain/Discovery/Ports/UnicastDataOffset
Integer
This element specifies the port number for unicast meta traffic (refer to
This element specifies the port number for unicast data traffic (refer to
the DDSI 2.1 specification, section 9.6.1, constant d3).
The default value is: "11".
@ -328,6 +685,15 @@ address.
The default value is: "239.255.0.1".
#### //CycloneDDS/Domain/Discovery/Tag
Text
String extension for domain id that remote participants must match to be
discovered.
The default value is: "".
### //CycloneDDS/Domain/General
Children: [AllowMulticast](#cycloneddsdomaingeneralallowmulticast), [DontRoute](#cycloneddsdomaingeneraldontroute), [EnableMulticastLoopback](#cycloneddsdomaingeneralenablemulticastloopback), [ExternalNetworkAddress](#cycloneddsdomaingeneralexternalnetworkaddress), [ExternalNetworkMask](#cycloneddsdomaingeneralexternalnetworkmask), [FragmentSize](#cycloneddsdomaingeneralfragmentsize), [MaxMessageSize](#cycloneddsdomaingeneralmaxmessagesize), [MulticastRecvNetworkInterfaceAddresses](#cycloneddsdomaingeneralmulticastrecvnetworkinterfaceaddresses), [MulticastTimeToLive](#cycloneddsdomaingeneralmulticasttimetolive), [NetworkInterfaceAddress](#cycloneddsdomaingeneralnetworkinterfaceaddress), [PreferMulticast](#cycloneddsdomaingeneralprefermulticast), [Transport](#cycloneddsdomaingeneraltransport), [UseIPv6](#cycloneddsdomaingeneraluseipv6)
@ -672,6 +1038,8 @@ The default value is: "false".
#### //CycloneDDS/Domain/Internal/HeartbeatInterval
Attributes: [max](#cycloneddsdomaininternalheartbeatintervalmax), [min](#cycloneddsdomaininternalheartbeatintervalmin), [minsched](#cycloneddsdomaininternalheartbeatintervalminsched)
Number-with-unit
This elemnents allows configuring the base interval for sending writer
@ -683,6 +1051,42 @@ Valid values are finite durations with an explicit unit or the keyword
The default value is: "100 ms".
#### //CycloneDDS/Domain/Internal/HeartbeatInterval[@max]
Number-with-unit
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.
The default value is: "8 s".
#### //CycloneDDS/Domain/Internal/HeartbeatInterval[@min]
Number-with-unit
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.
The default value is: "5 ms".
#### //CycloneDDS/Domain/Internal/HeartbeatInterval[@minsched]
Number-with-unit
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.
The default value is: "20 ms".
#### //CycloneDDS/Domain/Internal/LateAckMode
Boolean
@ -704,6 +1108,8 @@ The default value is: "10 s".
#### //CycloneDDS/Domain/Internal/LivelinessMonitoring
Attributes: [Interval](#cycloneddsdomaininternallivelinessmonitoringinterval), [StackTraces](#cycloneddsdomaininternallivelinessmonitoringstacktraces)
Boolean
This element controls whether or not implementation should internally
@ -714,6 +1120,28 @@ stopped making progress.
The default value is: "false".
#### //CycloneDDS/Domain/Internal/LivelinessMonitoring[@Interval]
Number-with-unit
This element controls the interval at which to check whether threads have
been making progress.
The unit must be specified explicitly. Recognised units: ns, us, ms, s,
min, hr, day.
The default value is: "1s".
#### //CycloneDDS/Domain/Internal/LivelinessMonitoring[@StackTraces]
Boolean
This element controls whether or not to write stack traces to the Cyclone
DDS trace when a thread fails to make progress (on select platforms
only).
The default value is: "true".
#### //CycloneDDS/Domain/Internal/MaxParticipants
Integer
@ -819,6 +1247,8 @@ The default value is: "-1".
#### //CycloneDDS/Domain/Internal/MultipleReceiveThreads
Attributes: [maxretries](#cycloneddsdomaininternalmultiplereceivethreadsmaxretries)
Boolean
This element controls whether all traffic is handled by a single receive
@ -830,6 +1260,18 @@ single (the default).
The default value is: "true".
#### //CycloneDDS/Domain/Internal/MultipleReceiveThreads[@maxretries]
Integer
Receive threads dedicated to a single socket can only be triggered for
termination by sending a packet. Reception of any packet will do, so
termination failure due to packet loss is exceedingly unlikely, but to
eliminate all risks, it will retry as many times as specified by this
attribute before aborting.
The default value is: "4294967295".
#### //CycloneDDS/Domain/Internal/NackDelay
Number-with-unit
@ -880,6 +1322,8 @@ The default value is: "true".
#### //CycloneDDS/Domain/Internal/RediscoveryBlacklistDuration
Attributes: [enforce](#cycloneddsdomaininternalrediscoveryblacklistdurationenforce)
Number-with-unit
This element controls for how long a remote participant that was
@ -898,6 +1342,18 @@ Valid values are finite durations with an explicit unit or the keyword
The default value is: "10s".
#### //CycloneDDS/Domain/Internal/RediscoveryBlacklistDuration[@enforce]
Boolean
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 Cyclone
DDS, or whether it can be rediscovered earlier provided all traces of
that participant have been removed already.
The default value is: "false".
#### //CycloneDDS/Domain/Internal/RetransmitMerging
One of: never, adaptive, always