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 0x177C2
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 1500
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 #define DEFAULT_DISC_FREQ_EXTREME_HIGH ((10 << 16) | 48)
65 #define DEFAULT_DISC_COAP_MAX_DEVICE_NUM 20
66
67 #ifdef SOFTBUS_LINUX
68 #define DEFAULT_NEW_BYTES_LEN (4 * 1024 * 1024)
69 #define DEFAULT_NEW_MESSAGE_LEN (4 * 1024)
70 #define DEFAULT_MAX_BYTES_LEN (4 * 1024 * 1024)
71 #define DEFAULT_MAX_MESSAGE_LEN (4 * 1024)
72 #define DEFAULT_AUTH_MAX_BYTES_LEN (40000 - 32)
73 #define DEFAULT_AUTH_MAX_MESSAGE_LEN (4 * 1024)
74 #define DEFAULT_PROXY_MAX_BYTES_LEN (4 * 1024 * 1024)
75 #define DEFAULT_PROXY_MAX_MESSAGE_LEN (1 * 1024)
76 #define DEFAULT_IS_SUPPORT_TCP_PROXY 1
77 #define DEFAULT_BLE_MAC_AUTO_REFRESH 1
78 #elif defined SOFTBUS_LITEOS_A
79 #define DEFAULT_NEW_BYTES_LEN (1 * 1024 * 1024)
80 #define DEFAULT_NEW_MESSAGE_LEN (4 * 1024)
81 #define DEFAULT_MAX_BYTES_LEN (1 * 1024 * 1024)
82 #define DEFAULT_MAX_MESSAGE_LEN (4 * 1024)
83 #define DEFAULT_AUTH_MAX_BYTES_LEN (4 * 1024)
84 #define DEFAULT_AUTH_MAX_MESSAGE_LEN (1 * 1024)
85 #define DEFAULT_PROXY_MAX_BYTES_LEN (4 * 1024)
86 #define DEFAULT_PROXY_MAX_MESSAGE_LEN (1 * 1024)
87 #define DEFAULT_IS_SUPPORT_TCP_PROXY 1
88 #define DEFAULT_BLE_MAC_AUTO_REFRESH 1
89 #else
90 #define DEFAULT_NEW_BYTES_LEN (4 * 1024)
91 #define DEFAULT_NEW_MESSAGE_LEN (4 * 1024)
92 #define DEFAULT_MAX_BYTES_LEN (2 * 1024)
93 #define DEFAULT_MAX_MESSAGE_LEN (1 * 1024)
94 #define DEFAULT_AUTH_MAX_BYTES_LEN (2 * 1024)
95 #define DEFAULT_AUTH_MAX_MESSAGE_LEN (1 * 1024)
96 #define DEFAULT_PROXY_MAX_BYTES_LEN (2 * 1024)
97 #define DEFAULT_PROXY_MAX_MESSAGE_LEN (1 * 1024)
98 #define DEFAULT_IS_SUPPORT_TCP_PROXY 1
99 #define DEFAULT_BLE_MAC_AUTO_REFRESH 0
100 #endif
101
102 typedef struct {
103 int32_t authAbilityConn;
104 int32_t connBrMaxDataLen;
105 int32_t connRfcomSendMaxLen;
106 int32_t connBrRecvMaxLen;
107 int32_t connTcpMaxLen;
108 int32_t connTcpMaxConnNum;
109 int32_t connTcpTimeOut;
110 int32_t maxNodeStateCbCnt;
111 int32_t maxLnnConnCnt;
112 int32_t maxLnnSupportCap;
113 int32_t adapterLogLevel;
114 char storageDir[MAX_STORAGE_PATH_LEN];
115 int32_t lnnUdidInitDelayLen;
116 char lnnNetIfName[MAX_NET_IF_NAME_LEN];
117 int32_t lnnMaxConcurentNum;
118 bool lnnAutoNetworkingSwitch;
119 bool isSupportTopo;
120 uint64_t supportFeature;
121 int32_t connCocMaxDataLen;
122 int32_t connCocSendMtu;
123 int32_t connBleCloseDelayTime;
124 int32_t bleMacAutoRefreshSwitch;
125 } ConfigItem;
126
127 typedef struct {
128 ConfigType type;
129 unsigned char *val;
130 uint32_t len;
131 } ConfigVal;
132
133 ConfigItem g_config = {
134 AUTH_ABILITY_COLLECTION,
135 CONN_BR_MAX_DATA_LENGTH,
136 CONN_RFCOM_SEND_MAX_LEN,
137 CONN_BR_RECEIVE_MAX_LEN,
138 CONN_TCP_MAX_LENGTH,
139 CONN_TCP_MAX_CONN_NUM,
140 CONN_TCP_TIME_OUT,
141 MAX_NODE_STATE_CB_CNT,
142 MAX_LNN_CONNECTION_CNT,
143 LNN_SUPPORT_CAPBILITY,
144 ADAPTER_LOG_LEVEL,
145 DEFAULT_STORAGE_PATH,
146 LNN_UDID_INIT_DELAY_LEN,
147 LNN_NET_IF_NAME,
148 LNN_MAX_CONCURENT_NUM,
149 true,
150 true,
151 LNN_SUPPORT_FEATURE,
152 CONN_COC_MAX_DATA_LENGTH,
153 CONN_COC_SEND_MTU_LEN,
154 CONN_BLE_CLOSE_DELAY,
155 DEFAULT_BLE_MAC_AUTO_REFRESH,
156 };
157
158 typedef struct {
159 int32_t isSupportTcpProxy;
160 int32_t maxBytesNewLen;
161 int32_t maxMessageNewLen;
162 int32_t maxBytesLen;
163 int32_t maxMessageLen;
164 int32_t maxAuthBytesLen;
165 int32_t maxAuthMessageLen;
166 uint32_t maxProxyBytesLen;
167 uint32_t maxProxyMessageLen;
168 } TransConfigItem;
169
170 static TransConfigItem g_tranConfig = {0};
171
172 typedef struct {
173 uint32_t discFreq[FREQ_BUTT];
174 uint32_t discCoapMaxDeviceNum;
175 } DiscConfigItem;
176
177 static DiscConfigItem g_discConfig = {
178 .discFreq = {
179 DEFAULT_DISC_FREQ_LOW,
180 DEFAULT_DISC_FREQ_MID,
181 DEFAULT_DISC_FREQ_HIGH,
182 DEFAULT_DISC_FREQ_SUPER_HIGH,
183 DEFAULT_DISC_FREQ_EXTREME_HIGH,
184 },
185 .discCoapMaxDeviceNum = DEFAULT_DISC_COAP_MAX_DEVICE_NUM
186 };
187
188 ConfigVal g_configItems[SOFTBUS_CONFIG_TYPE_MAX] = {
189 {
190 SOFTBUS_INT_MAX_BYTES_NEW_LENGTH,
191 (unsigned char *)&(g_tranConfig.maxBytesNewLen),
192 sizeof(g_tranConfig.maxBytesNewLen)
193 },
194 {
195 SOFTBUS_INT_MAX_MESSAGE_NEW_LENGTH,
196 (unsigned char *)&(g_tranConfig.maxMessageNewLen),
197 sizeof(g_tranConfig.maxMessageNewLen)
198 },
199 {
200 SOFTBUS_INT_MAX_BYTES_LENGTH,
201 (unsigned char *)&(g_tranConfig.maxBytesLen),
202 sizeof(g_tranConfig.maxBytesLen)
203 },
204 {
205 SOFTBUS_INT_MAX_MESSAGE_LENGTH,
206 (unsigned char *)&(g_tranConfig.maxMessageLen),
207 sizeof(g_tranConfig.maxMessageLen)
208 },
209 {
210 SOFTBUS_INT_CONN_BR_MAX_DATA_LENGTH,
211 (unsigned char *)&(g_config.connBrMaxDataLen),
212 sizeof(g_config.connBrMaxDataLen)
213 },
214 {
215 SOFTBUS_INT_CONN_RFCOM_SEND_MAX_LEN,
216 (unsigned char *)&(g_config.connRfcomSendMaxLen),
217 sizeof(g_config.connRfcomSendMaxLen)
218 },
219 {
220 SOFTBUS_INT_CONN_BR_RECEIVE_MAX_LEN,
221 (unsigned char *)&(g_config.connBrRecvMaxLen),
222 sizeof(g_config.connBrRecvMaxLen)
223 },
224 {
225 SOFTBUS_INT_CONN_TCP_MAX_LENGTH,
226 (unsigned char *)&(g_config.connTcpMaxLen),
227 sizeof(g_config.connTcpMaxLen)
228 },
229 {
230 SOFTBUS_INT_CONN_TCP_MAX_CONN_NUM,
231 (unsigned char *)&(g_config.connTcpMaxConnNum),
232 sizeof(g_config.connTcpMaxConnNum)
233 },
234 {
235 SOFTBUS_INT_CONN_TCP_TIME_OUT,
236 (unsigned char *)&(g_config.connTcpTimeOut),
237 sizeof(g_config.connTcpTimeOut)
238 },
239 {
240 SOFTBUS_INT_MAX_NODE_STATE_CB_CNT,
241 (unsigned char *)&(g_config.maxNodeStateCbCnt),
242 sizeof(g_config.maxNodeStateCbCnt)
243 },
244 {
245 SOFTBUS_INT_MAX_LNN_CONNECTION_CNT,
246 (unsigned char *)&(g_config.maxLnnConnCnt),
247 sizeof(g_config.maxLnnConnCnt)
248 },
249 {
250 SOFTBUS_INT_LNN_SUPPORT_CAPABILITY,
251 (unsigned char *)&(g_config.maxLnnSupportCap),
252 sizeof(g_config.maxLnnSupportCap)
253 },
254 {
255 SOFTBUS_INT_AUTH_ABILITY_COLLECTION,
256 (unsigned char *)&(g_config.authAbilityConn),
257 sizeof(g_config.authAbilityConn)
258 },
259 {
260 SOFTBUS_INT_ADAPTER_LOG_LEVEL,
261 (unsigned char *)&(g_config.adapterLogLevel),
262 sizeof(g_config.adapterLogLevel)
263 },
264 {
265 SOFTBUS_STR_STORAGE_DIRECTORY,
266 (unsigned char *)(g_config.storageDir),
267 sizeof(g_config.storageDir)
268 },
269 {
270 SOFTBUS_INT_SUPPORT_TCP_PROXY,
271 (unsigned char *)&(g_tranConfig.isSupportTcpProxy),
272 sizeof(g_tranConfig.isSupportTcpProxy)
273 },
274 {
275 SOFTBUS_INT_LNN_UDID_INIT_DELAY_LEN,
276 (unsigned char *)&(g_config.lnnUdidInitDelayLen),
277 sizeof(g_config.lnnUdidInitDelayLen)
278 },
279 {
280 SOFTBUS_STR_LNN_NET_IF_NAME,
281 (unsigned char *)&(g_config.lnnNetIfName),
282 sizeof(g_config.lnnNetIfName)
283 },
284 {
285 SOFTBUS_INT_LNN_MAX_CONCURRENT_NUM,
286 (unsigned char *)&(g_config.lnnMaxConcurentNum),
287 sizeof(g_config.lnnMaxConcurentNum)
288 },
289 {
290 SOFTBUS_INT_AUTH_MAX_BYTES_LENGTH,
291 (unsigned char *)&(g_tranConfig.maxAuthBytesLen),
292 sizeof(g_tranConfig.maxAuthBytesLen)
293 },
294 {
295 SOFTBUS_INT_AUTH_MAX_MESSAGE_LENGTH,
296 (unsigned char *)&(g_tranConfig.maxAuthMessageLen),
297 sizeof(g_tranConfig.maxAuthMessageLen)
298 },
299 {
300 SOFTBUS_INT_AUTO_NETWORKING_SWITCH,
301 (unsigned char *)&(g_config.lnnAutoNetworkingSwitch),
302 sizeof(g_config.lnnAutoNetworkingSwitch)
303 },
304 {
305 SOFTBUS_BOOL_SUPPORT_TOPO,
306 (unsigned char *)&(g_config.isSupportTopo),
307 sizeof(g_config.isSupportTopo)
308 },
309 {
310 SOFTBUS_INT_DISC_FREQ,
311 (unsigned char *)(g_discConfig.discFreq),
312 sizeof(g_discConfig.discFreq)
313 },
314 {
315 SOFTBUS_INT_PROXY_MAX_BYTES_LENGTH,
316 (unsigned char *)&(g_tranConfig.maxProxyBytesLen),
317 sizeof(g_tranConfig.maxProxyBytesLen)
318 },
319 {
320 SOFTBUS_INT_PROXY_MAX_MESSAGE_LENGTH,
321 (unsigned char *)&(g_tranConfig.maxProxyMessageLen),
322 sizeof(g_tranConfig.maxProxyMessageLen)
323 },
324 {
325 SOFTBUS_INT_LNN_SUPPORT_FEATURE,
326 (unsigned char *)&(g_config.supportFeature),
327 sizeof(g_config.supportFeature)
328 },
329 {
330 SOFTBUS_INT_CONN_COC_MAX_DATA_LENGTH,
331 (unsigned char *)&(g_config.connCocMaxDataLen),
332 sizeof(g_config.connCocMaxDataLen)
333 },
334 {
335 SOFTBUS_INT_CONN_COC_SEND_MTU,
336 (unsigned char *)&(g_config.connCocSendMtu),
337 sizeof(g_config.connCocSendMtu)
338 },
339 {
340 SOFTBUS_INT_CONN_BLE_CLOSE_DELAY_TIME,
341 (unsigned char *)&(g_config.connBleCloseDelayTime),
342 sizeof(g_config.connBleCloseDelayTime)
343 },
344 {
345 SOFTBUS_INT_BLE_MAC_AUTO_REFRESH_SWITCH,
346 (unsigned char *)&(g_config.bleMacAutoRefreshSwitch),
347 sizeof(g_config.bleMacAutoRefreshSwitch)
348 },
349 {
350 SOFTBUS_INT_DISC_COAP_MAX_DEVICE_NUM,
351 (unsigned char *)&(g_discConfig.discCoapMaxDeviceNum),
352 sizeof(g_discConfig.discCoapMaxDeviceNum)
353 },
354 };
355
SoftbusSetConfig(ConfigType type,const unsigned char * val,uint32_t len)356 int SoftbusSetConfig(ConfigType type, const unsigned char *val, uint32_t len)
357 {
358 if ((type >= SOFTBUS_CONFIG_TYPE_MAX) || (val == NULL) ||
359 (len > g_configItems[type].len) || (type != g_configItems[type].type)) {
360 COMM_LOGW(COMM_DFX, "invalid param");
361 return SOFTBUS_INVALID_PARAM;
362 }
363 if (memcpy_s(g_configItems[type].val, g_configItems[type].len, val, len) != EOK) {
364 COMM_LOGW(COMM_DFX, "memcpy_s fail");
365 return SOFTBUS_MEM_ERR;
366 }
367 return SOFTBUS_OK;
368 }
369
SoftbusGetConfig(ConfigType type,unsigned char * val,uint32_t len)370 int SoftbusGetConfig(ConfigType type, unsigned char *val, uint32_t len)
371 {
372 if ((type >= SOFTBUS_CONFIG_TYPE_MAX) || (val == NULL) ||
373 (len != g_configItems[type].len) || (type != g_configItems[type].type)) {
374 COMM_LOGW(COMM_DFX, "invalid param");
375 return SOFTBUS_INVALID_PARAM;
376 }
377 if (memcpy_s((void*)val, len, g_configItems[type].val, g_configItems[type].len) != EOK) {
378 COMM_LOGW(COMM_DFX, "memcpy_s fail");
379 return SOFTBUS_MEM_ERR;
380 }
381 return SOFTBUS_OK;
382 }
383
SoftbusConfigSetTransDefaultVal(void)384 static void SoftbusConfigSetTransDefaultVal(void)
385 {
386 g_tranConfig.isSupportTcpProxy = DEFAULT_IS_SUPPORT_TCP_PROXY;
387 g_tranConfig.maxBytesNewLen = DEFAULT_NEW_BYTES_LEN;
388 g_tranConfig.maxMessageNewLen = DEFAULT_NEW_MESSAGE_LEN;
389 g_tranConfig.maxBytesLen = DEFAULT_MAX_BYTES_LEN;
390 g_tranConfig.maxMessageLen = DEFAULT_MAX_MESSAGE_LEN;
391 g_tranConfig.maxAuthBytesLen = DEFAULT_AUTH_MAX_BYTES_LEN;
392 g_tranConfig.maxAuthMessageLen = DEFAULT_AUTH_MAX_MESSAGE_LEN;
393 g_tranConfig.maxProxyBytesLen = DEFAULT_PROXY_MAX_BYTES_LEN;
394 g_tranConfig.maxProxyMessageLen = DEFAULT_PROXY_MAX_MESSAGE_LEN;
395 }
396
SoftbusConfigSetDefaultVal(void)397 static void SoftbusConfigSetDefaultVal(void)
398 {
399 SoftbusConfigSetTransDefaultVal();
400 }
401
SoftbusConfigInit(void)402 void SoftbusConfigInit(void)
403 {
404 ConfigSetProc sets;
405 SoftbusConfigSetDefaultVal();
406 sets.SetConfig = &SoftbusSetConfig;
407 SoftbusConfigAdapterInit(&sets);
408 }