WAN Transport Properties

Properties for NDDS_Transport_WAN_Property_t lists the properties that you can set for the WAN Transport.

Properties for NDDS_Transport_WAN_Property_t

Property Name

(prefix with ‘dds.transport.WAN.wan1.’)1 Assuming you used ‘dds.transport.WAN.wan1’ as the alias to load the plugin. If not, change the prefix to match the string used with dds.transport.load_plugins. This prefix must begin with 'dds.transport.'

Property Value Description

dds.transport.load_plugins
(note: this does not take a prefix)

Required

Comma-separated strings indicating the prefix names of all plugins that will be loaded by Connext DDS. You will use this string as the prefix to the property names.

For example: “dds.transport.WAN.wan1". (This assumes you used ‘dds.transport.WAN.wan1’ as the alias to load the plugin. If not, change the prefix to match the string used with dds.transport.load_plugins.)

This prefix must begin with 'dds.transport.'

Note: You can load up to 8 plugins.

library

Required

Must set to "libnddstransportwan.so" (for UNIX/Solaris systems) or "nddstransportwan.dll" (for Windows system).

This library and the dependent OpenSSL libraries need to be in your library search path (pointed to by the environment variable LD_LIBRARY_PATH on UNIX/Solaris systems, Path on Windows systems, LIBPATH on AIX systems, DYLD_LIBRARY_PATH on Mac OS systems).

create_function

Required

Must be "NDDS_Transport_WAN_create".

aliases

Used to register the transport plugin returned by NDDS_Transport_WAN_create() (as specified by <WAN_prefix>.create_function) to the DomainParticipant. Aliases should be specified as a comma-separated string, with each comma delimiting an alias.

If it is not specified, the prefix—without the leading "dds.transport"—is used as the default alias for the plugin. For example, if the <WAN_prefix> is "dds.transport.mytransport", the default alias for the plugin is "mytransport".

verbosity

Specifies the verbosity of log messages from the transport.

Possible values:

  • -1: silent
  • 0 (default): errors only
  • 1: errors and warnings
  • 2: local status
  • 5 or higher: all messages

security_verbosity

Specifies the verbosity of security related log messages from the transport. These are usually messages generated by OpenSSL.

Possible values:

  • -1: silent
  • 0: errors only
  • 1: errors and warnings
  • 2: local status
  • 5 or higher: all messages

Default: If not set, the value is inherited from the verbosity property

parent.parent.address_bit_count

Number of bits in a 16-byte address that are used by the transport. Should be between 0 and 128. For example, for an address range of 0-255, the address_bit_count should be set to 8.

parent.parent.properties_
bitmap

A bitmap that defines various properties of the transport to the Connext DDS core. Currently, the only property supported is whether or not the transport plugin will always loan a buffer when Connext DDS tries to receive a message using the plugin. This is in support of a zero-copy interface.

parent.parent.gather_send_
buffer_count_max

Specifies the maximum number of buffers that Connext DDS can pass to the send() function of the transport plugin.

The transport plugin send() API supports a gather-send concept, where the send() call can take several discontiguous buffers, assemble and send them in a single message. This enables Connext DDS to send a message from parts obtained from different sources without first having to copy the parts into a single contiguous buffer.

However, most transports that support a gather-send concept have an upper limit on the number of buffers that can be gathered and sent. Setting this value will prevent Connext DDS from trying to gather too many buffers into a send call for the transport plugin.

Connext DDS requires all transport-plugin implementations to support a gather-send of least a minimum number of buffers. This minimum number is defined as NDDS_TRANSPORT_-PROPERTY_GATHER_SEND_BUFFER_COUNT_MIN.

parent.parent.message_size_max

The maximum size of a message in bytes that can be sent or received by the transport plugin.

This value must be set before the transport plugin is registered, so that Connext DDS can properly use the plugin.

parent.parent.allow_interfaces

A list of strings, each identifying a range of interface addresses.

Interfaces must be specified as comma-separated strings, with each comma delimiting an interface.

If the list is non-empty, this "white" list is applied before the parent.parent.deny_interfaces list.

It is up to the transport plugin to interpret the list of strings passed in. Usually this interpretation will be consistent with NDDS_Transport_String_To_Address_Fcn_cEA().

This property is not interpreted by the Connext DDS core; it is provided merely as a convenient and standardized way to specify the interfaces for the benefit of the transport plugin developer and user.

You must manage the memory of the list. The memory may be freed after the DomainParticipant is enabled.

parent.parent.deny_interfaces

A list of strings, each identifying a range of interface addresses. If the list is non-empty, deny the use of these interfaces.

