1 /*
2 * Copyright (c) 2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include <securec.h>
17 #include <stdbool.h>
18
19 #include "comm_log.h"
20 #include "softbus_common.h"
21 #include "softbus_errcode.h"
22 #include "softbus_config_adapter.h"
23 #include "softbus_feature_config.h"
24
25 #define MAX_STORAGE_PATH_LEN 256
26 #define MAX_NET_IF_NAME_LEN 256
27
28 #define MAX_BYTES_LENGTH 4194304
29 #define MAX_MESSAGE_LENGTH 4096
30
31 #ifdef SOFTBUS_LINUX
32 #define CONN_BR_MAX_DATA_LENGTH (40 * 1000)
33 #define CONN_COC_MAX_DATA_LENGTH (40 * 1000)
34 #define CONN_BLE_CLOSE_DELAY (10 * 1000)
35 #else
36 #define CONN_BR_MAX_DATA_LENGTH 4096
37 #define CONN_COC_MAX_DATA_LENGTH 4096
38 #define CONN_BLE_CLOSE_DELAY (30 * 1000)
39 #endif
40
41 #define CONN_RFCOM_SEND_MAX_LEN 990
42 #define CONN_COC_SEND_MTU_LEN 990
43 /* 4KB + INDEX + IV_HEAD + PACKET_HEAD + SLICE_HEAD + CHANNEL_HEAD */
44 #define CONN_TCP_MAX_LENGTH (4096 + 12 + 28 + 16 + 16)
45 #define CONN_BR_RECEIVE_MAX_LEN 500
46 #define CONN_TCP_MAX_CONN_NUM 30
47 #define CONN_TCP_TIME_OUT 100
48 #define MAX_NODE_STATE_CB_CNT 10
49 #define MAX_LNN_CONNECTION_CNT 30
50 #define LNN_SUPPORT_CAPBILITY 62
51 #define LNN_SUPPORT_FEATURE 0xF7CA
52 #define AUTH_ABILITY_COLLECTION 0
53 #define ADAPTER_LOG_LEVEL 0
54 #ifndef DEFAULT_STORAGE_PATH
55 #define DEFAULT_STORAGE_PATH "/data/service/el1/public"
56 #endif
57 #define LNN_UDID_INIT_DELAY_LEN 1000
58 #define LNN_NET_IF_NAME "0:eth0,1:wlan0,2:br0,3:ble0"
59 #define LNN_MAX_CONCURENT_NUM 2
60 #define DEFAULT_DISC_FREQ_LOW ((5 << 16) | 12)
61 #define DEFAULT_DISC_FREQ_MID ((5 << 16) | 24)
62 #define DEFAULT_DISC_FREQ_HIGH ((5 << 16) | 36)
63 #define DEFAULT_DISC_FREQ_SUPER_HIGH ((10 << 16) | 48)
64
65 #ifdef SOFTBUS_LINUX
66 #define DEFAULT_NEW_BYTES_LEN (4 * 1024 * 1024)
67 #define DEFAULT_NEW_MESSAGE_LEN (4 * 1024)
68 #define DEFAULT_MAX_BYTES_LEN (4 * 1024 * 1024)
69 #define DEFAULT_MAX_MESSAGE_LEN (4 * 1024)
70 #define DEFAULT_AUTH_MAX_BYTES_LEN (40000 - 32)
71 #define DEFAULT_AUTH_MAX_MESSAGE_LEN (4 * 1024)
72 #define DEFAULT_PROXY_MAX_BYTES_LEN (4 * 1024 * 1024)
73 #define DEFAULT_PROXY_MAX_MESSAGE_LEN (1 * 1024)
74 #define DEFAULT_IS_SUPPORT_TCP_PROXY 1
75 #define DEFAULT_BLE_MAC_AUTO_REFRESH 1
76 #elif defined SOFTBUS_LITEOS_A
77 #define DEFAULT_NEW_BYTES_LEN (1 * 1024 * 1024)
78 #define DEFAULT_NEW_MESSAGE_LEN (4 * 1024)
79 #define DEFAULT_MAX_BYTES_LEN (1 * 1024 * 1024)
80 #define DEFAULT_MAX_MESSAGE_LEN (4 * 1024)
81 #define DEFAULT_AUTH_MAX_BYTES_LEN (4 * 1024)
82 #define DEFAULT_AUTH_MAX_MESSAGE_LEN (1 * 1024)
83 #define DEFAULT_PROXY_MAX_BYTES_LEN (4 * 1024)
84 #define DEFAULT_PROXY_MAX_MESSAGE_LEN (1 * 1024)
85 #define DEFAULT_IS_SUPPORT_TCP_PROXY 1
86 #define DEFAULT_BLE_MAC_AUTO_REFRESH 1
87 #else
88 #define DEFAULT_NEW_BYTES_LEN (4 * 1024)
89 #define DEFAULT_NEW_MESSAGE_LEN (4 * 1024)
90 #define DEFAULT_MAX_BYTES_LEN (2 * 1024)
91 #define DEFAULT_MAX_MESSAGE_LEN (1 * 1024)
92 #define DEFAULT_AUTH_MAX_BYTES_LEN (2 * 1024)
93 #define DEFAULT_AUTH_MAX_MESSAGE_LEN (1 * 1024)
94 #define DEFAULT_PROXY_MAX_BYTES_LEN (2 * 1024)
95 #define DEFAULT_PROXY_MAX_MESSAGE_LEN (1 * 1024)
96 #define DEFAULT_IS_SUPPORT_TCP_PROXY 1
97 #define DEFAULT_BLE_MAC_AUTO_REFRESH 0
98 #endif
99
100 typedef struct {
101 int32_t authAbilityConn;
102 int32_t connBrMaxDataLen;
103 int32_t connRfcomSendMaxLen;
104 int32_t connBrRecvMaxLen;
105 int32_t connTcpMaxLen;
106 int32_t connTcpMaxConnNum;
107 int32_t connTcpTimeOut;
108 int32_t maxNodeStateCbCnt;
109 int32_t maxLnnConnCnt;
110 int32_t maxLnnSupportCap;
111 int32_t adapterLogLevel;
112 char storageDir[MAX_STORAGE_PATH_LEN];
113 int32_t lnnUdidInitDelayLen;
114 char lnnNetIfName[MAX_NET_IF_NAME_LEN];
115 int32_t lnnMaxConcurentNum;
116 bool lnnAutoNetworkingSwitch;
117 bool isSupportTopo;
118 uint64_t supportFeature;
119 int32_t connCocMaxDataLen;
120 int32_t connCocSendMtu;
121 int32_t connBleCloseDelayTime;
122 int32_t bleMacAutoRefreshSwitch;
123 } ConfigItem;
124
125 typedef struct {
126 ConfigType type;
127 unsigned char *val;
128 uint32_t len;
129 } ConfigVal;
130
131 ConfigItem g_config = {
132 AUTH_ABILITY_COLLECTION,
133 CONN_BR_MAX_DATA_LENGTH,
134 CONN_RFCOM_SEND_MAX_LEN,
135 CONN_BR_RECEIVE_MAX_LEN,
136 CONN_TCP_MAX_LENGTH,
137 CONN_TCP_MAX_CONN_NUM,
138 CONN_TCP_TIME_OUT,
139 MAX_NODE_STATE_CB_CNT,
140 MAX_LNN_CONNECTION_CNT,
141 LNN_SUPPORT_CAPBILITY,
142 ADAPTER_LOG_LEVEL,
143 DEFAULT_STORAGE_PATH,
144 LNN_UDID_INIT_DELAY_LEN,
145 LNN_NET_IF_NAME,
146 LNN_MAX_CONCURENT_NUM,
147 true,
148 true,
149 LNN_SUPPORT_FEATURE,
150 CONN_COC_MAX_DATA_LENGTH,
151 CONN_COC_SEND_MTU_LEN,
152 CONN_BLE_CLOSE_DELAY,
153 DEFAULT_BLE_MAC_AUTO_REFRESH,
154 };
155
156 typedef struct {
157 int32_t isSupportTcpProxy;
158 int32_t maxBytesNewLen;
159 int32_t maxMessageNewLen;
160 int32_t maxBytesLen;
161 int32_t maxMessageLen;
162 int32_t maxAuthBytesLen;
163 int32_t maxAuthMessageLen;
164 uint32_t maxProxyBytesLen;
165 uint32_t maxProxyMessageLen;
166 } TransConfigItem;
167
168 static TransConfigItem g_tranConfig = {0};
169
170 typedef struct {
171 uint32_t discFreq[FREQ_BUTT];
172 } DiscConfigItem;
173
174 static DiscConfigItem g_discConfig = {
175 .discFreq = {
176 DEFAULT_DISC_FREQ_LOW,
177 DEFAULT_DISC_FREQ_MID,
178 DEFAULT_DISC_FREQ_HIGH,
179 DEFAULT_DISC_FREQ_SUPER_HIGH,
180 },
181 };
182
183 ConfigVal g_configItems[SOFTBUS_CONFIG_TYPE_MAX] = {
184 {
185 SOFTBUS_INT_MAX_BYTES_NEW_LENGTH,
186 (unsigned char *)&(g_tranConfig.maxBytesNewLen),
187 sizeof(g_tranConfig.maxBytesNewLen)
188 },
189 {
190 SOFTBUS_INT_MAX_MESSAGE_NEW_LENGTH,
191 (unsigned char *)&(g_tranConfig.maxMessageNewLen),
192 sizeof(g_tranConfig.maxMessageNewLen)
193 },
194 {
195 SOFTBUS_INT_MAX_BYTES_LENGTH,
196 (unsigned char *)&(g_tranConfig.maxBytesLen),
197 sizeof(g_tranConfig.maxBytesLen)
198 },
199 {
200 SOFTBUS_INT_MAX_MESSAGE_LENGTH,
201 (unsigned char *)&(g_tranConfig.maxMessageLen),
202 sizeof(g_tranConfig.maxMessageLen)
203 },
204 {
205 SOFTBUS_INT_CONN_BR_MAX_DATA_LENGTH,
206 (unsigned char *)&(g_config.connBrMaxDataLen),
207 sizeof(g_config.connBrMaxDataLen)
208 },
209 {
210 SOFTBUS_INT_CONN_RFCOM_SEND_MAX_LEN,
211 (unsigned char *)&(g_config.connRfcomSendMaxLen),
212 sizeof(g_config.connRfcomSendMaxLen)
213 },
214 {
215 SOFTBUS_INT_CONN_BR_RECEIVE_MAX_LEN,
216 (unsigned char *)&(g_config.connBrRecvMaxLen),
217 sizeof(g_config.connBrRecvMaxLen)
218 },
219 {
220 SOFTBUS_INT_CONN_TCP_MAX_LENGTH,
221 (unsigned char *)&(g_config.connTcpMaxLen),
222 sizeof(g_config.connTcpMaxLen)
223 },
224 {
225 SOFTBUS_INT_CONN_TCP_MAX_CONN_NUM,
226 (unsigned char *)&(g_config.connTcpMaxConnNum),
227 sizeof(g_config.connTcpMaxConnNum)
228 },
229 {
230 SOFTBUS_INT_CONN_TCP_TIME_OUT,
231 (unsigned char *)&(g_config.connTcpTimeOut),
232 sizeof(g_config.connTcpTimeOut)
233 },
234 {
235 SOFTBUS_INT_MAX_NODE_STATE_CB_CNT,
236 (unsigned char *)&(g_config.maxNodeStateCbCnt),
237 sizeof(g_config.maxNodeStateCbCnt)
238 },
239 {
240 SOFTBUS_INT_MAX_LNN_CONNECTION_CNT,
241 (unsigned char *)&(g_config.maxLnnConnCnt),
242 sizeof(g_config.maxLnnConnCnt)
243 },
244 {
245 SOFTBUS_INT_LNN_SUPPORT_CAPABILITY,
246 (unsigned char *)&(g_config.maxLnnSupportCap),
247 sizeof(g_config.maxLnnSupportCap)
248 },
249 {
250 SOFTBUS_INT_AUTH_ABILITY_COLLECTION,
251 (unsigned char *)&(g_config.authAbilityConn),
252 sizeof(g_config.authAbilityConn)
253 },
254 {
255 SOFTBUS_INT_ADAPTER_LOG_LEVEL,
256 (unsigned char *)&(g_config.adapterLogLevel),
257 sizeof(g_config.adapterLogLevel)
258 },
259 {
260 SOFTBUS_STR_STORAGE_DIRECTORY,
261 (unsigned char *)(g_config.storageDir),
262 sizeof(g_config.storageDir)
263 },
264 {
265 SOFTBUS_INT_SUPPORT_TCP_PROXY,
266 (unsigned char *)&(g_tranConfig.isSupportTcpProxy),
267 sizeof(g_tranConfig.isSupportTcpProxy)
268 },
269 {
270 SOFTBUS_INT_LNN_UDID_INIT_DELAY_LEN,
271 (unsigned char *)&(g_config.lnnUdidInitDelayLen),
272 sizeof(g_config.lnnUdidInitDelayLen)
273 },
274 {
275 SOFTBUS_STR_LNN_NET_IF_NAME,
276 (unsigned char *)&(g_config.lnnNetIfName),
277 sizeof(g_config.lnnNetIfName)
278 },
279 {
280 SOFTBUS_INT_LNN_MAX_CONCURRENT_NUM,
281 (unsigned char *)&(g_config.lnnMaxConcurentNum),
282 sizeof(g_config.lnnMaxConcurentNum)
283 },
284 {
285 SOFTBUS_INT_AUTH_MAX_BYTES_LENGTH,
286 (unsigned char *)&(g_tranConfig.maxAuthBytesLen),
287 sizeof(g_tranConfig.maxAuthBytesLen)
288 },
289 {
290 SOFTBUS_INT_AUTH_MAX_MESSAGE_LENGTH,
291 (unsigned char *)&(g_tranConfig.maxAuthMessageLen),
292 sizeof(g_tranConfig.maxAuthMessageLen)
293 },
294 {
295 SOFTBUS_INT_AUTO_NETWORKING_SWITCH,
296 (unsigned char *)&(g_config.lnnAutoNetworkingSwitch),
297 sizeof(g_config.lnnAutoNetworkingSwitch)
298 },
299 {
300 SOFTBUS_BOOL_SUPPORT_TOPO,
301 (unsigned char *)&(g_config.isSupportTopo),
302 sizeof(g_config.isSupportTopo)
303 },
304 {
305 SOFTBUS_INT_DISC_FREQ,
306 (unsigned char *)(g_discConfig.discFreq),
307 sizeof(g_discConfig.discFreq)
308 },
309 {
310 SOFTBUS_INT_PROXY_MAX_BYTES_LENGTH,
311 (unsigned char *)&(g_tranConfig.maxProxyBytesLen),
312 sizeof(g_tranConfig.maxProxyBytesLen)
313 },
314 {
315 SOFTBUS_INT_PROXY_MAX_MESSAGE_LENGTH,
316 (unsigned char *)&(g_tranConfig.maxProxyMessageLen),
317 sizeof(g_tranConfig.maxProxyMessageLen)
318 },
319 {
320 SOFTBUS_INT_LNN_SUPPORT_FEATURE,
321 (unsigned char *)&(g_config.supportFeature),
322 sizeof(g_config.supportFeature)
323 },
324 {
325 SOFTBUS_INT_CONN_COC_MAX_DATA_LENGTH,
326 (unsigned char *)&(g_config.connCocMaxDataLen),
327 sizeof(g_config.connCocMaxDataLen)
328 },
329 {
330 SOFTBUS_INT_CONN_COC_SEND_MTU,
331 (unsigned char *)&(g_config.connCocSendMtu),
332 sizeof(g_config.connCocSendMtu)
333 },
334 {
335 SOFTBUS_INT_CONN_BLE_CLOSE_DELAY_TIME,
336 (unsigned char *)&(g_config.connBleCloseDelayTime),
337 sizeof(g_config.connBleCloseDelayTime)
338 },
339 {
340 SOFTBUS_INT_BLE_MAC_AUTO_REFRESH_SWITCH,
341 (unsigned char *)&(g_config.bleMacAutoRefreshSwitch),
342 sizeof(g_config.bleMacAutoRefreshSwitch)
343 },
344 };
345
SoftbusSetConfig(ConfigType type,const unsigned char * val,uint32_t len)346 int SoftbusSetConfig(ConfigType type, const unsigned char *val, uint32_t len)
347 {
348 if ((type >= SOFTBUS_CONFIG_TYPE_MAX) || (val == NULL) ||
349 (len > g_configItems[type].len) || (type != g_configItems[type].type)) {
350 COMM_LOGW(COMM_DFX, "invalid param");
351 return SOFTBUS_ERR;
352 }
353 if (memcpy_s(g_configItems[type].val, g_configItems[type].len, val, len) != EOK) {
354 COMM_LOGW(COMM_DFX, "memcpy_s fail");
355 return SOFTBUS_ERR;
356 }
357 return SOFTBUS_OK;
358 }
359
SoftbusGetConfig(ConfigType type,unsigned char * val,uint32_t len)360 int SoftbusGetConfig(ConfigType type, unsigned char *val, uint32_t len)
361 {
362 if ((type >= SOFTBUS_CONFIG_TYPE_MAX) || (val == NULL) ||
363 (len != g_configItems[type].len) || (type != g_configItems[type].type)) {
364 COMM_LOGW(COMM_DFX, "invalid param");
365 return SOFTBUS_ERR;
366 }
367 if (memcpy_s((void*)val, len, g_configItems[type].val, g_configItems[type].len) != EOK) {
368 COMM_LOGW(COMM_DFX, "memcpy_s fail");
369 return SOFTBUS_ERR;
370 }
371 return SOFTBUS_OK;
372 }
373
SoftbusConfigSetTransDefaultVal(void)374 static void SoftbusConfigSetTransDefaultVal(void)
375 {
376 g_tranConfig.isSupportTcpProxy = DEFAULT_IS_SUPPORT_TCP_PROXY;
377 g_tranConfig.maxBytesNewLen = DEFAULT_NEW_BYTES_LEN;
378 g_tranConfig.maxMessageNewLen = DEFAULT_NEW_MESSAGE_LEN;
379 g_tranConfig.maxBytesLen = DEFAULT_MAX_BYTES_LEN;
380 g_tranConfig.maxMessageLen = DEFAULT_MAX_MESSAGE_LEN;
381 g_tranConfig.maxAuthBytesLen = DEFAULT_AUTH_MAX_BYTES_LEN;
382 g_tranConfig.maxAuthMessageLen = DEFAULT_AUTH_MAX_MESSAGE_LEN;
383 g_tranConfig.maxProxyBytesLen = DEFAULT_PROXY_MAX_BYTES_LEN;
384 g_tranConfig.maxProxyMessageLen = DEFAULT_PROXY_MAX_MESSAGE_LEN;
385 }
386
SoftbusConfigSetDefaultVal(void)387 static void SoftbusConfigSetDefaultVal(void)
388 {
389 SoftbusConfigSetTransDefaultVal();
390 }
391
SoftbusConfigInit(void)392 void SoftbusConfigInit(void)
393 {
394 ConfigSetProc sets;
395 SoftbusConfigSetDefaultVal();
396 sets.SetConfig = &SoftbusSetConfig;
397 SoftbusConfigAdapterInit(&sets);
398 }