Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

vSomeIP-Lib 3.4.10 #582

Merged
merged 1 commit into from
Nov 29, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Android.bp
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,8 @@ cc_library_shared {

cflags: [
"-DWITHOUT_SYSTEMD",
"-DVSOMEIP_COMPAT_VERSION=\"3.4.9\"",
"-DVSOMEIP_VERSION=\"3.4.10\"",
"-DVSOMEIP_COMPAT_VERSION=\"3.4.10\"",
"-DVSOMEIP_BASE_PATH=\"/vendor/run/someip/\"",
"-DUSE_DLT",
],
Expand Down
8 changes: 4 additions & 4 deletions Android.mk
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ LOCAL_CFLAGS := \
-frtti \
-fexceptions \
-DWITHOUT_SYSTEMD \
-DVSOMEIP_VERSION=\"3.4.9\" \
-DVSOMEIP_VERSION=\"3.4.10\" \
-DVSOMEIP_BASE_PATH=\"/vendor/run/someip/\" \
-Wno-unused-parameter \
-Wno-non-virtual-dtor \
Expand Down Expand Up @@ -147,7 +147,7 @@ LOCAL_CFLAGS := \
-frtti \
-fexceptions \
-DWITHOUT_SYSTEMD \
-DVSOMEIP_VERSION=\"3.4.9\" \
-DVSOMEIP_VERSION=\"3.4.10\" \
-DVSOMEIP_BASE_PATH=\"/vendor/run/someip/\" \
-Wno-unused-parameter \
-Wno-non-virtual-dtor \
Expand Down Expand Up @@ -194,8 +194,8 @@ LOCAL_CFLAGS := \
-frtti \
-fexceptions \
-DWITHOUT_SYSTEMD \
-DVSOMEIP_VERSION=\"3.4.9\" \
-DVSOMEIP_COMPAT_VERSION=\"3.4.9\" \
-DVSOMEIP_VERSION=\"3.4.10\" \
-DVSOMEIP_COMPAT_VERSION=\"3.4.10\" \
-DVSOMEIP_BASE_PATH=\"/vendor/run/someip/\" \
-Wno-unused-parameter \
-Wno-non-virtual-dtor \
Expand Down
24 changes: 24 additions & 0 deletions CHANGES
Original file line number Diff line number Diff line change
@@ -1,6 +1,30 @@
Changes
=======

v3.4.10
- Fix QNX build
- Fix missing Stop Offer
- Apply extra fixes to QNX environment
- Remove key <service, instance> from the offer_commands_
- COVESA#478: deleted unused param _use_exclusive_proxy
- Fix code smell related to condition variable
- COVESA#462: Fix IPv6 Service Discovery
- Added multicast_mutex to async function that makes use of multicast socket
- COVESA#479: Allow service_discovery to continue without random_device
- Fix availability handler sending false on offer
- Set host/port in vsomeip_sec_client_t whenever possible
- Use executor_work_guard instead of io_context::work for boost v1.66 and higher
- Update Windows build
- Added profile 07 as an option for E2E protection
- ASIO: use heap-allocation to avoid using garbage data
- Fix integer underflow in server_endpoint_impl.cpp
- Cleanup prepare_stop_handlers_
- Automatic unsubscribe
- Debounce now works without routingmanagerd running
- Debouncing: Send last received value after debounce time + X
- Fix resource deadlock avoided crash
- Use closure instead of callable struct

v3.4.9
- Merge COVESA PR447 with support for QNX 7.1
- Merge COVESA PR470 with changes to not instantiate
Expand Down
5 changes: 2 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ set (VSOMEIP_COMPAT_NAME vsomeip)

set (VSOMEIP_MAJOR_VERSION 3)
set (VSOMEIP_MINOR_VERSION 4)
set (VSOMEIP_PATCH_VERSION 9)
set (VSOMEIP_HOTFIX_VERSION 1)
set (VSOMEIP_PATCH_VERSION 10)
set (VSOMEIP_HOTFIX_VERSION 0)

set (VSOMEIP_VERSION ${VSOMEIP_MAJOR_VERSION}.${VSOMEIP_MINOR_VERSION}.${VSOMEIP_PATCH_VERSION})
set (PACKAGE_VERSION ${VSOMEIP_VERSION}) # Used in documentation/doxygen.in
Expand Down Expand Up @@ -251,7 +251,6 @@ if (MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS -D_WINSOCK_DEPRECATED_NO_WARNINGS -D_WIN32_WINNT=${BOOST_WINDOWS_VERSION} -DWIN32 -DBOOST_ASIO_DISABLE_IOCP /EHsc /std:c++14 /wd4250")
set(USE_RT "")
link_directories(${Boost_LIBRARY_DIR_DEBUG})
ADD_DEFINITIONS( -DBOOST_ALL_DYN_LINK )
elseif(${CMAKE_SYSTEM_NAME} MATCHES "QNX")
set(USE_RT "")
else()
Expand Down
4 changes: 4 additions & 0 deletions documentation/vsomeipUserGuide
Original file line number Diff line number Diff line change
Expand Up @@ -982,6 +982,10 @@ Specifies if the event shall be debounced based on elapsed time interval.
Specifies if interval timer is reset when payload change was detected.
(valid values: _false_, _true_). Defaults to _false_.

*** `send_current_value_after` (optional)
Specifies if last message should be sent after interval timeout.
(valid values: _false_, _true_). Defaults to _false_.

* `routing` (optional)
+
Specifies the properties of the routing. Either a string that specifies the application that hosts the
Expand Down
10 changes: 8 additions & 2 deletions examples/hello_world/hello_world_service.hpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright (C) 2015-2017 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
// Copyright (C) 2015-2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
Expand Down Expand Up @@ -39,7 +39,13 @@ class hello_world_service {

~hello_world_service()
{
stop_thread_.join();
if (std::this_thread::get_id() != stop_thread_.get_id()) {
if (stop_thread_.joinable()) {
stop_thread_.join();
}
} else {
stop_thread_.detach();
}
}

bool init()
Expand Down
18 changes: 15 additions & 3 deletions examples/notify-sample.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright (C) 2014-2017 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
// Copyright (C) 2014-2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
Expand Down Expand Up @@ -89,8 +89,20 @@ class service_sample {
notify_condition_.notify_one();
app_->clear_all_handler();
stop_offer();
offer_thread_.join();
notify_thread_.join();
if (std::this_thread::get_id() != offer_thread_.get_id()) {
if (offer_thread_.joinable()) {
offer_thread_.join();
}
} else {
offer_thread_.detach();
}
if (std::this_thread::get_id() != notify_thread_.get_id()) {
if (notify_thread_.joinable()) {
notify_thread_.join();
}
} else {
notify_thread_.detach();
}
app_->stop();
}
#endif
Expand Down
10 changes: 8 additions & 2 deletions examples/request-sample.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright (C) 2014-2017 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
// Copyright (C) 2014-2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
Expand Down Expand Up @@ -94,7 +94,13 @@ class client_sample {
app_->clear_all_handler();
app_->release_service(SAMPLE_SERVICE_ID, SAMPLE_INSTANCE_ID);
condition_.notify_one();
sender_.join();
if (std::this_thread::get_id() != sender_.get_id()) {
if (sender_.joinable()) {
sender_.join();
}
} else {
sender_.detach();
}
app_->stop();
}
#endif
Expand Down
10 changes: 8 additions & 2 deletions examples/response-sample.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright (C) 2014-2017 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
// Copyright (C) 2014-2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
Expand Down Expand Up @@ -61,7 +61,13 @@ class service_sample {
app_->clear_all_handler();
stop_offer();
condition_.notify_one();
offer_thread_.join();
if (std::this_thread::get_id() != offer_thread_.get_id()) {
if (offer_thread_.joinable()) {
offer_thread_.join();
}
} else {
offer_thread_.detach();
}
app_->stop();
}
#endif
Expand Down
26 changes: 20 additions & 6 deletions examples/routingmanagerd/routingmanagerd.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright (C) 2015-2017 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
// Copyright (C) 2015-2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
Expand Down Expand Up @@ -120,17 +120,31 @@ int routingmanagerd_process(bool _is_quiet) {
if (its_application->is_routing()) {
its_application->start();
#ifndef VSOMEIP_ENABLE_SIGNAL_HANDLING
sighandler_thread.join();
if (std::this_thread::get_id() != sighandler_thread.get_id()) {
if (sighandler_thread.joinable()) {
sighandler_thread.join();
}
} else {
sighandler_thread.detach();
}
#endif
return 0;
}
VSOMEIP_ERROR << "routingmanagerd has not been configured as routing - abort";
}
#ifndef VSOMEIP_ENABLE_SIGNAL_HANDLING
std::unique_lock<std::recursive_mutex> its_lock(sighandler_mutex);
stop_sighandler = true;
sighandler_condition.notify_one();
sighandler_thread.join();
{
std::unique_lock<std::recursive_mutex> its_lock(sighandler_mutex);
stop_sighandler = true;
sighandler_condition.notify_one();
}
if (std::this_thread::get_id() != sighandler_thread.get_id()) {
if (sighandler_thread.joinable()) {
sighandler_thread.join();
}
} else {
sighandler_thread.detach();
}
#endif
return -1;
}
Expand Down
13 changes: 13 additions & 0 deletions implementation/configuration/src/configuration_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,17 @@ configuration_impl::configuration_impl(const std::string &_path)
netmask_ = netmask_.from_string(VSOMEIP_NETMASK);
for (auto i = 0; i < ET_MAX; i++)
is_configured_[i] = false;

#ifdef _WIN32
#if VSOMEIP_BOOST_VERSION < 106600
routing_.host_.unicast_ = boost::asio::ip::address::from_string("127.0.0.1");
#else
routing_.host_.unicast_ = boost::asio::ip::make_address("127.0.0.1");
#endif
routing_.host_.port_ = 31490;
routing_.guests_.unicast_ = routing_.host_.unicast_;
routing_.guests_.ports_[{ ANY_UID, ANY_GID }].emplace(31492, 31999);
#endif
}

configuration_impl::configuration_impl(const configuration_impl &_other)
Expand Down Expand Up @@ -4083,6 +4094,8 @@ configuration_impl::load_event_debounce(
its_converter << std::dec << its_value;
its_converter >> its_debounce->interval_;
}
} else if (its_key == "send_current_value_after") {
its_debounce->send_current_value_after_ = (its_value == "true");
}
}