Interfaces must be specified as comma-separated strings, with each comma delimiting an interface.

This "black" list is applied after the parent.parent.allow_interfaces list and filters out the interfaces that should not be used.

It is up to the transport plugin to interpret the list of strings passed in. Usually this interpretation will be consistent with NDDS_Transport_String_To_Address_Fcn_cEA().

This property is not interpreted by the Connext DDS core; it is provided merely as a convenient and standardized way to specify the interfaces for the benefit of the transport plugin developer and user.

You must manage the memory of the list. The memory may be freed after the DomainParticipant is enabled.

parent.send_socket_buffer_size

Size in bytes of the send buffer of a socket used for sending. On most operating systems, setsockopt() will be called to set the SENDBUF to the value of this parameter.

This value must be greater than or equal to
parent.parent.message_size_max.

The maximum value is operating system-dependent.

If NDDS_TRANSPORT_UDPV4_SOCKET_BUFFER_SIZE_OS_DEFAULT, then setsockopt() (or equivalent) will not be called to size the send buffer of the socket.

parent.recv_socket_buffer_size

Size in bytes of the receive buffer of a socket used for receiving.

On most operating systems, setsockopt() will be called to set the RECVBUF to the value of this parameter.

This value must be greater than or equal to parent.parent.message_size_max. The maximum value is operating system-dependent.

If NDDS_TRANSPORT_UDPV4_SOCKET_BUFFER_SIZE_OS_DEFAULT, then setsockopt() (or equivalent) will not be called to size the receive buffer of the socket.

parent.unicast_enabled

Allows the transport plugin to use unicast UDP for sending and receiving. By default, it will be turned on. Also by default, it will use all the allowed network interfaces that it finds up and running when the plugin is instanced.

parent.ignore_loopback_interface

Prevents the transport plugin from using the IP loopback interface. Three values are allowed:

  • 0: Enable local traffic via this plugin. This plugin will only use and report the IP loopback interface only if there are no other network interfaces (NICs) up on the system.
  • 1: Disable local traffic via this plugin. Do not use the IP loopback interface even if no NICs are discovered. This is useful when you want applications running on the same node to use a more efficient plugin like Shared Memory instead of the IP loopback.

DEPRECATED

parent.ignore_nonrunning_
interfaces

This property is deprecated.

Prevents the transport plugin from using a network interface that is not reported as RUNNING by the operating system.

The transport checks the flags reported by the operating system for each network interface upon initialization. An interface which is not reported as UP will not be used. This property allows the same check to be extended to the IFF_RUNNING flag implemented by some operating systems. The RUNNING flag is defined to mean that "all resources are allocated", and may be off if there is no link detected, e.g., the network cable is unplugged.

Two values are allowed:

  • 0: Do not check the RUNNING flag when enumerating interfaces, just make sure the interface is UP.
  • 1: Check the flag when enumerating interfaces, and ignore those that are not reported as RUNNING. This can be used on some operating systems to cause the transport to ignore interfaces that are enabled but not connected to the network.

parent.no_zero_copy

Prevents the transport plugin from doing a zero copy.

By default, this plugin will use the zero copy on OSs that offer it. While this is good for performance, it may sometime tax the OS resources in a manner that cannot be overcome by the application.

The best example is if the hardware/device driver lends the buffer to the application itself. If the application does not return the loaned buffers soon enough, the node may error or malfunction. In case you cannot reconfigure the H/W, device driver, or the OS to allow the zero copy feature to work for your application, you may have no choice but to turn off zero copy use.

By default this is set to 0, so Connext DDS will use the zero-copy API if offered by the OS.

parent.send_blocking

CHANGING THIS FROM THE DEFAULT CAN CAUSE SIGNIFICANT PERFORMANCE PROBLEMS.

Controls the blocking behavior of send sockets.

Two values are defined:

  • NDDS_TRANSPORT_UDPV4_BLOCKING_ALWAYS: Sockets are blocking (default socket options for Operating System).
  • NDDS_TRANSPORT_UDPV4_BLOCKING_NEVER: Sockets are modified to make them non-blocking. THIS IS NOT A SUPPORTED CONFIGURATION AND MAY CAUSE SIGNIFICANT PERFORMANCE PROBLEMS.

parent.transport_priority_mask

Mask for the transport priority field. This is used in conjunction with transport_priority_mapping_low/high to define the mapping from DDS transport priority to the IPv4 TOS field. Defines a contiguous region of bits in the 32-bit transport priority value that is used to generate values for the IPv4 TOS field on an outgoing socket.

