Commit graph

384 commits

Author SHA1 Message Date
Erik Boasson
482e1cd006 Fix rtps_start error handling on thread creation
Signed-off-by: Erik Boasson <eb@ilities.com>

Use static assert instead of run-time assert

Signed-off-by: Erik Boasson <eb@ilities.com>

Use static assertion to verify nn_rmsg offset calc

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-11-25 18:26:15 +01:00
Bart Poot
9a3a377327 Fixed coverity issues
Signed-off-by: Bart Poot <bart.poot@adlinktech.com>

Processed review comments

Signed-off-by: Bart Poot <bart.poot@adlinktech.com>
2019-11-25 18:26:15 +01:00
Erik Boasson
c84c69e551 Bump version number to 0.5 prior to release
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-11-20 12:48:00 +01:00
Erik Boasson
08d9c296f1 Add DOMAIN_ID, DOMAIN_TAG to config, discovery
This commits adds support for the DOMAIN_ID and DOMAIN_TAG parameters in
participant discovery, allowing multiple domains to share a port
number (a feature introduced in DDSI 2.3).  The tag can be configured
via Discovery/Tag.

This commit also introduces a setting Discovery/ExternalDomainId that
makes it possible to override the domain id on the network, both in what
is advertised in the DOMAIN_ID discovery parameter and in the
calculation of port numbers.  This way a single process can create two
independent domains that talk via the network, which is on occassion
useful in writing tests.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-11-20 12:47:22 +01:00
Erik Boasson
0426e4b355 Delete unused CRC32 implementation
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-11-19 15:16:52 +01:00
Erik Boasson
8849392c5e Accept invalid pre-emptive ACKNACK from Connext
Connext (sometimes, for some versions?) sends a pre-emptive ACKNACK with
a base sequence number of 0, which were rejected following the DDSI
specification (8.3.4.1, 8.3.5.5 and 8.3.7.1.3).  That doesn't really
help anyone.  (https://github.com/ros2/ros2/issues/824)

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-11-19 10:52:09 +01:00
Erik Boasson
3a3fb64a35 Fix casing of domain "Id" attribute in test config (#283)
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-11-18 15:11:02 +01:00
Erik Boasson
3da21315f2 Improve errors for invalid port numbers (#303)
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-11-18 14:20:55 +01:00
Erik Boasson
fc0b402584 Delete some leftover type definitions
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-11-18 14:20:55 +01:00
Dan Rose
6ed01fc62a Fix string literal under cpp compiler
PGUIDFMT creates invalid C++ code.

In file included from /opt/ros/master/src/ros2/rmw_cyclonedds/rmw_cyclonedds_cpp/src/serdata.cpp:23:
In file included from /opt/ros/master/install/include/dds/ddsi/q_radmin.h:17:
In file included from /opt/ros/master/install/include/dds/ddsi/ddsi_tran.h:19:
In file included from /opt/ros/master/install/include/dds/ddsi/q_protocol.h:19:
/opt/ros/master/install/include/dds/ddsi/q_rtps.h:30:21: error: invalid suffix on literal; C++11 requires a space between literal and identifier [-Wreserved-user-defined-literal]
                    ^

/opt/ros/master/install/include/dds/ddsi/q_rtps.h:30:31: error: invalid suffix on literal; C++11 requires a space between literal and identifier [-Wreserved-user-defined-literal]

Signed-off-by: Dan Rose <dan@digilabs.io>
2019-11-18 10:26:03 +01:00
Martin Bremmer
b6b0c25355 Add domain creation torture test.
Signed-off-by: Martin Bremmer <martin.bremmer@adlinktech.com>

Disabled domain_torture_imlicit test.

Signed-off-by: Martin Bremmer <martin.bremmer@adlinktech.com>
2019-11-14 14:17:37 +01:00
Martin Bremmer
fc8b8fef3a Small entity deletion wip refactoring.
Signed-off-by: Martin Bremmer <martin.bremmer@adlinktech.com>
2019-11-14 14:17:37 +01:00
Martin Bremmer
40973d8e29 Update function headers and added dds_create_domain() tests.
Signed-off-by: Martin Bremmer <martin.bremmer@adlinktech.com>
2019-11-14 14:17:37 +01:00
Erik Boasson
33ba911192 Fix dds_create_domain return and error handling
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-11-14 14:17:37 +01:00
Erik Boasson
c642f5676a Namespace generated XSD and add missing attributes
This adds two things to the XSD (and the RNC file and options.md):
* attributes previously missing because of a bug in the conversion
  script
* a name space (https://cdds.io/config)

Adding the name spacing requires a different set of attributes at the
top of a configuration file, which in turn need to be ignored by the
configuration parser, and which should be reflected in the configuration
example in the README.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-11-06 20:39:20 +01:00
Dan Rose
c5b22bf629 Fix most of the validation problems
Signed-off-by: Dan Rose <dan@digilabs.io>
2019-11-06 20:39:20 +01:00
Dan Rose
4f2addef1a Allow xmlns attribute on the root element
Signed-off-by: Dan Rose <dan@digilabs.io>
2019-11-06 20:39:20 +01:00
Dan Rose
ae1a8130c7 Namespace the schema and add references in xml files
Signed-off-by: Dan Rose <dan@digilabs.io>
2019-11-06 20:39:20 +01:00
Marcel Jordense
43ee3f87ca use ddsrt_malloc for allocating iov array
Signed-off-by: Marcel Jordense <marcel.jordense@adlinktech.com>
2019-10-28 21:45:41 +01:00
dennis-adlink
c8aa6fee5a Moved bswap functions to ddsrt (#297)
* Moved bswap functions to ddsrt

Moved the byte swapping functions from ddsi to ddsrt so that
these can be re-used in e.g. the security plugins and tests.

Signed-off-by: Dennis Potman <dennis.potman@adlinktech.com>

* Moved  decarations for bswap functions to ddsrt

Signed-off-by: Dennis Potman <dennis.potman@adlinktech.com>
2019-10-28 15:03:46 +01:00
Scott K Logan
94e4c0915d Skip some tests when BUILD_IDLC=OFF
These tests use `idlc_generate`, which is not available when
`BUILD_IDLC` is not `ON`.

Signed-off-by: Scott K Logan <logans@cottsay.net>
2019-10-22 15:20:30 +02:00
Dan Rose
98ce7d1971 Stylistic CMake changes
No functional impact intended
Signed-off-by: Dan Rose <dan@digilabs.io>
2019-10-22 15:18:26 +02:00
Dan Rose
960d4f7358 Use PROJECT_NAME instead of CMAKE_PROJECT_NAME
CMAKE_PROJECT_NAME refers to the top-level project name, not the most recent project. So any CMake project that pulls this in as a dependency was in for a nasty surprise.
https://cmake.org/cmake/help/latest/variable/CMAKE_PROJECT_NAME.html

Signed-off-by: Dan Rose <dan@digilabs.io>
2019-10-20 03:28:15 -07:00
Erik Boasson
8ec68e1d7d No printing of null pointers in config errors
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-10-16 03:08:31 +02:00
Erik Boasson
a71be9dcec Remove all occurrences of strncpy
Too many compilers warn about correct use of strncpy these days ...

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-10-16 03:08:31 +02:00
Erik Boasson
14ffab2705 Always use atomic64 for writer seq_xmit (#270)
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-10-16 03:08:31 +02:00
Erik Boasson
8ce389dd85 IID generator: init and atomic64 ops (#270)
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-10-16 03:08:31 +02:00
Erik Boasson
aa5236dea4 Prefix matching for config XML in CYCLONEDDS_URI
Allow unique prefix matches for elements and attributes specified in
directly in CYCLONEDDS_URI.  That mode already has a few niceties for
quickly specifying some configuration overrides, this is simply one
more.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-10-10 17:44:39 +02:00
Erik Boasson
d429045255 Add option documentation and add XSD
The ``docs/makernc.pl`` perl script can extract the options from the
source code for the configuration processing and turn these into a
GitHub MarkDown document and a RELAX NG Compact form (RNC) description
of the options.  Standard conversion tools can be used to turn the RNC
file into an XSD.

Although they are generated by a mechanical transformation, it is not
(yet) part of the build process, in no small part because there no
proper generation and publishing system has yet been set up for the
documentation.

Now that there is an XSD and a Markdown file for discovering the
options, there is no need to retain the configuration editing tool.  Any
decent editor will do a better job.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-10-10 17:44:39 +02:00
Erik Boasson
fde05810c6 Drop broken protection against casual eavesdroppers
From a distant past came code to encrypt data on the wire, but it hasn't
been functional in Cyclone for a long time and it only ever provided
protection against casual eavesdroppers.  It is better to delete it.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-10-10 17:44:39 +02:00
eboasson
78fc9c2e85
Merge pull request #260 from eboasson/plist-update
parameter list update: properties, fixes, unit tests
2019-09-27 13:32:46 +02:00
Erik Boasson
2289428991 Support optional tail in plist deserialisation
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-09-27 13:12:54 +02:00
Martin Bremmer
bc6ece0bfb Fixed missing-field-initializers clang-4 warnings.
Signed-off-by: Martin Bremmer <martin.bremmer@adlinktech.com>
2019-09-27 10:07:54 +02:00
Erik Boasson
bf8bc87a87 Fixes for table-driven plist ser/deser
* GUID, keyhash compare (currently no reliance on this comparison, so
  not causing trouble in Cyclone for applications)

* comparing "propagate" boolean in plist (newly added for security,
  not yet used)

* fix memory leak in plist_unalias (currently only used in duplicating
  them, in which case the memory leak doesn't occur)

* add unit tests for plist handling

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-09-26 15:58:50 +02:00
Martin Bremmer
8f46889f74 Improved property policy handling.
Signed-off-by: Martin Bremmer <martin.bremmer@adlinktech.com>
2019-09-26 15:54:05 +02:00
Martin Bremmer
9f1ddb0b38 Added property policy.
Signed-off-by: Martin Bremmer <martin.bremmer@adlinktech.com>
2019-09-26 15:54:00 +02:00
Erik Boasson
527a59f82f Add support for non-nested sequences in plist
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-09-26 15:53:50 +02:00
Erik Boasson
c5e4d36dc6 Remove unused "length" opcode from plist handling
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-09-26 15:43:25 +02:00
Erik Boasson
94483e3371 Address Coverity, Clang static analyzer warnings
* Fix type of num reliable readers (int to int32_t)

* Conversion codes in debug monitor printf formats

* Dead code elimination

* Skipping a test case where SIZE_MAX is assumed > INT32_MAX if
  assumption is false on target platform

* Error handling in os_sockWaitsetNew

* Stick to unsigned in fragment size calculations

  This check is actually guarded by valid_DataFrag and was safe for
  datagrams up to 2GB, but the unintended and implicit conversion to is
  still best eliminated.

* A "server" connection never has an invalid socket in TCP wrapper

* Handle error return from gethostname in SPDP write (CID 248183)

* Handle extended retcodes in dds_strretcode

  CID 248131, introduced by 19aec98b8a

* Remove dead code in ddsrt logging test (CID 248195)

* Validate command-line argument in process test (CID 248117)

* Allow for extremely delayed store in test

  Test is constructed to have the events trigger only at the appropriate
  times, but it does assume that the store to cb_called becomes visible
  prior to the listener callback.  I'm pretty sure that will always be
  the case in practice, but I'm also pretty sure there is no formal
  guarantee without a memory barrier, which mutex_unlock provides.

  CID 248088, 248136, 248177, 253590, 253591, 253593

* Check unsetenv return value in test (CID 248099)

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-09-25 10:46:40 +02:00
Erik Boasson
d1ad60fdd1 Fix locking in DATA_ON_READERS when masked
In the case of when a DATA_ON_READERS listener is set, but with the
corresponding status mask is set to suppress the event, the reader lock
would not be in locked, resulting in a unlocked access of status flags
and a double unlock.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-09-25 10:46:40 +02:00
Frans Faase
f48bbd3d1c Initializing domain with configuration as a string
For targets that do not support ddsrt_setenv and ddsrt_getenv, an alternative
method is needed to supply an application specific configuration. One way to
implement this, is to add a function for creating a domain with a string
arguments, which needs to be called before any call to dds_create_participant
for given domain identifier.

The function dds_create_domain has been added, which has as arguments a domain
identifier and a configuration string. The string is treated in the same way
as the string that is retrieved from the environment variable, in that it may
containt a comma separated list of file names and/or XML fragments for the
configuration.

Two tests have been added. One limits the number of participants to two and
verifies that creating a third participant fails. The other tests checks
incorrect calls to dds_create_domain.

An assert in dds_handle_delete has been weakened.

Signed-off-by: Frans Faase <frans.faase@adlinktech.com>
2019-09-19 16:30:27 +02:00
Martin Bremmer
801c4b1456 Added participant mismatch tests.
Signed-off-by: Martin Bremmer <martin.bremmer@adlinktech.com>
2019-09-12 15:15:48 +02:00
Erik Boasson
3ff26103cb Lengthen timeout in ddsc_guardcond_waitset_thread
Rare intermittent failure appears to be timing.  Increasing the timeout
doesn't affect the duration of a successful run and will still signal an
missing trigger.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-09-11 10:06:24 +02:00
Erik Boasson
1e094c6fbb Fix race: delete participant, receipt of own SPDP
Deleting participant does: add to "deleted participants", remove from
GUID hash table; so SPDP processing must first check for an existing
participant and check deleted participants if nothing found.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-09-11 10:06:24 +02:00
Erik Boasson
d9dac3b7e2 Store logcfg in deleted_participants_admin
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-09-11 10:06:24 +02:00
Erik Boasson
68e3e55c2f ddsi_sertopic_free_samples expects an array
So dds_read/dds_take should pass it the address of the first pointer,
rather than the first pointer itself, or the freeing of memory allocated
for samples because of an outstanding loan will crash.  Add a test that
reliable detects this case when no other participants are around.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-09-11 10:06:24 +02:00
Erik Boasson
33a389fdaa Include port numbers in "config" trace category
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-09-11 10:06:24 +02:00
Erik Boasson
133014cdfa Address race conditions in deleting entities
Deleting entities concurrently with operating on them or creating child
entities should work properly, even if it is essentially abuse.  This
commit fixes (most?) of them, with exception of some nastiness when
deleting the last entity, and thus deinitialising the library, in
parallel to attempting to operate on a (by definition invalid) handle.

* Interrupting a blocked operation at the beginning of "delete" is now a
  separate operation.  E.g., a wait call on a waitset must be interrupted,
  but the data structures can't be touched yet because other threads may
  be doing an attach/detach in parallel.

* DDSI writer can now be switched to an intermediate state,
  "INTERRUPTED", to indicate that it should unblock any waiting threads
  and refuse to transmit any further data, but without actually
  embarking on the path of deleting data structures.

* The extra "pinning" of readers and writers is now gone, they remain
  fully functional until the no other threads can still access the
  entity.

* Future listener invocations are prevented as part of deleting the
  entity, but now it also guarantees the application can no longer
  re-enable them.  It furthermore waits until there are no further
  current or pending listener invocations, rather than simply no current
  ones.

* The internal state of the waitset now has its own lock, otherwise
  attaching the parent entity of the waitset can require locking the
  waitset after having locking the parent, which violates locking order.

* Handles are created in a pending state, where they are not included in
  a dds_get_children operation and refuse to be pinned.  This makes it
  possible (in a future commit) to undo deletion of complex entities.

* There is a test (ddsc_waitset_torture) that exercises some of these
  corner cases.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-09-11 10:06:24 +02:00
Erik Boasson
ed59c388f5 Respect locking order in waitset attach/detach
This fixes a possible deadlock when detaching an entity at the same time
it is triggering: a triggering entity holds its m_observers_lock while
trying to acquire waiset::m_mutex, and so attach and detach must not do
the opposite.  The deadlock had excellent reproducibility in a seemingly
unrelated ROS2 application; this changes fixes it.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-09-11 10:06:24 +02:00
Erik Boasson
fbc05777f3 Make it possible to create reader with custom RHC
The default RHC implementation is not always ideal and rather than
trying to squeeze everything in a fixed interface it makes more sense to
allow the caller to provide an arbitrary implementation of the
interface.

This is not yet a stable interface.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-09-11 10:06:24 +02:00