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      "/etc/vsomeip.json"
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    "/etc/vsomeip"
26 #define VSOMEIP_DEBUG_CONFIGURATION_FOLDER      "/var/opt/public/sin/vsomeip/"
27 #define VSOMEIP_LOCAL_CONFIGURATION_FOLDER      "./vsomeip"
28 
29 #define VSOMEIP_BASE_PATH                       "/tmp/"
30 
31 #ifdef _WIN32
32 #define VSOMEIP_CFG_LIBRARY                      "vsomeip3-cfg.dll"
33 #else
34 #define VSOMEIP_CFG_LIBRARY                      "libvsomeip3-cfg.so"
35 #endif
36 
37 #ifdef _WIN32
38 #define VSOMEIP_SD_LIBRARY                      "vsomeip3-sd.dll"
39 #else
40 #define VSOMEIP_SD_LIBRARY                      "libvsomeip3-sd.so"
41 #endif
42 
43 #ifdef _WIN32
44 #define VSOMEIP_E2E_LIBRARY                      "vsomeip3-e2e.dll"
45 #else
46 #define VSOMEIP_E2E_LIBRARY                      "libvsomeip3-e2e.so"
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                 "127.0.0.1"
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               0x01
187 
188 #define VSOMEIP_DEFAULT_SHM_PERMISSION          0666
189 #define VSOMEIP_DEFAULT_UDS_PERMISSIONS         0666
190 
191 #define VSOMEIP_ROUTING_READY_MESSAGE           "SOME/IP routing ready."
192 
193 namespace vsomeip_v3 {
194 
195 typedef 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 
202 struct service_data_t {
203     service_t service_;
204     instance_t instance_;
205     major_version_t major_;
206     minor_version_t minor_;
207 
operator <vsomeip_v3::service_data_t208     bool operator<(const service_data_t &_other) const {
209         return (service_ < _other.service_
210                 || (service_ == _other.service_
211                     && instance_ < _other.instance_));
212     }
213 };
214 
215 typedef enum {
216     SUBSCRIPTION_ACKNOWLEDGED,
217     SUBSCRIPTION_NOT_ACKNOWLEDGED,
218     IS_SUBSCRIBING
219 } subscription_state_e;
220 
221 const std::uint32_t MESSAGE_SIZE_UNLIMITED = (std::numeric_limits<std::uint32_t>::max)();
222 
223 const 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 
228 const std::uint32_t MAX_RECONNECTS_UNLIMITED = (std::numeric_limits<std::uint32_t>::max)();
229 
230 const std::uint32_t ANY_UID = 0xFFFFFFFF;
231 const std::uint32_t ANY_GID = 0xFFFFFFFF;
232 
233 typedef std::pair<std::uint32_t, std::uint32_t> credentials_t;
234 
235 enum class port_type_e {
236     PT_OPTIONAL,
237     PT_SECURE,
238     PT_UNSECURE,
239     PT_UNKNOWN
240 };
241 
242 typedef uint8_t partition_id_t;
243 const partition_id_t VSOMEIP_DEFAULT_PARTITION_ID = 0;
244 
245 } // namespace vsomeip_v3
246 
247 #endif // VSOMEIP_V3_INTERNAL_HPP_
248