1 /* 2 * Copyright (C) 2023 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 OHOS_WIFI_HDI_STRUCT_H 17 #define OHOS_WIFI_HDI_STRUCT_H 18 19 #include <stdint.h> 20 #include "wifi_hdi_define.h" 21 #include "i_wifi_struct.h" 22 #include "wifi_error_no.h" 23 24 #ifdef __cplusplus 25 extern "C" { 26 #endif 27 28 struct HdiIeHdr { 29 uint8_t elemId; 30 uint8_t len; 31 uint8_t oui[4]; 32 uint8_t version[2]; 33 }; 34 35 struct HdiElem { 36 uint8_t id; 37 uint8_t datalen; 38 uint8_t data[]; 39 }; 40 41 struct HdiMdie { 42 uint8_t mobilityDomain[HDI_MOBILITY_DOMAIN_ID_LEN]; 43 uint8_t ftCapab; 44 }; 45 46 struct HdiFtie { 47 uint8_t micControl[2]; 48 uint8_t mic[16]; 49 uint8_t anonce[HDI_NONCE_LEN]; 50 uint8_t snonce[HDI_NONCE_LEN]; 51 }; 52 53 struct HdiRsnIeHdr { 54 uint8_t elemId; 55 uint8_t len; 56 uint8_t version[2]; 57 }; 58 59 struct HdiIesInfo { 60 struct { 61 const uint8_t *ie; 62 uint8_t ieLen; 63 } ies[HDI_MAX_IES_SUPPORTED]; 64 uint8_t nofIes; 65 }; 66 67 68 struct HdiElems { 69 const uint8_t *ssid; 70 const uint8_t *suppRates; 71 const uint8_t *dsParams; 72 const uint8_t *challenge; 73 const uint8_t *erpInfo; 74 const uint8_t *extSuppRates; 75 const uint8_t *hdiIe; 76 const uint8_t *rsnIe; 77 const uint8_t *wmm; /* WMM Information or Parameter Element */ 78 const uint8_t *wmmTspec; 79 const uint8_t *wpsIe; 80 const uint8_t *hdiChannels; 81 const uint8_t *mdie; 82 const uint8_t *ftie; 83 const uint8_t *timeout; 84 const uint8_t *htCapabilities; 85 const uint8_t *htOperation; 86 const uint8_t *meshCfg; 87 const uint8_t *meshId; 88 const uint8_t *peerMgmt; 89 const uint8_t *vhtCapabilities; 90 const uint8_t *vhtOperation; 91 const uint8_t *vhtOpmodeNotif; 92 const uint8_t *vendorHtCap; 93 const uint8_t *vendorVht; 94 const uint8_t *p2p; 95 const uint8_t *wfd; 96 const uint8_t *linkId; 97 const uint8_t *interworking; 98 const uint8_t *mapSet; 99 const uint8_t *hs20; 100 const uint8_t *extCapab; 101 const uint8_t *maxIdlePeriod; 102 const uint8_t *ssidList; 103 const uint8_t *osen; 104 const uint8_t *mbo; 105 const uint8_t *ampe; 106 const uint8_t *mic; 107 const uint8_t *prefFreqList; 108 const uint8_t *opClasses; 109 const uint8_t *rrmEnabled; 110 const uint8_t *cagNumber; 111 const uint8_t *apCsn; 112 const uint8_t *filsIndic; 113 const uint8_t *dils; 114 const uint8_t *assocDelayInfo; 115 const uint8_t *filsReqParams; 116 const uint8_t *filsKeyConfirm; 117 const uint8_t *filsSession; 118 const uint8_t *filsHlp; 119 const uint8_t *addrAssign; 120 const uint8_t *delivery; 121 const uint8_t *wrappedData; 122 const uint8_t *filsPk; 123 const uint8_t *filsNonce; 124 const uint8_t *oweDh; 125 const uint8_t *powerCapab; 126 const uint8_t *roamingConsSel; 127 const uint8_t *passwordId; 128 const uint8_t *oci; 129 const uint8_t *multiAp; 130 const uint8_t *heCapabilities; 131 const uint8_t *heOperation; 132 const uint8_t *ehtCapabilities80211Be; 133 134 uint8_t ssidLen; 135 uint8_t ratesLen; 136 uint8_t challengeLen; 137 uint8_t suppRatesLlen; 138 uint8_t wpaIeLen; 139 uint8_t rsnIeLen; 140 uint8_t wmmLen; /* 7 = WMM Information; 24 = WMM Parameter */ 141 uint8_t wmmTspecLen; 142 uint8_t hdiIeLen; 143 uint8_t channelsLen; 144 uint8_t mdieLen; 145 uint8_t ftieLen; 146 uint8_t meshConfigLen; 147 uint8_t meshIdLen; 148 uint8_t peerMgmtLen; 149 uint8_t vendorHtCapLen; 150 uint8_t vendorVhtLen; 151 uint8_t p2pLen; 152 uint8_t wfdLen; 153 uint8_t interworkingLen; 154 uint8_t qosMapSetLen; 155 uint8_t hs20Len; 156 uint8_t extCapabLen; 157 uint8_t ssidListLen; 158 uint8_t osenLen; 159 uint8_t mboLen; 160 uint8_t ampeLen; 161 uint8_t micLen; 162 uint8_t prefFreqListLen; 163 uint8_t suppOpClassesLen; 164 uint8_t rrmEnabledLen; 165 uint8_t cagNumberLen; 166 uint8_t filsIndicLen; 167 uint8_t dilsLen; 168 uint8_t filsReqParamsLen; 169 uint8_t filsKeyConfirmLen; 170 uint8_t filsHlpLen; 171 uint8_t filsIpAddrAssignLen; 172 uint8_t keyDeliveryLen; 173 uint8_t filWrappedDataLen; 174 uint8_t filsPkLen; 175 uint8_t oweDhLen; 176 uint8_t powerCapabLen; 177 uint8_t roamingConsSelLen; 178 uint8_t passwordIdLen; 179 uint8_t ociLen; 180 uint8_t multiApLen; 181 uint8_t heCapabilitiesLen; 182 uint8_t heOperationLen; 183 uint8_t ehtCapabilities80211BeLen; 184 185 struct HdiIesInfo hdiIes; 186 }; 187 188 struct HdiIeData { 189 int proto; 190 int pairwiseCipher; 191 int hasPairwise; 192 int groupCipher; 193 int hasGroup; 194 int keyMgmt; 195 int capabilities; 196 size_t numPmkid; 197 const uint8_t *pmkid; 198 int mgmtGroupCipher; 199 }; 200 201 /* HT Capabilities HdiElem */ 202 struct HdiHtCapabilities { 203 uint16_t htCapabilitiesInfo; 204 uint8_t mpduParams; /* Maximum A-MPDU Length Exponent B0..B1 205 * Minimum MPDU Start Spacing B2..B4 206 * Reserved B5..B7 */ 207 uint8_t supportedMcsSet[16]; 208 uint16_t htExtendedCapabilities; 209 uint32_t txbfCapabilityInfo; 210 uint8_t aselCapabilities; 211 }; 212 213 struct HdiHtOperation { 214 uint8_t primaryChan; 215 uint8_t htParam; 216 uint16_t operationMode; 217 uint16_t param; 218 uint8_t basicMcsSet[16]; 219 }; 220 221 struct HdiVhtCapabilities { 222 uint32_t capabilitiesInfo; 223 struct { 224 uint16_t rxMap; 225 uint16_t rxHighest; 226 uint16_t txMap; 227 uint16_t txHighest; 228 } vhtSupportedset; 229 }; 230 231 struct HdiVhtOperation { 232 uint8_t chwidth; 233 uint8_t seg0Idx; 234 uint8_t seg1Idx; 235 uint16_t set; 236 }; 237 238 struct HdiParseAttr { 239 const uint8_t *version; 240 const uint8_t *version2; 241 const uint8_t *msgType; 242 const uint8_t *enrolleeNonce; 243 const uint8_t *registrarNonce; 244 const uint8_t *uuidr; 245 const uint8_t *uuide; 246 const uint8_t *authFlags; 247 const uint8_t *encrflags; 248 const uint8_t *connFlags; 249 const uint8_t *methods; 250 const uint8_t *configMethods; 251 const uint8_t *primaryDevType; 252 const uint8_t *rfBands; 253 const uint8_t *tate; 254 const uint8_t *error; 255 const uint8_t *passwordId; 256 const uint8_t *version3; 257 const uint8_t *state; 258 const uint8_t *authenticator; 259 const uint8_t *hash1; 260 const uint8_t *hash2; 261 const uint8_t *hash3; 262 const uint8_t *hash4; 263 const uint8_t *snonce1; 264 const uint8_t *snonce2; 265 const uint8_t *snonce3; 266 const uint8_t *snonce4; 267 const uint8_t *auth; 268 const uint8_t *authType; 269 const uint8_t *encrType; 270 const uint8_t *idx; 271 const uint8_t *keyIdx; 272 const uint8_t *mac; 273 const uint8_t *registrar; 274 const uint8_t *requestType; 275 const uint8_t *responseType; 276 const uint8_t *setupLocked; 277 const uint8_t *delayTime; 278 const uint8_t *shareable; 279 const uint8_t *enroll; 280 const uint8_t *channel; 281 const uint8_t *methods2; 282 283 const uint8_t *manufacturer; 284 const uint8_t *modelNname; 285 const uint8_t *modelNumber; 286 const uint8_t *serialNumber; 287 const uint8_t *devName; 288 const uint8_t *publicKey; 289 const uint8_t *encrSettings; 290 const uint8_t *ssid; 291 const uint8_t *networkKey; 292 const uint8_t *authorizedMacs; 293 const uint8_t *typeList; 294 const uint8_t *devPassword; 295 uint16_t manufacturerLen; 296 uint16_t modelNameLen; 297 uint16_t modelNumberLen; 298 uint16_t serialNumberLen; 299 uint16_t devNameLen; 300 uint16_t publicKeyLen; 301 uint16_t encrSettingsLen; 302 uint16_t ssidLen; 303 uint16_t networkKeyLen; 304 uint16_t authorizedMacsLen; 305 uint16_t secDevTypeListLen; 306 uint16_t oobDevPasswordLen; 307 308 unsigned int numCred; 309 unsigned int numReqDevType; 310 unsigned int numVendorExt; 311 312 uint16_t credLen[HDI_MAX_CRED_COUNT]; 313 uint16_t vendorExtLen[HDI_MAX__VENDOR_EXT]; 314 315 const uint8_t *cred[HDI_MAX_CRED_COUNT]; 316 const uint8_t *reqDevType[HDI_MAX_REQ_DEV_TYPE_COUNT]; 317 const uint8_t *vendorExt[HDI_MAX__VENDOR_EXT]; 318 uint8_t multiApExt; 319 }; 320 321 struct WifiScanResultExt { 322 uint32_t flags; 323 uint8_t* bssid; 324 uint32_t bssidLen; 325 uint16_t caps; 326 uint32_t freq; 327 uint16_t beaconInt; 328 int32_t qual; 329 int32_t level; 330 uint32_t age; 331 uint64_t tsf; 332 uint8_t* variable; 333 uint32_t variableLen; 334 uint8_t* ie; 335 uint32_t ieLen; 336 uint8_t* beaconIe; 337 uint32_t beaconIeLen; 338 }; 339 340 #ifdef __cplusplus 341 } 342 #endif 343 #endif