Commit graph

115 commits

Author SHA1 Message Date
Erik Boasson
54fad0d601 Merge remote-tracking branch 'upstream/master' into security 2020-02-13 13:13:54 +01:00
Jeroen Koekkoek
bf3d1bc270 Fix getifaddrs for non-English interface names on Windows
ddsrt_asprintf did not copy non-English interface names. To fix this memory is
allocated with ddsrt_malloc and UTF-16 encoded interface names are converted to
UTF-8.

Signed-off-by: Jeroen Koekkoek <jeroen@koekkoek.nl>
2020-02-13 08:43:59 +01:00
Erik Boasson
ad58db0721 Merge branch 'master' into security
Signed-off-by: Erik Boasson <eb@ilities.com>
2020-02-12 17:30:38 +01:00
Erik Boasson
80ed351efd Add declaration prototype line for ddsrt_atomic_ function to fix armhf build warning
Thanks to @emersonknapp

Signed-off-by: Erik Boasson <eb@ilities.com>
2020-02-12 17:20:04 +01:00
Erik Boasson
27d7c72626 Relax constraints on topic entities
This commit changes the implementation of topics so that multiple topic
entities can exist in a single participant for the same topic.
Different entities may refer to different topic implementations
(sertopics, akin to a type support in the DDS specification).  All
entities (for the same participant) always have the same QoS, via the
new "ktopic" table in the participant.

Readers and writers are bound to a topic entity and inherit its
properties.  If a topic comes in two definitions, say one for C and one
for C++, one can have a single participant with a reader delivering the
data in C representation and another reader delivering it in C++
representation.

This changes the behaviour of create_topic and find_topic: these now (on
successful return) always return a new entity (and thus with a unique
handle), where previously these would simply return a existing one when
possible.

This also requires some small additions to the sertopic/serdata
interface.

Signed-off-by: Erik Boasson <eb@ilities.com>
2020-02-11 23:26:01 +01:00
Michel
2d252ad1f6 Description corrections.
Signed-off-by: Michel <michel.vandenhoek@adlinktech.com>
2020-02-10 14:41:31 +01:00
Stefan Kimmer
aef4f0a126 Certificate trigger and directory operations
Implement trigger of certificate and permission expiries using the timed callbacks.

Implement directory operations such that trusted CA can be read.
This implements OS abstraction functions such as opendir and stat.

