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