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