Problem

How to configure BDNT to use TCP ?

Solution

By default is bulk data NT configured to use UDP (unicast or multi-cast) for sending data from the sender to the receiver(s).

If an user wants to use TCP instead this has to be done:

  • by defining a DDS QoS Library profile in the XML file ($ACSDATA/config/bulkDataNTDefaultQosProfiles.xml) that enables and configure TCP for sending data. This is already provided by the bulkDataNT installation for most XML profile files, so nothing shoudl be done by the user.
  • in configuration for the stream and flow should be specified to use DDS QoS library where TCP is enabled (for the profiles provided by bulkDataNT installation the name of QoS library is: TCPBulkDataQoSLibrary). This can be done using (TM)CDB or API.
    • API: There is a method: setQosLibrary for ssender/receiver stream/flow configuration object. Here is an example for sender stream and sender flow:
//configuration for a (sender)stream
SenderStreamConfiguration scfg;
scfg.setQosLibrary("TCPBulkDataQoSLibrary");

//configuration for a (sender)flow
SenderFlowConfiguration fcfg;
fcfg.setQosLibrary("TCPBulkDataQoSLibrary");
    • (TM)CDB: It is possible to set QoS library buy specifying baseQosLibraryXML attribute in DDSSenderFlowQoS=/=DDSReceiverFlowQoS XML element of Sender=/=ReceiverFlow and DDSReceiverStreamQoS=/DDSSenderStreamQoS XML element for =ReceiverStream=/=SenderStream. Here is an example for sender stream/flow:
<SenderStream Name="ExampleStream">
      <SenderFlow Name="ExampleDataFlow">
      <DDSSenderFlowQoS  baseQosLibrary="BulkDataQoSLibrary"/>
      </SenderFlow>
 <DDSSenderStreamQoS baseQosLibrary="BulkDataQoSLibrary"/>
</SenderStream>

IMPORTANT:

  • The same QoS library has to be set for the sender and the receiver part. Otherwise the connection will not happen.
  • It is not recommended to use TCP for multi-cast data transfer.
  • The configuration has to be done for stream and flows of that stream.
  • If UDP and TCP are mixed in the same process it is important that a participant per stream is used for the streams that use different protocols.

-- BogdanJeram - 2013-07-17