1 /* 2 * Copyright (c) 2021-2024 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 #ifndef LNN_NODE_INFO_H 17 #define LNN_NODE_INFO_H 18 19 #include <stdbool.h> 20 #include <stdint.h> 21 22 #include "lnn_connect_info.h" 23 #include "lnn_device_info.h" 24 #include "lnn_net_capability.h" 25 #include "softbus_def.h" 26 27 #ifdef __cplusplus 28 extern "C" { 29 #endif 30 #define WIFI_SSID_LEN 32 31 #define WIFI_MAC_LEN 6 32 #define OFFLINE_CODE_LEN 32 33 #define OFFLINE_CODE_BYTE_SIZE 4 34 #define EXTDATA_LEN 8 35 #define PTK_DEFAULT_LEN 32 36 #define STATIC_CAP_LEN 100 37 #define STATIC_CAP_STR_LEN 201 38 #define PTK_ENCODE_LEN 45 39 40 #define LNN_RELATION_MASK 0x03 41 #define WIFI_CFG_INFO_MAX_LEN 512 42 #define CHANNEL_LIST_STR_LEN 256 43 44 #define SESSION_KEY_STR_LEN 65 45 #define PTK_STR_LEN 65 46 47 #define BROADCAST_IV_LEN 16 48 #define BROADCAST_IV_STR_LEN 33 49 50 #define LFINDER_UDID_HASH_LEN 32 51 #define LFINDER_IRK_LEN 16 52 #define LFINDER_IRK_STR_LEN 33 53 #define LFINDER_MAC_ADDR_LEN 6 54 #define LFINDER_MAC_ADDR_STR_LEN 13 55 56 typedef enum { 57 AUTH_AS_CLIENT_SIDE = 0, 58 AUTH_AS_SERVER_SIDE, 59 AUTH_SIDE_MAX, 60 } AuthSide; 61 62 typedef enum { 63 ROLE_UNKNOWN = 0, 64 ROLE_CONTROLLER, 65 ROLE_LEAF, 66 } ConnectRole; 67 68 typedef enum { 69 STATUS_OFFLINE = 0, 70 STATUS_ONLINE, 71 } ConnectStatus; 72 73 typedef enum { 74 DISCOVERY_TYPE_UNKNOWN = 0, 75 DISCOVERY_TYPE_WIFI, 76 DISCOVERY_TYPE_BLE, 77 DISCOVERY_TYPE_BR, 78 DISCOVERY_TYPE_P2P, 79 DISCOVERY_TYPE_LSA, 80 DISCOVERY_TYPE_COUNT, 81 } DiscoveryType; 82 83 typedef struct { 84 char ssid[WIFI_SSID_LEN + 1]; 85 unsigned char targetBssid[WIFI_MAC_LEN]; 86 } BssTransInfo; 87 88 typedef struct { 89 int32_t p2pRole; 90 char wifiCfg[WIFI_CFG_INFO_MAX_LEN]; 91 char chanList5g[CHANNEL_LIST_STR_LEN]; 92 int32_t staFrequency; 93 char p2pMac[MAC_LEN]; // the mac of local p2p interface 94 char goMac[MAC_LEN]; // the mac of p2p Go device, while local device as Gc role. 95 char p2pIp[IP_LEN]; 96 } P2pInfo; 97 98 typedef struct { 99 bool isMetaNode; 100 uint32_t metaDiscType; 101 } MetaInfo; 102 103 typedef struct { 104 bool isCharging; 105 int32_t batteryLevel; 106 } BatteryInfo; 107 108 typedef enum { 109 BIT_SUPPORT_EXCHANGE_NETWORKID = 0, 110 BIT_SUPPORT_NORMALIZED_LINK = 1, 111 BIT_SUPPORT_NEGOTIATION_AUTH = 2, 112 BIT_SUPPORT_BR_DUP_BLE = 3, 113 } AuthCapability; 114 115 typedef struct { 116 int32_t keylen; 117 unsigned char key[SESSION_KEY_LENGTH]; 118 unsigned char iv[BROADCAST_IV_LEN]; 119 } BroadcastCipherInfo; 120 121 typedef struct { 122 uint8_t peerIrk[LFINDER_IRK_LEN]; 123 unsigned char publicAddress[LFINDER_MAC_ADDR_LEN]; 124 unsigned char peerUdidHash[LFINDER_UDID_HASH_LEN]; 125 } RpaInfo; 126 127 typedef struct { 128 char softBusVersion[VERSION_MAX_LEN]; 129 char versionType[VERSION_MAX_LEN]; // compatible nearby 130 char pkgVersion[VERSION_MAX_LEN]; 131 char uuid[UUID_BUF_LEN]; // compatible nearby 132 char lastNetworkId[NETWORK_ID_BUF_LEN]; 133 char networkId[NETWORK_ID_BUF_LEN]; 134 char publicId[ID_MAX_LEN]; 135 char parentId[ID_MAX_LEN]; 136 char masterUdid[UDID_BUF_LEN]; 137 char nodeAddress[SHORT_ADDRESS_MAX_LEN]; 138 char extData[EXTDATA_LEN]; 139 int32_t masterWeight; 140 ConnectRole role; 141 ConnectStatus status; 142 uint32_t netCapacity; 143 uint32_t authCapacity; 144 uint32_t heartbeatCapacity; 145 uint32_t discoveryType; 146 uint64_t bleDirectTimeStamp; 147 DeviceBasicInfo deviceInfo; 148 ConnectInfo connectInfo; 149 BssTransInfo bssTransInfo; 150 bool isBleP2p; // true: this device support connect p2p via ble connection 151 P2pInfo p2pInfo; 152 char wifiDirectAddr[MAC_LEN]; 153 uint64_t supportedProtocols; 154 char accountHash[SHA_256_HASH_LEN]; 155 int64_t accountId; 156 unsigned char offlineCode[OFFLINE_CODE_BYTE_SIZE]; 157 int64_t authSeq[DISCOVERY_TYPE_COUNT]; 158 MetaInfo metaInfo; 159 uint32_t AuthTypeValue; 160 uint16_t dataChangeFlag; 161 uint16_t dataDynamicLevel; 162 uint16_t dataStaticLevel; 163 uint32_t dataSwitchLevel; 164 uint16_t dataSwitchLength; 165 BatteryInfo batteryInfo; 166 bool isScreenOn; 167 int64_t wifiVersion; 168 int64_t bleVersion; 169 uint64_t feature; 170 uint64_t connSubFeature; 171 int64_t bleStartTimestamp; 172 int32_t wifiBuffSize; 173 int32_t brBuffSize; 174 int32_t stateVersion; 175 int32_t localStateVersion; 176 uint32_t groupType; 177 bool initPreventFlag; 178 int64_t networkIdTimestamp; 179 RpaInfo rpaInfo; 180 BroadcastCipherInfo cipherInfo; 181 int32_t bleMacRefreshSwitch; 182 int32_t bleConnCloseDelayTime; 183 uint8_t staticCapability[STATIC_CAP_LEN]; 184 int32_t staticCapLen; 185 char remotePtk[PTK_DEFAULT_LEN]; 186 char remoteMetaPtk[PTK_DEFAULT_LEN]; 187 int32_t deviceSecurityLevel; 188 uint8_t relation[CONNECTION_ADDR_MAX]; 189 int64_t authSeqNum; 190 int32_t authChannelId[CONNECTION_ADDR_MAX][AUTH_SIDE_MAX]; 191 uint64_t heartbeatTimeStamp; 192 uint64_t onlinetTimestamp; 193 uint64_t updateTimestamp; 194 bool isAuthExchangeUdid; 195 bool isSupportIpv6; 196 uint32_t stateVersionReason; 197 int64_t lastAuthSeq; 198 } NodeInfo; 199 200 const char *LnnGetDeviceUdid(const NodeInfo *info); 201 int32_t LnnSetDeviceUdid(NodeInfo *info, const char *udid); 202 const char *LnnGetDeviceUuid(const NodeInfo *info); 203 bool LnnHasDiscoveryType(const NodeInfo *info, DiscoveryType type); 204 int32_t LnnSetDiscoveryType(NodeInfo *info, DiscoveryType type); 205 int32_t LnnClearDiscoveryType(NodeInfo *info, DiscoveryType type); 206 bool LnnIsNodeOnline(const NodeInfo *info); 207 void LnnSetNodeConnStatus(NodeInfo *info, ConnectStatus status); 208 const char *LnnGetBtMac(const NodeInfo *info); 209 void LnnSetBtMac(NodeInfo *info, const char *mac); 210 const char *LnnGetBleMac(const NodeInfo *info); 211 void LnnSetBleMac(NodeInfo *info, const char *mac); 212 const char *LnnGetWiFiIp(const NodeInfo *info); 213 void LnnSetWiFiIp(NodeInfo *info, const char *ip); 214 const char *LnnGetNetIfName(const NodeInfo *info); 215 void LnnSetNetIfName(NodeInfo *info, const char *netIfName); 216 const char *LnnGetMasterUdid(const NodeInfo *info); 217 int32_t LnnSetMasterUdid(NodeInfo *info, const char *udid); 218 int32_t LnnGetAuthPort(const NodeInfo *info); 219 int32_t LnnSetAuthPort(NodeInfo *info, int32_t port); 220 int32_t LnnGetSessionPort(const NodeInfo *info); 221 int32_t LnnSetSessionPort(NodeInfo *info, int32_t port); 222 int32_t LnnGetProxyPort(const NodeInfo *info); 223 int32_t LnnSetProxyPort(NodeInfo *info, int32_t port); 224 int32_t LnnSetP2pRole(NodeInfo *info, int32_t role); 225 int32_t LnnGetP2pRole(const NodeInfo *info); 226 int32_t LnnSetWifiCfg(NodeInfo *info, const char *wifiCfg); 227 const char *LnnGetWifiCfg(const NodeInfo *info); 228 int32_t LnnSetChanList5g(NodeInfo *info, const char *chanList5g); 229 const char *LnnGetChanList5g(const NodeInfo *info); 230 int32_t LnnSetStaFrequency(NodeInfo *info, int32_t staFrequency); 231 int32_t LnnGetStaFrequency(const NodeInfo *info); 232 int32_t LnnSetP2pMac(NodeInfo *info, const char *p2pMac); 233 uint16_t LnnGetDataChangeFlag(const NodeInfo *info); 234 int32_t LnnSetDataChangeFlag(NodeInfo *info, uint16_t dataChangeFlag); 235 uint16_t LnnGetDataDynamicLevel(const NodeInfo *info); 236 int32_t LnnSetDataDynamicLevel(NodeInfo *info, uint16_t dataDynamicLevel); 237 uint16_t LnnGetDataStaticLevel(const NodeInfo *info); 238 int32_t LnnSetDataStaticLevel(NodeInfo *info, uint16_t dataStaticLvel); 239 uint32_t LnnGetDataSwitchLevel(const NodeInfo *info); 240 int32_t LnnSetDataSwitchLevel(NodeInfo *info, uint32_t dataSwitchLevel); 241 uint16_t LnnGetDataSwitchLength(const NodeInfo *info); 242 int32_t LnnSetDataSwitchLength(NodeInfo *info, uint16_t dataSwitchLevel); 243 const char *LnnGetP2pMac(const NodeInfo *info); 244 int32_t LnnSetP2pGoMac(NodeInfo *info, const char *goMac); 245 const char *LnnGetP2pGoMac(const NodeInfo *info); 246 uint64_t LnnGetSupportedProtocols(const NodeInfo *info); 247 int32_t LnnSetSupportedProtocols(NodeInfo *info, uint64_t protocols); 248 int32_t LnnSetWifiDirectAddr(NodeInfo *info, const char *wifiDirectAddr); 249 const char *LnnGetWifiDirectAddr(const NodeInfo *info); 250 int32_t LnnSetStaticCapability(NodeInfo *info, uint8_t *cap, uint32_t len); 251 int32_t LnnGetStaticCapability(NodeInfo *info, uint8_t *cap, uint32_t len); 252 int32_t LnnSetPtk(NodeInfo *info, const char *remotePtk); 253 void LnnDumpRemotePtk(const char *oldPtk, const char *newPtk, const char *log); 254 void LnnDumpNodeInfo(const NodeInfo *deviceInfo, const char *log); 255 int32_t LnnSetScreenStatus(NodeInfo *info, bool isScreenOn); 256 #ifdef __cplusplus 257 } 258 #endif 259 260 #endif // LNN_NODE_INFO_H 261