Signed-off-by: Stefan Kimmer <skimmer@s2e-systems.com>
2020-02-10 11:07:13 +01:00
Jeroen Koekkoek
3de040d21a Add support for musl libc
Based on patch by mauropasse (issue #383).

Signed-off-by: Jeroen Koekkoek <jeroen@koekkoek.nl>
2020-02-06 18:30:24 +01:00
Erik Boasson
68f789d77b Address some spurious Clang static analyzer warnings
Signed-off-by: Erik Boasson <eb@ilities.com>

Fix typo in dlopen_unknown test

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

Signed-off-by: Erik Boasson <eb@ilities.com>
2020-01-23 12:48:47 +01:00
Erik Boasson
263d8016b8 Fix macros for testing presence of atomic LIFO
Signed-off-by: Erik Boasson <eb@ilities.com>
2020-01-20 17:05:46 +01:00
Kurtulus Oksuztepe
0b1804e039 Finite State Machine for Security
A generic FSM has been added to DDS Security Core component to realize authentication handshake process.
The list of the states and the transitions are given in the creation and the FSM is started with a start call.
Passing arguments to transition funstions is possible.
Timeout transitions are possible.

Signed-off-by: Kurtulus Oksuztepe <kurtulus.oksuztepe@adlinktech.com>
2020-01-20 15:54:08 +01:00
Dennis Potman
219cb6cf4f Refactored linked list administration in rhc so that it becomes reusable
Signed-off-by: Dennis Potman <dennis.potman@adlinktech.com>
2020-01-17 14:35:07 +01:00
Kurtulus Oksuztepe
b81ef4042b DDS Security dynamic plugin loading
Security plugin loading with the given configuration has been added.

The configuration can be given by either the Cyclone DDS configuration file or ParticipantQoS during participant creation.
ParticipantQoS is required by DDS Security spec. However, the configuration file is an additional useful feature that helps the user to add security to the DDS application without changing the binary.
If ParticipantQoS has a Property starting with the name "dds.sec", then the configuration file is ignored.

If the participant is the first participant, the security component is initialized. If the participant is the last active participant, then the security component is de-initialized.

Signed-off-by: Kurtulus Oksuztepe <kurtulus.oksuztepe@adlinktech.com>
2020-01-16 16:10:37 +01:00
Dan Rose
a6dc93ac03 Define NOMINMAX to suppress windows min/max macros
Signed-off-by: Dan Rose <dan@digilabs.io>
2020-01-15 13:02:57 +01:00
Martin Bremmer
660d495746 Merge branch 'master' into merge6
Signed-off-by: Martin Bremmer <martin.bremmer@adlinktech.com>
2019-12-13 12:59:37 +01:00
Dennis Potman
37c64e0965 Add string functions used by security plugins to ddsrt (#334)
* String functions required by DDS Security Access Control plugin

The implementation for the DDS Security Access Control plugin
requires two additional string functions. This commit adds the
ddsrt_str_replace function (including tests) and exports the
existing function ddsrt_todigit.

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

* Suppress strcpy warnings in Windows builds for ddsrt_str_replace

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

* Minor nitpicks on ddsrt_str_replace

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-12-04 11:22:40 +02:00
Dennis Potman
3822f42eff Liveliness QoS implementation for auto and manual-by-participant
This commit adds support for the liveliness QoS for the liveliness
kinds automatic and manual-by-participant. It also implements the
lease_duration from this QoS, which was ignored until now. In the
api the function dds_assert_liveliness is added to assert liveliness
on a participant, which can be used when using liveliness kind
manual-by-participant.

Liveliness kind manual-by-topic is not yet supported, this will be
added in a later commit.

* Proxy participants now have 2 fibheaps to keep leases: one for leases
of pwrs with automatic liveliness and one for leases of the pwrs with
manual-by-participant liveliness (both protected by the proxypp lock).
The minl_auto and minl_man members represent the shortest lease from
these fibheaps and these leases are renewed when receiving data.
Replacing the minl_ leases is now done by replacing the lease object
(atomic ptr) with delayed deletion of the old lease using the gc.

* Proxy writers are set not-alive when the lease expired, and reset to
alive then data is received. When data is received by a pwr, the other
pwrs in the proxypp might also be set alive. I think the specification
is not clear at this point, and for now I have not implemented this

* I refactored out the counter for man-by-pp proxy writers and improved
locking when updating the min-leases on the proxy participant, so I
think this fixes the race conditions.

Some additional tests are required, e.g. to test the not-alive->alive
transition for pwrs. I will add these in short term, as well as the
implementation of the manual-by-topic liveliness kind.

Signed-off-by: Dennis Potman <dennis.potman@adlinktech.com>
2019-11-25 18:36:30 +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
c603fdd4ed Fix trivial white space, compiler warnings
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-11-18 14:20:55 +01:00
Erik Boasson
a1aaa2808f Check once for system-independent headers (#270)
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-11-06 14:39:01 +01:00
Erik Boasson
9e61bff9b9 Use unsigned char for XML input
Sign extension causes some character values to be interpreted as special
tokens, potentially causing the parser to hang, pass a null pointer as
element name to the "elem_open" callback (which would crash the
configuration processing).

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-11-04 14:36:28 +01:00
Erik Boasson
5883b96f6a Handle unterminated comment in XML parser (#270)
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-11-04 14:36:28 +01:00
Erik Boasson
d545551a60 Fix input buffer allocation in XML parser (#270)
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-11-04 14:36:28 +01:00
Erik Boasson
151159a5ea Clear sa_mask in sigaction for DDS_LC_FATAL test
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-11-04 14:36:28 +01:00
Erik Boasson
57ac8a457b Skip irrelevant buckets in hopscotch lookup (#270)
When scanning buckets while looking for a specific element, it is faster
to only inspect those buckets for which the corresponding bit in
"hopinfo" is set.  Sadly, simple scanning is faster than the far more
elegant perfect hash based on a De Bruijn sequence.

Add a simple test/performance measurement.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-11-04 14:36:28 +01:00
Kurtulus Oksuztepe
2c1d3010d0 Builtin authentication plugin for DDS Security
Builtin authentication plugin of DDS Security implementation was added.
This plugin is the first implementation and it also contains the functions that are used initially in the secure communication sequence.

The builtin authentication plugin implements authentication using a trusted Certificate Authority (CA). It performs mutual authentication between discovered participants using the RSA or ECDSA Digital Signature Algorithms and establishes a shared secret using Diffie-Hellman (DH) or Elliptic Curve Diffie-Hellman (ECDH) Key Agreement Methods.

DDS Security core component is introduced with this commit. DDSI and other builtin plugins will also use the security core.

Like all builtin plugins, dds security authentication plugin is a shared library for providing dynamic library loading on runtime. So that, dds participants can use different plugin implementations with different configurations.

Authentication plugin uses ddsrt functions. ddsrt is not expected to be a shared library and statically adding ddsrt objects to authentication library produces linkage errors in windows. So, dynamically linking authentication plugin to ddc library is decided. Another decision should be taken for the platforms that are not supporting dynamic libraries later.

Signed-off-by: Kurtulus Oksuztepe <kurtulus.oksuztepe@adlinktech.com>
2019-10-30 11:41:00 +01:00
Kurtulus Oksuztepe
aa3b95ee7f Merge branch 'master' into security
Signed-off-by: Kurtulus Oksuztepe <kurtulus.oksuztepe@adlinktech.com>

Conflicts:
	.travis.yml
2019-10-29 17:40:33 +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
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
Martin Bremmer
a28a5ae23d Merge branch 'master' into merge4
Signed-off-by: Martin Bremmer <martin.bremmer@adlinktech.com>
2019-10-17 11:05:49 +02:00
Erik Boasson
f8bff97736 Fix off-by-one error in dds_strretcode (#270)
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-10-16 03:08:31 +02:00
Erik Boasson
5a746cad81 Always abort on DDS_FATAL variants + test (#270)
The test only works on Linux and macOS because of the system
dependencies in catching an abort.  The logging code is platform
independent so testing only on these platforms still gives a good sanity
check.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-10-16 03:08:31 +02:00
Erik Boasson
50e63b3324 Correct ddsrt_gnuc, ddsrt_clang definitions (#270)
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-10-16 03:08:31 +02:00
Dennis Potman
cbc6dc5aa0 Increase thread test timeout to check if this caused the failing tests on travis win32
Signed-off-by: Dennis Potman <dennis.potman@adlinktech.com>
2019-10-15 19:29:18 +02:00
Thijs Sassen
0b57b74b93 Fix compile error when using rusage functionality on FreeRTOS
Signed-off-by: Thijs Sassen <thijs.sassen@adlinktech.com>
2019-10-07 14:12:27 +02:00
Erik Boasson
0098cfcab7 Fix macOS 10.12 version check
Xcode 9 doesn't yet define MAC_OS_X_VERSION_10_13.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-10-02 08:52:06 +02:00
eboasson
50b0611ad1
macOS pre-10.13 support (#264)
* macOS < 10.13: skip log tests for want of fmemopen

There is a dependency on fmemopen in the tests for the logging
functions, which macOS introduced only in version 10.13.  There should
be no other obstacle to building/running/testing on older versions of
macOS.  This commit does the pragmatic thing: remove the dependency and
turns the tests into no-ops in this one case.

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

* Fix macOS clock_gettime_nsec_np availability test

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-09-30 09:13:49 +02:00
Martin Bremmer
919850232c Merge branch 'master' into merge
Signed-off-by: Martin Bremmer <martin.bremmer@adlinktech.com>
2019-09-27 14:45:16 +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
2996a6b5f8 Let Coverity ignore sleep in ddsrt init "spinlock"
Initialisation of ddsrt layer uses a hand-rolled CAS/sleep device not
unlike a spin lock.  This so initialisation doesn't depend on, e.g.,
ddsrt_once.

Checking or changing thread states between "awake" and "asleep" can end
up in ddsrt_init if the thread is unknown at the time of the call.
Once really only ends up in those cases when the library is initialised
already, in which case no sleeping occurs.

In any case, the sleep is just a friendly yielding of the CPU.  Coverity
will still see the loop, just not the sleep.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-09-25 10:46:40 +02:00
Erik Boasson
81be40ec0e Fix dropping of first digit of time stamp in log
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-09-11 10:06:24 +02:00
Erik Boasson
801ae26872 Optionally include sample content in trace
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-09-11 10:06:24 +02:00
Erik Boasson
0b12ff5cfc Promote domains and Cyclone library to entities
This commit adds two entity types: a "domain", which is the parent of
participants and which is instantiated for each domain that has at least
one participant in it; and "cyclonedds", which is a representation of
the (initialized) Cyclone DDS library in the process and that is the
parent of all domain entities.  The handle of the latter is a
compile-constant, DDS_CYCLONEDDS_HANDLE.

This changes the return value from dds_get_parent when executed on a
participant: it now returns the handle of the entity representing the
domain the participant is attached to.  Two participants in the same
domain self-evidently return the same domain entity.

This allows deleting all participants in a domain by calling dds_delete
on the domain entity, or tearing down everything and deinitializing the
library by calling dds_delete on the top-level entity.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-09-11 10:06:24 +02:00
dennis-adlink
0c23eea7cb Fix compilation errors for RMW build on Windows (#248)
* Fix compilation errors for RMW build on Windows

This commit fixes the compilation errors that occur when building
the ROS2 rmw_cyclonedds_cpp module on Windows with the msvc C++
compiler. The error are fixed by adding explicit casts when calling
operations on atomics and a different syntax is used for compound
literals (the c99 syntax is not supported in msvc in C++ mode).

In additionally some warnings related to emtpy array usage
in structs are suppressed for msvc.

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

* Restructured macros for vendor id cast and casts for atomic operations

To improve readability I've restructured the macros that are used
for vendor id casts on msvc in c++ mode and macros for type-casting
arguments in operations on atomics (as suggested in the review of
my previous commit)

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

* Moved atomic function suffix to macro

Moved the suffix for (msvc) 64 bit atomic functions to the
DDSRT_ATOMIC_OP64 macro

Signed-off-by: Dennis Potman <dennis.potman@adlinktech.com>
2019-09-09 14:18:13 +02:00
Erik Boasson
a632f80000 Add a global counter in ddsrt_random_init fallback
It currently uses process id and timestamp, but on a low-resolution
clock that might result in two subsequent initialisations in the same
process yielding the same seed, and that wasn't the intent.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-09-03 12:23:50 +02:00
Martin Bremmer
09eba90c90 Fixed dynlib Windows issues after merge.
Signed-off-by: Martin Bremmer <martin.bremmer@adlinktech.com>
2019-09-03 12:02:20 +02:00
Martin Bremmer
3fc777e631 Merge branch 'master' into merge2
Signed-off-by: Martin Bremmer <martin.bremmer@adlinktech.com>
2019-09-03 11:44:50 +02:00
Jeroen Koekkoek
4e741e9137 Synchronize warning flags between Xcode and Clang
Signed-off-by: Jeroen Koekkoek <jeroen@koekkoek.nl>
2019-08-23 12:37:15 +02:00
Erik Boasson
f06d3bf9ad FreeRTOS: replace DDS_TRACE+abort by DDS_FATAL
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-08-21 14:16:51 +02:00