Commit graph

305 commits

Author SHA1 Message Date
Erik Boasson
3acabf23a5 address false positive from gcc in snprintf usage
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-15 16:23:43 +01:00
Erik Boasson
e54b9ec715 update README prerequisites and build info
The build information in the README was very limited (now it is less
limited) and, the list of prerequisites was incomplete, documentation
link was out of date ...  This cleans it up a bit.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-15 16:20:40 +01:00
Erik Boasson
76ca027340 cmake 3.6 bugs out over cunit, so move to 3.7
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-15 16:19:36 +01:00
Erik Boasson
c7906f296d consistently use Eclipse Cyclone DDS in documentation
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-15 11:35:00 +01:00
Erik Boasson
753f910aad consistently use Eclipse Cyclone DDS in API header files
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-15 11:35:00 +01:00
Erik Boasson
c10a52c494 change meaningless "ospl_" prefix on configuration structures to "config_"
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-15 11:35:00 +01:00
Erik Boasson
707045256a update configurator input file (#38)
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-15 11:35:00 +01:00
Erik Boasson
4f59df2451 remove left-over support for commercial variants from configuration editing tool
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-15 11:35:00 +01:00
Erik Boasson
164763e13c remove copyright blurbs from output of IDL preprocessor
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-15 11:35:00 +01:00
Erik Boasson
e72c7e9194 remove left-over licensing support code from IDL preprocessor
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-15 11:35:00 +01:00
Erik Boasson
01bd75b7a5 remove invalid copyright claim on an otherwise unmodified file
An additional copyright header was added to an otherwise unmodified source file, and that is not allowed.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-15 11:35:00 +01:00
eboasson
bfe1221138
Merge pull request #111 from eboasson/fix-87
Add support for query conditions
2019-02-13 09:37:04 +00:00
Erik Boasson
1c963b5c3b add torture test for read, query conditions
The "rhc" test runs a random sequence of operations (writes, reads, &c.)
through an RHC with conditions attached to it.  All possible state masks
are used, and query conditions are tried with a condition that only
tests the key value, and one that tests attribute values.  It depends on
the internal checking logic of the RHC, which is currently enabled only
in Debug builds because of the associated run-time overhead.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-12 14:22:06 +01:00
Erik Boasson
a1e827cf7e minor improvements to query condition handling
Various details:
- index replaced throughout by bitmask
- caching a single sample in RHC for deserialising samples when query conditions are used
- short-circuiting the trivial case of an instance matched neither before nor after a change to its state
- combining inc/dec counters into a single delta in condition evaluation
- major speed-up of rhc_check_counts by not checking the condition bit masks every single time

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-11 15:56:58 +01:00
Erik Boasson
96649c435d always zero out non-key fields in invalid samples returned by read/take
The specification says the data in an invalid sample must not be inspected, but that means retrieving the key values from a disposed/unregistered instance after a take is impossible. So, the elegant thing to do is to always provide the key values in the data. The remaining question is then whether the non-key fields should be left in whatever state they happened to be in, or be set to zero. The latter is more consistent in the interface, and that is almost invariably a good thing.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-11 11:12:07 +01:00
Erik Boasson
f0675ca7f1 support for query conditions
This also fixes #87.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-11 11:12:07 +01:00
Erik Boasson
b21c7f032c set masks in samples/instances for query conditions
Whenever a sample or an instance is added, check it against the attached query conditions and indicate which ones match

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-10 19:19:41 +01:00
Erik Boasson
796f6860c7 add missing braces to initializers for vendor ids
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-10 19:19:41 +01:00
Erik Boasson
7739341e71 some errors on locking entities are not worth logging
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-10 18:23:51 +01:00
Erik Boasson
eee8f6cc59 assign an index to query conditions
This index can then be used as an index into a bitmap to keep track
which query conditions are matched by a sample or an instance.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-10 18:23:51 +01:00
Erik Boasson
1d746a866d remove unused conds_lock from RHC
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-10 18:23:51 +01:00
Erik Boasson
de5021dc55 change initialisation of a read condition to set the query condition as well
The read condition and the query condition are represented by the same data type internally, and a read condition therefore has a "m_filter" attribute. It makes more sense to initialise this properly as part of the read condition, instead of initialisation-by-memset in the dds_create_readcond, then overwriting it in dds_create_querycond.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-10 18:23:51 +01:00
Erik Boasson
fcdffa8cf8 add a separate RHC tracing category
The RHC tracing produces so much junk that is hardly ever useful that a
normal trace should definitely not include it.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-10 18:23:51 +01:00
Erik Boasson
e0e1e67f24 read condition on view "old" not triggered when reading only "read" samples
A read restricted to samples in "read" state would not enter the condition update code on the false assumption that no read conditions could become triggered if the number of read samples remained the same, but it is nonetheless possible that the instance was transitions from "new" to "old" as a consequence, at least in my interpretation of the spec and the current implementation of read() in Cyclone. This commit brings consistency to the implementation without the intention of confirming the current behaviour as being desirable.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-10 18:23:51 +01:00
Erik Boasson
6646a766c5 fixup following rename SYSDEPS to OS_MSGHDR_FLAGS
The name change missed the uses of the macro, with the result that
datagram truncation on reception does not result in warning (but in
the default configuration, truncation cannot occur); and that the
message flags are undefined on sending datagrams, but judging by the
man page, the likelihood of this causing problems is also small in
practice.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-10 08:30:39 +00:00
eboasson
4046c6fff8
Merge pull request #109 from eboasson/master
start using the DDSI vendor id code for the Eclipse Foundation
2019-02-08 11:21:22 +00:00
Erik Boasson
98465035e6 start using the DDSI vendor id code for the Eclipse Foundation
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-07 12:23:01 +01:00
eboasson
92fca549cb
Merge pull request #108 from eboasson/fix-104
Fallback to unicast should set options for unicast discovery (#104)

A very simple change that addresses a real usability issue, does not rely on any platform-specific changes and moreover builds cleanly on the source branch. So I am not going to wait until the AppVeyor build completes.
2019-02-04 16:10:34 +00:00
eboasson
413d9d36eb
Merge pull request #107 from eboasson/master
fix and enable SSL support when OpenSSL is available

This has been sitting pretty for some days now and in my opinion it makes sense to merge it — so merging it. The AppVeyor build is not done yet, but it is successful for the exact same commit on the source branch and it also succesful for the next-to-last commit. The last commit in the PR is no more than Travis CI configuration, so it doesn't even affect AppVeyor builds.
2019-02-04 16:09:14 +00:00
Erik Boasson
69a493ebb3 Fallback to unicast should set options for unicast discovery (#104)
The default behaviour is to allow multicast, with a fallback of
disabling multicast altogether if the selected interface doesn't support
it. The trouble is that the default discovery configuration assumes that
multicast is available, avoiding the "well-known" port numbers and
avoiding sending any participant discovery messages via unicast. The
result is that the process will run in isolation, which is typically not
the desired result. (It is a quite annoying problem because it happens
on Linux when only a loopback interface is available. It appears that
multicast over loopback works fine, if only you try it, but the kernel
doesn't advertise it and so it doesn't get used.)

This commit changes two things: firstly, it this case it forces the
allocation of "well-known" unicast ports, and secondly, it automatically
adds the local interface's address to the discovery address set. This
way, at least communication inside the machine works.

(Note: AssumeMulticastCapable can be still be used to force it to treat
a Linux loopback interface has multicast capable. It is only the default
behaviour that has changed.)

With thanks to @jwcesign who did all the work except writing the commit
message.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-04 14:00:21 +01:00
Erik Boasson
9e63fe404f update Travis-CI build configuration
Getting cmake to work with/without conan on macOS, Linux and Windows
seems to be trickier than it should be when dealing with older cmake
versions. Switching to an Ubuntu Xenial image on Travis CI at least
makes it build again.

The update then also eliminates the need to update cmake, clang and
maven, saving quite a bit of build time. A few small tweaks and an
update to the macOS image version reduces some 5 minutes from the macOS
build time.

The minimum required version for cmake needs to be updated, too, but
really only when openssl support is included. So instead of raising the
required version in the CMakeFile I am in favour of simply hoping for
the best.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-04 11:54:13 +01:00
Erik Boasson
69e55b04e3 suppress openssl-induced SOCKET-to-int warnings on Win64
One is reasonable (a difference between size_t and the type used for a blob in an iovec), the others are SOCKET-to-int conversions that are caused by the openssl API. Since I'm not going to fix openssl and every indication is that the conversion is safe in practice, silencing the compiler is a sensible thing to do.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-01 14:56:42 +01:00
Erik Boasson
c5e1c5b2f1 By default require TLS1.3
A configuration setting to allow negotiating TLS1.2 is included. If I
got things done correctly, OpenSSL pre-1.1 can be used but requires
explicitly lowering the minimum allowed TLS version in the
configuration file.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-01 14:56:42 +01:00
Erik Boasson
228aa71967 TLS1.3 requires handling "spurious reads"
With TLS1.3 the socket can indicate data is available even when there is no application data. This commit ignores a 0-byte read when no data is required. Long-term, handling short reads/writes in TCP mode need to be handled completely differently, but that is a story for another day.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-01 10:39:49 +01:00
Erik Boasson
b8329ce206 Require OpenSSL by default and add list it as a dependency for Conan
OpenSSL support remains optional, but instead of including it or not solely depending on whether cmake manages to find it, there is now a DDSC_ENABLE_OPENSSL option that defaults to "ON". Setting to OFF removes the dependency. The Conan configuration has been updated to automatically provide openssl 1.1.1a.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-01 10:39:49 +01:00
Jeroen Koekkoek
334a85e0f1 Make usage of Conan provided OpenSSL transparent
Signed-off-by: Jeroen Koekkoek <jeroen@koekkoek.nl>
2019-01-31 17:09:05 +01:00
Erik Boasson
f31fba8766 fix and enable SSL support when OpenSSL is available
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-01-30 15:27:35 +01:00
eboasson
acec84cf0b
Merge pull request #101 from eboasson/throughput-example-fixes
Throughput example fixes
2019-01-22 11:22:15 +01:00
Erik Boasson
e55dc3703a address the last remaining warning by Clang's static analyzer
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-01-22 09:15:18 +01:00
Erik Boasson
274f7bfc95 some minor improvements to the throughput test scripting
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-01-22 09:15:18 +01:00
Erik Boasson
0f7145fe7c eliminate a race condition on taking/processing samples in throughput subscriber
In listener mode, the main thread would still periodically try to take samples. When this happens concurrently with the listener invocation, the result is a spurious warning that some samples were delivered out-of-order.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-01-22 09:15:18 +01:00
Erik Boasson
84a25ab92d use standard-C SIGINT handling instead of platform-specific one in throughput example
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-01-22 09:15:18 +01:00
Erik Boasson
6e7e1ca448 set stdout line-buffering in throughput tests
Line buffering allows monitoring progress via pipes or files, and as there is just one line of output per second, it doesn't affect performance

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-01-22 09:15:18 +01:00
eboasson
4483807e71
Merge pull request #100 from eboasson/master
the "tracing" category in the configuration should only affect the "trace" sink and leave the "log" sink alone
2019-01-22 09:14:43 +01:00
Erik Boasson
c35c5f9190 the "tracing" category in the configuration should only affect the "trace" sink and leave the "log" sink alone
Fixing that produces a lot of noise on stderr because of inappropriate use of the "info" category in various place and, on macOS, because of a rather stupid way of messing with thread scheduling priorities even when none have been specified explicitly in the configuration.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-01-21 12:53:55 +01:00
eboasson
b91513aec5
Merge pull request #98 from eboasson/master
Fix ARM builds and "make install"
2019-01-20 10:17:06 +01:00
eboasson
04456b6acd
Merge pull request #97 from eboasson/fix-90
Fix take with query condition and the curious case of a netmask without an address family
2019-01-20 10:16:48 +01:00
Erik Boasson
29f0ef6e17 Fix "make install" on Unix and add tests for it to CI scripts
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-01-18 15:41:19 +01:00
Erik Boasson
58e91c4304 Use different variable for second attempt at finding clock_gettime
This change allowed building on an ancient RH machine without breaking modern ones.
2019-01-18 14:18:44 +01:00
Erik Boasson
cef4a51810 Set "position independent code" property unconditionally in os, util
Previously it wasn't set for all platforms, breaking, e.g., Linux on ARM. The property also does the trick for OpenIndiana, so that hack can be removed as well

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-01-18 14:17:37 +01:00