OpenDDS FAQ
| |
Q: |
What's a PRF? |
A: |
"PRF"
refers to the PROBLEM-REPORT-FORM, i.e., $DDS_ROOT/PROBLEM-REPORT-FORM.
The odds of getting questions answered, bugs fixed, etc., goes up significantly when you report problems using the PRF because it insures that developers and support personnel get the most commonly required information right away. Failure to use the PRF means that those folks have to spend valuable time (yours and theirs) having a conversation to get that information just to start debugging. Unless you've got a paid support contract, there's even a chance that nobody will answer!
So, always use the PRF!
|
Q: |
Is there a mailing list or forum or usenet group for discussion of OpenDDS ? |
A: |
Yes. The DDS mailing lists are available through the
OpenDDS SourceForge
project page. The archives of previous messages are searchable.
Please remember to use the Problem Report Form (See What's a PRF?) when
posting questions (and not just "problems").
|
Q: |
What will the Navy SBIR award activity focus on? |
A: |
See the Navy SBIR Award summary.
|
Q: |
Which platforms does OpenDDS support? |
A: |
Please refer to the Building OpenDDS
documentation for a complete list of supported platforms.
|
Q: |
Is OpenDDS interoperable with other DDS implementations? |
A: |
Starting with version 3.1, OpenDDS contains an implementation of the RTPS (Real Time Publish-Subscribe)
specifciation required for interoperability. It is not enabled by default. See the OpenDDS Developer's
Guide chapter 7 for configuration details.
|
Q: |
Does OpenDDS use CORBA? |
A: |
OpenDDS optionally uses CORBA to administer and control the establishment of data connections
(when configured to use the DCPSInfoRepo for discovery, which is the default). CORBA is never
used in the distribution of application data. When configured for RTPS peer-to-Peer discovery,
the CORBA libraries (TAO) are present but not used for any inter-process communication at all.
|
Q: |
Summarize the network connections established by OpenDDS in a two participant scenario? |
A: |
This scenario has two participants (one only publishes and the other only subscribes) using the TCP transport
with no Built-In Topics. The DCPSInfoRepo is used for discovery.
Here we would expect to see three established TCP connections at each participant:
|
| |
Q: |
How do I obtain, configure, and build OpenDDS? |
A: |
Please refer to the Building OpenDDS documentation for complete requirements and build steps.
|
Q: |
What could be causing std lib related build failures on Linux? |
A: |
OpenDDS makes more extensive use of the C++ standard library, compared to ACE+TAO. You may be uncovering issues that ACE+TAO may have managed to avoid.
We have seen gcc 4.0.x-series compiler users to hit this problem more often. The visibility feature in this compiler still seems to be in a state of flux. If you see these errors, we recommend turning off the visibility feature by adding "no_hidden_visibility=1" to your platform_macros.GNU file and rebuilding all of ACE+TAO and OpenDDS.
|
| |
Q: |
Why "SimpleTcp" is not automatically registered [OpenDDS 2.x and earlier]? |
A: |
This question only applies to OpenDDS versions 2.x and earlier.
Starting with the 0.11 release, the SimpleTcp transport was separated the from DCPS core library to reduce footprint. Please see the section on "Pluggable Transports" in the DDS DevGuide (http://download.ociweb.com/OpenDDS/OpenDDS-latest.pdf) for how to load the SimpleTcp library.Or you can look at the $DDS_ROOT/DevGuideExamples/DDS/Messenger example. Test script "run_test.pl" runs the test with SimpleTcp transport configuration.
On a related note the DCPSInfoRepo uses the SimpleTcp transport
solely to transmit BIT (Built In Topics) information. If your
application isn't subscribing to BITS, then the InfoRepo doesn't
need the transport library. Just start up the InfoRepo with the
-NOBITS option and you will be OK.
|
Q: |
Does OpenDDS support broadcast or multicast? If so, how do you set it up? |
A: |
Reliable multicast has been available in OpenDDS since the
0.12 release (unreliable multicast since 0.11 release). A broadcast based transport is currently not available. Please see the section on "Transports" in the DDS Developer's Guide (http://download.ociweb.com/OpenDDS/OpenDDS-latest.pdf) for how to setup using the multicast transport. Or you can look the $DDS_ROOT/tests/DDS/Messenger. The "run_test.pl multicast" runs the test with multicast transport configuration. Also see the RTPS (interoperability) support which is capable of multicast, but can also work with unicast.
|
Q: |
Why did a subscriber did not receive all samples sent by the publisher? |
A: |
While there can be multiple reasons that the samples are lost or dropped, a common
problem is that the publisher starts sending samples before the subscriber is
ready to receive. To synchronize, the publisher can use a WaitSet before writing.
This ensures the subscriber is ready to receive samples. Here is the example code.
DDS::StatusCondition_var cond = writer->get_statuscondition();
cond->set_enabled_statuses(DDS::PUBLICATION_MATCHED_STATUS);
DDS::WaitSet_var ws = new DDS::WaitSet;
ws->attach_condition(cond);
while (true) {
DDS::PublicationMatchedStatus matches;
if (writer->get_publication_matched_status(matches) != DDS::RETCODE_OK) {
// failure
} else if (matches.current_count >= 1) {
break;
}
DDS::ConditionSeq conditions;
DDS::Duration_t timeout =
{ DDS::DURATION_INFINITE_SEC, DDS::DURATION_INFINITE_NSEC };
if (ws->wait(conditions, timeout) != DDS::RETCODE_OK) {
// failure
}
}
ws->detach_condition(cond);
|
Q: |
Why can't my publisher establish a connection with a remote subscriber? |
A: |
While there can be multiple reasons for inter-host communication
failure, this entry deals with connection establishment failures
due to improper endpoint configuration.
The configuration option "local_address" represents the endpoint address.
This host/port tuple is used by the publisher to initiate connection
establishment. In order to allow inter-host communication, make sure the
endpoint address is publicly visible.
A common mistake is to re-use the configuration provided in the
exercises without modifications. Since the examples are intended to
be run on an intra-host environment, they generally use the 'localhost'
interface. This configuration will fail when the test is run in an
inter-host setting.
|
| |
Q: |
What is the status of BIT support in OpenDDS? |
A: |
Support for Built-In-Topics is complete since the 0.12 release. This means that BITs will now work as specified. BIT support is now turned on by default.
|
Q: |
How do I turn off BIT support at build-time? |
A: |
It is possible to build OpenDDS without BIT support which will reduce overall footprint. For this you will need to generate new project files:
mwc.pl -type <yourtype> -features built_in_topics=0 DDS.mwc
If <yourtype> happens to be gnuace, add "built_in_topics=0" to the
platform_macros.GNU file or the MAKEFLAGS environment variable.
|
Q: |
How do I turn off BIT support at run-time? |
A: |
Turning off BIT support involves it being turned off in the DCPS Information Repository and any associated participants.
The DCPSInfoRepo option -NOBITS disables BIT support for the InfoRepo. The option '-DCPSBit 0' will disable BIT support for all participants in the process.
|
| |
Q: |
Why don't anonymous IDL sequences compile? |
A: |
Anonymous IDL sequences use the sequence keyword outside of a typedef:
struct X {
sequence<Y> seq;
};
Anonymous sequences have been deprecated in the OMG IDL specification.
OpenDDS no longer supports using anonymous sequences, instead use a typedef
to name the sequence type:
typedef sequence<Y> YSeq;
struct X {
YSeq seq;
};
|
Q: |
How do I use sequences of built-in types in IDL? |
A: |
If you'd like to use a sequence of one of the following IDL built-in types:
To use the existing typedef, add an #include for the pidl file from the tao directory: #include <tao/LongSeq.pidl>The typedefs are in the "CORBA" IDL module, so the typedef for LongSeq could be used as:
struct X {
CORBA::LongSeq seq;
};
|
| |
Q: |
How do I obtain the OpenDDS Modeling SDK? |
A: |
Please refer to the OpenDDS Developer's Guide for complete installation instructions (Chapter: OpenDDS Modeling SDK, Section: Installation and Getting Started).
Make sure that Eclipse's list of Available Software Sites contains an enabled site with URL: http://download.eclipse.org/releases/galileo. If not, you need to add one (the name can be anything, we suggest "Galileo").
|
Q: |
Why can't I see the element I added to my figure? |
A: |
If auto-sizing isn't enabled for the figure, depending on the figure's size, an element added to one of the figure's compartments may be be immediately visible. By increasing the size of the figure they element should appear. See the OpenDDS Modeling SDK Guide > Tasks > Working with Diagrams > Creating Figures in the Eclipse help for information on how to make the figure automatically re-size to accommodate additional content.
|
Q: |
How to I open a library (for example a DataLib) on the main diagram? |
A: |
Double clicking on the library should open the library in a subdiagram. However, sometimes no action will be taken after double clicking. An alternative way to open a library is to select the library and then press the Enter key. This topic, along with other topics related to libraries, is in the Eclipse help content under OpenDDS Modeling SDK Guide > Tasks > Modeling > Working with OpenDDS Models.
|
| |
Q: |
How should I override a specific QoS policy and leave others defaulted? |
A: |
First create an empty QoS variable of the proper type (for example DDS::DataWriterQos), then call the parent's get_default_*_qos() method (for example) Publisher::get_default_datawriter_qos(dw_qos). Then you can modify the QoS and pass it to the proper create_* method.
|
Q: |
What are the *_QOS_DEFAULT macros? |
A: |
These macros (for example DATAWRITER_QOS_DEFAULT) are placeholders, used only to provide a default value to the create_* methods. These macros themselves do not expand to QoS structure instances that can be used for any purpose other than passing to the create_* methods. This includes the DATAWRITER_QOS_USE_TOPIC_QOS (and DATAREADER_QOS_...). In Java they are obviously not macros, instead they are classes in the DDS package that have a public static get() method.
|
Q: |
Why do I get samples with invalid data in them? |
A: |
Make sure the call to read/take returns a status of RETCODE_OK and the SampleInfo's valid_data is set to true. Both of these conditions are required for the sample to be valid.
|