1 // Copyright (C) 2014-2017 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) 2 // This Source Code Form is subject to the terms of the Mozilla Public 3 // License, v. 2.0. If a copy of the MPL was not distributed with this 4 // file, You can obtain one at http://mozilla.org/MPL/2.0/. 5 6 #ifndef VSOMEIP_V3_CONFIGURATION_HPP 7 #define VSOMEIP_V3_CONFIGURATION_HPP 8 9 #include <map> 10 #include <memory> 11 #include <set> 12 #include <string> 13 #include <chrono> 14 15 #include <boost/asio/ip/address.hpp> 16 #include <boost/icl/interval_set.hpp> 17 18 #include <vsomeip/export.hpp> 19 #include <vsomeip/defines.hpp> 20 #include <vsomeip/plugin.hpp> 21 #include <vsomeip/primitive_types.hpp> 22 23 #include "trace.hpp" 24 25 #include "../../e2e_protection/include/e2exf/config.hpp" 26 #include "e2e.hpp" 27 28 #include "debounce.hpp" 29 30 #ifdef ANDROID 31 #include "internal_android.hpp" 32 #else 33 #include "internal.hpp" 34 #endif // ANDROID 35 36 #include "../../security/include/policy.hpp" 37 38 #define VSOMEIP_CONFIG_PLUGIN_VERSION 1 39 40 namespace vsomeip_v3 { 41 42 class event; 43 44 class configuration { 45 public: ~configuration()46 virtual ~configuration() 47 #ifndef ANDROID 48 {} 49 #else 50 ; 51 #endif 52 53 virtual bool load(const std::string &_name) = 0; 54 virtual bool remote_offer_info_add(service_t _service, 55 instance_t _instance, 56 std::uint16_t _port, 57 bool _reliable, 58 bool _magic_cookies_enabled) = 0; 59 virtual bool remote_offer_info_remove(service_t _service, 60 instance_t _instance, 61 std::uint16_t _port, 62 bool _reliable, 63 bool _magic_cookies_enabled, 64 bool* _still_offered_remote) = 0; 65 66 virtual const std::string &get_network() const = 0; 67 68 virtual const boost::asio::ip::address & get_unicast_address() const = 0; 69 virtual const boost::asio::ip::address& get_netmask() const = 0; 70 virtual const std::string &get_device() const = 0; 71 virtual diagnosis_t get_diagnosis_address() const = 0; 72 virtual diagnosis_t get_diagnosis_mask() const = 0; 73 virtual bool is_v4() const = 0; 74 virtual bool is_v6() const = 0; 75 76 virtual bool has_console_log() const = 0; 77 virtual bool has_file_log() const = 0; 78 virtual bool has_dlt_log() const = 0; 79 virtual const std::string & get_logfile() const = 0; 80 virtual logger::level_e get_loglevel() const = 0; 81 82 virtual const std::string & get_routing_host() const = 0; 83 84 virtual std::string get_unicast_address(service_t _service, 85 instance_t _instance) const = 0; 86 virtual uint16_t get_reliable_port(service_t _service, 87 instance_t _instance) const = 0; 88 virtual bool has_enabled_magic_cookies(std::string _address, 89 uint16_t _port) const = 0; 90 virtual uint16_t get_unreliable_port(service_t _service, 91 instance_t _instance) const = 0; 92 93 virtual major_version_t get_major_version(service_t _service, 94 instance_t _instance) const = 0; 95 virtual minor_version_t get_minor_version(service_t _service, 96 instance_t _instance) const = 0; 97 virtual ttl_t get_ttl(service_t _service, 98 instance_t _instance) const = 0; 99 100 virtual void get_configured_timing_requests( 101 service_t _service, std::string _ip_target, 102 std::uint16_t _port_target, method_t _method, 103 std::chrono::nanoseconds *_debounce_time, 104 std::chrono::nanoseconds *_max_retention_time) const = 0; 105 virtual void get_configured_timing_responses( 106 service_t _service, std::string _ip_service, 107 std::uint16_t _port_service, method_t _method, 108 std::chrono::nanoseconds *_debounce_time, 109 std::chrono::nanoseconds *_max_retention_time) const = 0; 110 111 virtual bool is_someip(service_t _service, instance_t _instance) const = 0; 112 113 virtual bool get_client_port(service_t _service, instance_t _instance, 114 uint16_t _remote_port, bool _reliable, 115 std::map<bool, std::set<uint16_t> > &_used_client_ports, uint16_t &_client_port) const = 0; 116 117 virtual std::set<std::pair<service_t, instance_t> > get_remote_services() const = 0; 118 119 virtual bool get_multicast(service_t _service, instance_t _instance, 120 eventgroup_t _eventgroup, std::string &_address, uint16_t &_port) const = 0; 121 122 virtual uint8_t get_threshold(service_t _service, instance_t _instance, 123 eventgroup_t _eventgroup) const = 0; 124 125 virtual client_t get_id(const std::string &_name) const = 0; 126 virtual bool is_configured_client_id(client_t _id) const = 0; 127 128 virtual std::size_t get_max_dispatchers(const std::string &_name) const = 0; 129 virtual std::size_t get_max_dispatch_time(const std::string &_name) const = 0; 130 virtual std::size_t get_io_thread_count(const std::string &_name) const = 0; 131 virtual int get_io_thread_nice_level(const std::string &_name) const = 0; 132 virtual std::size_t get_request_debouncing(const std::string &_name) const = 0; 133 #ifdef VSOMEIP_HAS_SESSION_HANDLING_CONFIG 134 virtual bool has_session_handling(const std::string &_name) const = 0; 135 #endif // VSOMEIP_HAS_SESSION_HANDLING_CONFIG 136 137 virtual std::uint32_t get_max_message_size_local() const = 0; 138 virtual std::uint32_t get_max_message_size_reliable(const std::string& _address, 139 std::uint16_t _port) const = 0; 140 virtual std::uint32_t get_max_message_size_unreliable() const = 0; 141 virtual std::uint32_t get_buffer_shrink_threshold() const = 0; 142 143 virtual bool supports_selective_broadcasts(boost::asio::ip::address _address) const = 0; 144 145 virtual bool is_offered_remote(service_t _service, instance_t _instance) const = 0; 146 147 virtual bool is_local_service(service_t _service, instance_t _instance) const = 0; 148 149 virtual reliability_type_e get_event_reliability( 150 service_t _service, instance_t _instance, event_t _event) const = 0; 151 virtual reliability_type_e get_service_reliability( 152 service_t _service, instance_t _instance) const = 0; 153 154 // Service Discovery configuration 155 virtual bool is_sd_enabled() const = 0; 156 157 virtual const std::string & get_sd_multicast() const = 0; 158 virtual uint16_t get_sd_port() const = 0; 159 virtual const std::string & get_sd_protocol() const = 0; 160 161 virtual uint32_t get_sd_initial_delay_min() const = 0; 162 virtual uint32_t get_sd_initial_delay_max() const = 0; 163 virtual int32_t get_sd_repetitions_base_delay() const = 0; 164 virtual uint8_t get_sd_repetitions_max() const = 0; 165 virtual ttl_t get_sd_ttl() const = 0; 166 virtual int32_t get_sd_cyclic_offer_delay() const = 0; 167 virtual int32_t get_sd_request_response_delay() const = 0; 168 virtual std::uint32_t get_sd_offer_debounce_time() const = 0; 169 170 // Trace configuration 171 virtual std::shared_ptr<cfg::trace> get_trace() const = 0; 172 173 // Watchdog 174 virtual bool is_watchdog_enabled() const = 0; 175 virtual uint32_t get_watchdog_timeout() const = 0; 176 virtual uint32_t get_allowed_missing_pongs() const = 0; 177 178 // File permissions 179 virtual std::uint32_t get_permissions_uds() const = 0; 180 virtual std::uint32_t get_permissions_shm() const = 0; 181 182 virtual bool log_version() const = 0; 183 virtual uint32_t get_log_version_interval() const = 0; 184 185 // Plugins 186 virtual std::map<plugin_type_e, std::set<std::string>> get_plugins( 187 const std::string &_name) const = 0; 188 189 virtual void set_configuration_path(const std::string &_path) = 0; 190 191 //E2E 192 virtual std::map<e2exf::data_identifier_t, std::shared_ptr<cfg::e2e>> get_e2e_configuration() const = 0; 193 virtual bool is_e2e_enabled() const = 0; 194 195 virtual bool log_memory() const = 0; 196 virtual uint32_t get_log_memory_interval() const = 0; 197 198 virtual bool log_status() const = 0; 199 virtual uint32_t get_log_status_interval() const = 0; 200 201 // TTL factor 202 typedef std::uint32_t ttl_factor_t; 203 typedef std::map<service_t, std::map<instance_t, ttl_factor_t>> ttl_map_t; 204 virtual ttl_map_t get_ttl_factor_offers() const = 0; 205 virtual ttl_map_t get_ttl_factor_subscribes() const = 0; 206 207 // Debouncing 208 virtual std::shared_ptr<cfg::debounce> get_debounce( 209 service_t _service, instance_t _instance, event_t _event) const = 0; 210 211 // Queue size limit endpoints 212 typedef std::uint32_t endpoint_queue_limit_t; 213 virtual endpoint_queue_limit_t get_endpoint_queue_limit( 214 const std::string& _address, std::uint16_t _port) const = 0; 215 virtual endpoint_queue_limit_t get_endpoint_queue_limit_local() const = 0; 216 217 virtual std::uint32_t get_max_tcp_restart_aborts() const = 0; 218 virtual std::uint32_t get_max_tcp_connect_time() const = 0; 219 220 // Acceptance handling 221 virtual bool is_protected_device( 222 const boost::asio::ip::address& _address) const = 0; 223 virtual bool is_protected_port( 224 const boost::asio::ip::address& _address, std::uint16_t _port, 225 bool _reliable) const = 0; 226 virtual bool is_secure_port( 227 const boost::asio::ip::address& _address, std::uint16_t _port, 228 bool _reliable) const = 0; 229 230 typedef std::pair<std::uint16_t, std::uint16_t> port_range_t; 231 virtual void set_sd_acceptance_rule( 232 const boost::asio::ip::address &_address, 233 port_range_t _port_range, port_type_e _type, 234 const std::string &_path, bool _reliable, bool _enable, bool _default) = 0; 235 236 typedef std::map< 237 boost::asio::ip::address, // other device 238 std::pair< 239 std::string, // path to file that determines whether or not IPsec is active 240 std::map< 241 bool, // false = unreliable (aka UDP), true = reliable (aka TCP) 242 std::pair< 243 boost::icl::interval_set<std::uint16_t>, // optional (aka semi-secure) port range 244 boost::icl::interval_set<std::uint16_t> // secure port range 245 > 246 > 247 > 248 > sd_acceptance_rules_t; 249 virtual void set_sd_acceptance_rules(const sd_acceptance_rules_t& _rules, 250 bool _enable) = 0; 251 virtual sd_acceptance_rules_t get_sd_acceptance_rules() = 0; 252 virtual void set_sd_acceptance_rules_active( 253 const boost::asio::ip::address& _address, bool _enable) = 0; 254 255 virtual bool is_secure_service(service_t _service, instance_t _instance) const = 0; 256 257 virtual int get_udp_receive_buffer_size() const = 0; 258 259 virtual bool check_routing_credentials(client_t _client, uint32_t _uid, uint32_t _gid) const = 0; 260 261 // SOME/IP-TP 262 virtual bool tp_segment_messages_client_to_service( 263 service_t _service, std::string _ip_target, 264 std::uint16_t _port_target, method_t _method) const = 0; 265 virtual bool tp_segment_messages_service_to_client( 266 service_t _service, std::string _ip_service, 267 std::uint16_t _port_service, method_t _method) const = 0; 268 269 // routing shutdown timeout 270 virtual std::uint32_t get_shutdown_timeout() const = 0; 271 272 virtual bool log_statistics() const = 0; 273 virtual uint32_t get_statistics_interval() const = 0; 274 virtual uint32_t get_statistics_min_freq() const = 0; 275 virtual uint32_t get_statistics_max_messages() const = 0; 276 277 virtual uint8_t get_max_remote_subscribers() const = 0; 278 279 virtual partition_id_t get_partition_id( 280 service_t _service, instance_t _instance) const = 0; 281 }; 282 283 } // namespace vsomeip_v3 284 285 #endif // VSOMEIP_V3_CONFIGURATION_HPP 286