For example, the value 0x0000ff00 causes bits 9-16 (8 bits) to be used in the mapping. The value will be scaled from the mask range (0x0000 - 0xff00 in this case) to the range specified by low and high.

If the mask is set to zero, then the transport will not set IPv4 TOS for send sockets.

parent.transport_priority_
mapping_low

Sets the low and high values of the output range to IPv4 TOS.

These values are used in conjunction with transport_priority_mask to define the mapping from DDS transport priority to the IPv4 TOS field. Defines the low and high values of the output range for scaling.

Note that IPv4 TOS is generally an 8-bit value.

parent.transport_priority_
mapping_high

enable_security

Required if you want to use security.

recv_decode_buffer_size

Size of buffer for decoding packets from wire. An extra buffer is required for storage of encrypted data. The minimum value for this property is parent.parent.message_size_max.

port_offset

Port offset to allow coexistence with non-secure UDP transport.

dtls_handshake_resend_interval

DTLS handshake retransmission interval in milliseconds

dtls_connection_liveliness_
interval

Liveliness interval (multiple of resend interval)

The connection will be dropped if no message from the peer is received in this amount of time. This enables cleaning up state for peers that are no longer responding. A secure keep-alive message will be sent every half-interval if no other sends have occurred for a given DTLS connection during that time.

Default: 60 ms

tls.verify.ca_file

A string that specifies the name of file containing Certificate Authority certificates. File should be in PEM format. See the OpenSSL manual page for SSL_load_verify_locations for more information.

If you want to use security, tls.verify.ca_file or tls.verify.ca_path must be specified; both may be specified.

tls.verify.ca_path

A string that specifies paths to directories containing Certificate Authority certificates. Files should be in PEM format, and follow the OpenSSL-required naming conventions. See the OpenSSL manual page for SSL_CTX_load_verify_locations for more information.

If you want to use security, tls.verify.ca_file or tls.verify.ca_path must be specified; both may be specified.

tls.verify.verify_depth

Maximum certificate chain length for verification.

tls.verify.verify_peer

If non-zero, use mutual authentication when performing TLS hand- shake (default). If zero, only the reader side will present a certificate, which will be verified by the writer side.

tls.verify.callback

This can be set to one of three values:

  • "default" selects NDDS_Transport_TLS_default_verify_callback()
  • "verbose" selects NDDS_Transport_TLS_verbose_verify_callback()
  • "none" requests no callback be registered

tls.cipher.cipher_list

List of available (D)TLS ciphers. See the OpenSSL manual page for SSL_set_cipher_list for more information on the format of this string.

tls.cipher.dh_param_files

List of available Diffie-Hellman (DH) key files. For example: "foo.h:2048,bar.h:1024" means:

dh_param_files[0].file = foo.pem,

dh_param_files[0].bits = 2048,

dh_param_files[1].file = bar.pem,

dh_param_files[1].bits = 1024

tls.cipher.engine_id

String ID of OpenSSL cipher engine to request.

tls.identity.certificate_chain_file

Required if you want to use security.

A string that specifies the name of a file containing an identifying certificate chain (in PEM format). An identifying certificate is required for secure communication. The file must be sorted starting with the certificate to the highest level (root CA). If no private key is specified, this file will be used to load a non-RSA private key.

tls.identity.private_key_password

A string that specifies the password for private key.

tls.identity.private_key_file

A string that specifies that name of a file containing private key (in PEM format). If no private key is specified (all values are NULL), this value will default to the same file as the specified certificate chain file.

tls.identity.rsa_private_key_file

A string that specifies that name of a file containing an RSA private key (in PEM format).

transport_instance_id[0] to
[NDDS_TRANSPORT_
WAN_TRANSPORT_
INSTANCE_ID_LENGTH2NDDS_TRANSPORT_WAN_TRANSPORT_INSTANCE_ID_LENGTH = 12]

Required

A set of comma-separated values to specify the elements of the array. This value must be unique for all transport instances communicating with the same WAN Rendezvous Server.

If less than the full array is specified, it will be right-aligned. For example, the string "01,02" results in the array being set to:
{0,0,0,0,0,0,0,0,0,0,1,2}

interface_address

Locator, as a string

server

Required

Server locator, as a string.

server_port

Server port number.

stun_retransmission_interval

STUN request messages requiring a response are resent with this interval. The interval is doubled after each retransmission. Specified in msec.

stun_number_of_retransmissions

Maximum number of times STUN messages are resent unless a response is received.

stun_liveliness_period

Period at which messages are sent to peers to keep NAT holes open; and to the WAN server to refresh bound ports. Specified in msec.

© 2018 RTI