From dd66730ebe4dec7fb2f68b46435ad12ca2937b99 Mon Sep 17 00:00:00 2001 From: rex-schilasky <49162693+rex-schilasky@users.noreply.github.com> Date: Thu, 4 Jul 2024 09:47:02 +0200 Subject: [PATCH 1/9] shm_monitoring logic simplified, based on "network_enabled" only parallel shm_monitoring AND udp_monitoring feature removed massive_pub_sub sample added to test creation performance of pub/sub for large scenarios and monitoring performance no more remvoval of expired values (erase_expired) in ApplyPub/Sub/Server/ClientDescription because of bad performance --- ecal/core/include/ecal/config/monitoring.h | 14 -- ecal/core/src/config/ecal_config.cpp | 2 - .../src/config/ecal_config_initializer.cpp | 3 - ecal/core/src/ecal_def.h | 6 - ecal/core/src/ecal_descgate.cpp | 4 - .../ecal_registration_provider.cpp | 6 +- .../ecal_registration_receiver.cpp | 6 +- ecal/samples/CMakeLists.txt | 3 +- .../benchmarks/massive_pub_sub/CMakeLists.txt | 41 ++++++ .../massive_pub_sub/src/massive_pub_sub.cpp | 128 ++++++++++++++++++ 10 files changed, 177 insertions(+), 36 deletions(-) create mode 100644 ecal/samples/cpp/benchmarks/massive_pub_sub/CMakeLists.txt create mode 100644 ecal/samples/cpp/benchmarks/massive_pub_sub/src/massive_pub_sub.cpp diff --git a/ecal/core/include/ecal/config/monitoring.h b/ecal/core/include/ecal/config/monitoring.h index 2c116202ff..bf67687b03 100644 --- a/ecal/core/include/ecal/config/monitoring.h +++ b/ecal/core/include/ecal/config/monitoring.h @@ -30,18 +30,6 @@ namespace eCAL { namespace Monitoring { - namespace Types - { - enum Mode - { - none = 0, - udp_monitoring = 1 << 0, - shm_monitoring = 1 << 1 - }; - - using Mode_Filter = char; - } - namespace UDP { struct Configuration @@ -60,9 +48,7 @@ namespace eCAL struct Configuration { - Types::Mode_Filter monitoring_mode{}; //!< Specify which monitoring is enabled (Default: none) eCAL::Types::ConstrainedInteger<1000, 1000> monitoring_timeout{}; //!< Timeout for topic monitoring in ms (Default: 5000) - bool network_monitoring{}; //!< Enable distribution of monitoring/registration information via network (Default: true) UDP::Configuration udp_options{}; SHM::Configuration shm_options{}; diff --git a/ecal/core/src/config/ecal_config.cpp b/ecal/core/src/config/ecal_config.cpp index 14f23cf803..10d779f337 100644 --- a/ecal/core/src/config/ecal_config.cpp +++ b/ecal/core/src/config/ecal_config.cpp @@ -181,8 +181,6 @@ namespace eCAL namespace Experimental { - ECAL_API bool IsShmMonitoringEnabled () { return (GetConfiguration().monitoring.monitoring_mode & Monitoring::Types::Mode::shm_monitoring) != 0; } - ECAL_API bool IsNetworkMonitoringDisabled () { return !GetConfiguration().monitoring.network_monitoring; } ECAL_API size_t GetShmMonitoringQueueSize () { return GetConfiguration().monitoring.shm_options.shm_monitoring_queue_size; } ECAL_API std::string GetShmMonitoringDomain () { return GetConfiguration().monitoring.shm_options.shm_monitoring_domain;} ECAL_API bool GetDropOutOfOrderMessages () { return GetConfiguration().transport_layer.drop_out_of_order_messages; } diff --git a/ecal/core/src/config/ecal_config_initializer.cpp b/ecal/core/src/config/ecal_config_initializer.cpp index 2441eccd40..d739a6bed0 100644 --- a/ecal/core/src/config/ecal_config_initializer.cpp +++ b/ecal/core/src/config/ecal_config_initializer.cpp @@ -155,10 +155,7 @@ namespace eCAL // monitoring options auto& monitoringOptions = monitoring; - auto monitoringMode = iniConfig.get(EXPERIMENTAL, "shm_monitoring_enabled", false) ? Monitoring::Types::Mode::shm_monitoring : Monitoring::Types::Mode::none; - monitoringOptions.monitoring_mode = static_cast(monitoringMode); monitoringOptions.monitoring_timeout = iniConfig.get(MONITORING, "timeout", MON_TIMEOUT);; - monitoringOptions.network_monitoring = iniConfig.get(EXPERIMENTAL, "network_monitoring", EXP_NETWORK_MONITORING_ENABLED); monitoringOptions.filter_excl = iniConfig.get(MONITORING, "filter_excl", MON_FILTER_EXCL); monitoringOptions.filter_incl = iniConfig.get(MONITORING, "filter_incl", MON_FILTER_INCL); diff --git a/ecal/core/src/ecal_def.h b/ecal/core/src/ecal_def.h index a9c6789d0a..4222868e8b 100644 --- a/ecal/core/src/ecal_def.h +++ b/ecal/core/src/ecal_def.h @@ -187,10 +187,6 @@ constexpr const char* EVENT_SHUTDOWN_PROC = "ecal_shutdown_pro /**********************************************************************************************/ /* experimental */ /**********************************************************************************************/ -/* enable distribution of monitoring/registration information via shared memory */ -constexpr bool EXP_SHM_MONITORING_ENABLED = false; -/* enable distribution of monitoring/registration information via network (default) */ -constexpr bool EXP_NETWORK_MONITORING_ENABLED = true; /* queue size of monitoring/registration events */ constexpr unsigned int EXP_SHM_MONITORING_QUEUE_SIZE = 1024U; /* domain name for shared memory based monitoring/registration */ @@ -200,5 +196,3 @@ constexpr unsigned int EXP_MEMFILE_ACCESS_TIMEOUT = 100U; /* enable dropping of payload messages that arrive out of order */ constexpr bool EXP_DROP_OUT_OF_ORDER_MESSAGES = false; - -constexpr eCAL::Monitoring::Types::Mode EXP_MONITORING_MODE = eCAL::Monitoring::Types::Mode::none; diff --git a/ecal/core/src/ecal_descgate.cpp b/ecal/core/src/ecal_descgate.cpp index 40d69e855e..80b93a15b4 100644 --- a/ecal/core/src/ecal_descgate.cpp +++ b/ecal/core/src/ecal_descgate.cpp @@ -183,14 +183,12 @@ namespace eCAL topic_quality_info.quality = topic_quality_; const std::unique_lock lock(topic_info_map_.mtx); - topic_info_map_.map.erase_expired(); topic_info_map_.map[topic_info_key] = topic_quality_info; } void CDescGate::RemTopicDescription(SQualityTopicIdMap& topic_info_map_, const std::string& topic_name_, const Util::TopicId& topic_id_) { const std::unique_lock lock(topic_info_map_.mtx); - topic_info_map_.map.erase_expired(); topic_info_map_.map.erase(STopicIdKey{ topic_name_, topic_id_ }); } @@ -213,7 +211,6 @@ namespace eCAL service_quality_info.response_quality = response_type_quality_; const std::lock_guard lock(service_method_info_map_.mtx); - service_method_info_map_.map.erase_expired(); service_method_info_map_.map[service_method_info_key] = service_quality_info; } @@ -222,7 +219,6 @@ namespace eCAL std::list service_method_infos_to_remove; const std::lock_guard lock(service_method_info_map_.mtx); - service_method_info_map_.map.erase_expired(); for (auto&& service_it : service_method_info_map_.map) { diff --git a/ecal/core/src/registration/ecal_registration_provider.cpp b/ecal/core/src/registration/ecal_registration_provider.cpp index 90cf714803..abce1e3c53 100644 --- a/ecal/core/src/registration/ecal_registration_provider.cpp +++ b/ecal/core/src/registration/ecal_registration_provider.cpp @@ -62,9 +62,9 @@ namespace eCAL { if(m_created) return; - // send registration to shared memory and to udp - m_use_registration_udp = !Config::Experimental::IsNetworkMonitoringDisabled(); - m_use_registration_shm = Config::Experimental::IsShmMonitoringEnabled(); + // send registration over udp or shared memory + m_use_registration_udp = Config::IsNetworkEnabled; + m_use_registration_shm = !m_use_registration_udp; if (m_use_registration_udp) { diff --git a/ecal/core/src/registration/ecal_registration_receiver.cpp b/ecal/core/src/registration/ecal_registration_receiver.cpp index 1ef8bfbf08..52c24fdcfc 100644 --- a/ecal/core/src/registration/ecal_registration_receiver.cpp +++ b/ecal/core/src/registration/ecal_registration_receiver.cpp @@ -69,9 +69,9 @@ namespace eCAL { if(m_created) return; - // receive registration from shared memory and or udp - m_use_registration_udp = !Config::Experimental::IsNetworkMonitoringDisabled(); - m_use_registration_shm = Config::Experimental::IsShmMonitoringEnabled(); + // receive registration via udp or shared memory + m_use_registration_udp = Config::IsNetworkEnabled; + m_use_registration_shm = !m_use_registration_udp; if (m_use_registration_udp) { diff --git a/ecal/samples/CMakeLists.txt b/ecal/samples/CMakeLists.txt index ccb0f0a67c..eb751a33bd 100644 --- a/ecal/samples/CMakeLists.txt +++ b/ecal/samples/CMakeLists.txt @@ -1,6 +1,6 @@ # ========================= eCAL LICENSE ================================= # -# Copyright (C) 2016 - 2019 Continental Corporation +# Copyright (C) 2016 - 2024 Continental Corporation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -66,6 +66,7 @@ endif() if(ECAL_CORE_PUBLISHER AND ECAL_CORE_SUBSCRIBER) add_subdirectory(cpp/benchmarks/perftool) + add_subdirectory(cpp/benchmarks/massive_pub_sub) endif() # misc diff --git a/ecal/samples/cpp/benchmarks/massive_pub_sub/CMakeLists.txt b/ecal/samples/cpp/benchmarks/massive_pub_sub/CMakeLists.txt new file mode 100644 index 0000000000..5c2f37e547 --- /dev/null +++ b/ecal/samples/cpp/benchmarks/massive_pub_sub/CMakeLists.txt @@ -0,0 +1,41 @@ +# ========================= eCAL LICENSE ================================= +# +# Copyright (C) 2016 - 2024 Continental Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# ========================= eCAL LICENSE ================================= + +cmake_minimum_required(VERSION 3.10) + +set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON) + +project(massive_pub_sub) + +find_package(eCAL REQUIRED) + +set(massive_pub_sub_src + src/massive_pub_sub.cpp +) + +ecal_add_sample(${PROJECT_NAME} ${massive_pub_sub_src}) + +target_link_libraries(${PROJECT_NAME} + eCAL::core +) + +target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_14) + +ecal_install_sample(${PROJECT_NAME}) + +set_property(TARGET ${PROJECT_NAME} PROPERTY FOLDER samples/cpp/benchmarks/massive_pub_sub) diff --git a/ecal/samples/cpp/benchmarks/massive_pub_sub/src/massive_pub_sub.cpp b/ecal/samples/cpp/benchmarks/massive_pub_sub/src/massive_pub_sub.cpp new file mode 100644 index 0000000000..7cf864a4e6 --- /dev/null +++ b/ecal/samples/cpp/benchmarks/massive_pub_sub/src/massive_pub_sub.cpp @@ -0,0 +1,128 @@ +/* ========================= eCAL LICENSE ================================= + * + * Copyright (C) 2016 - 2024 Continental Corporation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * ========================= eCAL LICENSE ================================= +*/ + +#include + +#include +#include +#include +#include +#include + +const int subscriber_number (5000); + +const int publisher_number (5000); +const int publisher_type_encoding_size_bytes (10*1024); +const int publisher_type_descriptor_size_bytes (10*1024); + +const int in_between_sleep_sec (5); +const int final_sleep_sec (120); + +std::string GenerateSizedString(const std::string& name, size_t totalSize) +{ + if (name.empty() || totalSize == 0) { + return ""; + } + + std::string result; + result.reserve(totalSize); + + while (result.size() + name.size() <= totalSize) { + result += name; + } + + if (result.size() < totalSize) { + result += name.substr(0, totalSize - result.size()); + } + + return result; +} + +int main(int argc, char** argv) +{ + // initialize eCAL API + eCAL::Initialize(argc, argv, "massive_pub_sub"); + + eCAL::Util::EnableLoopback(true); + + // create subscriber + std::vector vector_of_subscriber; + std::cout << "Subscriber creation started. (" << subscriber_number << ")" << std::endl; + { + // start time measurement + auto start_time = std::chrono::high_resolution_clock::now(); + + for (int i = 0; i < subscriber_number; i++) + { + // publisher topic name + std::stringstream tname; + tname << "TOPIC_" << i; + + // create subscriber + vector_of_subscriber.emplace_back(tname.str()); + } + // stop time measurement + auto end_time = std::chrono::high_resolution_clock::now(); + + // calculate the duration + auto duration = std::chrono::duration_cast(end_time - start_time).count(); + std::cout << "Time taken for subscriber creation: " << duration << " milliseconds" << std::endl; + } + + // sleep for a few seconds + std::this_thread::sleep_for(std::chrono::seconds(in_between_sleep_sec)); + + // create publisher + std::vector vector_of_publisher; + std::cout << "Publisher creation started. (" << publisher_number << ")" << std::endl; + { + // start time measurement + auto start_time = std::chrono::high_resolution_clock::now(); + + eCAL::SDataTypeInformation data_type_info; + data_type_info.name = "TOPIC_TYPE_NAME"; + data_type_info.encoding = GenerateSizedString("TOPIC_TYPE_ENCODING", publisher_type_encoding_size_bytes); + data_type_info.descriptor = GenerateSizedString("TOPIC_TYPE_DESCRIPTOR", publisher_type_descriptor_size_bytes); + + for (int i = 0; i < publisher_number; i++) + { + // publisher topic name + std::stringstream tname; + tname << "TOPIC_" << i; + + // create publisher + vector_of_publisher.emplace_back(tname.str(), data_type_info); + } + // stop time measurement + auto end_time = std::chrono::high_resolution_clock::now(); + + // calculate the duration + auto duration = std::chrono::duration_cast(end_time - start_time).count(); + std::cout << "Time taken for publisher creation: " << duration << " milliseconds" << std::endl; + } + std::cout << std::endl; + + // sleep for a few seconds + std::this_thread::sleep_for(std::chrono::seconds(final_sleep_sec)); + + // finalize eCAL API + eCAL::Finalize(); + + return(0); +} From 51657a4244f3dd584c326b872640681e0648f8d0 Mon Sep 17 00:00:00 2001 From: rex-schilasky <49162693+rex-schilasky@users.noreply.github.com> Date: Thu, 4 Jul 2024 10:45:50 +0200 Subject: [PATCH 2/9] config sample and test fixed --- ecal/samples/cpp/misc/config/src/config_sample.cpp | 4 ++-- ecal/tests/cpp/config_test/src/config_test.cpp | 5 ----- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/ecal/samples/cpp/misc/config/src/config_sample.cpp b/ecal/samples/cpp/misc/config/src/config_sample.cpp index 42ad2f27f0..ec75202ad7 100644 --- a/ecal/samples/cpp/misc/config/src/config_sample.cpp +++ b/ecal/samples/cpp/misc/config/src/config_sample.cpp @@ -27,8 +27,8 @@ int main(int argc, char **argv) // creating config object eCAL::Configuration my_config(argc, argv); - // setting configuration - my_config.monitoring.network_monitoring = true; + // setting a configuration + my_config.transport_layer.network_enabled = true; // initialize eCAL API eCAL::Initialize(my_config, "config sample"); diff --git a/ecal/tests/cpp/config_test/src/config_test.cpp b/ecal/tests/cpp/config_test/src/config_test.cpp index 89d861dfda..e065f63f78 100644 --- a/ecal/tests/cpp/config_test/src/config_test.cpp +++ b/ecal/tests/cpp/config_test/src/config_test.cpp @@ -52,7 +52,6 @@ TEST(core_cpp_config, user_config_passing) const unsigned int mon_timeout = 6000U; const std::string mon_filter_excl = "_A.*"; const eCAL_Logging_Filter mon_log_filter_con = log_level_warning; - const eCAL::Monitoring::Types::Mode monitoring_mode = eCAL::Monitoring::Types::Mode::udp_monitoring; // Publisher options const bool pub_use_shm = true; @@ -69,7 +68,6 @@ TEST(core_cpp_config, user_config_passing) custom_config.monitoring.monitoring_timeout = mon_timeout; custom_config.monitoring.filter_excl = mon_filter_excl; - custom_config.monitoring.monitoring_mode = monitoring_mode; custom_config.logging.filter_log_con = mon_log_filter_con; custom_config.publisher.shm.enable = pub_use_shm; @@ -102,9 +100,6 @@ TEST(core_cpp_config, user_config_passing) // Test monitoring console log assignment, default is (log_level_info | log_level_warning | log_level_error | log_level_fatal) EXPECT_EQ(mon_log_filter_con, eCAL::GetConfiguration().logging.filter_log_con); - // Test monitoring mode assignment, default is eCAL::Types::MonitoringMode::none - EXPECT_EQ(monitoring_mode, eCAL::GetConfiguration().monitoring.monitoring_mode); - // Test publisher sendmode assignment, default is eCAL::TLayer::eSendMode::smode_auto EXPECT_EQ(pub_use_shm, eCAL::GetConfiguration().publisher.shm.enable); From 70b93ba4c2af3c8108f6d40e69e0deab136cfd0b Mon Sep 17 00:00:00 2001 From: rex-schilasky <49162693+rex-schilasky@users.noreply.github.com> Date: Thu, 4 Jul 2024 11:56:40 +0200 Subject: [PATCH 3/9] erase_expired removal removed (we need to think about when/where to remove expired values) --- ecal/core/src/ecal_descgate.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ecal/core/src/ecal_descgate.cpp b/ecal/core/src/ecal_descgate.cpp index 80b93a15b4..40d69e855e 100644 --- a/ecal/core/src/ecal_descgate.cpp +++ b/ecal/core/src/ecal_descgate.cpp @@ -183,12 +183,14 @@ namespace eCAL topic_quality_info.quality = topic_quality_; const std::unique_lock lock(topic_info_map_.mtx); + topic_info_map_.map.erase_expired(); topic_info_map_.map[topic_info_key] = topic_quality_info; } void CDescGate::RemTopicDescription(SQualityTopicIdMap& topic_info_map_, const std::string& topic_name_, const Util::TopicId& topic_id_) { const std::unique_lock lock(topic_info_map_.mtx); + topic_info_map_.map.erase_expired(); topic_info_map_.map.erase(STopicIdKey{ topic_name_, topic_id_ }); } @@ -211,6 +213,7 @@ namespace eCAL service_quality_info.response_quality = response_type_quality_; const std::lock_guard lock(service_method_info_map_.mtx); + service_method_info_map_.map.erase_expired(); service_method_info_map_.map[service_method_info_key] = service_quality_info; } @@ -219,6 +222,7 @@ namespace eCAL std::list service_method_infos_to_remove; const std::lock_guard lock(service_method_info_map_.mtx); + service_method_info_map_.map.erase_expired(); for (auto&& service_it : service_method_info_map_.map) { From 210049623e4a1afac899b47e6caabaf0e2d13277 Mon Sep 17 00:00:00 2001 From: rex-schilasky <49162693+rex-schilasky@users.noreply.github.com> Date: Thu, 4 Jul 2024 11:57:54 +0200 Subject: [PATCH 4/9] a function should be called like a function ;-) --- ecal/core/src/registration/ecal_registration_provider.cpp | 2 +- ecal/core/src/registration/ecal_registration_receiver.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ecal/core/src/registration/ecal_registration_provider.cpp b/ecal/core/src/registration/ecal_registration_provider.cpp index abce1e3c53..bb8cd8c2dd 100644 --- a/ecal/core/src/registration/ecal_registration_provider.cpp +++ b/ecal/core/src/registration/ecal_registration_provider.cpp @@ -63,7 +63,7 @@ namespace eCAL if(m_created) return; // send registration over udp or shared memory - m_use_registration_udp = Config::IsNetworkEnabled; + m_use_registration_udp = Config::IsNetworkEnabled(); m_use_registration_shm = !m_use_registration_udp; if (m_use_registration_udp) diff --git a/ecal/core/src/registration/ecal_registration_receiver.cpp b/ecal/core/src/registration/ecal_registration_receiver.cpp index 52c24fdcfc..1f45f52773 100644 --- a/ecal/core/src/registration/ecal_registration_receiver.cpp +++ b/ecal/core/src/registration/ecal_registration_receiver.cpp @@ -70,7 +70,7 @@ namespace eCAL if(m_created) return; // receive registration via udp or shared memory - m_use_registration_udp = Config::IsNetworkEnabled; + m_use_registration_udp = Config::IsNetworkEnabled(); m_use_registration_shm = !m_use_registration_udp; if (m_use_registration_udp) From ba295e38368f81933649e5c68a494bf69351db73 Mon Sep 17 00:00:00 2001 From: rex-schilasky <49162693+rex-schilasky@users.noreply.github.com> Date: Thu, 4 Jul 2024 13:10:31 +0200 Subject: [PATCH 5/9] ecal.ini shm monitoring settings removed --- ecal/core/cfg/ecal.ini | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/ecal/core/cfg/ecal.ini b/ecal/core/cfg/ecal.ini index 1fb5a73896..7db460d6e8 100644 --- a/ecal/core/cfg/ecal.ini +++ b/ecal/core/cfg/ecal.ini @@ -1,8 +1,8 @@ ; -------------------------------------------------- ; NETWORK SETTINGS ; -------------------------------------------------- -; network_enabled = true / false true = all eCAL components communicate over network boundaries -; false = local host only communication +; network_enabled = true / false true = all eCAL components communicate over network boundaries (registration over udp) +; false = local host only communication (registration over shm) ; ; multicast_config_version = v1 / v2 UDP configuration version (Since eCAL 5.12.) ; v1: default behavior @@ -175,16 +175,12 @@ filter_excl = ^eCALSysClient$|^eCALSysGUI$|^eCALSys$ ; -------------------------------------------------- ; EXPERIMENTAL SETTINGS ; -------------------------------------------------- -; shm_monitoring_enabled = false Enable distribution of monitoring/registration information via shared memory ; shm_monitoring_domain = ecal_monitoring Domain name for shared memory based monitoring/registration ; shm_monitoring_queue_size = 1024 Queue size of monitoring/registration events -; network_monitoring_enabled = true Enable distribution of monitoring/registration information via network ; ; drop_out_of_order_messages = false Enable dropping of payload messages that arrive out of order ; -------------------------------------------------- [experimental] -shm_monitoring_enabled = false shm_monitoring_domain = ecal_mon shm_monitoring_queue_size = 1024 -network_monitoring_enabled = true drop_out_of_order_messages = false From 8e8d9ee4b56a1501e6d8c74bb2200e4153bbbf23 Mon Sep 17 00:00:00 2001 From: rex-schilasky <49162693+rex-schilasky@users.noreply.github.com> Date: Thu, 4 Jul 2024 15:08:27 +0200 Subject: [PATCH 6/9] test timings adapted (timeout for registration set to 2 times registration refresh) --- ecal/tests/cpp/util_test/src/util_getclients.cpp | 6 +++--- ecal/tests/cpp/util_test/src/util_gettopics.cpp | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/ecal/tests/cpp/util_test/src/util_getclients.cpp b/ecal/tests/cpp/util_test/src/util_getclients.cpp index 28eac2422b..bd70c9dbe0 100644 --- a/ecal/tests/cpp/util_test/src/util_getclients.cpp +++ b/ecal/tests/cpp/util_test/src/util_getclients.cpp @@ -1,6 +1,6 @@ /* ========================= eCAL LICENSE ================================= * - * Copyright (C) 2016 - 2019 Continental Corporation + * Copyright (C) 2016 - 2024 Continental Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,8 +22,8 @@ #include enum { - CMN_MONITORING_TIMEOUT_MS = (5000 + 100), - CMN_REGISTRATION_REFRESH_MS = (1000 + 100) + CMN_MONITORING_TIMEOUT_MS = (5000), + CMN_REGISTRATION_REFRESH_MS = (1000 * 2) }; TEST(core_cpp_util, ClientExpiration) diff --git a/ecal/tests/cpp/util_test/src/util_gettopics.cpp b/ecal/tests/cpp/util_test/src/util_gettopics.cpp index 112234d018..3b3199e9da 100644 --- a/ecal/tests/cpp/util_test/src/util_gettopics.cpp +++ b/ecal/tests/cpp/util_test/src/util_gettopics.cpp @@ -1,6 +1,6 @@ /* ========================= eCAL LICENSE ================================= * - * Copyright (C) 2016 - 2019 Continental Corporation + * Copyright (C) 2016 - 2024 Continental Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,8 +27,8 @@ #include enum { - CMN_MONITORING_TIMEOUT_MS = (5000 + 100), - CMN_REGISTRATION_REFRESH_MS = (1000 + 100) + CMN_MONITORING_TIMEOUT_MS = (5000), + CMN_REGISTRATION_REFRESH_MS = (1000 * 2) }; TEST(core_cpp_util, GetTopics) From 0b9cbe1702c6527720f6bacb991d5e3466364b89 Mon Sep 17 00:00:00 2001 From: rex-schilasky <49162693+rex-schilasky@users.noreply.github.com> Date: Thu, 4 Jul 2024 15:37:26 +0200 Subject: [PATCH 7/9] network_enabled configuration moved to registration group --- ecal/core/include/ecal/config/registration.h | 4 +++- ecal/core/include/ecal/config/transport_layer.h | 2 -- ecal/core/src/config/ecal_config.cpp | 4 ++-- ecal/core/src/config/ecal_config_initializer.cpp | 14 +++++++------- ecal/core/src/types/ecal_registration_options.cpp | 3 ++- ecal/samples/cpp/misc/config/src/config_sample.cpp | 2 +- ecal/tests/cpp/config_test/src/config_test.cpp | 4 ++-- 7 files changed, 17 insertions(+), 16 deletions(-) diff --git a/ecal/core/include/ecal/config/registration.h b/ecal/core/include/ecal/config/registration.h index 46c88f5b0d..a378236e14 100644 --- a/ecal/core/include/ecal/config/registration.h +++ b/ecal/core/include/ecal/config/registration.h @@ -53,10 +53,12 @@ namespace eCAL ECAL_API unsigned int getTimeoutMS() const; //!< Timeout for topic registration in ms (internal) (Default: 60000) ECAL_API unsigned int getRefreshMS() const; //!< Topic registration refresh cylce (has to be smaller then registration timeout!) (Default: 1000) + bool network_enabled; /*!< true = all eCAL components communicate over network boundaries + false = local host only communication (Default: false) */ bool share_ttype; //!< Share topic type via registration layer (Default: true) bool share_tdesc; //!< Share topic description via registration layer (switch off to disable reflection) (Default: true) - private: + private: unsigned int m_registration_timeout; unsigned int m_registration_refresh; }; diff --git a/ecal/core/include/ecal/config/transport_layer.h b/ecal/core/include/ecal/config/transport_layer.h index 41aa5ad5ae..97e7f8ce19 100644 --- a/ecal/core/include/ecal/config/transport_layer.h +++ b/ecal/core/include/ecal/config/transport_layer.h @@ -83,8 +83,6 @@ namespace eCAL struct Configuration { - bool network_enabled{}; /*!< true = all eCAL components communicate over network boundaries - false = local host only communication (Default: false) */ bool drop_out_of_order_messages{}; //!< Enable dropping of payload messages that arrive out of order (Default: false) UDPMC::Configuration mc_options{}; TCPPubSub::Configuration tcp_options{}; diff --git a/ecal/core/src/config/ecal_config.cpp b/ecal/core/src/config/ecal_config.cpp index 10d779f337..65803d94bf 100644 --- a/ecal/core/src/config/ecal_config.cpp +++ b/ecal/core/src/config/ecal_config.cpp @@ -97,9 +97,9 @@ namespace eCAL // network ///////////////////////////////////// - ECAL_API bool IsNetworkEnabled () { return GetConfiguration().transport_layer.network_enabled; } + ECAL_API bool IsNetworkEnabled () { return GetConfiguration().registration.network_enabled; } - ECAL_API Types::UdpConfigVersion GetUdpMulticastConfigVersion () { return GetConfiguration().transport_layer.mc_options.config_version; } + ECAL_API Types::UdpConfigVersion GetUdpMulticastConfigVersion () { return GetConfiguration().transport_layer.mc_options.config_version; } ECAL_API std::string GetUdpMulticastGroup () { return GetConfiguration().transport_layer.mc_options.group; } ECAL_API std::string GetUdpMulticastMask () { return GetConfiguration().transport_layer.mc_options.mask; } diff --git a/ecal/core/src/config/ecal_config_initializer.cpp b/ecal/core/src/config/ecal_config_initializer.cpp index d739a6bed0..f8a6239a51 100644 --- a/ecal/core/src/config/ecal_config_initializer.cpp +++ b/ecal/core/src/config/ecal_config_initializer.cpp @@ -111,7 +111,6 @@ namespace eCAL // transport layer options auto& transportLayerOptions = transport_layer; - transportLayerOptions.network_enabled = iniConfig.get(NETWORK, "network_enabled", NET_ENABLED); transportLayerOptions.drop_out_of_order_messages = iniConfig.get(EXPERIMENTAL, "drop_out_of_order_messages", EXP_DROP_OUT_OF_ORDER_MESSAGES); auto& multicastOptions = transportLayerOptions.mc_options; @@ -146,12 +145,13 @@ namespace eCAL shmOptions.memfile_zero_copy = iniConfig.get(PUBLISHER, "memfile_zero_copy", PUB_MEMFILE_ZERO_COPY); // registration options - auto registrationTimeout = iniConfig.get(COMMON, "registration_timeout", CMN_REGISTRATION_TO); - auto registrationRefresh = iniConfig.get(COMMON, "registration_refresh", CMN_REGISTRATION_REFRESH); - registration = Registration::Configuration(registrationTimeout, registrationRefresh); - auto& registrationOptions = registration; - registrationOptions.share_tdesc = iniConfig.get(PUBLISHER, "share_tdesc", PUB_SHARE_TDESC); - registrationOptions.share_ttype = iniConfig.get(PUBLISHER, "share_ttype", PUB_SHARE_TTYPE); + auto registrationTimeout = iniConfig.get(COMMON, "registration_timeout", CMN_REGISTRATION_TO); + auto registrationRefresh = iniConfig.get(COMMON, "registration_refresh", CMN_REGISTRATION_REFRESH); + registration = Registration::Configuration(registrationTimeout, registrationRefresh); + auto& registrationOptions = registration; + registrationOptions.network_enabled = iniConfig.get(NETWORK, "network_enabled", NET_ENABLED); + registrationOptions.share_tdesc = iniConfig.get(PUBLISHER, "share_tdesc", PUB_SHARE_TDESC); + registrationOptions.share_ttype = iniConfig.get(PUBLISHER, "share_ttype", PUB_SHARE_TTYPE); // monitoring options auto& monitoringOptions = monitoring; diff --git a/ecal/core/src/types/ecal_registration_options.cpp b/ecal/core/src/types/ecal_registration_options.cpp index 2454ca1d69..2c090bd4cf 100644 --- a/ecal/core/src/types/ecal_registration_options.cpp +++ b/ecal/core/src/types/ecal_registration_options.cpp @@ -29,7 +29,8 @@ namespace eCAL namespace Registration { Configuration::Configuration() - : share_ttype(PUB_SHARE_TTYPE) + : network_enabled(NET_ENABLED) + , share_ttype(PUB_SHARE_TTYPE) , share_tdesc(PUB_SHARE_TDESC) , m_registration_timeout(CMN_REGISTRATION_TO) , m_registration_refresh(CMN_REGISTRATION_REFRESH) diff --git a/ecal/samples/cpp/misc/config/src/config_sample.cpp b/ecal/samples/cpp/misc/config/src/config_sample.cpp index ec75202ad7..ebe041c551 100644 --- a/ecal/samples/cpp/misc/config/src/config_sample.cpp +++ b/ecal/samples/cpp/misc/config/src/config_sample.cpp @@ -28,7 +28,7 @@ int main(int argc, char **argv) eCAL::Configuration my_config(argc, argv); // setting a configuration - my_config.transport_layer.network_enabled = true; + my_config.registration.network_enabled = true; // initialize eCAL API eCAL::Initialize(my_config, "config sample"); diff --git a/ecal/tests/cpp/config_test/src/config_test.cpp b/ecal/tests/cpp/config_test/src/config_test.cpp index e065f63f78..bc96b60870 100644 --- a/ecal/tests/cpp/config_test/src/config_test.cpp +++ b/ecal/tests/cpp/config_test/src/config_test.cpp @@ -62,7 +62,7 @@ TEST(core_cpp_config, user_config_passing) const eCAL::Registration::Configuration registration = eCAL::Registration::Configuration(registration_timeout, registration_refresh); try{ - custom_config.transport_layer.network_enabled = network_enabled; + custom_config.registration.network_enabled = network_enabled; custom_config.transport_layer.mc_options.group = ip_address; custom_config.transport_layer.mc_options.sndbuf = upd_snd_buff; @@ -83,7 +83,7 @@ TEST(core_cpp_config, user_config_passing) EXPECT_EQ(0, eCAL::Initialize(custom_config, "User Config Passing Test", eCAL::Init::Default)); // Test boolean assignment, default is false - EXPECT_EQ(network_enabled, eCAL::GetConfiguration().transport_layer.network_enabled); + EXPECT_EQ(network_enabled, eCAL::GetConfiguration().registration.network_enabled); // Test IP address assignment, default is 239.0.0.1 EXPECT_EQ(ip_address, static_cast(eCAL::GetConfiguration().transport_layer.mc_options.group)); From 7618288588323723d07a0f1071ecdad97866f5c4 Mon Sep 17 00:00:00 2001 From: tftzee <49162693+rex-schilasky@users.noreply.github.com> Date: Tue, 9 Jul 2024 10:27:32 +0200 Subject: [PATCH 8/9] shm registration configurable separately (interim solution to get this pr run) --- ecal/core/cfg/ecal.ini | 1 + ecal/core/include/ecal/config/configuration.h | 54 +++++++++---------- ecal/core/include/ecal/config/registration.h | 2 + ecal/core/include/ecal/ecal_config.h | 1 + ecal/core/src/config/ecal_config.cpp | 1 + .../src/config/ecal_config_initializer.cpp | 7 +-- ecal/core/src/ecal_def.h | 1 + .../ecal_registration_provider.cpp | 4 +- .../ecal_registration_receiver.cpp | 4 +- 9 files changed, 41 insertions(+), 34 deletions(-) diff --git a/ecal/core/cfg/ecal.ini b/ecal/core/cfg/ecal.ini index 7db460d6e8..5bad09add2 100644 --- a/ecal/core/cfg/ecal.ini +++ b/ecal/core/cfg/ecal.ini @@ -43,6 +43,7 @@ [network] network_enabled = false +shm_registration_enabled = false multicast_config_version = v1 multicast_group = 239.0.0.1 multicast_mask = 0.0.0.15 diff --git a/ecal/core/include/ecal/config/configuration.h b/ecal/core/include/ecal/config/configuration.h index 101c890dea..e016d897ff 100644 --- a/ecal/core/include/ecal/config/configuration.h +++ b/ecal/core/include/ecal/config/configuration.h @@ -47,34 +47,34 @@ namespace eCAL { - struct Configuration - { - TransportLayer::Configuration transport_layer{}; - Registration::Configuration registration{}; - Monitoring::Configuration monitoring{}; - Subscriber::Configuration subscriber{}; - Publisher::Configuration publisher{}; - Time::Configuration timesync{}; - Service::Configuration service{}; - Application::Configuration application{}; - Logging::Configuration logging{}; - Cli::Configuration command_line_arguments{}; - - ECAL_API Configuration(); - ECAL_API Configuration(int argc_ , char **argv_); - ECAL_API Configuration(std::vector& args_); + struct Configuration + { + Registration::Configuration registration{}; + TransportLayer::Configuration transport_layer{}; + Monitoring::Configuration monitoring{}; + Subscriber::Configuration subscriber{}; + Publisher::Configuration publisher{}; + Time::Configuration timesync{}; + Service::Configuration service{}; + Application::Configuration application{}; + Logging::Configuration logging{}; + Cli::Configuration command_line_arguments{}; - ECAL_API void InitConfigWithDefaultIni(); - ECAL_API void InitConfig(std::string ini_path_ = std::string("")); + ECAL_API Configuration(); + ECAL_API Configuration(int argc_, char** argv_); + ECAL_API Configuration(std::vector& args_); - ECAL_API std::string GetIniFilePath(); + ECAL_API void InitConfigWithDefaultIni(); + ECAL_API void InitConfig(std::string ini_path_ = std::string("")); - friend class CmdParser; + ECAL_API std::string GetIniFilePath(); - protected: - std::string ecal_ini_file_path{}; - - private: - ECAL_API void Init(std::vector& args_); - }; -} \ No newline at end of file + friend class CmdParser; + + protected: + std::string ecal_ini_file_path{}; + + private: + ECAL_API void Init(std::vector& args_); + }; +} diff --git a/ecal/core/include/ecal/config/registration.h b/ecal/core/include/ecal/config/registration.h index a378236e14..a521501f10 100644 --- a/ecal/core/include/ecal/config/registration.h +++ b/ecal/core/include/ecal/config/registration.h @@ -55,6 +55,8 @@ namespace eCAL bool network_enabled; /*!< true = all eCAL components communicate over network boundaries false = local host only communication (Default: false) */ + bool shm_registration_enabled; /*!< true = registration layer is based on shm + false = registration layer is based on udp (Default: false) */ bool share_ttype; //!< Share topic type via registration layer (Default: true) bool share_tdesc; //!< Share topic description via registration layer (switch off to disable reflection) (Default: true) diff --git a/ecal/core/include/ecal/ecal_config.h b/ecal/core/include/ecal/ecal_config.h index 570d01e579..acc5caa5cb 100644 --- a/ecal/core/include/ecal/ecal_config.h +++ b/ecal/core/include/ecal/ecal_config.h @@ -47,6 +47,7 @@ namespace eCAL ///////////////////////////////////// ECAL_API bool IsNetworkEnabled (); + ECAL_API bool IsShmRegistrationEnabled (); ECAL_API Types::UdpConfigVersion GetUdpMulticastConfigVersion (); ECAL_API std::string GetUdpMulticastGroup (); ECAL_API std::string GetUdpMulticastMask (); diff --git a/ecal/core/src/config/ecal_config.cpp b/ecal/core/src/config/ecal_config.cpp index 65803d94bf..25328e4efa 100644 --- a/ecal/core/src/config/ecal_config.cpp +++ b/ecal/core/src/config/ecal_config.cpp @@ -98,6 +98,7 @@ namespace eCAL ///////////////////////////////////// ECAL_API bool IsNetworkEnabled () { return GetConfiguration().registration.network_enabled; } + ECAL_API bool IsShmRegistrationEnabled () { return GetConfiguration().registration.shm_registration_enabled; } ECAL_API Types::UdpConfigVersion GetUdpMulticastConfigVersion () { return GetConfiguration().transport_layer.mc_options.config_version; } diff --git a/ecal/core/src/config/ecal_config_initializer.cpp b/ecal/core/src/config/ecal_config_initializer.cpp index f8a6239a51..0606164ceb 100644 --- a/ecal/core/src/config/ecal_config_initializer.cpp +++ b/ecal/core/src/config/ecal_config_initializer.cpp @@ -149,9 +149,10 @@ namespace eCAL auto registrationRefresh = iniConfig.get(COMMON, "registration_refresh", CMN_REGISTRATION_REFRESH); registration = Registration::Configuration(registrationTimeout, registrationRefresh); auto& registrationOptions = registration; - registrationOptions.network_enabled = iniConfig.get(NETWORK, "network_enabled", NET_ENABLED); - registrationOptions.share_tdesc = iniConfig.get(PUBLISHER, "share_tdesc", PUB_SHARE_TDESC); - registrationOptions.share_ttype = iniConfig.get(PUBLISHER, "share_ttype", PUB_SHARE_TTYPE); + registrationOptions.network_enabled = iniConfig.get(NETWORK, "network_enabled", NET_ENABLED); + registrationOptions.shm_registration_enabled = iniConfig.get(NETWORK, "shm_registration_enabled", SHM_REGISTRATION_ENABLED); + registrationOptions.share_tdesc = iniConfig.get(PUBLISHER, "share_tdesc", PUB_SHARE_TDESC); + registrationOptions.share_ttype = iniConfig.get(PUBLISHER, "share_ttype", PUB_SHARE_TTYPE); // monitoring options auto& monitoringOptions = monitoring; diff --git a/ecal/core/src/ecal_def.h b/ecal/core/src/ecal_def.h index 4222868e8b..fcfb23a3d9 100644 --- a/ecal/core/src/ecal_def.h +++ b/ecal/core/src/ecal_def.h @@ -67,6 +67,7 @@ constexpr const char* SYS_FILTER_EXCL = "^eCALSysClient$|^eCALSysGUI$|^eCALS /**********************************************************************************************/ /* network switch */ constexpr bool NET_ENABLED = false; +constexpr bool SHM_REGISTRATION_ENABLED = false; /* eCAL udp multicast defines */ constexpr eCAL::Types::UdpConfigVersion NET_UDP_MULTICAST_CONFIG_VERSION = eCAL::Types::UdpConfigVersion::V1; diff --git a/ecal/core/src/registration/ecal_registration_provider.cpp b/ecal/core/src/registration/ecal_registration_provider.cpp index bb8cd8c2dd..15b836da8c 100644 --- a/ecal/core/src/registration/ecal_registration_provider.cpp +++ b/ecal/core/src/registration/ecal_registration_provider.cpp @@ -63,8 +63,8 @@ namespace eCAL if(m_created) return; // send registration over udp or shared memory - m_use_registration_udp = Config::IsNetworkEnabled(); - m_use_registration_shm = !m_use_registration_udp; + m_use_registration_shm = Config::IsShmRegistrationEnabled(); + m_use_registration_udp = !m_use_registration_shm; if (m_use_registration_udp) { diff --git a/ecal/core/src/registration/ecal_registration_receiver.cpp b/ecal/core/src/registration/ecal_registration_receiver.cpp index 1f45f52773..b587fa5846 100644 --- a/ecal/core/src/registration/ecal_registration_receiver.cpp +++ b/ecal/core/src/registration/ecal_registration_receiver.cpp @@ -70,8 +70,8 @@ namespace eCAL if(m_created) return; // receive registration via udp or shared memory - m_use_registration_udp = Config::IsNetworkEnabled(); - m_use_registration_shm = !m_use_registration_udp; + m_use_registration_shm = Config::IsShmRegistrationEnabled(); + m_use_registration_udp = !m_use_registration_shm; if (m_use_registration_udp) { From 6753be57447e52fff4f16606eef465dbca13d937 Mon Sep 17 00:00:00 2001 From: tftzee <49162693+rex-schilasky@users.noreply.github.com> Date: Tue, 9 Jul 2024 13:03:14 +0200 Subject: [PATCH 9/9] config test fixed (network enabled no more part of transport_layer options) --- .../src/types/ecal_registration_options.cpp | 5 +- .../tests/cpp/config_test/src/config_test.cpp | 50 +++++++++---------- 2 files changed, 28 insertions(+), 27 deletions(-) diff --git a/ecal/core/src/types/ecal_registration_options.cpp b/ecal/core/src/types/ecal_registration_options.cpp index 2c090bd4cf..ae4051fb30 100644 --- a/ecal/core/src/types/ecal_registration_options.cpp +++ b/ecal/core/src/types/ecal_registration_options.cpp @@ -30,6 +30,7 @@ namespace eCAL { Configuration::Configuration() : network_enabled(NET_ENABLED) + , shm_registration_enabled(SHM_REGISTRATION_ENABLED) , share_ttype(PUB_SHARE_TTYPE) , share_tdesc(PUB_SHARE_TDESC) , m_registration_timeout(CMN_REGISTRATION_TO) @@ -37,7 +38,9 @@ namespace eCAL {} Configuration::Configuration(unsigned int reg_timeout_, unsigned int reg_refresh_) - : share_ttype(PUB_SHARE_TTYPE) + : network_enabled(NET_ENABLED) + , shm_registration_enabled(SHM_REGISTRATION_ENABLED) + , share_ttype(PUB_SHARE_TTYPE) , share_tdesc(PUB_SHARE_TDESC) { if (reg_refresh_ < reg_timeout_) diff --git a/ecal/tests/cpp/config_test/src/config_test.cpp b/ecal/tests/cpp/config_test/src/config_test.cpp index bc96b60870..7e5a4f6400 100644 --- a/ecal/tests/cpp/config_test/src/config_test.cpp +++ b/ecal/tests/cpp/config_test/src/config_test.cpp @@ -38,41 +38,39 @@ void SetValue(MEMBER& member, VALUE value) TEST(core_cpp_config, user_config_passing) { - eCAL::Configuration custom_config(0, nullptr); + // Registration options + const unsigned int registration_timeout = 80000U; + const unsigned int registration_refresh = 2000U; - // Test value assignments from each category - // How the user would utilize it - // Transport layer options - const bool network_enabled = true; - std::string ip_address = "238.200.100.2"; - const int upd_snd_buff = (5242880 + 1024); + const bool drop_out_of_order_messages = true; + std::string ip_address = "238.200.100.2"; + const int upd_snd_buff = (5242880 + 1024); // Monitoring options - const unsigned int mon_timeout = 6000U; - const std::string mon_filter_excl = "_A.*"; - const eCAL_Logging_Filter mon_log_filter_con = log_level_warning; + const unsigned int mon_timeout = 6000U; + const std::string mon_filter_excl = "_A.*"; + const eCAL_Logging_Filter mon_log_filter_con = log_level_warning; // Publisher options - const bool pub_use_shm = true; + const bool pub_use_shm = true; - // Registration options - const unsigned int registration_timeout = 80000U; - const unsigned int registration_refresh = 2000U; - const eCAL::Registration::Configuration registration = eCAL::Registration::Configuration(registration_timeout, registration_refresh); - - try{ - custom_config.registration.network_enabled = network_enabled; - custom_config.transport_layer.mc_options.group = ip_address; - custom_config.transport_layer.mc_options.sndbuf = upd_snd_buff; + eCAL::Configuration custom_config(0, nullptr); + try + { + const eCAL::Registration::Configuration registration = eCAL::Registration::Configuration(registration_timeout, registration_refresh); + + custom_config.transport_layer.drop_out_of_order_messages = drop_out_of_order_messages; + custom_config.transport_layer.mc_options.group = ip_address; + custom_config.transport_layer.mc_options.sndbuf = upd_snd_buff; - custom_config.monitoring.monitoring_timeout = mon_timeout; - custom_config.monitoring.filter_excl = mon_filter_excl; - custom_config.logging.filter_log_con = mon_log_filter_con; + custom_config.monitoring.monitoring_timeout = mon_timeout; + custom_config.monitoring.filter_excl = mon_filter_excl; + custom_config.logging.filter_log_con = mon_log_filter_con; - custom_config.publisher.shm.enable = pub_use_shm; + custom_config.publisher.shm.enable = pub_use_shm; - custom_config.registration = registration; + custom_config.registration = registration; } catch (std::invalid_argument& e) { @@ -83,7 +81,7 @@ TEST(core_cpp_config, user_config_passing) EXPECT_EQ(0, eCAL::Initialize(custom_config, "User Config Passing Test", eCAL::Init::Default)); // Test boolean assignment, default is false - EXPECT_EQ(network_enabled, eCAL::GetConfiguration().registration.network_enabled); + EXPECT_EQ(drop_out_of_order_messages, eCAL::GetConfiguration().transport_layer.drop_out_of_order_messages); // Test IP address assignment, default is 239.0.0.1 EXPECT_EQ(ip_address, static_cast(eCAL::GetConfiguration().transport_layer.mc_options.group));