Expand Down
5 changes: 4 additions & 1 deletion implementation/e2e_protection/include/crc/crc.hpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright (C) 2014-2021 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
// Copyright (C) 2014-2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
Expand All @@ -17,12 +17,15 @@ class e2e_crc {
const uint8_t _start_value = 0x00U);
static uint32_t calculate_profile_04(buffer_view _buffer_view,
const uint32_t _start_value = 0x00000000U);
static uint64_t calculate_profile_07(buffer_view _buffer_view,
const uint64_t _start_value = 0x0000000000000000U);

static uint32_t calculate_profile_custom(buffer_view _buffer_view);

private:
static const uint8_t lookup_table_profile_01_[256];
static const uint32_t lookup_table_profile_04_[256];
static const uint64_t lookup_table_profile_07_[256];
static const uint32_t lookup_table_profile_custom_[256];

};
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
// Copyright (C) 2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.

#ifndef VSOMEIP_V3_E2E_PROFILE07_CHECKER_HPP
#define VSOMEIP_V3_E2E_PROFILE07_CHECKER_HPP

#include <map>

#include "../profile07/profile_07.hpp"
#include "../profile_interface/checker.hpp"

namespace vsomeip_v3 {
namespace e2e {
namespace profile07 {

class profile_07_checker final : public e2e::profile_interface::checker {

public:
profile_07_checker(void) = delete;

// [SWS_E2E_00389] initialize state
explicit profile_07_checker(const profile_config &_config) :
config_(_config) {}

void check(const e2e_buffer &_buffer, instance_t _instance,
e2e::profile_interface::check_status_t &_generic_check_status) override final;

private:
bool verify_input(const e2e_buffer &_buffer) const;
bool verify_counter(instance_t _instance, uint32_t _received_counter);

bool read_32(const e2e_buffer &_buffer, uint32_t &_data, size_t _index) const;
bool read_64(const e2e_buffer &_buffer, uint64_t &_data, size_t _index) const;

std::mutex check_mutex_;

profile_config config_;
std::map<instance_t, uint32_t> counter_;
};

} // namespace profile_07
} // namespace e2e
} // namespace vsomeip_v3

