1// Copyright (C) 2014-2019 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_INTERNAL_HPP_
7#define VSOMEIP_V3_INTERNAL_HPP_
8
9#include <cstdint>
10#include <limits>
11#include <vsomeip/primitive_types.hpp>
12
13#define VSOMEIP_ENV_APPLICATION_NAME            "VSOMEIP_APPLICATION_NAME"
14#define VSOMEIP_ENV_CONFIGURATION               "VSOMEIP_CONFIGURATION"
15#define VSOMEIP_ENV_CONFIGURATION_MODULE        "VSOMEIP_CONFIGURATION_MODULE"
16#define VSOMEIP_ENV_E2E_PROTECTION_MODULE       "VSOMEIP_E2E_PROTECTION_MODULE"
17#define VSOMEIP_ENV_MANDATORY_CONFIGURATION_FILES "VSOMEIP_MANDATORY_CONFIGURATION_FILES"
18#define VSOMEIP_ENV_LOAD_PLUGINS                "VSOMEIP_LOAD_PLUGINS"
19#define VSOMEIP_ENV_CLIENTSIDELOGGING           "VSOMEIP_CLIENTSIDELOGGING"
20
21#define VSOMEIP_DEFAULT_CONFIGURATION_FILE      "@DEFAULT_CONFIGURATION_FILE@"
22#define VSOMEIP_LOCAL_CONFIGURATION_FILE        "./vsomeip.json"
23#define VSOMEIP_MANDATORY_CONFIGURATION_FILES   "vsomeip_std.json,vsomeip_app.json,vsomeip_plc.json,vsomeip_log.json,vsomeip_security.json,vsomeip_whitelist.json"
24
25#define VSOMEIP_DEFAULT_CONFIGURATION_FOLDER    "@DEFAULT_CONFIGURATION_FOLDER@"
26#define VSOMEIP_DEBUG_CONFIGURATION_FOLDER      "/var/opt/public/sin/vsomeip/"
27#define VSOMEIP_LOCAL_CONFIGURATION_FOLDER      "./vsomeip"
28
29#define VSOMEIP_BASE_PATH                       "@VSOMEIP_BASE_PATH@/"
30
31#ifdef _WIN32
32#define VSOMEIP_CFG_LIBRARY                      "vsomeip3-cfg.dll"
33#else
34#define VSOMEIP_CFG_LIBRARY                      "libvsomeip3-cfg.so.@VSOMEIP_MAJOR_VERSION@"
35#endif
36
37#ifdef _WIN32
38#define VSOMEIP_SD_LIBRARY                      "vsomeip3-sd.dll"
39#else
40#define VSOMEIP_SD_LIBRARY                      "libvsomeip3-sd.so.@VSOMEIP_MAJOR_VERSION@"
41#endif
42
43#ifdef _WIN32
44#define VSOMEIP_E2E_LIBRARY                      "vsomeip3-e2e.dll"
45#else
46#define VSOMEIP_E2E_LIBRARY                      "libvsomeip3-e2e.so.@VSOMEIP_MAJOR_VERSION@"
47#endif
48
49#define VSOMEIP_ROUTING_CLIENT                  0
50
51#define VSOMEIP_CLIENT_UNSET                    0xFFFF
52
53#ifdef _WIN32
54#define VSOMEIP_INTERNAL_BASE_PORT              51234
55#define __func__ __FUNCTION__
56#endif
57
58#define VSOMEIP_UNICAST_ADDRESS                 "@VSOMEIP_UNICAST_ADDRESS@"
59#define VSOMEIP_NETMASK                         "255.255.255.0"
60
61#define VSOMEIP_DEFAULT_CONNECT_TIMEOUT         100
62#define VSOMEIP_MAX_CONNECT_TIMEOUT             1600
63#define VSOMEIP_DEFAULT_FLUSH_TIMEOUT           1000
64
65#define VSOMEIP_DEFAULT_SHUTDOWN_TIMEOUT        5000
66
67#define VSOMEIP_DEFAULT_QUEUE_WARN_SIZE         102400
68
69#define VSOMEIP_MAX_TCP_CONNECT_TIME            5000
70#define VSOMEIP_MAX_TCP_RESTART_ABORTS          5
71#define VSOMEIP_MAX_TCP_SENT_WAIT_TIME          10000
72
73#define VSOMEIP_DEFAULT_BUFFER_SHRINK_THRESHOLD 5
74
75#define VSOMEIP_DEFAULT_WATCHDOG_TIMEOUT        5000
76#define VSOMEIP_DEFAULT_MAX_MISSING_PONGS       3
77
78#define VSOMEIP_DEFAULT_UDP_RCV_BUFFER_SIZE     1703936
79
80#define VSOMEIP_IO_THREAD_COUNT                 2
81#define VSOMEIP_IO_THREAD_NICE_LEVEL            255
82
83#define VSOMEIP_MAX_DISPATCHERS                 10
84#define VSOMEIP_MAX_DISPATCH_TIME               100
85
86#define VSOMEIP_REQUEST_DEBOUNCE_TIME           10
87#define VSOMEIP_DEFAULT_STATISTICS_MAX_MSG      50
88#define VSOMEIP_DEFAULT_STATISTICS_MIN_FREQ     50
89#define VSOMEIP_DEFAULT_STATISTICS_INTERVAL     10000
90
91#define VSOMEIP_DEFAULT_MAX_REMOTE_SUBSCRIBERS  3
92
93#define VSOMEIP_MAX_WAIT_SENT                   5
94
95#define VSOMEIP_COMMAND_HEADER_SIZE             7
96
97#define VSOMEIP_COMMAND_TYPE_POS                0
98#define VSOMEIP_COMMAND_CLIENT_POS              1
99#define VSOMEIP_COMMAND_SIZE_POS_MIN            3
100#define VSOMEIP_COMMAND_SIZE_POS_MAX            6
101#define VSOMEIP_COMMAND_PAYLOAD_POS             7
102
103#define VSOMEIP_ASSIGN_CLIENT                   0x00
104#define VSOMEIP_ASSIGN_CLIENT_ACK               0x01
105#define VSOMEIP_REGISTER_APPLICATION            0x02
106#define VSOMEIP_DEREGISTER_APPLICATION          0x03
107#define VSOMEIP_APPLICATION_LOST                0x04
108#define VSOMEIP_ROUTING_INFO                    0x05
109#define VSOMEIP_REGISTERED_ACK                  0x06
110
111#define VSOMEIP_PING                            0x0E
112#define VSOMEIP_PONG                            0x0F
113
114#define VSOMEIP_OFFER_SERVICE                   0x10
115#define VSOMEIP_STOP_OFFER_SERVICE              0x11
116#define VSOMEIP_SUBSCRIBE                       0x12
117#define VSOMEIP_UNSUBSCRIBE                     0x13
118#define VSOMEIP_REQUEST_SERVICE                 0x14
119#define VSOMEIP_RELEASE_SERVICE                 0x15
120#define VSOMEIP_SUBSCRIBE_NACK                  0x16
121#define VSOMEIP_SUBSCRIBE_ACK                   0x17
122
123#define VSOMEIP_SEND                            0x18
124#define VSOMEIP_NOTIFY                          0x19
125#define VSOMEIP_NOTIFY_ONE                      0x1A
126
127#define VSOMEIP_REGISTER_EVENT                  0x1B
128#define VSOMEIP_UNREGISTER_EVENT                0x1C
129#define VSOMEIP_ID_RESPONSE                     0x1D
130#define VSOMEIP_ID_REQUEST                      0x1E
131#define VSOMEIP_OFFERED_SERVICES_REQUEST        0x1F
132#define VSOMEIP_OFFERED_SERVICES_RESPONSE       0x20
133#define VSOMEIP_UNSUBSCRIBE_ACK                 0x21
134#define VSOMEIP_RESEND_PROVIDED_EVENTS          0x22
135
136#define VSOMEIP_UPDATE_SECURITY_POLICY          0x23
137#define VSOMEIP_UPDATE_SECURITY_POLICY_RESPONSE 0x24
138#define VSOMEIP_REMOVE_SECURITY_POLICY          0x25
139#define VSOMEIP_REMOVE_SECURITY_POLICY_RESPONSE 0x26
140#define VSOMEIP_UPDATE_SECURITY_CREDENTIALS     0x27
141#define VSOMEIP_DISTRIBUTE_SECURITY_POLICIES    0x28
142#define VSOMEIP_UPDATE_SECURITY_POLICY_INT      0x29
143#define VSOMEIP_EXPIRED_SUBSCRIPTION            0x2A
144
145#define VSOMEIP_SUSPEND                         0x30
146
147#define VSOMEIP_SEND_COMMAND_SIZE               13
148#define VSOMEIP_SEND_COMMAND_INSTANCE_POS_MIN   7
149#define VSOMEIP_SEND_COMMAND_INSTANCE_POS_MAX   8
150#define VSOMEIP_SEND_COMMAND_RELIABLE_POS       9
151#define VSOMEIP_SEND_COMMAND_CHECK_STATUS_POS   10
152#define VSOMEIP_SEND_COMMAND_DST_CLIENT_POS_MIN 11
153#define VSOMEIP_SEND_COMMAND_DST_CLIENT_POS_MAX 12
154#define VSOMEIP_SEND_COMMAND_PAYLOAD_POS        13
155
156#define VSOMEIP_ASSIGN_CLIENT_ACK_COMMAND_SIZE  9
157#define VSOMEIP_OFFER_SERVICE_COMMAND_SIZE      16
158#define VSOMEIP_REQUEST_SERVICE_COMMAND_SIZE    16
159#define VSOMEIP_RELEASE_SERVICE_COMMAND_SIZE    11
160#define VSOMEIP_STOP_OFFER_SERVICE_COMMAND_SIZE 16
161#define VSOMEIP_SUBSCRIBE_COMMAND_SIZE          18
162#define VSOMEIP_SUBSCRIBE_ACK_COMMAND_SIZE      19
163#define VSOMEIP_SUBSCRIBE_NACK_COMMAND_SIZE     19
164#define VSOMEIP_UNSUBSCRIBE_COMMAND_SIZE        17
165#define VSOMEIP_UNSUBSCRIBE_ACK_COMMAND_SIZE    15
166#define VSOMEIP_REGISTER_EVENT_COMMAND_SIZE     16
167#define VSOMEIP_UNREGISTER_EVENT_COMMAND_SIZE   14
168#define VSOMEIP_OFFERED_SERVICES_COMMAND_SIZE    8
169#define VSOMEIP_RESEND_PROVIDED_EVENTS_COMMAND_SIZE 11
170#define VSOMEIP_REMOVE_SECURITY_POLICY_COMMAND_SIZE 19
171#define VSOMEIP_UPDATE_SECURITY_POLICY_RESPONSE_COMMAND_SIZE 11
172#define VSOMEIP_REMOVE_SECURITY_POLICY_RESPONSE_COMMAND_SIZE 11
173#define VSOMEIP_PING_COMMAND_SIZE                7
174#define VSOMEIP_PONG_COMMAND_SIZE                7
175#define VSOMEIP_REGISTER_APPLICATION_COMMAND_SIZE 7
176#define VSOMEIP_DEREGISTER_APPLICATION_COMMAND_SIZE 7
177#define VSOMEIP_REGISTERED_ACK_COMMAND_SIZE      7
178#define VSOMEIP_EXPIRED_SUBSCRIPTION_COMMAND_SIZE 17
179
180
181#ifndef _WIN32
182#include <pthread.h>
183#endif
184
185#define VSOMEIP_DATA_ID                         0x677D
186#define VSOMEIP_DIAGNOSIS_ADDRESS               @VSOMEIP_DIAGNOSIS_ADDRESS@
187
188#define VSOMEIP_DEFAULT_SHM_PERMISSION          0666
189#define VSOMEIP_DEFAULT_UDS_PERMISSIONS         0666
190
191#define VSOMEIP_ROUTING_READY_MESSAGE           "@VSOMEIP_ROUTING_READY_MESSAGE@"
192
193namespace vsomeip_v3 {
194
195typedef enum {
196    RIE_ADD_CLIENT = 0x0,
197    RIE_ADD_SERVICE_INSTANCE = 0x1,
198    RIE_DEL_SERVICE_INSTANCE = 0x2,
199    RIE_DEL_CLIENT = 0x3,
200} routing_info_entry_e;
201
202struct service_data_t {
203    service_t service_;
204    instance_t instance_;
205    major_version_t major_;
206    minor_version_t minor_;
207
208    bool operator<(const service_data_t &_other) const {
209        return (service_ < _other.service_
210                || (service_ == _other.service_
211                    && instance_ < _other.instance_));
212    }
213};
214
215typedef enum {
216    SUBSCRIPTION_ACKNOWLEDGED,
217    SUBSCRIPTION_NOT_ACKNOWLEDGED,
218    IS_SUBSCRIBING
219} subscription_state_e;
220
221const std::uint32_t MESSAGE_SIZE_UNLIMITED = (std::numeric_limits<std::uint32_t>::max)();
222
223const std::uint32_t QUEUE_SIZE_UNLIMITED = (std::numeric_limits<std::uint32_t>::max)();
224
225#define VSOMEIP_DEFAULT_NPDU_DEBOUNCING_NANO         2 * 1000 * 1000
226#define VSOMEIP_DEFAULT_NPDU_MAXIMUM_RETENTION_NANO  5 * 1000 * 1000
227
228const std::uint32_t MAX_RECONNECTS_UNLIMITED = (std::numeric_limits<std::uint32_t>::max)();
229
230const std::uint32_t ANY_UID = 0xFFFFFFFF;
231const std::uint32_t ANY_GID = 0xFFFFFFFF;
232
233typedef std::pair<std::uint32_t, std::uint32_t> credentials_t;
234
235enum class port_type_e {
236    PT_OPTIONAL,
237    PT_SECURE,
238    PT_UNSECURE,
239    PT_UNKNOWN
240};
241
242typedef uint8_t partition_id_t;
243const partition_id_t VSOMEIP_DEFAULT_PARTITION_ID = 0;
244
245} // namespace vsomeip_v3
246
247#endif // VSOMEIP_V3_INTERNAL_HPP_
248