#endif // VSOMEIP_V3_E2E_PROFILE07_CHECKER_HPP
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
// Copyright (C) 2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.

#ifndef VSOMEIP_V3_E2E_PROFILE07_PROFILE07_HPP
#define VSOMEIP_V3_E2E_PROFILE07_PROFILE07_HPP

#include <cstdint>

#include <vsomeip/defines.hpp>

#include "../../../buffer/buffer.hpp"

namespace vsomeip_v3 {
namespace e2e {
namespace profile07 {

const uint8_t PROFILE_07_SIZE_OFFSET = 8;
const uint8_t PROFILE_07_COUNTER_OFFSET = 12;
const uint8_t PROFILE_07_DATAID_OFFSET = 16;
const uint8_t PROFILE_07_CRC_OFFSET = 0;

struct profile_config;

class profile_07 {
public:
static uint64_t compute_crc(const profile_config &_config, const e2e_buffer &_buffer);
};

// [SWS_E2E_00200]
struct profile_config {
profile_config() = delete;

profile_config(uint32_t _data_id, size_t _offset,
size_t _min_data_length, size_t _max_data_length,
uint32_t _max_delta_counter)
: data_id_(_data_id), offset_(_offset),
min_data_length_(_min_data_length), max_data_length_(_max_data_length),
max_delta_counter_(_max_delta_counter),
base_(VSOMEIP_SOMEIP_HEADER_SIZE) {
}
profile_config(const profile_config &_config) = default;
profile_config &operator=(const profile_config &_config) = default;

uint32_t data_id_;
size_t offset_; // This must be configured in bit but as a multiple of 8.
// As we must use it as an index, we do the math once at
// configuration time and use the correct data type here.
// Thus, this value is always the byte where the CRC starts.
size_t min_data_length_;
size_t max_data_length_;
uint32_t max_delta_counter_;

// SOME/IP base
size_t base_;
};

} // namespace profile_07
} // namespace e2e
} // namespace vsomeip_v3

#endif // VSOMEIP_V3_E2E_PROFILE07_PROFILE07_HPP
Loading
Loading