1 /*
2 * Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
3 * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
4 *
5 * Permission to use, copy, modify, and/or distribute this software for
6 * any purpose with or without fee is hereby granted, provided that the
7 * above copyright notice and this permission notice appear in all
8 * copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17 * PERFORMANCE OF THIS SOFTWARE.
18 */
19
20 /*
21 * \file dot11f.c
22 *
23 * \brief Structures, functions & definitions for
24 * working with 802.11 Frames
25 *
26 *
27 * This file was automatically generated by 'framesc'
28 * Fri Nov 10 10:07:33 2023 from the following file(s):
29 *
30 * dot11f.frms
31 *
32 * PLEASE DON'T EDIT THIS FILE BY HAND!
33 *
34 */
35
36 #if !defined ANI_OS_TYPE_OSX && !defined ANI_OS_TYPE_LINUX && !defined ANI_OS_TYPE_ANDROID
37 #include <memory.h> /* For memcpy */
38 #include <stdio.h> /* For _vsnprintf */
39 #include <stddef.h> /* For offsetof */
40 #endif
41
42 #include <ani_global.h>
43 #include <utils_api.h>
44 #include "dot11fdefs.h"
45 #include "dot11f.h"
46
47 #if defined(_MSC_VER)
48 #pragma warning (disable:4244)
49 #pragma warning (disable:4505)
50 #pragma warning (disable:4702)
51 #pragma warning (disable:4996)/* ... was declared deprecated */
52 #endif /* Microsoft C/C++ */
53
54 typedef unsigned char tFRAMES_BOOL;
55 typedef void (*pfnGeneric_t)(void);
56
57 typedef struct sFFDefn {
58 const char *name;
59 uint32_t offset;
60 uint16_t sig;
61 uint8_t size;
62 } tFFDefn;
63
64 typedef struct sIEDefn {
65 uint32_t offset;
66 uint32_t presenceOffset;
67 uint32_t countOffset;
68 const char *name;
69 uint16_t arraybound;
70 uint16_t minSize;
71 uint16_t maxSize;
72 uint16_t sig;
73 unsigned char oui[5];
74 unsigned char noui;
75 uint8_t eid;
76 uint8_t extn_eid;
77 tFRAMES_BOOL fMandatory;
78 } tIEDefn;
79
80 #if !defined(countof)
81 #define countof(x) (sizeof((x)) / sizeof((x)[0]))
82 #endif
83
84 #if !defined(DOT11F_MEMCPY)
85 #define DOT11F_MEMCPY(ctx, dst, src, len) \
86 memcpy((dst), (src), (len))
87 #endif
88
89 #if !defined(DOT11F_MEMCMP)
90 #define DOT11F_MEMCMP(ctx, lhs, rhs, len) \
91 memcmp((lhs), (rhs), (len))
92 #endif
93
94 #ifndef DOT11F_HAVE_LOG_SEVERITIES
95 #define FRLOG_OFF (0)
96 #define FRLOGP (1)
97 #define FRLOGE (2)
98 #define FRLOGW (3)
99 #define FRLOG1 (4)
100 #define FRLOG2 (5)
101 #define FRLOG3 (6)
102 #define FRLOG4 (7)
103 #endif
104
105 #define FRFL(x) x
106
107 #define FRAMES_LOG0(ctx, sev, fmt)
108 #define FRAMES_LOG1(ctx, sev, fmt, p1)
109 #define FRAMES_LOG2(ctx, sev, fmt, p1, p2)
110 #define FRAMES_LOG3(ctx, sev, fmt, p1, p2, p3)
111 #define FRAMES_LOG4(ctx, sev, fmt, p1, p2, p3, p4)
112 #define FRAMES_DUMP(ctx, sev, p, n)
113 #ifndef FRAMES_SEV_FOR_FRAME
114 #define FRAMES_SEV_FOR_FRAME(ctx, sig) FRLOG3
115 #endif
116
117 #if defined(DOT11F_ENABLE_DBG_BREAK) && defined (WIN32)
118 #define FRAMES_DBG_BREAK() { _asm int 3 }
119 #else
120 #define FRAMES_DBG_BREAK()
121 #endif
122
123 #if !defined(DOT11F_PARAMETER_CHECK)
124 #if defined (DOT11F_HAVE_WIN32_API)
125
126 #define DOT11F_PARAMETER_CHECK(pBuf, nBuf, pFrm, nFrm) \
127 do { \
128 if (!pBuf || IsBadReadPtr(pBuf, nBuf))\
129 return DOT11F_BAD_INPUT_BUFFER; \
130 if (!pFrm || IsBadWritePtr(pFrm, nFrm))\
131 return DOT11F_BAD_OUTPUT_BUFFER; \
132 } while (0)
133
134 #define DOT11F_PARAMETER_CHECK2(pSrc, pBuf, nBuf, pnConsumed) \
135 do { \
136 if (!pSrc || IsBadReadPtr(pSrc, 4))\
137 return DOT11F_BAD_INPUT_BUFFER; \
138 if (!pBuf || IsBadWritePtr(pBuf, nBuf))\
139 return DOT11F_BAD_OUTPUT_BUFFER; \
140 if (!nBuf)\
141 return DOT11F_BAD_OUTPUT_BUFFER; \
142 if (IsBadWritePtr(pnConsumed, 4))\
143 return DOT11F_BAD_OUTPUT_BUFFER; \
144 } while (0)
145
146 #else
147
148 #define DOT11F_PARAMETER_CHECK(pBuf, nBuf, pFrm, nFrm) \
149 if (!pBuf)\
150 return DOT11F_BAD_INPUT_BUFFER; \
151 if (!pFrm)\
152 return DOT11F_BAD_OUTPUT_BUFFER \
153
154 #define DOT11F_PARAMETER_CHECK2(pSrc, pBuf, nBuf, pnConsumed) \
155 if (!pSrc)\
156 return DOT11F_BAD_INPUT_BUFFER; \
157 if (!pBuf)\
158 return DOT11F_BAD_OUTPUT_BUFFER; \
159 if (!nBuf)\
160 return DOT11F_BAD_OUTPUT_BUFFER; \
161 if (!pnConsumed)\
162 return DOT11F_BAD_OUTPUT_BUFFER \
163
164 #endif
165 #endif
166
framesntohs(tpAniSirGlobal pCtx,uint16_t * pOut,uint8_t * pIn,tFRAMES_BOOL fMsb)167 static void framesntohs(tpAniSirGlobal pCtx,
168 uint16_t *pOut,
169 uint8_t *pIn,
170 tFRAMES_BOOL fMsb)
171 {
172 (void)pCtx;
173 #if defined (DOT11F_LITTLE_ENDIAN_HOST)
174 if (!fMsb)
175 DOT11F_MEMCPY(pCtx, (uint16_t *)pOut, pIn, 2);
176 else
177 *pOut = (uint16_t)(*pIn << 8) | *(pIn + 1);
178 #else
179 if (!fMsb)
180 *pOut = (uint16_t)(*pIn | (*(pIn + 1) << 8));
181 else
182 DOT11F_MEMCPY(pCtx, (uint16_t *)pOut, pIn, 2);
183 #endif
184 }
185
framesntohl(tpAniSirGlobal pCtx,uint32_t * pOut,uint8_t * pIn,tFRAMES_BOOL fMsb)186 static void framesntohl(tpAniSirGlobal pCtx,
187 uint32_t *pOut,
188 uint8_t *pIn,
189 tFRAMES_BOOL fMsb)
190 {
191 (void)pCtx;
192 #if defined (DOT11F_LITTLE_ENDIAN_HOST)
193 if (!fMsb)
194 DOT11F_MEMCPY(pCtx, (uint32_t *)pOut, pIn, 4);
195 else
196 *pOut = (uint32_t)(*pIn << 24) |
197 (*(pIn + 1) << 16) |
198 (*(pIn + 2) << 8) |
199 (*(pIn + 3));
200 #else
201 if (!fMsb)
202 *pOut = (uint32_t)(*(pIn + 3) << 24) |
203 (*(pIn + 2) << 16) |
204 (*(pIn + 1) << 8) |
205 (*(pIn));
206 else
207 *pOut = *(uint32_t *)pIn;
208 #endif
209 }
210
framesntohq(tpAniSirGlobal pCtx,tDOT11F_U64 * pOut,uint8_t * pIn,tFRAMES_BOOL fMsb)211 static void framesntohq(tpAniSirGlobal pCtx,
212 tDOT11F_U64 *pOut,
213 uint8_t *pIn,
214 tFRAMES_BOOL fMsb)
215 {
216 #if defined (DOT11F_LITTLE_ENDIAN_HOST)
217 framesntohl(pCtx, &((*pOut)[0]), pIn, fMsb);
218 framesntohl(pCtx, &((*pOut)[1]), pIn + 4, fMsb);
219 #else
220 framesntohl(pCtx, &((*pOut)[1]), pIn, fMsb);
221 framesntohl(pCtx, &((*pOut)[0]), pIn + 4, fMsb);
222 #endif
223 }
224
frameshtons(tpAniSirGlobal pCtx,uint8_t * pOut,uint16_t pIn,tFRAMES_BOOL fMsb)225 static void frameshtons(tpAniSirGlobal pCtx,
226 uint8_t *pOut,
227 uint16_t pIn,
228 tFRAMES_BOOL fMsb)
229 {
230 (void)pCtx;
231 #if defined (DOT11F_LITTLE_ENDIAN_HOST)
232 if (!fMsb) {
233 DOT11F_MEMCPY(pCtx, pOut, &pIn, 2);
234 } else {
235 *pOut = (pIn & 0xff00) >> 8;
236 *(pOut + 1) = pIn & 0xff;
237 }
238 #else
239 if (!fMsb) {
240 *pOut = pIn & 0xff;
241 *(pOut + 1) = (pIn & 0xff00) >> 8;
242 } else {
243 DOT11F_MEMCPY(pCtx, pOut, &pIn, 2);
244 }
245 #endif
246 }
247
frameshtonl(tpAniSirGlobal pCtx,uint8_t * pOut,uint32_t pIn,tFRAMES_BOOL fMsb)248 static void frameshtonl(tpAniSirGlobal pCtx,
249 uint8_t *pOut,
250 uint32_t pIn,
251 tFRAMES_BOOL fMsb)
252 {
253 (void)pCtx;
254 #if defined (DOT11F_LITTLE_ENDIAN_HOST)
255 if (!fMsb) {
256 DOT11F_MEMCPY(pCtx, pOut, &pIn, 4);
257 } else {
258 *pOut = (pIn & 0xff000000) >> 24;
259 *(pOut + 1) = (pIn & 0x00ff0000) >> 16;
260 *(pOut + 2) = (pIn & 0x0000ff00) >> 8;
261 *(pOut + 3) = (pIn & 0x000000ff);
262 }
263 #else
264 if (!fMsb) {
265 *pOut = (pIn & 0x000000ff);
266 *(pOut + 1) = (pIn & 0x0000ff00) >> 8;
267 *(pOut + 2) = (pIn & 0x00ff0000) >> 16;
268 *(pOut + 3) = (pIn & 0xff000000) >> 24;
269 } else {
270 DOT11F_MEMCPY(pCtx, pOut, &pIn, 4);
271 }
272 #endif
273 }
274
frameshtonq(tpAniSirGlobal pCtx,uint8_t * pOut,tDOT11F_U64 pIn,tFRAMES_BOOL fMsb)275 static void frameshtonq(tpAniSirGlobal pCtx,
276 uint8_t *pOut,
277 tDOT11F_U64 pIn,
278 tFRAMES_BOOL fMsb)
279 {
280 #if defined (DOT11F_LITTLE_ENDIAN_HOST)
281 frameshtonl(pCtx, pOut, pIn[0], fMsb);
282 frameshtonl(pCtx, pOut + 4, pIn[1], fMsb);
283 #else
284 frameshtonl(pCtx, pOut + 4, pIn[1], fMsb);
285 frameshtonl(pCtx, pOut, pIn[0], fMsb);
286 #endif
287 }
288
find_ie_defn(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,const tIEDefn IEs[])289 static const tIEDefn *find_ie_defn(tpAniSirGlobal pCtx,
290 uint8_t *pBuf,
291 uint32_t nBuf,
292 const tIEDefn IEs[])
293 {
294 const tIEDefn *pIe;
295 (void)pCtx;
296
297 pIe = &(IEs[0]);
298 while (0xff != pIe->eid || pIe->extn_eid) {
299 if (*pBuf == pIe->eid) {
300 if (pIe->eid == 0xff) {
301 if ((nBuf > 2) &&
302 (*(pBuf + 2)) == pIe->extn_eid)
303 return pIe;
304 } else {
305 if (0 == pIe->noui)
306 return pIe;
307
308 if ((nBuf > (uint32_t)(pIe->noui + 2)) &&
309 (!DOT11F_MEMCMP(pCtx, pBuf + 2, pIe->oui,
310 pIe->noui)))
311 return pIe;
312 }
313 }
314
315 ++pIe;
316 }
317
318 return NULL;
319 }
320
get_container_ies_len(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,uint8_t * pnConsumed,const tIEDefn IEs[])321 static uint32_t get_container_ies_len(tpAniSirGlobal pCtx,
322 uint8_t *pBuf,
323 uint32_t nBuf,
324 uint8_t *pnConsumed,
325 const tIEDefn IEs[])
326 {
327 const tIEDefn *pIe, *pIeFirst;
328 uint8_t *pBufRemaining = pBuf;
329 uint32_t len = 0;
330 (void)pCtx;
331
332 pIeFirst = &(IEs[0]);
333
334 if (*pBufRemaining != pIeFirst->eid)
335 return DOT11F_INTERNAL_ERROR;
336 len += *(pBufRemaining+1);
337 pBufRemaining += len + 2;
338 len += 2;
339 while (len + 1 < nBuf) {
340 pIe = find_ie_defn(pCtx, pBufRemaining, nBuf - len, IEs);
341 if (NULL == pIe)
342 break;
343 if (pIe->eid == pIeFirst->eid)
344 break;
345 len += *(pBufRemaining + 1) + 2;
346 pBufRemaining += *(pBufRemaining + 1) + 2;
347 }
348
349 if ((len > 0xFF) || (len > nBuf))
350 return DOT11F_INTERNAL_ERROR;
351 *pnConsumed = len;
352 return DOT11F_PARSE_SUCCESS;
353
354 }
355
356
357 static uint32_t unpack_core(tpAniSirGlobal pCtx,
358 uint8_t *pBuf,
359 uint32_t nBuf,
360 const tFFDefn FFs[],
361 const tIEDefn IEs[],
362 uint8_t *pFrm,
363 size_t nFrm,
364 bool append_ie);
365 static uint32_t pack_core(tpAniSirGlobal pCtx,
366 uint8_t *pSrc,
367 uint8_t *pBuf,
368 uint32_t nBuf,
369 uint32_t *pnConsumed,
370 const tFFDefn FFs[],
371 const tIEDefn IEs[]);
372 static uint32_t get_packed_size_core(tpAniSirGlobal pCtx,
373 uint8_t *pFrm,
374 uint32_t *pnNeeded,
375 const tIEDefn IEs[]);
376
dot11f_unpack_tlv_common_func(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,uint8_t * pDstPresent,uint8_t * pDstField)377 static uint32_t dot11f_unpack_tlv_common_func(tpAniSirGlobal pCtx,
378 uint8_t *pBuf, uint16_t tlvlen,
379 uint8_t *pDstPresent, uint8_t *pDstField)
380 {
381 uint32_t status = DOT11F_PARSE_SUCCESS;
382 (void)tlvlen; /* Shutup the compiler */
383
384 *pDstPresent = 1;
385 *pDstField = *pBuf;
386 (void)pCtx;
387 return status;
388 } /* End dot11f_unpack_tlv_common_func. */
389
dot11f_unpack_tlv_common_func2(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,uint8_t * pDstPresent,uint16_t * pDstState)390 static uint32_t dot11f_unpack_tlv_common_func2(tpAniSirGlobal pCtx,
391 uint8_t *pBuf, uint16_t tlvlen,
392 uint8_t *pDstPresent, uint16_t *pDstState)
393 {
394 uint32_t status = DOT11F_PARSE_SUCCESS;
395 (void)tlvlen; /* Shutup the compiler */
396
397 *pDstPresent = 1;
398 framesntohs(pCtx, pDstState, pBuf, 1);
399 (void)pCtx;
400 return status;
401
402 } /* End dot11f_unpack_tlv_common_func2. */
403
dot11f_unpack_ff_common_func(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t * pDstField)404 static void dot11f_unpack_ff_common_func(tpAniSirGlobal pCtx,
405 uint8_t *pBuf, uint16_t *pDstField)
406 {
407 framesntohs(pCtx, pDstField, pBuf, 0);
408 (void)pCtx;
409 } /* End dot11f_unpack_ff_common_func. */
410
dot11f_unpack_ie_common_func(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,uint8_t * pDstPresent,uint8_t * pDstField)411 static uint32_t dot11f_unpack_ie_common_func(tpAniSirGlobal pCtx, uint8_t *pBuf,
412 uint8_t ielen, uint8_t *pDstPresent,
413 uint8_t *pDstField)
414 {
415 uint32_t status = DOT11F_PARSE_SUCCESS;
416 (void)ielen;
417 (void)pBuf;
418 if ((*pDstPresent))
419 status = DOT11F_DUPLICATE_IE;
420 *pDstPresent = 1;
421 *pDstField = *pBuf;
422 (void)pCtx;
423
424 return status;
425 } /* End dot11f_unpack_ie_common_func */
426
427 typedef struct sTLVDefn {
428 uint32_t offset;
429 uint32_t presenceOffset;
430 const char *name;
431 uint16_t sig;
432 uint32_t id;
433 uint32_t pec;
434 uint32_t minSize;
435 uint32_t maxSize;
436 uint8_t fMandatory;
437 uint8_t sType;
438 uint8_t sLen;
439 uint8_t fMsb;
440 } tTLVDefn;
441
find_tlv_defn(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,const tTLVDefn TLVs[])442 static const tTLVDefn *find_tlv_defn(tpAniSirGlobal pCtx,
443 uint8_t *pBuf,
444 uint32_t nBuf,
445 const tTLVDefn TLVs[])
446 {
447 const tTLVDefn *pTlv;
448 uint32_t pec;
449 uint16_t id;
450
451 pTlv = &(TLVs[0]);
452 (void)pCtx;
453 if (pTlv->sType == 2)
454 framesntohs(pCtx, &id, pBuf, 1);
455 else
456 id = *pBuf;
457
458 while (0xffff != pTlv->id) {
459 if (id == pTlv->id) {
460 if (0 == pTlv->pec)
461 return pTlv;
462
463 if (nBuf > 5) {
464 pec = ((*(pBuf + 4)) << 16) |
465 ((*(pBuf + 5)) << 8) |
466 *(pBuf + 6);
467 if (pec == pTlv->pec)
468 return pTlv;
469 }
470 }
471
472 ++pTlv;
473 }
474
475 return NULL;
476 }
477
478 static uint32_t unpack_tlv_core(tpAniSirGlobal pCtx,
479 uint8_t *pBuf,
480 uint32_t nBuf,
481 const tTLVDefn TLVs[],
482 uint8_t *pFrm,
483 size_t nFrm);
484 static uint32_t pack_tlv_core(tpAniSirGlobal pCtx,
485 uint8_t *pSrc,
486 uint8_t *pBuf,
487 uint32_t nBuf,
488 uint32_t *pnConsumed,
489 const tTLVDefn TLVs[],
490 uint32_t *pidx);
491 static uint32_t get_packed_size_tlv_core(tpAniSirGlobal pCtx,
492 uint8_t *pFrm,
493 uint32_t *pnNeeded,
494 const tTLVDefn TLVs[]);
495
496 #define SigFfAID (0x0001)
497
dot11f_unpack_ff_action(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfAction * pDst)498 void dot11f_unpack_ff_action(tpAniSirGlobal pCtx,
499 uint8_t *pBuf,
500 tDot11fFfAction *pDst)
501 {
502 pDst->action = *pBuf;
503 (void)pCtx;
504 } /* End dot11f_unpack_ff_action. */
505
506 #define SigFfAction (0x0002)
507
508 #define SigFfAuthAlgo (0x0003)
509
510 #define SigFfAuthSeqNo (0x0004)
511
512 #define SigFfBeaconInterval (0x0005)
513
dot11f_unpack_ff_capabilities(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfCapabilities * pDst)514 void dot11f_unpack_ff_capabilities(tpAniSirGlobal pCtx,
515 uint8_t *pBuf,
516 tDot11fFfCapabilities *pDst)
517 {
518 uint16_t tmp0__;
519 framesntohs(pCtx, &tmp0__, pBuf, 0);
520 pDst->ess = tmp0__ >> 0 & 0x1;
521 pDst->ibss = tmp0__ >> 1 & 0x1;
522 pDst->cfPollable = tmp0__ >> 2 & 0x1;
523 pDst->cfPollReq = tmp0__ >> 3 & 0x1;
524 pDst->privacy = tmp0__ >> 4 & 0x1;
525 pDst->shortPreamble = tmp0__ >> 5 & 0x1;
526 pDst->criticalUpdateFlag = tmp0__ >> 6 & 0x1;
527 pDst->channelAgility = tmp0__ >> 7 & 0x1;
528 pDst->spectrumMgt = tmp0__ >> 8 & 0x1;
529 pDst->qos = tmp0__ >> 9 & 0x1;
530 pDst->shortSlotTime = tmp0__ >> 10 & 0x1;
531 pDst->apsd = tmp0__ >> 11 & 0x1;
532 pDst->rrm = tmp0__ >> 12 & 0x1;
533 pDst->dsssOfdm = tmp0__ >> 13 & 0x1;
534 pDst->delayedBA = tmp0__ >> 14 & 0x1;
535 pDst->immediateBA = tmp0__ >> 15 & 0x1;
536 (void)pCtx;
537 } /* End dot11f_unpack_ff_capabilities. */
538
539 #define SigFfCapabilities (0x0006)
540
dot11f_unpack_ff_category(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfCategory * pDst)541 void dot11f_unpack_ff_category(tpAniSirGlobal pCtx,
542 uint8_t *pBuf,
543 tDot11fFfCategory *pDst)
544 {
545 pDst->category = *pBuf;
546 (void)pCtx;
547 } /* End dot11f_unpack_ff_category. */
548
549 #define SigFfCategory (0x0007)
550
dot11f_unpack_ff_current_ap_address(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfCurrentAPAddress * pDst)551 void dot11f_unpack_ff_current_ap_address(tpAniSirGlobal pCtx,
552 uint8_t *pBuf,
553 tDot11fFfCurrentAPAddress *pDst)
554 {
555 DOT11F_MEMCPY(pCtx, pDst->mac, pBuf, 6);
556 (void)pCtx;
557 } /* End dot11f_unpack_ff_current_ap_address. */
558
559 #define SigFfCurrentAPAddress (0x0008)
560
dot11f_unpack_ff_dialog_token(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfDialogToken * pDst)561 void dot11f_unpack_ff_dialog_token(tpAniSirGlobal pCtx,
562 uint8_t *pBuf,
563 tDot11fFfDialogToken *pDst)
564 {
565 pDst->token = *pBuf;
566 (void)pCtx;
567 } /* End dot11f_unpack_ff_dialog_token. */
568
569 #define SigFfDialogToken (0x0009)
570
dot11f_unpack_ff_link_margin(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfLinkMargin * pDst)571 void dot11f_unpack_ff_link_margin(tpAniSirGlobal pCtx,
572 uint8_t *pBuf,
573 tDot11fFfLinkMargin *pDst)
574 {
575 pDst->linkMargin = *pBuf;
576 (void)pCtx;
577 } /* End dot11f_unpack_ff_link_margin. */
578
579 #define SigFfLinkMargin (0x000a)
580
581 #define SigFfListenInterval (0x000b)
582
dot11f_unpack_ff_max_tx_power(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfMaxTxPower * pDst)583 void dot11f_unpack_ff_max_tx_power(tpAniSirGlobal pCtx,
584 uint8_t *pBuf,
585 tDot11fFfMaxTxPower *pDst)
586 {
587 pDst->maxTxPower = *pBuf;
588 (void)pCtx;
589 } /* End dot11f_unpack_ff_max_tx_power. */
590
591 #define SigFfMaxTxPower (0x000c)
592
dot11f_unpack_ff_num_of_repetitions(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfNumOfRepetitions * pDst)593 void dot11f_unpack_ff_num_of_repetitions(tpAniSirGlobal pCtx,
594 uint8_t *pBuf,
595 tDot11fFfNumOfRepetitions *pDst)
596 {
597 framesntohs(pCtx, &pDst->repetitions, pBuf, 0);
598 (void)pCtx;
599 } /* End dot11f_unpack_ff_num_of_repetitions. */
600
601 #define SigFfNumOfRepetitions (0x000d)
602
dot11f_unpack_ff_operating_mode(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfOperatingMode * pDst)603 void dot11f_unpack_ff_operating_mode(tpAniSirGlobal pCtx,
604 uint8_t *pBuf,
605 tDot11fFfOperatingMode *pDst)
606 {
607 uint8_t tmp1__;
608 tmp1__ = *pBuf;
609 pDst->chanWidth = tmp1__ >> 0 & 0x3;
610 pDst->reserved = tmp1__ >> 2 & 0x3;
611 pDst->rxNSS = tmp1__ >> 4 & 0x7;
612 pDst->rxNSSType = tmp1__ >> 7 & 0x1;
613 (void)pCtx;
614 } /* End dot11f_unpack_ff_operating_mode. */
615
616 #define SigFfOperatingMode (0x000e)
617
dot11f_unpack_ff_rcpi(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfRCPI * pDst)618 void dot11f_unpack_ff_rcpi(tpAniSirGlobal pCtx,
619 uint8_t *pBuf,
620 tDot11fFfRCPI *pDst)
621 {
622 pDst->rcpi = *pBuf;
623 (void)pCtx;
624 } /* End dot11f_unpack_ff_rcpi. */
625
626 #define SigFfRCPI (0x000f)
627
dot11f_unpack_ff_rsni(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfRSNI * pDst)628 void dot11f_unpack_ff_rsni(tpAniSirGlobal pCtx,
629 uint8_t *pBuf,
630 tDot11fFfRSNI *pDst)
631 {
632 pDst->rsni = *pBuf;
633 (void)pCtx;
634 } /* End dot11f_unpack_ff_rsni. */
635
636 #define SigFfRSNI (0x0010)
637
638 #define SigFfReason (0x0011)
639
dot11f_unpack_ff_rx_antenna_id(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfRxAntennaId * pDst)640 void dot11f_unpack_ff_rx_antenna_id(tpAniSirGlobal pCtx,
641 uint8_t *pBuf,
642 tDot11fFfRxAntennaId *pDst)
643 {
644 pDst->antennaId = *pBuf;
645 (void)pCtx;
646 } /* End dot11f_unpack_ff_rx_antenna_id. */
647
648 #define SigFfRxAntennaId (0x0012)
649
dot11f_unpack_ff_sm_power_mode_set(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfSMPowerModeSet * pDst)650 void dot11f_unpack_ff_sm_power_mode_set(tpAniSirGlobal pCtx,
651 uint8_t *pBuf,
652 tDot11fFfSMPowerModeSet *pDst)
653 {
654 uint8_t tmp2__;
655 tmp2__ = *pBuf;
656 pDst->PowerSave_En = tmp2__ >> 0 & 0x1;
657 pDst->Mode = tmp2__ >> 1 & 0x1;
658 pDst->reserved = tmp2__ >> 2 & 0x3f;
659 (void)pCtx;
660 } /* End dot11f_unpack_ff_sm_power_mode_set. */
661
662 #define SigFfSMPowerModeSet (0x0013)
663
664 #define SigFfStatus (0x0014)
665
dot11f_unpack_ff_status_code(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfStatusCode * pDst)666 void dot11f_unpack_ff_status_code(tpAniSirGlobal pCtx,
667 uint8_t *pBuf,
668 tDot11fFfStatusCode *pDst)
669 {
670 pDst->statusCode = *pBuf;
671 (void)pCtx;
672 } /* End dot11f_unpack_ff_status_code. */
673
674 #define SigFfStatusCode (0x0015)
675
dot11f_unpack_ff_tpc_ele_id(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfTPCEleID * pDst)676 void dot11f_unpack_ff_tpc_ele_id(tpAniSirGlobal pCtx,
677 uint8_t *pBuf,
678 tDot11fFfTPCEleID *pDst)
679 {
680 pDst->TPCId = *pBuf;
681 (void)pCtx;
682 } /* End dot11f_unpack_ff_tpc_ele_id. */
683
684 #define SigFfTPCEleID (0x0016)
685
dot11f_unpack_ff_tpc_ele_len(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfTPCEleLen * pDst)686 void dot11f_unpack_ff_tpc_ele_len(tpAniSirGlobal pCtx,
687 uint8_t *pBuf,
688 tDot11fFfTPCEleLen *pDst)
689 {
690 pDst->TPCLen = *pBuf;
691 (void)pCtx;
692 } /* End dot11f_unpack_ff_tpc_ele_len. */
693
694 #define SigFfTPCEleLen (0x0017)
695
dot11f_unpack_ff_ts_info(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfTSInfo * pDst)696 void dot11f_unpack_ff_ts_info(tpAniSirGlobal pCtx,
697 uint8_t *pBuf,
698 tDot11fFfTSInfo *pDst)
699 {
700 uint32_t tmp3__;
701 framesntohl(pCtx, &tmp3__, pBuf, 0);
702 pDst->traffic_type = tmp3__ >> 0 & 0x1;
703 pDst->tsid = tmp3__ >> 1 & 0xf;
704 pDst->direction = tmp3__ >> 5 & 0x3;
705 pDst->access_policy = tmp3__ >> 7 & 0x3;
706 pDst->aggregation = tmp3__ >> 9 & 0x1;
707 pDst->psb = tmp3__ >> 10 & 0x1;
708 pDst->user_priority = tmp3__ >> 11 & 0x7;
709 pDst->tsinfo_ack_pol = tmp3__ >> 14 & 0x3;
710 pDst->schedule = tmp3__ >> 16 & 0x1;
711 pDst->unused = tmp3__ >> 17 & 0x7fff;
712 (void)pCtx;
713 } /* End dot11f_unpack_ff_ts_info. */
714
715 #define SigFfTSInfo (0x0018)
716
dot11f_unpack_ff_time_stamp(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfTimeStamp * pDst)717 void dot11f_unpack_ff_time_stamp(tpAniSirGlobal pCtx,
718 uint8_t *pBuf,
719 tDot11fFfTimeStamp *pDst)
720 {
721 framesntohq(pCtx, &pDst->timestamp, pBuf, 0);
722 (void)pCtx;
723 } /* End dot11f_unpack_ff_time_stamp. */
724
725 #define SigFfTimeStamp (0x0019)
726
dot11f_unpack_ff_transaction_id(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfTransactionId * pDst)727 void dot11f_unpack_ff_transaction_id(tpAniSirGlobal pCtx,
728 uint8_t *pBuf,
729 tDot11fFfTransactionId *pDst)
730 {
731 DOT11F_MEMCPY(pCtx, pDst->transId, pBuf, 2);
732 (void)pCtx;
733 } /* End dot11f_unpack_ff_transaction_id. */
734
735 #define SigFfTransactionId (0x001a)
736
dot11f_unpack_ff_tx_antenna_id(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfTxAntennaId * pDst)737 void dot11f_unpack_ff_tx_antenna_id(tpAniSirGlobal pCtx,
738 uint8_t *pBuf,
739 tDot11fFfTxAntennaId *pDst)
740 {
741 pDst->antennaId = *pBuf;
742 (void)pCtx;
743 } /* End dot11f_unpack_ff_tx_antenna_id. */
744
745 #define SigFfTxAntennaId (0x001b)
746
dot11f_unpack_ff_tx_power(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfTxPower * pDst)747 void dot11f_unpack_ff_tx_power(tpAniSirGlobal pCtx,
748 uint8_t *pBuf,
749 tDot11fFfTxPower *pDst)
750 {
751 pDst->txPower = *pBuf;
752 (void)pCtx;
753 } /* End dot11f_unpack_ff_tx_power. */
754
755 #define SigFfTxPower (0x001c)
756
dot11f_unpack_ff_vht_membership_status_array(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfVhtMembershipStatusArray * pDst)757 void dot11f_unpack_ff_vht_membership_status_array(tpAniSirGlobal pCtx,
758 uint8_t *pBuf,
759 tDot11fFfVhtMembershipStatusArray *pDst)
760 {
761 DOT11F_MEMCPY(pCtx, pDst->membershipStatusArray, pBuf, 8);
762 (void)pCtx;
763 } /* End dot11f_unpack_ff_vht_membership_status_array. */
764
765 #define SigFfVhtMembershipStatusArray (0x001d)
766
dot11f_unpack_ff_vht_user_position_array(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfVhtUserPositionArray * pDst)767 void dot11f_unpack_ff_vht_user_position_array(tpAniSirGlobal pCtx,
768 uint8_t *pBuf,
769 tDot11fFfVhtUserPositionArray *pDst)
770 {
771 DOT11F_MEMCPY(pCtx, pDst->userPositionArray, pBuf, 16);
772 (void)pCtx;
773 } /* End dot11f_unpack_ff_vht_user_position_array. */
774
775 #define SigFfVhtUserPositionArray (0x001e)
776
dot11f_unpack_ff_addba_param_set(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfaddba_param_set * pDst)777 void dot11f_unpack_ff_addba_param_set(tpAniSirGlobal pCtx,
778 uint8_t *pBuf,
779 tDot11fFfaddba_param_set *pDst)
780 {
781 uint16_t tmp4__;
782 framesntohs(pCtx, &tmp4__, pBuf, 0);
783 pDst->amsdu_supp = tmp4__ >> 0 & 0x1;
784 pDst->policy = tmp4__ >> 1 & 0x1;
785 pDst->tid = tmp4__ >> 2 & 0xf;
786 pDst->buff_size = tmp4__ >> 6 & 0x3ff;
787 (void)pCtx;
788 } /* End dot11f_unpack_ff_addba_param_set. */
789
790 #define SigFfaddba_param_set (0x001f)
791
dot11f_unpack_ff_ba_start_seq_ctrl(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfba_start_seq_ctrl * pDst)792 void dot11f_unpack_ff_ba_start_seq_ctrl(tpAniSirGlobal pCtx,
793 uint8_t *pBuf,
794 tDot11fFfba_start_seq_ctrl *pDst)
795 {
796 uint16_t tmp5__;
797 framesntohs(pCtx, &tmp5__, pBuf, 0);
798 pDst->frag_number = tmp5__ >> 0 & 0xf;
799 pDst->ssn = tmp5__ >> 4 & 0xfff;
800 (void)pCtx;
801 } /* End dot11f_unpack_ff_ba_start_seq_ctrl. */
802
803 #define SigFfba_start_seq_ctrl (0x0020)
804
dot11f_unpack_ff_ba_timeout(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfba_timeout * pDst)805 void dot11f_unpack_ff_ba_timeout(tpAniSirGlobal pCtx,
806 uint8_t *pBuf,
807 tDot11fFfba_timeout *pDst)
808 {
809 framesntohs(pCtx, &pDst->timeout, pBuf, 0);
810 (void)pCtx;
811 } /* End dot11f_unpack_ff_ba_timeout. */
812
813 #define SigFfba_timeout (0x0021)
814
dot11f_unpack_ff_delba_param_set(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfdelba_param_set * pDst)815 void dot11f_unpack_ff_delba_param_set(tpAniSirGlobal pCtx,
816 uint8_t *pBuf,
817 tDot11fFfdelba_param_set *pDst)
818 {
819 uint16_t tmp6__;
820 framesntohs(pCtx, &tmp6__, pBuf, 0);
821 pDst->reserved = tmp6__ >> 0 & 0x7ff;
822 pDst->initiator = tmp6__ >> 11 & 0x1;
823 pDst->tid = tmp6__ >> 12 & 0xf;
824 (void)pCtx;
825 } /* End dot11f_unpack_ff_delba_param_set. */
826
827 #define SigFfdelba_param_set (0x0022)
828
dot11f_unpack_ff_ext_chan_switch_ann_action(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfext_chan_switch_ann_action * pDst)829 void dot11f_unpack_ff_ext_chan_switch_ann_action(tpAniSirGlobal pCtx,
830 uint8_t *pBuf,
831 tDot11fFfext_chan_switch_ann_action *pDst)
832 {
833 uint32_t tmp7__;
834 framesntohl(pCtx, &tmp7__, pBuf, 0);
835 pDst->switch_mode = tmp7__ >> 0 & 0xff;
836 pDst->op_class = tmp7__ >> 8 & 0xff;
837 pDst->new_channel = tmp7__ >> 16 & 0xff;
838 pDst->switch_count = tmp7__ >> 24 & 0xff;
839 (void)pCtx;
840 } /* End dot11f_unpack_ff_ext_chan_switch_ann_action. */
841
842 #define SigFfext_chan_switch_ann_action (0x0023)
843
dot11f_unpack_ff_p2p_action_oui(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfp2p_action_oui * pDst)844 void dot11f_unpack_ff_p2p_action_oui(tpAniSirGlobal pCtx,
845 uint8_t *pBuf,
846 tDot11fFfp2p_action_oui *pDst)
847 {
848 DOT11F_MEMCPY(pCtx, pDst->oui_data, pBuf, 4);
849 (void)pCtx;
850 } /* End dot11f_unpack_ff_p2p_action_oui. */
851
852 #define SigFfp2p_action_oui (0x0024)
853
dot11f_unpack_ff_p2p_action_subtype(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfp2p_action_subtype * pDst)854 void dot11f_unpack_ff_p2p_action_subtype(tpAniSirGlobal pCtx,
855 uint8_t *pBuf,
856 tDot11fFfp2p_action_subtype *pDst)
857 {
858 pDst->subtype = *pBuf;
859 (void)pCtx;
860 } /* End dot11f_unpack_ff_p2p_action_subtype. */
861
862 #define SigFfp2p_action_subtype (0x0025)
863
dot11f_unpack_ff_vendor_action_subtype(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfvendor_action_subtype * pDst)864 void dot11f_unpack_ff_vendor_action_subtype(tpAniSirGlobal pCtx,
865 uint8_t *pBuf,
866 tDot11fFfvendor_action_subtype *pDst)
867 {
868 pDst->subtype = *pBuf;
869 (void)pCtx;
870 } /* End dot11f_unpack_ff_vendor_action_subtype. */
871
872 #define SigFfvendor_action_subtype (0x0026)
873
dot11f_unpack_ff_vendor_oui(tpAniSirGlobal pCtx,uint8_t * pBuf,tDot11fFfvendor_oui * pDst)874 void dot11f_unpack_ff_vendor_oui(tpAniSirGlobal pCtx,
875 uint8_t *pBuf,
876 tDot11fFfvendor_oui *pDst)
877 {
878 DOT11F_MEMCPY(pCtx, pDst->oui_data, pBuf, 3);
879 (void)pCtx;
880 } /* End dot11f_unpack_ff_vendor_oui. */
881
882 #define SigFfvendor_oui (0x0027)
883
dot11f_unpack_tlv_authorized_ma_cs(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVAuthorizedMACs * pDst)884 uint32_t dot11f_unpack_tlv_authorized_ma_cs(tpAniSirGlobal pCtx,
885 uint8_t *pBuf,
886 uint16_t tlvlen,
887 tDot11fTLVAuthorizedMACs *pDst)
888 {
889 uint32_t status = DOT11F_PARSE_SUCCESS;
890 pDst->present = 1;
891 if (unlikely(tlvlen < 6)) {
892 pDst->present = 0;
893 return DOT11F_INCOMPLETE_IE;
894 }
895
896 DOT11F_MEMCPY(pCtx, pDst->mac, pBuf, 6);
897 pBuf += 6;
898 tlvlen -= (uint8_t)6;
899 (void)pCtx;
900 return status;
901 } /* End dot11f_unpack_tlv_authorized_ma_cs. */
902
903 #define SigTlvAuthorizedMACs (0x0001)
904
905
906 #define SigTlvRequestToEnroll (0x0002)
907
908
dot11f_unpack_tlv_version2(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVVersion2 * pDst)909 uint32_t dot11f_unpack_tlv_version2(tpAniSirGlobal pCtx,
910 uint8_t *pBuf,
911 uint16_t tlvlen,
912 tDot11fTLVVersion2 *pDst)
913 {
914 uint32_t status = DOT11F_PARSE_SUCCESS;
915 uint8_t tmp8__;
916 pDst->present = 1;
917 if (unlikely(tlvlen < 1)) {
918 pDst->present = 0;
919 return DOT11F_INCOMPLETE_IE;
920 }
921
922 tmp8__ = *pBuf;
923 pBuf += 1;
924 tlvlen -= 1;
925 pDst->minor = tmp8__ >> 0 & 0xf;
926 pDst->major = tmp8__ >> 4 & 0xf;
927 (void)pCtx;
928 return status;
929 } /* End dot11f_unpack_tlv_version2. */
930
931 #define SigTlvVersion2 (0x0003)
932
933
934 #define SigTlvAPSetupLocked (0x0004)
935
936
937 #define SigTlvAssociationState (0x0005)
938
939
940 #define SigTlvConfigMethods (0x0006)
941
942
943 #define SigTlvConfigurationError (0x0007)
944
945
dot11f_unpack_tlv_device_name(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVDeviceName * pDst)946 uint32_t dot11f_unpack_tlv_device_name(tpAniSirGlobal pCtx,
947 uint8_t *pBuf,
948 uint16_t tlvlen,
949 tDot11fTLVDeviceName *pDst)
950 {
951 uint32_t status = DOT11F_PARSE_SUCCESS;
952 pDst->present = 1;
953 pDst->num_text = (uint8_t)(tlvlen);
954 if (tlvlen > 32) {
955 pDst->present = 0;
956 return DOT11F_SKIPPED_BAD_IE;
957 }
958
959 DOT11F_MEMCPY(pCtx, pDst->text, pBuf, (tlvlen));
960 pBuf += (tlvlen);
961 tlvlen -= (tlvlen);
962 (void)pCtx;
963 return status;
964 } /* End dot11f_unpack_tlv_device_name. */
965
966 #define SigTlvDeviceName (0x0008)
967
968
969 #define SigTlvDevicePasswordID (0x0009)
970
971
dot11f_unpack_tlv_extended_listen_timing(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVExtendedListenTiming * pDst)972 uint32_t dot11f_unpack_tlv_extended_listen_timing(tpAniSirGlobal pCtx,
973 uint8_t *pBuf,
974 uint16_t tlvlen,
975 tDot11fTLVExtendedListenTiming *pDst)
976 {
977 uint32_t status = DOT11F_PARSE_SUCCESS;
978 pDst->present = 1;
979 if (unlikely(tlvlen < 2)) {
980 pDst->present = 0;
981 return DOT11F_INCOMPLETE_IE;
982 }
983
984 framesntohs(pCtx, &pDst->availibilityPeriod, pBuf, 0);
985 pBuf += 2;
986 tlvlen -= (uint8_t)2;
987 if (unlikely(tlvlen < 2)) {
988 pDst->present = 0;
989 return DOT11F_INCOMPLETE_IE;
990 }
991
992 framesntohs(pCtx, &pDst->availibilityInterval, pBuf, 0);
993 pBuf += 2;
994 tlvlen -= (uint8_t)2;
995 (void)pCtx;
996 return status;
997 } /* End dot11f_unpack_tlv_extended_listen_timing. */
998
999 #define SigTlvExtendedListenTiming (0x000a)
1000
1001
dot11f_unpack_tlv_listen_channel(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVListenChannel * pDst)1002 uint32_t dot11f_unpack_tlv_listen_channel(tpAniSirGlobal pCtx,
1003 uint8_t *pBuf,
1004 uint16_t tlvlen,
1005 tDot11fTLVListenChannel *pDst)
1006 {
1007 uint32_t status = DOT11F_PARSE_SUCCESS;
1008 pDst->present = 1;
1009 if (unlikely(tlvlen < 3)) {
1010 pDst->present = 0;
1011 return DOT11F_INCOMPLETE_IE;
1012 }
1013
1014 DOT11F_MEMCPY(pCtx, pDst->countryString, pBuf, 3);
1015 pBuf += 3;
1016 tlvlen -= (uint8_t)3;
1017 if (unlikely(tlvlen < 1)) {
1018 pDst->present = 0;
1019 return DOT11F_INCOMPLETE_IE;
1020 }
1021
1022 pDst->regulatoryClass = *pBuf;
1023 pBuf += 1;
1024 tlvlen -= (uint8_t)1;
1025 if (unlikely(tlvlen < 1)) {
1026 pDst->present = 0;
1027 return DOT11F_INCOMPLETE_IE;
1028 }
1029
1030 pDst->channel = *pBuf;
1031 pBuf += 1;
1032 tlvlen -= (uint8_t)1;
1033 (void)pCtx;
1034 return status;
1035 } /* End dot11f_unpack_tlv_listen_channel. */
1036
1037 #define SigTlvListenChannel (0x000b)
1038
1039
dot11f_unpack_tlv_manufacturer(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVManufacturer * pDst)1040 uint32_t dot11f_unpack_tlv_manufacturer(tpAniSirGlobal pCtx,
1041 uint8_t *pBuf,
1042 uint16_t tlvlen,
1043 tDot11fTLVManufacturer *pDst)
1044 {
1045 uint32_t status = DOT11F_PARSE_SUCCESS;
1046 pDst->present = 1;
1047 pDst->num_name = (uint8_t)(tlvlen);
1048 if (tlvlen > 64) {
1049 pDst->present = 0;
1050 return DOT11F_SKIPPED_BAD_IE;
1051 }
1052
1053 DOT11F_MEMCPY(pCtx, pDst->name, pBuf, (tlvlen));
1054 pBuf += (tlvlen);
1055 tlvlen -= (tlvlen);
1056 (void)pCtx;
1057 return status;
1058 } /* End dot11f_unpack_tlv_manufacturer. */
1059
1060 #define SigTlvManufacturer (0x000c)
1061
1062
1063 #define SigTlvMinorReasonCode (0x000d)
1064
1065
dot11f_unpack_tlv_model_name(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVModelName * pDst)1066 uint32_t dot11f_unpack_tlv_model_name(tpAniSirGlobal pCtx,
1067 uint8_t *pBuf,
1068 uint16_t tlvlen,
1069 tDot11fTLVModelName *pDst)
1070 {
1071 uint32_t status = DOT11F_PARSE_SUCCESS;
1072 pDst->present = 1;
1073 pDst->num_text = (uint8_t)(tlvlen);
1074 if (tlvlen > 32) {
1075 pDst->present = 0;
1076 return DOT11F_SKIPPED_BAD_IE;
1077 }
1078
1079 DOT11F_MEMCPY(pCtx, pDst->text, pBuf, (tlvlen));
1080 pBuf += (tlvlen);
1081 tlvlen -= (tlvlen);
1082 (void)pCtx;
1083 return status;
1084 } /* End dot11f_unpack_tlv_model_name. */
1085
1086 #define SigTlvModelName (0x000e)
1087
1088
dot11f_unpack_tlv_model_number(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVModelNumber * pDst)1089 uint32_t dot11f_unpack_tlv_model_number(tpAniSirGlobal pCtx,
1090 uint8_t *pBuf,
1091 uint16_t tlvlen,
1092 tDot11fTLVModelNumber *pDst)
1093 {
1094 uint32_t status = DOT11F_PARSE_SUCCESS;
1095 pDst->present = 1;
1096 pDst->num_text = (uint8_t)(tlvlen);
1097 if (tlvlen > 32) {
1098 pDst->present = 0;
1099 return DOT11F_SKIPPED_BAD_IE;
1100 }
1101
1102 DOT11F_MEMCPY(pCtx, pDst->text, pBuf, (tlvlen));
1103 pBuf += (tlvlen);
1104 tlvlen -= (tlvlen);
1105 (void)pCtx;
1106 return status;
1107 } /* End dot11f_unpack_tlv_model_number. */
1108
1109 #define SigTlvModelNumber (0x000f)
1110
1111
dot11f_unpack_tlv_notice_of_absence(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVNoticeOfAbsence * pDst)1112 uint32_t dot11f_unpack_tlv_notice_of_absence(tpAniSirGlobal pCtx,
1113 uint8_t *pBuf,
1114 uint16_t tlvlen,
1115 tDot11fTLVNoticeOfAbsence *pDst)
1116 {
1117 uint32_t status = DOT11F_PARSE_SUCCESS;
1118 pDst->present = 1;
1119 if (unlikely(tlvlen < 1)) {
1120 pDst->present = 0;
1121 return DOT11F_INCOMPLETE_IE;
1122 }
1123
1124 pDst->index = *pBuf;
1125 pBuf += 1;
1126 tlvlen -= (uint8_t)1;
1127 if (unlikely(tlvlen < 1)) {
1128 pDst->present = 0;
1129 return DOT11F_INCOMPLETE_IE;
1130 }
1131
1132 pDst->CTSWindowOppPS = *pBuf;
1133 pBuf += 1;
1134 tlvlen -= (uint8_t)1;
1135 pDst->num_NoADesc = (uint8_t)(tlvlen);
1136 if (tlvlen > 36) {
1137 pDst->present = 0;
1138 return DOT11F_SKIPPED_BAD_IE;
1139 }
1140
1141 DOT11F_MEMCPY(pCtx, pDst->NoADesc, pBuf, (tlvlen));
1142 pBuf += (tlvlen);
1143 tlvlen -= (tlvlen);
1144 (void)pCtx;
1145 return status;
1146 } /* End dot11f_unpack_tlv_notice_of_absence. */
1147
1148 #define SigTlvNoticeOfAbsence (0x0010)
1149
1150
dot11f_unpack_tlv_operating_channel(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVOperatingChannel * pDst)1151 uint32_t dot11f_unpack_tlv_operating_channel(tpAniSirGlobal pCtx,
1152 uint8_t *pBuf,
1153 uint16_t tlvlen,
1154 tDot11fTLVOperatingChannel *pDst)
1155 {
1156 uint32_t status = DOT11F_PARSE_SUCCESS;
1157 pDst->present = 1;
1158 if (unlikely(tlvlen < 3)) {
1159 pDst->present = 0;
1160 return DOT11F_INCOMPLETE_IE;
1161 }
1162
1163 DOT11F_MEMCPY(pCtx, pDst->countryString, pBuf, 3);
1164 pBuf += 3;
1165 tlvlen -= (uint8_t)3;
1166 if (unlikely(tlvlen < 1)) {
1167 pDst->present = 0;
1168 return DOT11F_INCOMPLETE_IE;
1169 }
1170
1171 pDst->regulatoryClass = *pBuf;
1172 pBuf += 1;
1173 tlvlen -= (uint8_t)1;
1174 if (unlikely(tlvlen < 1)) {
1175 pDst->present = 0;
1176 return DOT11F_INCOMPLETE_IE;
1177 }
1178
1179 pDst->channel = *pBuf;
1180 pBuf += 1;
1181 tlvlen -= (uint8_t)1;
1182 (void)pCtx;
1183 return status;
1184 } /* End dot11f_unpack_tlv_operating_channel. */
1185
1186 #define SigTlvOperatingChannel (0x0011)
1187
1188
dot11f_unpack_tlv_p2_p_capability(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVP2PCapability * pDst)1189 uint32_t dot11f_unpack_tlv_p2_p_capability(tpAniSirGlobal pCtx,
1190 uint8_t *pBuf,
1191 uint16_t tlvlen,
1192 tDot11fTLVP2PCapability *pDst)
1193 {
1194 uint32_t status = DOT11F_PARSE_SUCCESS;
1195 pDst->present = 1;
1196 if (unlikely(tlvlen < 1)) {
1197 pDst->present = 0;
1198 return DOT11F_INCOMPLETE_IE;
1199 }
1200
1201 pDst->deviceCapability = *pBuf;
1202 pBuf += 1;
1203 tlvlen -= (uint8_t)1;
1204 if (unlikely(tlvlen < 1)) {
1205 pDst->present = 0;
1206 return DOT11F_INCOMPLETE_IE;
1207 }
1208
1209 pDst->groupCapability = *pBuf;
1210 pBuf += 1;
1211 tlvlen -= (uint8_t)1;
1212 (void)pCtx;
1213 return status;
1214 } /* End dot11f_unpack_tlv_p2_p_capability. */
1215
1216 #define SigTlvP2PCapability (0x0012)
1217
1218
dot11f_unpack_tlv_p2_p_device_id(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVP2PDeviceId * pDst)1219 uint32_t dot11f_unpack_tlv_p2_p_device_id(tpAniSirGlobal pCtx,
1220 uint8_t *pBuf,
1221 uint16_t tlvlen,
1222 tDot11fTLVP2PDeviceId *pDst)
1223 {
1224 uint32_t status = DOT11F_PARSE_SUCCESS;
1225 pDst->present = 1;
1226 if (unlikely(tlvlen < 6)) {
1227 pDst->present = 0;
1228 return DOT11F_INCOMPLETE_IE;
1229 }
1230
1231 DOT11F_MEMCPY(pCtx, pDst->P2PDeviceAddress, pBuf, 6);
1232 pBuf += 6;
1233 tlvlen -= (uint8_t)6;
1234 (void)pCtx;
1235 return status;
1236 } /* End dot11f_unpack_tlv_p2_p_device_id. */
1237
1238 #define SigTlvP2PDeviceId (0x0013)
1239
1240
1241 static const tTLVDefn TLVS_P2PDeviceInfo[] = {
1242 { offsetof(tDot11fTLVP2PDeviceInfo, DeviceName),
1243 offsetof(tDot11fTLVDeviceName, present), "DeviceName", SigTlvDeviceName,
1244 DOT11F_TLV_DEVICENAME, 0, 4, 36, 1, 2, 2, 1, },
1245 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
1246 };
1247
dot11f_unpack_tlv_p2_p_device_info(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVP2PDeviceInfo * pDst)1248 uint32_t dot11f_unpack_tlv_p2_p_device_info(tpAniSirGlobal pCtx,
1249 uint8_t *pBuf,
1250 uint16_t tlvlen,
1251 tDot11fTLVP2PDeviceInfo *pDst)
1252 {
1253 uint32_t status = DOT11F_PARSE_SUCCESS;
1254 pDst->present = 1;
1255 if (unlikely(tlvlen < 6)) {
1256 pDst->present = 0;
1257 return DOT11F_INCOMPLETE_IE;
1258 }
1259
1260 DOT11F_MEMCPY(pCtx, pDst->P2PDeviceAddress, pBuf, 6);
1261 pBuf += 6;
1262 tlvlen -= (uint8_t)6;
1263 if (unlikely(tlvlen < 2)) {
1264 pDst->present = 0;
1265 return DOT11F_INCOMPLETE_IE;
1266 }
1267
1268 framesntohs(pCtx, &pDst->configMethod, pBuf, 0);
1269 pBuf += 2;
1270 tlvlen -= (uint8_t)2;
1271 if (unlikely(tlvlen < 8)) {
1272 pDst->present = 0;
1273 return DOT11F_INCOMPLETE_IE;
1274 }
1275
1276 DOT11F_MEMCPY(pCtx, pDst->primaryDeviceType, pBuf, 8);
1277 pBuf += 8;
1278 tlvlen -= (uint8_t)8;
1279 (void)pCtx;
1280 status |= unpack_tlv_core(pCtx,
1281 pBuf,
1282 tlvlen,
1283 TLVS_P2PDeviceInfo,
1284 (uint8_t *)pDst,
1285 sizeof(*pDst));
1286 return status;
1287 } /* End dot11f_unpack_tlv_p2_p_device_info. */
1288
1289 #define SigTlvP2PDeviceInfo (0x0014)
1290
1291
dot11f_unpack_tlv_p2_p_group_info(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVP2PGroupInfo * pDst)1292 uint32_t dot11f_unpack_tlv_p2_p_group_info(tpAniSirGlobal pCtx,
1293 uint8_t *pBuf,
1294 uint16_t tlvlen,
1295 tDot11fTLVP2PGroupInfo *pDst)
1296 {
1297 uint32_t status = DOT11F_PARSE_SUCCESS;
1298 pDst->present = 1;
1299 pDst->num_P2PClientInfoDesc = (uint8_t)(tlvlen);
1300 DOT11F_MEMCPY(pCtx, pDst->P2PClientInfoDesc, pBuf, (tlvlen));
1301 pBuf += (tlvlen);
1302 tlvlen -= (tlvlen);
1303 (void)pCtx;
1304 return status;
1305 } /* End dot11f_unpack_tlv_p2_p_group_info. */
1306
1307 #define SigTlvP2PGroupInfo (0x0015)
1308
1309
1310 #define SigTlvP2PStatus (0x0016)
1311
1312
dot11f_unpack_tlv_primary_device_type(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVPrimaryDeviceType * pDst)1313 uint32_t dot11f_unpack_tlv_primary_device_type(tpAniSirGlobal pCtx,
1314 uint8_t *pBuf,
1315 uint16_t tlvlen,
1316 tDot11fTLVPrimaryDeviceType *pDst)
1317 {
1318 uint32_t status = DOT11F_PARSE_SUCCESS;
1319 (void)pBuf; (void)tlvlen; /* Shutup the compiler */
1320 pDst->present = 1;
1321 if (unlikely(tlvlen < 2)) {
1322 pDst->present = 0;
1323 return DOT11F_INCOMPLETE_IE;
1324 }
1325
1326 framesntohs(pCtx, &pDst->primary_category, pBuf, 1);
1327 pBuf += 2;
1328 tlvlen -= (uint8_t)2;
1329 if (unlikely(tlvlen < 4)) {
1330 pDst->present = 0;
1331 return DOT11F_INCOMPLETE_IE;
1332 }
1333
1334 DOT11F_MEMCPY(pCtx, pDst->oui, pBuf, 4);
1335 pBuf += 4;
1336 tlvlen -= (uint8_t)4;
1337 if (unlikely(tlvlen < 2)) {
1338 pDst->present = 0;
1339 return DOT11F_INCOMPLETE_IE;
1340 }
1341
1342 framesntohs(pCtx, &pDst->sub_category, pBuf, 1);
1343 pBuf += 2;
1344 tlvlen -= (uint8_t)2;
1345 (void)pCtx;
1346 return status;
1347 } /* End dot11f_unpack_tlv_primary_device_type. */
1348
1349 #define SigTlvPrimaryDeviceType (0x0017)
1350
1351
1352 #define SigTlvRFBands (0x0018)
1353
1354
dot11f_unpack_tlv_request_device_type(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVRequestDeviceType * pDst)1355 uint32_t dot11f_unpack_tlv_request_device_type(tpAniSirGlobal pCtx,
1356 uint8_t *pBuf,
1357 uint16_t tlvlen,
1358 tDot11fTLVRequestDeviceType *pDst)
1359 {
1360 uint32_t status = DOT11F_PARSE_SUCCESS;
1361 pDst->present = 1;
1362 if (unlikely(tlvlen < 2)) {
1363 pDst->present = 0;
1364 return DOT11F_INCOMPLETE_IE;
1365 }
1366
1367 framesntohs(pCtx, &pDst->primary_category, pBuf, 1);
1368 pBuf += 2;
1369 tlvlen -= (uint8_t)2;
1370 if (unlikely(tlvlen < 4)) {
1371 pDst->present = 0;
1372 return DOT11F_INCOMPLETE_IE;
1373 }
1374
1375 DOT11F_MEMCPY(pCtx, pDst->oui, pBuf, 4);
1376 pBuf += 4;
1377 tlvlen -= (uint8_t)4;
1378 if (unlikely(tlvlen < 2)) {
1379 pDst->present = 0;
1380 return DOT11F_INCOMPLETE_IE;
1381 }
1382
1383 framesntohs(pCtx, &pDst->sub_category, pBuf, 1);
1384 pBuf += 2;
1385 tlvlen -= (uint8_t)2;
1386 (void)pCtx;
1387 return status;
1388 } /* End dot11f_unpack_tlv_request_device_type. */
1389
1390 #define SigTlvRequestDeviceType (0x0019)
1391
1392
1393 #define SigTlvRequestType (0x001a)
1394
1395
1396 #define SigTlvResponseType (0x001b)
1397
1398
1399 #define SigTlvSelectedRegistrar (0x001c)
1400
1401
1402 #define SigTlvSelectedRegistrarConfigMethods (0x001d)
1403
1404
dot11f_unpack_tlv_serial_number(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVSerialNumber * pDst)1405 uint32_t dot11f_unpack_tlv_serial_number(tpAniSirGlobal pCtx,
1406 uint8_t *pBuf,
1407 uint16_t tlvlen,
1408 tDot11fTLVSerialNumber *pDst)
1409 {
1410 uint32_t status = DOT11F_PARSE_SUCCESS;
1411 pDst->present = 1;
1412 pDst->num_text = (uint8_t)(tlvlen);
1413 if (tlvlen > 32) {
1414 pDst->present = 0;
1415 return DOT11F_SKIPPED_BAD_IE;
1416 }
1417
1418 DOT11F_MEMCPY(pCtx, pDst->text, pBuf, (tlvlen));
1419 pBuf += (tlvlen);
1420 tlvlen -= (tlvlen);
1421 (void)pCtx;
1422 return status;
1423 } /* End dot11f_unpack_tlv_serial_number. */
1424
1425 #define SigTlvSerialNumber (0x001e)
1426
1427
dot11f_unpack_tlv_uuid_e(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVUUID_E * pDst)1428 uint32_t dot11f_unpack_tlv_uuid_e(tpAniSirGlobal pCtx,
1429 uint8_t *pBuf,
1430 uint16_t tlvlen,
1431 tDot11fTLVUUID_E *pDst)
1432 {
1433 uint32_t status = DOT11F_PARSE_SUCCESS;
1434 pDst->present = 1;
1435 if (unlikely(tlvlen < 16)) {
1436 pDst->present = 0;
1437 return DOT11F_INCOMPLETE_IE;
1438 }
1439
1440 DOT11F_MEMCPY(pCtx, pDst->uuid, pBuf, 16);
1441 pBuf += 16;
1442 tlvlen -= (uint8_t)16;
1443 (void)pCtx;
1444 return status;
1445 } /* End dot11f_unpack_tlv_uuid_e. */
1446
1447 #define SigTlvUUID_E (0x001f)
1448
1449
dot11f_unpack_tlv_uuid_r(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVUUID_R * pDst)1450 uint32_t dot11f_unpack_tlv_uuid_r(tpAniSirGlobal pCtx,
1451 uint8_t *pBuf,
1452 uint16_t tlvlen,
1453 tDot11fTLVUUID_R *pDst)
1454 {
1455 uint32_t status = DOT11F_PARSE_SUCCESS;
1456 pDst->present = 1;
1457 if (unlikely(tlvlen < 16)) {
1458 pDst->present = 0;
1459 return DOT11F_INCOMPLETE_IE;
1460 }
1461
1462 DOT11F_MEMCPY(pCtx, pDst->uuid, pBuf, 16);
1463 pBuf += 16;
1464 tlvlen -= (uint8_t)16;
1465 (void)pCtx;
1466 return status;
1467 } /* End dot11f_unpack_tlv_uuid_r. */
1468
1469 #define SigTlvUUID_R (0x0020)
1470
1471
1472 static const tTLVDefn TLVS_VendorExtension[] = {
1473 { offsetof(tDot11fTLVVendorExtension, Version2),
1474 offsetof(tDot11fTLVVersion2, present), "Version2", SigTlvVersion2,
1475 DOT11F_TLV_VERSION2, 0, 3, 3, 0, 1, 1, 1, },
1476 { offsetof(tDot11fTLVVendorExtension, AuthorizedMACs),
1477 offsetof(tDot11fTLVAuthorizedMACs, present), "AuthorizedMACs",
1478 SigTlvAuthorizedMACs, DOT11F_TLV_AUTHORIZEDMACS, 0, 8, 8, 0, 1, 1, 1, },
1479 { offsetof(tDot11fTLVVendorExtension, RequestToEnroll),
1480 offsetof(tDot11fTLVRequestToEnroll, present), "RequestToEnroll",
1481 SigTlvRequestToEnroll, DOT11F_TLV_REQUESTTOENROLL,
1482 0, 3, 3, 0, 1, 1, 1, },
1483 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
1484 };
1485
dot11f_unpack_tlv_vendor_extension(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVVendorExtension * pDst)1486 uint32_t dot11f_unpack_tlv_vendor_extension(tpAniSirGlobal pCtx,
1487 uint8_t *pBuf,
1488 uint16_t tlvlen,
1489 tDot11fTLVVendorExtension *pDst)
1490 {
1491 uint32_t status = DOT11F_PARSE_SUCCESS;
1492 pDst->present = 1;
1493 if (unlikely(tlvlen < 3)) {
1494 pDst->present = 0;
1495 return DOT11F_INCOMPLETE_IE;
1496 }
1497
1498 DOT11F_MEMCPY(pCtx, pDst->vendorId, pBuf, 3);
1499 pBuf += 3;
1500 tlvlen -= (uint8_t)3;
1501 (void)pCtx;
1502 status |= unpack_tlv_core(pCtx,
1503 pBuf,
1504 tlvlen,
1505 TLVS_VendorExtension,
1506 (uint8_t *)pDst,
1507 sizeof(*pDst));
1508 return status;
1509 } /* End dot11f_unpack_tlv_vendor_extension. */
1510
1511 #define SigTlvVendorExtension (0x0021)
1512
1513
dot11f_unpack_tlv_version(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVVersion * pDst)1514 uint32_t dot11f_unpack_tlv_version(tpAniSirGlobal pCtx,
1515 uint8_t *pBuf,
1516 uint16_t tlvlen,
1517 tDot11fTLVVersion *pDst)
1518 {
1519 uint32_t status = DOT11F_PARSE_SUCCESS;
1520 uint8_t tmp9__;
1521 pDst->present = 1;
1522 if (unlikely(tlvlen < 1)) {
1523 pDst->present = 0;
1524 return DOT11F_INCOMPLETE_IE;
1525 }
1526
1527 tmp9__ = *pBuf;
1528 pBuf += 1;
1529 tlvlen -= 1;
1530 pDst->minor = tmp9__ >> 0 & 0xf;
1531 pDst->major = tmp9__ >> 4 & 0xf;
1532 (void)pCtx;
1533 return status;
1534 } /* End dot11f_unpack_tlv_version. */
1535
1536 #define SigTlvVersion (0x0022)
1537
1538
1539 #define SigTlvWPSState (0x0023)
1540
1541
1542 #define SigTlvassoc_disallowed (0x0024)
1543
1544
1545 #define SigTlvassoc_retry_delay (0x0025)
1546
1547
1548 #define SigTlvcellular_data_cap (0x0026)
1549
1550
1551 #define SigTlvcellular_data_con_pref (0x0027)
1552
1553
dot11f_unpack_tlv_ecsa_target_tsf_info_attr(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVecsa_target_tsf_info_attr * pDst)1554 uint32_t dot11f_unpack_tlv_ecsa_target_tsf_info_attr(tpAniSirGlobal pCtx,
1555 uint8_t *pBuf,
1556 uint16_t tlvlen,
1557 tDot11fTLVecsa_target_tsf_info_attr *pDst)
1558 {
1559 uint32_t status = DOT11F_PARSE_SUCCESS;
1560 pDst->present = 1;
1561 if (unlikely(tlvlen < 1)) {
1562 pDst->present = 0;
1563 return DOT11F_INCOMPLETE_IE;
1564 }
1565
1566 pDst->twt_ch_sw_mode = *pBuf;
1567 pBuf += 1;
1568 tlvlen -= (uint8_t)1;
1569 if (unlikely(tlvlen < 8)) {
1570 pDst->present = 0;
1571 return DOT11F_INCOMPLETE_IE;
1572 }
1573
1574 framesntohq(pCtx, &pDst->target_tsf, pBuf, 0);
1575 pBuf += 8;
1576 tlvlen -= (uint8_t)8;
1577 (void)pCtx;
1578 return status;
1579 } /* End dot11f_unpack_tlv_ecsa_target_tsf_info_attr. */
1580
1581 #define SigTlvecsa_target_tsf_info_attr (0x0028)
1582
1583
dot11f_unpack_tlv_edca_pifs_param_attr(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVedca_pifs_param_attr * pDst)1584 uint32_t dot11f_unpack_tlv_edca_pifs_param_attr(tpAniSirGlobal pCtx,
1585 uint8_t *pBuf,
1586 uint16_t tlvlen,
1587 tDot11fTLVedca_pifs_param_attr *pDst)
1588 {
1589 uint32_t status = DOT11F_PARSE_SUCCESS;
1590 pDst->present = 1;
1591 if (unlikely(tlvlen < 1)) {
1592 pDst->present = 0;
1593 return DOT11F_INCOMPLETE_IE;
1594 }
1595
1596 pDst->edca_param_type = *pBuf;
1597 pBuf += 1;
1598 tlvlen -= (uint8_t)1;
1599 pDst->num_data = (uint8_t)(tlvlen);
1600 if (tlvlen > 4) {
1601 pDst->present = 0;
1602 return DOT11F_SKIPPED_BAD_IE;
1603 }
1604
1605 DOT11F_MEMCPY(pCtx, pDst->data, pBuf, (tlvlen));
1606 pBuf += (tlvlen);
1607 tlvlen -= (tlvlen);
1608 (void)pCtx;
1609 return status;
1610 } /* End dot11f_unpack_tlv_edca_pifs_param_attr. */
1611
1612 #define SigTlvedca_pifs_param_attr (0x0029)
1613
1614
1615 #define SigTlvhe_2xltf_160mhz_supp (0x002a)
1616
1617
dot11f_unpack_tlv_he_400ns_sgi_attr(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVhe_400ns_sgi_attr * pDst)1618 uint32_t dot11f_unpack_tlv_he_400ns_sgi_attr(tpAniSirGlobal pCtx,
1619 uint8_t *pBuf,
1620 uint16_t tlvlen,
1621 tDot11fTLVhe_400ns_sgi_attr *pDst)
1622 {
1623 uint32_t status = DOT11F_PARSE_SUCCESS;
1624 pDst->present = 1;
1625 if (unlikely(tlvlen < 1)) {
1626 pDst->present = 0;
1627 return DOT11F_INCOMPLETE_IE;
1628 }
1629
1630 pDst->he_ltf1x_400ns_sgi = *pBuf;
1631 pBuf += 1;
1632 tlvlen -= (uint8_t)1;
1633 if (unlikely(tlvlen < 1)) {
1634 pDst->present = 0;
1635 return DOT11F_INCOMPLETE_IE;
1636 }
1637
1638 pDst->he_ltf2x_400ns_sgi = *pBuf;
1639 pBuf += 1;
1640 tlvlen -= (uint8_t)1;
1641 if (unlikely(tlvlen < 1)) {
1642 pDst->present = 0;
1643 return DOT11F_INCOMPLETE_IE;
1644 }
1645
1646 pDst->he_ltf4x_400ns_sgi = *pBuf;
1647 pBuf += 1;
1648 tlvlen -= (uint8_t)1;
1649 (void)pCtx;
1650 return status;
1651 } /* End dot11f_unpack_tlv_he_400ns_sgi_attr. */
1652
1653 #define SigTlvhe_400ns_sgi_attr (0x002b)
1654
1655
1656 #define SigTlvhe_dl_mumimo_attr (0x002c)
1657
1658
1659 #define SigTlvhe_dl_ofdma_attr (0x002d)
1660
1661
dot11f_unpack_tlv_he_mcs13_attr(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVhe_mcs13_attr * pDst)1662 uint32_t dot11f_unpack_tlv_he_mcs13_attr(tpAniSirGlobal pCtx,
1663 uint8_t *pBuf,
1664 uint16_t tlvlen,
1665 tDot11fTLVhe_mcs13_attr *pDst)
1666 {
1667 uint32_t status = DOT11F_PARSE_SUCCESS;
1668 pDst->present = 1;
1669 if (unlikely(tlvlen < 1)) {
1670 pDst->present = 0;
1671 return DOT11F_INCOMPLETE_IE;
1672 }
1673
1674 pDst->he_mcs_12_13_supp_80 = *pBuf;
1675 pBuf += 1;
1676 tlvlen -= (uint8_t)1;
1677 if (unlikely(tlvlen < 1)) {
1678 pDst->present = 0;
1679 return DOT11F_INCOMPLETE_IE;
1680 }
1681
1682 pDst->he_mcs_12_13_supp_160 = *pBuf;
1683 pBuf += 1;
1684 tlvlen -= (uint8_t)1;
1685 (void)pCtx;
1686 return status;
1687 } /* End dot11f_unpack_tlv_he_mcs13_attr. */
1688
1689 #define SigTlvhe_mcs13_attr (0x002e)
1690
1691
1692 #define SigTlvmbo_ap_cap (0x002f)
1693
1694
dot11f_unpack_tlv_non_prefferd_chan_rep(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVnon_prefferd_chan_rep * pDst)1695 uint32_t dot11f_unpack_tlv_non_prefferd_chan_rep(tpAniSirGlobal pCtx,
1696 uint8_t *pBuf,
1697 uint16_t tlvlen,
1698 tDot11fTLVnon_prefferd_chan_rep *pDst)
1699 {
1700 uint32_t status = DOT11F_PARSE_SUCCESS;
1701 pDst->present = 1;
1702 if (unlikely(tlvlen < 1)) {
1703 pDst->present = 0;
1704 return DOT11F_INCOMPLETE_IE;
1705 }
1706
1707 pDst->oper_class = *pBuf;
1708 pBuf += 1;
1709 tlvlen -= (uint8_t)1;
1710 pDst->num_channel_report = (uint8_t)(tlvlen);
1711 if (tlvlen > 254) {
1712 pDst->present = 0;
1713 return DOT11F_SKIPPED_BAD_IE;
1714 }
1715
1716 DOT11F_MEMCPY(pCtx, pDst->channel_report, pBuf, (tlvlen));
1717 pBuf += (tlvlen);
1718 tlvlen -= (tlvlen);
1719 (void)pCtx;
1720 return status;
1721 } /* End dot11f_unpack_tlv_non_prefferd_chan_rep. */
1722
1723 #define SigTlvnon_prefferd_chan_rep (0x0030)
1724
1725
dot11f_unpack_tlv_oce_cap(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVoce_cap * pDst)1726 uint32_t dot11f_unpack_tlv_oce_cap(tpAniSirGlobal pCtx,
1727 uint8_t *pBuf,
1728 uint16_t tlvlen,
1729 tDot11fTLVoce_cap *pDst)
1730 {
1731 uint32_t status = DOT11F_PARSE_SUCCESS;
1732 uint8_t tmp10__;
1733 pDst->present = 1;
1734 if (unlikely(tlvlen < 1)) {
1735 pDst->present = 0;
1736 return DOT11F_INCOMPLETE_IE;
1737 }
1738
1739 tmp10__ = *pBuf;
1740 pBuf += 1;
1741 tlvlen -= 1;
1742 pDst->oce_release = tmp10__ >> 0 & 0x7;
1743 pDst->is_sta_cfon = tmp10__ >> 3 & 0x1;
1744 pDst->non_oce_ap_present = tmp10__ >> 4 & 0x1;
1745 pDst->reserved = tmp10__ >> 5 & 0x7;
1746 (void)pCtx;
1747 return status;
1748 } /* End dot11f_unpack_tlv_oce_cap. */
1749
1750 #define SigTlvoce_cap (0x0031)
1751
1752
dot11f_unpack_tlv_qcn_version(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVqcn_version * pDst)1753 uint32_t dot11f_unpack_tlv_qcn_version(tpAniSirGlobal pCtx,
1754 uint8_t *pBuf,
1755 uint16_t tlvlen,
1756 tDot11fTLVqcn_version *pDst)
1757 {
1758 uint32_t status = DOT11F_PARSE_SUCCESS;
1759 pDst->present = 1;
1760 if (unlikely(tlvlen < 1)) {
1761 pDst->present = 0;
1762 return DOT11F_INCOMPLETE_IE;
1763 }
1764
1765 pDst->version = *pBuf;
1766 pBuf += 1;
1767 tlvlen -= (uint8_t)1;
1768 if (unlikely(tlvlen < 1)) {
1769 pDst->present = 0;
1770 return DOT11F_INCOMPLETE_IE;
1771 }
1772
1773 pDst->sub_version = *pBuf;
1774 pBuf += 1;
1775 tlvlen -= (uint8_t)1;
1776 (void)pCtx;
1777 return status;
1778 } /* End dot11f_unpack_tlv_qcn_version. */
1779
1780 #define SigTlvqcn_version (0x0032)
1781
1782
dot11f_unpack_tlv_reduced_wan_metrics(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVreduced_wan_metrics * pDst)1783 uint32_t dot11f_unpack_tlv_reduced_wan_metrics(tpAniSirGlobal pCtx,
1784 uint8_t *pBuf,
1785 uint16_t tlvlen,
1786 tDot11fTLVreduced_wan_metrics *pDst)
1787 {
1788 uint32_t status = DOT11F_PARSE_SUCCESS;
1789 uint8_t tmp11__;
1790 pDst->present = 1;
1791 if (unlikely(tlvlen < 1)) {
1792 pDst->present = 0;
1793 return DOT11F_INCOMPLETE_IE;
1794 }
1795
1796 tmp11__ = *pBuf;
1797 pBuf += 1;
1798 tlvlen -= 1;
1799 pDst->downlink_av_cap = tmp11__ >> 0 & 0xf;
1800 pDst->uplink_av_cap = tmp11__ >> 4 & 0xf;
1801 (void)pCtx;
1802 return status;
1803 } /* End dot11f_unpack_tlv_reduced_wan_metrics. */
1804
1805 #define SigTlvreduced_wan_metrics (0x0033)
1806
1807
dot11f_unpack_tlv_rssi_assoc_rej(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVrssi_assoc_rej * pDst)1808 uint32_t dot11f_unpack_tlv_rssi_assoc_rej(tpAniSirGlobal pCtx,
1809 uint8_t *pBuf,
1810 uint16_t tlvlen,
1811 tDot11fTLVrssi_assoc_rej *pDst)
1812 {
1813 uint32_t status = DOT11F_PARSE_SUCCESS;
1814 pDst->present = 1;
1815 if (unlikely(tlvlen < 1)) {
1816 pDst->present = 0;
1817 return DOT11F_INCOMPLETE_IE;
1818 }
1819
1820 pDst->delta_rssi = *pBuf;
1821 pBuf += 1;
1822 tlvlen -= (uint8_t)1;
1823 if (unlikely(tlvlen < 1)) {
1824 pDst->present = 0;
1825 return DOT11F_INCOMPLETE_IE;
1826 }
1827
1828 pDst->retry_delay = *pBuf;
1829 pBuf += 1;
1830 tlvlen -= (uint8_t)1;
1831 (void)pCtx;
1832 return status;
1833 } /* End dot11f_unpack_tlv_rssi_assoc_rej. */
1834
1835 #define SigTlvrssi_assoc_rej (0x0034)
1836
1837
1838 #define SigTlvtrans_reasonp_attr (0x0035)
1839
1840
1841 #define SigTlvtrans_rejectp_attr (0x0036)
1842
1843
1844 #define SigTlvtransition_reason (0x0037)
1845
1846
1847 #define SigTlvtransition_reject_reason (0x0038)
1848
1849
1850 #define SigTlvvht_mcs11_attr (0x0039)
1851
1852
dot11f_unpack_tlv_p2_p_interface(tpAniSirGlobal pCtx,uint8_t * pBuf,uint16_t tlvlen,tDot11fTLVP2PInterface * pDst)1853 uint32_t dot11f_unpack_tlv_p2_p_interface(tpAniSirGlobal pCtx,
1854 uint8_t *pBuf,
1855 uint16_t tlvlen,
1856 tDot11fTLVP2PInterface *pDst)
1857 {
1858 uint32_t status = DOT11F_PARSE_SUCCESS;
1859 pDst->present = 1;
1860 if (unlikely(tlvlen < 6)) {
1861 pDst->present = 0;
1862 return DOT11F_INCOMPLETE_IE;
1863 }
1864
1865 DOT11F_MEMCPY(pCtx, pDst->P2PDeviceAddress, pBuf, 6);
1866 pBuf += 6;
1867 tlvlen -= (uint8_t)6;
1868 (void)pCtx;
1869 return status;
1870 } /* End dot11f_unpack_tlv_p2_p_interface. */
1871
1872 #define SigTlvP2PInterface (0x003a)
1873
1874
1875 #define SigTlvP2PManageability (0x003b)
1876
1877
dot11f_unpack_ie_gtk(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEGTK * pDst,bool append_ie)1878 uint32_t dot11f_unpack_ie_gtk(tpAniSirGlobal pCtx,
1879 uint8_t *pBuf,
1880 uint8_t ielen,
1881 tDot11fIEGTK *pDst,
1882 bool append_ie)
1883 {
1884 uint32_t status = DOT11F_PARSE_SUCCESS;
1885 uint16_t tmp12__;
1886 (void) pBuf; (void)ielen; /* Shutup the compiler */
1887 if (pDst->present)
1888 return DOT11F_DUPLICATE_IE;
1889 pDst->present = 1;
1890 if (unlikely(ielen < 2)) {
1891 pDst->present = 0;
1892 return DOT11F_INCOMPLETE_IE;
1893 }
1894
1895 framesntohs(pCtx, &tmp12__, pBuf, 0);
1896 pBuf += 2;
1897 ielen -= 2;
1898 pDst->keyId = tmp12__ >> 0 & 0x3;
1899 pDst->reserved = tmp12__ >> 2 & 0x3feb;
1900 if (unlikely(ielen < 1)) {
1901 pDst->present = 0;
1902 return DOT11F_INCOMPLETE_IE;
1903 }
1904
1905 pDst->keyLength = *pBuf;
1906 pBuf += 1;
1907 ielen -= (uint8_t)1;
1908 if (unlikely(ielen < 8)) {
1909 pDst->present = 0;
1910 return DOT11F_INCOMPLETE_IE;
1911 }
1912
1913 DOT11F_MEMCPY(pCtx, pDst->RSC, pBuf, 8);
1914 pBuf += 8;
1915 ielen -= (uint8_t)8;
1916 pDst->num_key = (uint8_t)(ielen);
1917 if (ielen > 32) {
1918 pDst->present = 0;
1919 return DOT11F_SKIPPED_BAD_IE;
1920 }
1921
1922 DOT11F_MEMCPY(pCtx, pDst->key, pBuf, (ielen));
1923 (void)pCtx;
1924 return status;
1925 } /* End dot11f_unpack_ie_gtk. */
1926
1927 #define SigIeGTK (0x0001)
1928
1929
dot11f_unpack_ie_igtk(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEIGTK * pDst,bool append_ie)1930 uint32_t dot11f_unpack_ie_igtk(tpAniSirGlobal pCtx,
1931 uint8_t *pBuf,
1932 uint8_t ielen,
1933 tDot11fIEIGTK *pDst,
1934 bool append_ie)
1935 {
1936 uint32_t status = DOT11F_PARSE_SUCCESS;
1937 (void) pBuf; (void)ielen; /* Shutup the compiler */
1938 if (pDst->present)
1939 return DOT11F_DUPLICATE_IE;
1940 pDst->present = 1;
1941 if (unlikely(ielen < 2)) {
1942 pDst->present = 0;
1943 return DOT11F_INCOMPLETE_IE;
1944 }
1945
1946 DOT11F_MEMCPY(pCtx, pDst->keyID, pBuf, 2);
1947 pBuf += 2;
1948 ielen -= (uint8_t)2;
1949 if (unlikely(ielen < 6)) {
1950 pDst->present = 0;
1951 return DOT11F_INCOMPLETE_IE;
1952 }
1953
1954 DOT11F_MEMCPY(pCtx, pDst->IPN, pBuf, 6);
1955 pBuf += 6;
1956 ielen -= (uint8_t)6;
1957 if (unlikely(ielen < 1)) {
1958 pDst->present = 0;
1959 return DOT11F_INCOMPLETE_IE;
1960 }
1961
1962 pDst->keyLength = *pBuf;
1963 pBuf += 1;
1964 ielen -= (uint8_t)1;
1965 if (unlikely(ielen < 24)) {
1966 pDst->present = 0;
1967 return DOT11F_INCOMPLETE_IE;
1968 }
1969
1970 DOT11F_MEMCPY(pCtx, pDst->key, pBuf, 24);
1971 (void)pCtx;
1972 return status;
1973 } /* End dot11f_unpack_ie_igtk. */
1974
1975 #define SigIeIGTK (0x0002)
1976
1977
dot11f_unpack_ie_r0_kh_id(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIER0KH_ID * pDst,bool append_ie)1978 uint32_t dot11f_unpack_ie_r0_kh_id(tpAniSirGlobal pCtx,
1979 uint8_t *pBuf,
1980 uint8_t ielen,
1981 tDot11fIER0KH_ID *pDst,
1982 bool append_ie)
1983 {
1984 uint32_t status = DOT11F_PARSE_SUCCESS;
1985 (void) pBuf; (void)ielen; /* Shutup the compiler */
1986 if (pDst->present)
1987 return DOT11F_DUPLICATE_IE;
1988 pDst->present = 1;
1989 pDst->num_PMK_R0_ID = (uint8_t)(ielen);
1990 if (ielen > 48) {
1991 pDst->present = 0;
1992 return DOT11F_SKIPPED_BAD_IE;
1993 }
1994
1995 DOT11F_MEMCPY(pCtx, pDst->PMK_R0_ID, pBuf, (ielen));
1996 (void)pCtx;
1997 return status;
1998 } /* End dot11f_unpack_ie_r0_kh_id. */
1999
2000 #define SigIeR0KH_ID (0x0003)
2001
2002
dot11f_unpack_ie_r1_kh_id(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIER1KH_ID * pDst,bool append_ie)2003 uint32_t dot11f_unpack_ie_r1_kh_id(tpAniSirGlobal pCtx,
2004 uint8_t *pBuf,
2005 uint8_t ielen,
2006 tDot11fIER1KH_ID *pDst,
2007 bool append_ie)
2008 {
2009 uint32_t status = DOT11F_PARSE_SUCCESS;
2010 (void) pBuf; (void)ielen; /* Shutup the compiler */
2011 if (pDst->present)
2012 return DOT11F_DUPLICATE_IE;
2013 pDst->present = 1;
2014 if (unlikely(ielen < 6)) {
2015 pDst->present = 0;
2016 return DOT11F_INCOMPLETE_IE;
2017 }
2018
2019 DOT11F_MEMCPY(pCtx, pDst->PMK_R1_ID, pBuf, 6);
2020 (void)pCtx;
2021 return status;
2022 } /* End dot11f_unpack_ie_r1_kh_id. */
2023
2024 #define SigIeR1KH_ID (0x0004)
2025
2026
dot11f_unpack_ie_ap_channel_report(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEAPChannelReport * pDst,bool append_ie)2027 uint32_t dot11f_unpack_ie_ap_channel_report(tpAniSirGlobal pCtx,
2028 uint8_t *pBuf,
2029 uint8_t ielen,
2030 tDot11fIEAPChannelReport *pDst,
2031 bool append_ie)
2032 {
2033 uint32_t status = DOT11F_PARSE_SUCCESS;
2034 (void) pBuf; (void)ielen; /* Shutup the compiler */
2035 if (pDst->present)
2036 return DOT11F_DUPLICATE_IE;
2037 pDst->present = 1;
2038 if (unlikely(ielen < 1)) {
2039 pDst->present = 0;
2040 return DOT11F_INCOMPLETE_IE;
2041 }
2042
2043 pDst->regulatoryClass = *pBuf;
2044 pBuf += 1;
2045 ielen -= (uint8_t)1;
2046 pDst->num_channelList = (uint8_t)(ielen);
2047 if (ielen > 50) {
2048 pDst->present = 0;
2049 return DOT11F_SKIPPED_BAD_IE;
2050 }
2051
2052 DOT11F_MEMCPY(pCtx, pDst->channelList, pBuf, (ielen));
2053 (void)pCtx;
2054 return status;
2055 } /* End dot11f_unpack_ie_ap_channel_report. */
2056
2057 #define SigIeAPChannelReport (0x0005)
2058
2059
dot11f_unpack_ie_bcn_reporting_detail(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEBcnReportingDetail * pDst,bool append_ie)2060 uint32_t dot11f_unpack_ie_bcn_reporting_detail(tpAniSirGlobal pCtx,
2061 uint8_t *pBuf,
2062 uint8_t ielen,
2063 tDot11fIEBcnReportingDetail *pDst,
2064 bool append_ie)
2065 {
2066 uint32_t status = DOT11F_PARSE_SUCCESS;
2067 (void) pBuf; (void)ielen; /* Shutup the compiler */
2068 if (pDst->present)
2069 return DOT11F_DUPLICATE_IE;
2070 pDst->present = 1;
2071 if (unlikely(ielen < 1)) {
2072 pDst->present = 0;
2073 return DOT11F_INCOMPLETE_IE;
2074 }
2075
2076 pDst->reportingDetail = *pBuf;
2077 (void)pCtx;
2078 return status;
2079 } /* End dot11f_unpack_ie_bcn_reporting_detail. */
2080
2081 #define SigIeBcnReportingDetail (0x0006)
2082
2083
dot11f_unpack_ie_beacon_report_frm_body(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEBeaconReportFrmBody * pDst,bool append_ie)2084 uint32_t dot11f_unpack_ie_beacon_report_frm_body(tpAniSirGlobal pCtx,
2085 uint8_t *pBuf,
2086 uint8_t ielen,
2087 tDot11fIEBeaconReportFrmBody *pDst,
2088 bool append_ie)
2089 {
2090 uint32_t status = DOT11F_PARSE_SUCCESS;
2091 (void) pBuf; (void)ielen; /* Shutup the compiler */
2092 if (pDst->present)
2093 return DOT11F_DUPLICATE_IE;
2094 pDst->present = 1;
2095 pDst->num_reportedFields = (uint8_t)(ielen);
2096 if (ielen > 224) {
2097 pDst->present = 0;
2098 return DOT11F_SKIPPED_BAD_IE;
2099 }
2100
2101 DOT11F_MEMCPY(pCtx, pDst->reportedFields, pBuf, (ielen));
2102 (void)pCtx;
2103 return status;
2104 } /* End dot11f_unpack_ie_beacon_report_frm_body. */
2105
2106 #define SigIeBeaconReportFrmBody (0x0007)
2107
2108
dot11f_unpack_ie_condensed_country_str(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIECondensedCountryStr * pDst,bool append_ie)2109 uint32_t dot11f_unpack_ie_condensed_country_str(tpAniSirGlobal pCtx,
2110 uint8_t *pBuf,
2111 uint8_t ielen,
2112 tDot11fIECondensedCountryStr *pDst,
2113 bool append_ie)
2114 {
2115 uint32_t status = DOT11F_PARSE_SUCCESS;
2116 (void) pBuf; (void)ielen; /* Shutup the compiler */
2117 if (pDst->present)
2118 return DOT11F_DUPLICATE_IE;
2119 pDst->present = 1;
2120 if (unlikely(ielen < 2)) {
2121 pDst->present = 0;
2122 return DOT11F_INCOMPLETE_IE;
2123 }
2124
2125 DOT11F_MEMCPY(pCtx, pDst->countryStr, pBuf, 2);
2126 (void)pCtx;
2127 return status;
2128 } /* End dot11f_unpack_ie_condensed_country_str. */
2129
2130 #define SigIeCondensedCountryStr (0x0008)
2131
2132
dot11f_unpack_ie_ExtRequestedInfo(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEExtRequestedInfo * pDst,bool append_ie)2133 uint32_t dot11f_unpack_ie_ExtRequestedInfo(tpAniSirGlobal pCtx,
2134 uint8_t *pBuf,
2135 uint8_t ielen,
2136 tDot11fIEExtRequestedInfo *pDst,
2137 bool append_ie)
2138 {
2139 uint32_t status = DOT11F_PARSE_SUCCESS;
2140 (void) pBuf; (void)ielen; /* Shutup the compiler */
2141 if (pDst->present)
2142 return DOT11F_DUPLICATE_IE;
2143 pDst->present = 1;
2144 if (unlikely(ielen < 1)) {
2145 pDst->present = 0;
2146 return DOT11F_INCOMPLETE_IE;
2147 }
2148
2149 pDst->req_element_id = *pBuf;
2150 pBuf += 1;
2151 ielen -= (uint8_t)1;
2152 pDst->num_req_element_id_ext = (uint8_t)(ielen);
2153 DOT11F_MEMCPY(pCtx, pDst->req_element_id_ext, pBuf, (ielen));
2154 (void)pCtx;
2155 return status;
2156 } /* End dot11f_unpack_ie_ExtRequestedInfo. */
2157
2158 #define SigIeExtRequestedInfo (0x0009)
2159
2160
dot11f_unpack_ie_measurement_pilot(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEMeasurementPilot * pDst,bool append_ie)2161 uint32_t dot11f_unpack_ie_measurement_pilot(tpAniSirGlobal pCtx,
2162 uint8_t *pBuf,
2163 uint8_t ielen,
2164 tDot11fIEMeasurementPilot *pDst,
2165 bool append_ie)
2166 {
2167 uint32_t status = DOT11F_PARSE_SUCCESS;
2168 (void) pBuf; (void)ielen; /* Shutup the compiler */
2169 if (pDst->present)
2170 return DOT11F_DUPLICATE_IE;
2171 pDst->present = 1;
2172 if (unlikely(ielen < 1)) {
2173 pDst->present = 0;
2174 return DOT11F_INCOMPLETE_IE;
2175 }
2176
2177 pDst->measurementPilot = *pBuf;
2178 pBuf += 1;
2179 ielen -= (uint8_t)1;
2180 pDst->num_vendorSpecific = (uint8_t)(ielen);
2181 DOT11F_MEMCPY(pCtx, pDst->vendorSpecific, pBuf, (ielen));
2182 (void)pCtx;
2183 return status;
2184 } /* End dot11f_unpack_ie_measurement_pilot. */
2185
2186 #define SigIeMeasurementPilot (0x000a)
2187
2188
dot11f_unpack_ie_multi_bssid(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEMultiBssid * pDst,bool append_ie)2189 uint32_t dot11f_unpack_ie_multi_bssid(tpAniSirGlobal pCtx,
2190 uint8_t *pBuf,
2191 uint8_t ielen,
2192 tDot11fIEMultiBssid *pDst,
2193 bool append_ie)
2194 {
2195 uint32_t status = DOT11F_PARSE_SUCCESS;
2196 (void) pBuf; (void)ielen; /* Shutup the compiler */
2197 if (pDst->present)
2198 return DOT11F_DUPLICATE_IE;
2199 pDst->present = 1;
2200 if (unlikely(ielen < 1)) {
2201 pDst->present = 0;
2202 return DOT11F_INCOMPLETE_IE;
2203 }
2204
2205 pDst->maxBSSIDIndicator = *pBuf;
2206 pBuf += 1;
2207 ielen -= (uint8_t)1;
2208 pDst->num_vendorSpecific = (uint8_t)(ielen);
2209 DOT11F_MEMCPY(pCtx, pDst->vendorSpecific, pBuf, (ielen));
2210 (void)pCtx;
2211 return status;
2212 } /* End dot11f_unpack_ie_multi_bssid. */
2213
2214 #define SigIeMultiBssid (0x000b)
2215
2216
dot11f_unpack_ie_ric_data(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIERICData * pDst,bool append_ie)2217 uint32_t dot11f_unpack_ie_ric_data(tpAniSirGlobal pCtx,
2218 uint8_t *pBuf,
2219 uint8_t ielen,
2220 tDot11fIERICData *pDst,
2221 bool append_ie)
2222 {
2223 uint32_t status = DOT11F_PARSE_SUCCESS;
2224 (void) pBuf; (void)ielen; /* Shutup the compiler */
2225 if (pDst->present)
2226 return DOT11F_DUPLICATE_IE;
2227 pDst->present = 1;
2228 if (unlikely(ielen < 1)) {
2229 pDst->present = 0;
2230 return DOT11F_INCOMPLETE_IE;
2231 }
2232
2233 pDst->Identifier = *pBuf;
2234 pBuf += 1;
2235 ielen -= (uint8_t)1;
2236 if (unlikely(ielen < 1)) {
2237 pDst->present = 0;
2238 return DOT11F_INCOMPLETE_IE;
2239 }
2240
2241 pDst->resourceDescCount = *pBuf;
2242 pBuf += 1;
2243 ielen -= (uint8_t)1;
2244 if (unlikely(ielen < 2)) {
2245 pDst->present = 0;
2246 return DOT11F_INCOMPLETE_IE;
2247 }
2248
2249 framesntohs(pCtx, &pDst->statusCode, pBuf, 0);
2250 (void)pCtx;
2251 return status;
2252 } /* End dot11f_unpack_ie_ric_data. */
2253
2254 #define SigIeRICData (0x000c)
2255
2256
dot11f_unpack_ie_ric_descriptor(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIERICDescriptor * pDst,bool append_ie)2257 uint32_t dot11f_unpack_ie_ric_descriptor(tpAniSirGlobal pCtx,
2258 uint8_t *pBuf,
2259 uint8_t ielen,
2260 tDot11fIERICDescriptor *pDst,
2261 bool append_ie)
2262 {
2263 uint32_t status = DOT11F_PARSE_SUCCESS;
2264 (void) pBuf; (void)ielen; /* Shutup the compiler */
2265 if (pDst->present)
2266 return DOT11F_DUPLICATE_IE;
2267 pDst->present = 1;
2268 if (unlikely(ielen < 1)) {
2269 pDst->present = 0;
2270 return DOT11F_INCOMPLETE_IE;
2271 }
2272
2273 pDst->resourceType = *pBuf;
2274 pBuf += 1;
2275 ielen -= (uint8_t)1;
2276 pDst->num_variableData = (uint8_t)(ielen);
2277 DOT11F_MEMCPY(pCtx, pDst->variableData, pBuf, (ielen));
2278 (void)pCtx;
2279 return status;
2280 } /* End dot11f_unpack_ie_ric_descriptor. */
2281
2282 #define SigIeRICDescriptor (0x000d)
2283
2284
dot11f_unpack_ie_rrm_enabled_cap(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIERRMEnabledCap * pDst,bool append_ie)2285 uint32_t dot11f_unpack_ie_rrm_enabled_cap(tpAniSirGlobal pCtx,
2286 uint8_t *pBuf,
2287 uint8_t ielen,
2288 tDot11fIERRMEnabledCap *pDst,
2289 bool append_ie)
2290 {
2291 uint32_t status = DOT11F_PARSE_SUCCESS;
2292 uint8_t tmp13__;
2293 uint8_t tmp14__;
2294 uint8_t tmp15__;
2295 uint8_t tmp16__;
2296 uint8_t tmp17__;
2297 (void) pBuf; (void)ielen; /* Shutup the compiler */
2298 if (pDst->present)
2299 return DOT11F_DUPLICATE_IE;
2300 pDst->present = 1;
2301 if (unlikely(ielen < 1)) {
2302 pDst->present = 0;
2303 return DOT11F_INCOMPLETE_IE;
2304 }
2305
2306 tmp13__ = *pBuf;
2307 pBuf += 1;
2308 ielen -= 1;
2309 pDst->LinkMeasurement = tmp13__ >> 0 & 0x1;
2310 pDst->NeighborRpt = tmp13__ >> 1 & 0x1;
2311 pDst->parallel = tmp13__ >> 2 & 0x1;
2312 pDst->repeated = tmp13__ >> 3 & 0x1;
2313 pDst->BeaconPassive = tmp13__ >> 4 & 0x1;
2314 pDst->BeaconActive = tmp13__ >> 5 & 0x1;
2315 pDst->BeaconTable = tmp13__ >> 6 & 0x1;
2316 pDst->BeaconRepCond = tmp13__ >> 7 & 0x1;
2317 if (unlikely(ielen < 1)) {
2318 pDst->present = 0;
2319 return DOT11F_INCOMPLETE_IE;
2320 }
2321
2322 tmp14__ = *pBuf;
2323 pBuf += 1;
2324 ielen -= 1;
2325 pDst->FrameMeasurement = tmp14__ >> 0 & 0x1;
2326 pDst->ChannelLoad = tmp14__ >> 1 & 0x1;
2327 pDst->NoiseHistogram = tmp14__ >> 2 & 0x1;
2328 pDst->statistics = tmp14__ >> 3 & 0x1;
2329 pDst->LCIMeasurement = tmp14__ >> 4 & 0x1;
2330 pDst->LCIAzimuth = tmp14__ >> 5 & 0x1;
2331 pDst->TCMCapability = tmp14__ >> 6 & 0x1;
2332 pDst->triggeredTCM = tmp14__ >> 7 & 0x1;
2333 if (unlikely(ielen < 1)) {
2334 pDst->present = 0;
2335 return DOT11F_INCOMPLETE_IE;
2336 }
2337
2338 tmp15__ = *pBuf;
2339 pBuf += 1;
2340 ielen -= 1;
2341 pDst->APChanReport = tmp15__ >> 0 & 0x1;
2342 pDst->RRMMIBEnabled = tmp15__ >> 1 & 0x1;
2343 pDst->operatingChanMax = tmp15__ >> 2 & 0x7;
2344 pDst->nonOperatinChanMax = tmp15__ >> 5 & 0x7;
2345 if (unlikely(ielen < 1)) {
2346 pDst->present = 0;
2347 return DOT11F_INCOMPLETE_IE;
2348 }
2349
2350 tmp16__ = *pBuf;
2351 pBuf += 1;
2352 ielen -= 1;
2353 pDst->MeasurementPilot = tmp16__ >> 0 & 0x7;
2354 pDst->MeasurementPilotEnabled = tmp16__ >> 3 & 0x1;
2355 pDst->NeighborTSFOffset = tmp16__ >> 4 & 0x1;
2356 pDst->RCPIMeasurement = tmp16__ >> 5 & 0x1;
2357 pDst->RSNIMeasurement = tmp16__ >> 6 & 0x1;
2358 pDst->BssAvgAccessDelay = tmp16__ >> 7 & 0x1;
2359 if (unlikely(ielen < 1)) {
2360 pDst->present = 0;
2361 return DOT11F_INCOMPLETE_IE;
2362 }
2363
2364 tmp17__ = *pBuf;
2365 pDst->BSSAvailAdmission = tmp17__ >> 0 & 0x1;
2366 pDst->AntennaInformation = tmp17__ >> 1 & 0x1;
2367 pDst->fine_time_meas_rpt = tmp17__ >> 2 & 0x1;
2368 pDst->lci_capability = tmp17__ >> 3 & 0x1;
2369 pDst->reserved = tmp17__ >> 4 & 0xf;
2370 (void)pCtx;
2371 return status;
2372 } /* End dot11f_unpack_ie_rrm_enabled_cap. */
2373
2374 #define SigIeRRMEnabledCap (0x000e)
2375
2376
dot11f_unpack_ie_requested_info(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIERequestedInfo * pDst,bool append_ie)2377 uint32_t dot11f_unpack_ie_requested_info(tpAniSirGlobal pCtx,
2378 uint8_t *pBuf,
2379 uint8_t ielen,
2380 tDot11fIERequestedInfo *pDst,
2381 bool append_ie)
2382 {
2383 uint32_t status = DOT11F_PARSE_SUCCESS;
2384 (void) pBuf; (void)ielen; /* Shutup the compiler */
2385 if (pDst->present)
2386 return DOT11F_DUPLICATE_IE;
2387 pDst->present = 1;
2388 pDst->num_requested_eids = (uint8_t)(ielen);
2389 DOT11F_MEMCPY(pCtx, pDst->requested_eids, pBuf, (ielen));
2390 (void)pCtx;
2391 return status;
2392 } /* End dot11f_unpack_ie_requested_info. */
2393
2394 #define SigIeRequestedInfo (0x000f)
2395
2396
dot11f_unpack_ie_ssid(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIESSID * pDst,bool append_ie)2397 uint32_t dot11f_unpack_ie_ssid(tpAniSirGlobal pCtx,
2398 uint8_t *pBuf,
2399 uint8_t ielen,
2400 tDot11fIESSID *pDst,
2401 bool append_ie)
2402 {
2403 uint32_t status = DOT11F_PARSE_SUCCESS;
2404 (void) pBuf; (void)ielen; /* Shutup the compiler */
2405 if (pDst->present) {
2406 status = DOT11F_DUPLICATE_IE;
2407 return status;
2408 }
2409 pDst->present = 1;
2410 pDst->num_ssid = (uint8_t)(ielen);
2411 if (ielen > 32) {
2412 pDst->present = 0;
2413 return DOT11F_SKIPPED_BAD_IE;
2414 }
2415
2416 DOT11F_MEMCPY(pCtx, pDst->ssid, pBuf, (ielen));
2417 (void)pCtx;
2418 return status;
2419 } /* End dot11f_unpack_ie_ssid. */
2420
2421 #define SigIeSSID (0x0010)
2422
2423
dot11f_unpack_ie_schedule(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIESchedule * pDst,bool append_ie)2424 uint32_t dot11f_unpack_ie_schedule(tpAniSirGlobal pCtx,
2425 uint8_t *pBuf,
2426 uint8_t ielen,
2427 tDot11fIESchedule *pDst,
2428 bool append_ie)
2429 {
2430 uint32_t status = DOT11F_PARSE_SUCCESS;
2431 uint16_t tmp18__;
2432 (void) pBuf; (void)ielen; /* Shutup the compiler */
2433 if (pDst->present)
2434 return DOT11F_DUPLICATE_IE;
2435 pDst->present = 1;
2436 if (unlikely(ielen < 2)) {
2437 pDst->present = 0;
2438 return DOT11F_INCOMPLETE_IE;
2439 }
2440
2441 framesntohs(pCtx, &tmp18__, pBuf, 0);
2442 pBuf += 2;
2443 ielen -= 2;
2444 pDst->aggregation = tmp18__ >> 0 & 0x1;
2445 pDst->tsid = tmp18__ >> 1 & 0xf;
2446 pDst->direction = tmp18__ >> 5 & 0x3;
2447 pDst->reserved = tmp18__ >> 7 & 0x1ff;
2448 if (unlikely(ielen < 4)) {
2449 pDst->present = 0;
2450 return DOT11F_INCOMPLETE_IE;
2451 }
2452
2453 framesntohl(pCtx, &pDst->service_start_time, pBuf, 0);
2454 pBuf += 4;
2455 ielen -= (uint8_t)4;
2456 if (unlikely(ielen < 4)) {
2457 pDst->present = 0;
2458 return DOT11F_INCOMPLETE_IE;
2459 }
2460
2461 framesntohl(pCtx, &pDst->service_interval, pBuf, 0);
2462 pBuf += 4;
2463 ielen -= (uint8_t)4;
2464 if (unlikely(ielen < 2)) {
2465 pDst->present = 0;
2466 return DOT11F_INCOMPLETE_IE;
2467 }
2468
2469 framesntohs(pCtx, &pDst->max_service_dur, pBuf, 0);
2470 pBuf += 2;
2471 ielen -= (uint8_t)2;
2472 if (unlikely(ielen < 2)) {
2473 pDst->present = 0;
2474 return DOT11F_INCOMPLETE_IE;
2475 }
2476
2477 framesntohs(pCtx, &pDst->spec_interval, pBuf, 0);
2478 (void)pCtx;
2479 return status;
2480 } /* End dot11f_unpack_ie_schedule. */
2481
2482 #define SigIeSchedule (0x0011)
2483
2484
dot11f_unpack_ie_tclas(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIETCLAS * pDst,bool append_ie)2485 uint32_t dot11f_unpack_ie_tclas(tpAniSirGlobal pCtx,
2486 uint8_t *pBuf,
2487 uint8_t ielen,
2488 tDot11fIETCLAS *pDst,
2489 bool append_ie)
2490 {
2491 uint32_t status = DOT11F_PARSE_SUCCESS;
2492 (void) pBuf; (void)ielen; /* Shutup the compiler */
2493 if (pDst->present)
2494 return DOT11F_DUPLICATE_IE;
2495 pDst->present = 1;
2496 if (unlikely(ielen < 1)) {
2497 pDst->present = 0;
2498 return DOT11F_INCOMPLETE_IE;
2499 }
2500
2501 pDst->user_priority = *pBuf;
2502 pBuf += 1;
2503 ielen -= (uint8_t)1;
2504 if (unlikely(ielen < 1)) {
2505 pDst->present = 0;
2506 return DOT11F_INCOMPLETE_IE;
2507 }
2508
2509 pDst->classifier_type = *pBuf;
2510 pBuf += 1;
2511 ielen -= (uint8_t)1;
2512 if (unlikely(ielen < 1)) {
2513 pDst->present = 0;
2514 return DOT11F_INCOMPLETE_IE;
2515 }
2516
2517 pDst->classifier_mask = *pBuf;
2518 pBuf += 1;
2519 ielen -= (uint8_t)1;
2520 switch (pDst->classifier_type) {
2521 case 0:
2522 if (unlikely(ielen < 6)) {
2523 pDst->present = 0;
2524 return DOT11F_INCOMPLETE_IE;
2525 }
2526
2527 DOT11F_MEMCPY(pCtx, pDst->info.EthParams.source, pBuf, 6);
2528 pBuf += 6;
2529 ielen -= (uint8_t)6;
2530 if (unlikely(ielen < 6)) {
2531 pDst->present = 0;
2532 return DOT11F_INCOMPLETE_IE;
2533 }
2534
2535 DOT11F_MEMCPY(pCtx, pDst->info.EthParams.dest, pBuf, 6);
2536 pBuf += 6;
2537 ielen -= (uint8_t)6;
2538 if (unlikely(ielen < 2)) {
2539 pDst->present = 0;
2540 return DOT11F_INCOMPLETE_IE;
2541 }
2542
2543 framesntohs(pCtx, &pDst->info.EthParams.type, pBuf, 0);
2544 pBuf += 2;
2545 ielen -= (uint8_t)2;
2546 break;
2547 case 1:
2548 if (unlikely(ielen < 1)) {
2549 pDst->present = 0;
2550 return DOT11F_INCOMPLETE_IE;
2551 }
2552
2553 pDst->info.IpParams.version = *pBuf;
2554 pBuf += 1;
2555 ielen -= (uint8_t)1;
2556 switch (pDst->info.IpParams.version) {
2557 case 4:
2558 if (unlikely(ielen < 4)) {
2559 pDst->present = 0;
2560 return DOT11F_INCOMPLETE_IE;
2561 }
2562
2563 DOT11F_MEMCPY(pCtx, pDst->info.IpParams.params.IpV4Params.source, pBuf, 4);
2564 pBuf += 4;
2565 ielen -= (uint8_t)4;
2566 if (unlikely(ielen < 4)) {
2567 pDst->present = 0;
2568 return DOT11F_INCOMPLETE_IE;
2569 }
2570
2571 DOT11F_MEMCPY(pCtx, pDst->info.IpParams.params.IpV4Params.dest, pBuf, 4);
2572 pBuf += 4;
2573 ielen -= (uint8_t)4;
2574 if (unlikely(ielen < 2)) {
2575 pDst->present = 0;
2576 return DOT11F_INCOMPLETE_IE;
2577 }
2578
2579 framesntohs(pCtx, &pDst->info.IpParams.params.IpV4Params.src_port, pBuf, 0);
2580 pBuf += 2;
2581 ielen -= (uint8_t)2;
2582 if (unlikely(ielen < 2)) {
2583 pDst->present = 0;
2584 return DOT11F_INCOMPLETE_IE;
2585 }
2586
2587 framesntohs(pCtx, &pDst->info.IpParams.params.IpV4Params.dest_port, pBuf, 0);
2588 pBuf += 2;
2589 ielen -= (uint8_t)2;
2590 if (unlikely(ielen < 1)) {
2591 pDst->present = 0;
2592 return DOT11F_INCOMPLETE_IE;
2593 }
2594
2595 pDst->info.IpParams.params.IpV4Params.DSCP = *pBuf;
2596 pBuf += 1;
2597 ielen -= (uint8_t)1;
2598 if (unlikely(ielen < 1)) {
2599 pDst->present = 0;
2600 return DOT11F_INCOMPLETE_IE;
2601 }
2602
2603 pDst->info.IpParams.params.IpV4Params.proto = *pBuf;
2604 pBuf += 1;
2605 ielen -= (uint8_t)1;
2606 if (unlikely(ielen < 1)) {
2607 pDst->present = 0;
2608 return DOT11F_INCOMPLETE_IE;
2609 }
2610
2611 pDst->info.IpParams.params.IpV4Params.reserved = *pBuf;
2612 pBuf += 1;
2613 ielen -= (uint8_t)1;
2614 break;
2615 case 6:
2616 if (unlikely(ielen < 16)) {
2617 pDst->present = 0;
2618 return DOT11F_INCOMPLETE_IE;
2619 }
2620
2621 DOT11F_MEMCPY(pCtx, pDst->info.IpParams.params.IpV6Params.source, pBuf, 16);
2622 pBuf += 16;
2623 ielen -= (uint8_t)16;
2624 if (unlikely(ielen < 16)) {
2625 pDst->present = 0;
2626 return DOT11F_INCOMPLETE_IE;
2627 }
2628
2629 DOT11F_MEMCPY(pCtx, pDst->info.IpParams.params.IpV6Params.dest, pBuf, 16);
2630 pBuf += 16;
2631 ielen -= (uint8_t)16;
2632 if (unlikely(ielen < 2)) {
2633 pDst->present = 0;
2634 return DOT11F_INCOMPLETE_IE;
2635 }
2636
2637 framesntohs(pCtx, &pDst->info.IpParams.params.IpV6Params.src_port, pBuf, 0);
2638 pBuf += 2;
2639 ielen -= (uint8_t)2;
2640 if (unlikely(ielen < 2)) {
2641 pDst->present = 0;
2642 return DOT11F_INCOMPLETE_IE;
2643 }
2644
2645 framesntohs(pCtx, &pDst->info.IpParams.params.IpV6Params.dest_port, pBuf, 0);
2646 pBuf += 2;
2647 ielen -= (uint8_t)2;
2648 if (unlikely(ielen < 3)) {
2649 pDst->present = 0;
2650 return DOT11F_INCOMPLETE_IE;
2651 }
2652
2653 DOT11F_MEMCPY(pCtx, pDst->info.IpParams.params.IpV6Params.flow_label, pBuf, 3);
2654 pBuf += 3;
2655 ielen -= (uint8_t)3;
2656 break;
2657 }
2658 break;
2659 case 2:
2660 if (unlikely(ielen < 2)) {
2661 pDst->present = 0;
2662 return DOT11F_INCOMPLETE_IE;
2663 }
2664
2665 framesntohs(pCtx, &pDst->info.Params8021dq.tag_type, pBuf, 0);
2666 pBuf += 2;
2667 ielen -= (uint8_t)2;
2668 break;
2669 }
2670 (void)pCtx;
2671 return status;
2672 } /* End dot11f_unpack_ie_tclas. */
2673
2674 #define SigIeTCLAS (0x0012)
2675
2676
2677 #define SigIeTCLASSPROC (0x0013)
2678
2679
dot11f_unpack_ie_ts_delay(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIETSDelay * pDst,bool append_ie)2680 uint32_t dot11f_unpack_ie_ts_delay(tpAniSirGlobal pCtx,
2681 uint8_t *pBuf,
2682 uint8_t ielen,
2683 tDot11fIETSDelay *pDst,
2684 bool append_ie)
2685 {
2686 uint32_t status = DOT11F_PARSE_SUCCESS;
2687 (void) pBuf; (void)ielen; /* Shutup the compiler */
2688 if (pDst->present)
2689 return DOT11F_DUPLICATE_IE;
2690 pDst->present = 1;
2691 if (unlikely(ielen < 4)) {
2692 pDst->present = 0;
2693 return DOT11F_INCOMPLETE_IE;
2694 }
2695
2696 framesntohl(pCtx, &pDst->delay, pBuf, 0);
2697 (void)pCtx;
2698 return status;
2699 } /* End dot11f_unpack_ie_ts_delay. */
2700
2701 #define SigIeTSDelay (0x0014)
2702
2703
dot11f_unpack_ie_tsf_info(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIETSFInfo * pDst,bool append_ie)2704 uint32_t dot11f_unpack_ie_tsf_info(tpAniSirGlobal pCtx,
2705 uint8_t *pBuf,
2706 uint8_t ielen,
2707 tDot11fIETSFInfo *pDst,
2708 bool append_ie)
2709 {
2710 uint32_t status = DOT11F_PARSE_SUCCESS;
2711 (void) pBuf; (void)ielen; /* Shutup the compiler */
2712 if (pDst->present)
2713 return DOT11F_DUPLICATE_IE;
2714 pDst->present = 1;
2715 if (unlikely(ielen < 2)) {
2716 pDst->present = 0;
2717 return DOT11F_INCOMPLETE_IE;
2718 }
2719
2720 framesntohs(pCtx, &pDst->TsfOffset, pBuf, 0);
2721 pBuf += 2;
2722 ielen -= (uint8_t)2;
2723 if (unlikely(ielen < 2)) {
2724 pDst->present = 0;
2725 return DOT11F_INCOMPLETE_IE;
2726 }
2727
2728 framesntohs(pCtx, &pDst->BeaconIntvl, pBuf, 0);
2729 (void)pCtx;
2730 return status;
2731 } /* End dot11f_unpack_ie_tsf_info. */
2732
2733 #define SigIeTSFInfo (0x0015)
2734
2735
dot11f_unpack_ie_tspec(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIETSPEC * pDst,bool append_ie)2736 uint32_t dot11f_unpack_ie_tspec(tpAniSirGlobal pCtx,
2737 uint8_t *pBuf,
2738 uint8_t ielen,
2739 tDot11fIETSPEC *pDst,
2740 bool append_ie)
2741 {
2742 uint32_t status = DOT11F_PARSE_SUCCESS;
2743 uint16_t tmp19__;
2744 uint8_t tmp20__;
2745 uint16_t tmp21__;
2746 (void) pBuf; (void)ielen; /* Shutup the compiler */
2747 if (pDst->present)
2748 return DOT11F_DUPLICATE_IE;
2749 pDst->present = 1;
2750 if (unlikely(ielen < 2)) {
2751 pDst->present = 0;
2752 return DOT11F_INCOMPLETE_IE;
2753 }
2754
2755 framesntohs(pCtx, &tmp19__, pBuf, 0);
2756 pBuf += 2;
2757 ielen -= 2;
2758 pDst->traffic_type = tmp19__ >> 0 & 0x1;
2759 pDst->tsid = tmp19__ >> 1 & 0xf;
2760 pDst->direction = tmp19__ >> 5 & 0x3;
2761 pDst->access_policy = tmp19__ >> 7 & 0x3;
2762 pDst->aggregation = tmp19__ >> 9 & 0x1;
2763 pDst->psb = tmp19__ >> 10 & 0x1;
2764 pDst->user_priority = tmp19__ >> 11 & 0x7;
2765 pDst->tsinfo_ack_pol = tmp19__ >> 14 & 0x3;
2766 if (unlikely(ielen < 1)) {
2767 pDst->present = 0;
2768 return DOT11F_INCOMPLETE_IE;
2769 }
2770
2771 tmp20__ = *pBuf;
2772 pBuf += 1;
2773 ielen -= 1;
2774 pDst->schedule = tmp20__ >> 0 & 0x1;
2775 pDst->unused = tmp20__ >> 1 & 0x7f;
2776 if (unlikely(ielen < 2)) {
2777 pDst->present = 0;
2778 return DOT11F_INCOMPLETE_IE;
2779 }
2780
2781 framesntohs(pCtx, &tmp21__, pBuf, 0);
2782 pBuf += 2;
2783 ielen -= 2;
2784 pDst->size = tmp21__ >> 0 & 0x7fff;
2785 pDst->fixed = tmp21__ >> 15 & 0x1;
2786 if (unlikely(ielen < 2)) {
2787 pDst->present = 0;
2788 return DOT11F_INCOMPLETE_IE;
2789 }
2790
2791 framesntohs(pCtx, &pDst->max_msdu_size, pBuf, 0);
2792 pBuf += 2;
2793 ielen -= (uint8_t)2;
2794 if (unlikely(ielen < 4)) {
2795 pDst->present = 0;
2796 return DOT11F_INCOMPLETE_IE;
2797 }
2798
2799 framesntohl(pCtx, &pDst->min_service_int, pBuf, 0);
2800 pBuf += 4;
2801 ielen -= (uint8_t)4;
2802 if (unlikely(ielen < 4)) {
2803 pDst->present = 0;
2804 return DOT11F_INCOMPLETE_IE;
2805 }
2806
2807 framesntohl(pCtx, &pDst->max_service_int, pBuf, 0);
2808 pBuf += 4;
2809 ielen -= (uint8_t)4;
2810 if (unlikely(ielen < 4)) {
2811 pDst->present = 0;
2812 return DOT11F_INCOMPLETE_IE;
2813 }
2814
2815 framesntohl(pCtx, &pDst->inactivity_int, pBuf, 0);
2816 pBuf += 4;
2817 ielen -= (uint8_t)4;
2818 if (unlikely(ielen < 4)) {
2819 pDst->present = 0;
2820 return DOT11F_INCOMPLETE_IE;
2821 }
2822
2823 framesntohl(pCtx, &pDst->suspension_int, pBuf, 0);
2824 pBuf += 4;
2825 ielen -= (uint8_t)4;
2826 if (unlikely(ielen < 4)) {
2827 pDst->present = 0;
2828 return DOT11F_INCOMPLETE_IE;
2829 }
2830
2831 framesntohl(pCtx, &pDst->service_start_time, pBuf, 0);
2832 pBuf += 4;
2833 ielen -= (uint8_t)4;
2834 if (unlikely(ielen < 4)) {
2835 pDst->present = 0;
2836 return DOT11F_INCOMPLETE_IE;
2837 }
2838
2839 framesntohl(pCtx, &pDst->min_data_rate, pBuf, 0);
2840 pBuf += 4;
2841 ielen -= (uint8_t)4;
2842 if (unlikely(ielen < 4)) {
2843 pDst->present = 0;
2844 return DOT11F_INCOMPLETE_IE;
2845 }
2846
2847 framesntohl(pCtx, &pDst->mean_data_rate, pBuf, 0);
2848 pBuf += 4;
2849 ielen -= (uint8_t)4;
2850 if (unlikely(ielen < 4)) {
2851 pDst->present = 0;
2852 return DOT11F_INCOMPLETE_IE;
2853 }
2854
2855 framesntohl(pCtx, &pDst->peak_data_rate, pBuf, 0);
2856 pBuf += 4;
2857 ielen -= (uint8_t)4;
2858 if (unlikely(ielen < 4)) {
2859 pDst->present = 0;
2860 return DOT11F_INCOMPLETE_IE;
2861 }
2862
2863 framesntohl(pCtx, &pDst->burst_size, pBuf, 0);
2864 pBuf += 4;
2865 ielen -= (uint8_t)4;
2866 if (unlikely(ielen < 4)) {
2867 pDst->present = 0;
2868 return DOT11F_INCOMPLETE_IE;
2869 }
2870
2871 framesntohl(pCtx, &pDst->delay_bound, pBuf, 0);
2872 pBuf += 4;
2873 ielen -= (uint8_t)4;
2874 if (unlikely(ielen < 4)) {
2875 pDst->present = 0;
2876 return DOT11F_INCOMPLETE_IE;
2877 }
2878
2879 framesntohl(pCtx, &pDst->min_phy_rate, pBuf, 0);
2880 pBuf += 4;
2881 ielen -= (uint8_t)4;
2882 if (unlikely(ielen < 2)) {
2883 pDst->present = 0;
2884 return DOT11F_INCOMPLETE_IE;
2885 }
2886
2887 framesntohs(pCtx, &pDst->surplus_bw_allowance, pBuf, 0);
2888 pBuf += 2;
2889 ielen -= (uint8_t)2;
2890 if (unlikely(ielen < 2)) {
2891 pDst->present = 0;
2892 return DOT11F_INCOMPLETE_IE;
2893 }
2894
2895 framesntohs(pCtx, &pDst->medium_time, pBuf, 0);
2896 (void)pCtx;
2897 return status;
2898 } /* End dot11f_unpack_ie_tspec. */
2899
2900 #define SigIeTSPEC (0x0016)
2901
2902
dot11f_unpack_ie_vht_caps(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEVHTCaps * pDst,bool append_ie)2903 uint32_t dot11f_unpack_ie_vht_caps(tpAniSirGlobal pCtx,
2904 uint8_t *pBuf,
2905 uint8_t ielen,
2906 tDot11fIEVHTCaps *pDst,
2907 bool append_ie)
2908 {
2909 uint32_t status = DOT11F_PARSE_SUCCESS;
2910 uint32_t tmp22__;
2911 uint16_t tmp23__;
2912 uint16_t tmp24__;
2913 (void) pBuf; (void)ielen; /* Shutup the compiler */
2914 if (pDst->present)
2915 return DOT11F_DUPLICATE_IE;
2916 pDst->present = 1;
2917 if (unlikely(ielen < 4)) {
2918 pDst->present = 0;
2919 return DOT11F_INCOMPLETE_IE;
2920 }
2921
2922 framesntohl(pCtx, &tmp22__, pBuf, 0);
2923 pBuf += 4;
2924 ielen -= 4;
2925 pDst->maxMPDULen = tmp22__ >> 0 & 0x3;
2926 pDst->supportedChannelWidthSet = tmp22__ >> 2 & 0x3;
2927 pDst->ldpcCodingCap = tmp22__ >> 4 & 0x1;
2928 pDst->shortGI80MHz = tmp22__ >> 5 & 0x1;
2929 pDst->shortGI160and80plus80MHz = tmp22__ >> 6 & 0x1;
2930 pDst->txSTBC = tmp22__ >> 7 & 0x1;
2931 pDst->rxSTBC = tmp22__ >> 8 & 0x7;
2932 pDst->suBeamFormerCap = tmp22__ >> 11 & 0x1;
2933 pDst->suBeamformeeCap = tmp22__ >> 12 & 0x1;
2934 pDst->csnofBeamformerAntSup = tmp22__ >> 13 & 0x7;
2935 pDst->numSoundingDim = tmp22__ >> 16 & 0x7;
2936 pDst->muBeamformerCap = tmp22__ >> 19 & 0x1;
2937 pDst->muBeamformeeCap = tmp22__ >> 20 & 0x1;
2938 pDst->vhtTXOPPS = tmp22__ >> 21 & 0x1;
2939 pDst->htcVHTCap = tmp22__ >> 22 & 0x1;
2940 pDst->maxAMPDULenExp = tmp22__ >> 23 & 0x7;
2941 pDst->vhtLinkAdaptCap = tmp22__ >> 26 & 0x3;
2942 pDst->rxAntPattern = tmp22__ >> 28 & 0x1;
2943 pDst->txAntPattern = tmp22__ >> 29 & 0x1;
2944 pDst->extended_nss_bw_supp = tmp22__ >> 30 & 0x3;
2945 if (unlikely(ielen < 2)) {
2946 pDst->present = 0;
2947 return DOT11F_INCOMPLETE_IE;
2948 }
2949
2950 framesntohs(pCtx, &pDst->rxMCSMap, pBuf, 0);
2951 pBuf += 2;
2952 ielen -= (uint8_t)2;
2953 if (unlikely(ielen < 2)) {
2954 pDst->present = 0;
2955 return DOT11F_INCOMPLETE_IE;
2956 }
2957
2958 framesntohs(pCtx, &tmp23__, pBuf, 0);
2959 pBuf += 2;
2960 ielen -= 2;
2961 pDst->rxHighSupDataRate = tmp23__ >> 0 & 0x1fff;
2962 pDst->max_nsts_total = tmp23__ >> 13 & 0x7;
2963 if (unlikely(ielen < 2)) {
2964 pDst->present = 0;
2965 return DOT11F_INCOMPLETE_IE;
2966 }
2967
2968 framesntohs(pCtx, &pDst->txMCSMap, pBuf, 0);
2969 pBuf += 2;
2970 ielen -= (uint8_t)2;
2971 if (unlikely(ielen < 2)) {
2972 pDst->present = 0;
2973 return DOT11F_INCOMPLETE_IE;
2974 }
2975
2976 framesntohs(pCtx, &tmp24__, pBuf, 0);
2977 pDst->txSupDataRate = tmp24__ >> 0 & 0x1fff;
2978 pDst->vht_extended_nss_bw_cap = tmp24__ >> 13 & 0x1;
2979 pDst->reserved = tmp24__ >> 14 & 0x3;
2980 (void)pCtx;
2981 return status;
2982 } /* End dot11f_unpack_ie_vht_caps. */
2983
2984 #define SigIeVHTCaps (0x0017)
2985
2986
dot11f_unpack_ie_vht_operation(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEVHTOperation * pDst,bool append_ie)2987 uint32_t dot11f_unpack_ie_vht_operation(tpAniSirGlobal pCtx,
2988 uint8_t *pBuf,
2989 uint8_t ielen,
2990 tDot11fIEVHTOperation *pDst,
2991 bool append_ie)
2992 {
2993 uint32_t status = DOT11F_PARSE_SUCCESS;
2994 (void) pBuf; (void)ielen; /* Shutup the compiler */
2995 if (pDst->present)
2996 return DOT11F_DUPLICATE_IE;
2997 pDst->present = 1;
2998 if (unlikely(ielen < 1)) {
2999 pDst->present = 0;
3000 return DOT11F_INCOMPLETE_IE;
3001 }
3002
3003 pDst->chanWidth = *pBuf;
3004 pBuf += 1;
3005 ielen -= (uint8_t)1;
3006 if (unlikely(ielen < 1)) {
3007 pDst->present = 0;
3008 return DOT11F_INCOMPLETE_IE;
3009 }
3010
3011 pDst->chan_center_freq_seg0 = *pBuf;
3012 pBuf += 1;
3013 ielen -= (uint8_t)1;
3014 if (unlikely(ielen < 1)) {
3015 pDst->present = 0;
3016 return DOT11F_INCOMPLETE_IE;
3017 }
3018
3019 pDst->chan_center_freq_seg1 = *pBuf;
3020 pBuf += 1;
3021 ielen -= (uint8_t)1;
3022 if (unlikely(ielen < 2)) {
3023 pDst->present = 0;
3024 return DOT11F_INCOMPLETE_IE;
3025 }
3026
3027 framesntohs(pCtx, &pDst->basicMCSSet, pBuf, 0);
3028 (void)pCtx;
3029 return status;
3030 } /* End dot11f_unpack_ie_vht_operation. */
3031
3032 #define SigIeVHTOperation (0x0018)
3033
3034
dot11f_unpack_ie_wmm_schedule(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEWMMSchedule * pDst,bool append_ie)3035 uint32_t dot11f_unpack_ie_wmm_schedule(tpAniSirGlobal pCtx,
3036 uint8_t *pBuf,
3037 uint8_t ielen,
3038 tDot11fIEWMMSchedule *pDst,
3039 bool append_ie)
3040 {
3041 uint32_t status = DOT11F_PARSE_SUCCESS;
3042 uint16_t tmp25__;
3043 (void) pBuf; (void)ielen; /* Shutup the compiler */
3044 if (pDst->present)
3045 return DOT11F_DUPLICATE_IE;
3046 pDst->present = 1;
3047 if (unlikely(ielen < 1)) {
3048 pDst->present = 0;
3049 return DOT11F_INCOMPLETE_IE;
3050 }
3051
3052 pDst->version = *pBuf;
3053 pBuf += 1;
3054 ielen -= (uint8_t)1;
3055 if (pDst->version != 0x1) {
3056 pDst->present = 0;
3057 return status | DOT11F_BAD_FIXED_VALUE;
3058 }
3059 if (unlikely(ielen < 2)) {
3060 pDst->present = 0;
3061 return DOT11F_INCOMPLETE_IE;
3062 }
3063
3064 framesntohs(pCtx, &tmp25__, pBuf, 0);
3065 pBuf += 2;
3066 ielen -= 2;
3067 pDst->aggregation = tmp25__ >> 0 & 0x1;
3068 pDst->tsid = tmp25__ >> 1 & 0xf;
3069 pDst->direction = tmp25__ >> 5 & 0x3;
3070 pDst->reserved = tmp25__ >> 7 & 0x1ff;
3071 if (unlikely(ielen < 4)) {
3072 pDst->present = 0;
3073 return DOT11F_INCOMPLETE_IE;
3074 }
3075
3076 framesntohl(pCtx, &pDst->service_start_time, pBuf, 0);
3077 pBuf += 4;
3078 ielen -= (uint8_t)4;
3079 if (unlikely(ielen < 4)) {
3080 pDst->present = 0;
3081 return DOT11F_INCOMPLETE_IE;
3082 }
3083
3084 framesntohl(pCtx, &pDst->service_interval, pBuf, 0);
3085 pBuf += 4;
3086 ielen -= (uint8_t)4;
3087 if (unlikely(ielen < 2)) {
3088 pDst->present = 0;
3089 return DOT11F_INCOMPLETE_IE;
3090 }
3091
3092 framesntohs(pCtx, &pDst->max_service_dur, pBuf, 0);
3093 pBuf += 2;
3094 ielen -= (uint8_t)2;
3095 if (unlikely(ielen < 2)) {
3096 pDst->present = 0;
3097 return DOT11F_INCOMPLETE_IE;
3098 }
3099
3100 framesntohs(pCtx, &pDst->spec_interval, pBuf, 0);
3101 (void)pCtx;
3102 return status;
3103 } /* End dot11f_unpack_ie_wmm_schedule. */
3104
3105 #define SigIeWMMSchedule (0x0019)
3106
3107
dot11f_unpack_ie_wmmtclas(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEWMMTCLAS * pDst,bool append_ie)3108 uint32_t dot11f_unpack_ie_wmmtclas(tpAniSirGlobal pCtx,
3109 uint8_t *pBuf,
3110 uint8_t ielen,
3111 tDot11fIEWMMTCLAS *pDst,
3112 bool append_ie)
3113 {
3114 uint32_t status = DOT11F_PARSE_SUCCESS;
3115 (void) pBuf; (void)ielen; /* Shutup the compiler */
3116 if (pDst->present)
3117 return DOT11F_DUPLICATE_IE;
3118 pDst->present = 1;
3119 if (unlikely(ielen < 1)) {
3120 pDst->present = 0;
3121 return DOT11F_INCOMPLETE_IE;
3122 }
3123
3124 pDst->version = *pBuf;
3125 pBuf += 1;
3126 ielen -= (uint8_t)1;
3127 if (pDst->version != 0x1) {
3128 pDst->present = 0;
3129 return status | DOT11F_BAD_FIXED_VALUE;
3130 }
3131 if (unlikely(ielen < 1)) {
3132 pDst->present = 0;
3133 return DOT11F_INCOMPLETE_IE;
3134 }
3135
3136 pDst->user_priority = *pBuf;
3137 pBuf += 1;
3138 ielen -= (uint8_t)1;
3139 if (unlikely(ielen < 1)) {
3140 pDst->present = 0;
3141 return DOT11F_INCOMPLETE_IE;
3142 }
3143
3144 pDst->classifier_type = *pBuf;
3145 pBuf += 1;
3146 ielen -= (uint8_t)1;
3147 if (unlikely(ielen < 1)) {
3148 pDst->present = 0;
3149 return DOT11F_INCOMPLETE_IE;
3150 }
3151
3152 pDst->classifier_mask = *pBuf;
3153 pBuf += 1;
3154 ielen -= (uint8_t)1;
3155 switch (pDst->classifier_type) {
3156 case 0:
3157 if (unlikely(ielen < 6)) {
3158 pDst->present = 0;
3159 return DOT11F_INCOMPLETE_IE;
3160 }
3161
3162 DOT11F_MEMCPY(pCtx, pDst->info.EthParams.source, pBuf, 6);
3163 pBuf += 6;
3164 ielen -= (uint8_t)6;
3165 if (unlikely(ielen < 6)) {
3166 pDst->present = 0;
3167 return DOT11F_INCOMPLETE_IE;
3168 }
3169
3170 DOT11F_MEMCPY(pCtx, pDst->info.EthParams.dest, pBuf, 6);
3171 pBuf += 6;
3172 ielen -= (uint8_t)6;
3173 if (unlikely(ielen < 2)) {
3174 pDst->present = 0;
3175 return DOT11F_INCOMPLETE_IE;
3176 }
3177
3178 framesntohs(pCtx, &pDst->info.EthParams.type, pBuf, 0);
3179 pBuf += 2;
3180 ielen -= (uint8_t)2;
3181 break;
3182 case 1:
3183 if (unlikely(ielen < 1)) {
3184 pDst->present = 0;
3185 return DOT11F_INCOMPLETE_IE;
3186 }
3187
3188 pDst->info.IpParams.version = *pBuf;
3189 pBuf += 1;
3190 ielen -= (uint8_t)1;
3191 switch (pDst->info.IpParams.version) {
3192 case 4:
3193 if (unlikely(ielen < 4)) {
3194 pDst->present = 0;
3195 return DOT11F_INCOMPLETE_IE;
3196 }
3197
3198 DOT11F_MEMCPY(pCtx, pDst->info.IpParams.params.IpV4Params.source, pBuf, 4);
3199 pBuf += 4;
3200 ielen -= (uint8_t)4;
3201 if (unlikely(ielen < 4)) {
3202 pDst->present = 0;
3203 return DOT11F_INCOMPLETE_IE;
3204 }
3205
3206 DOT11F_MEMCPY(pCtx, pDst->info.IpParams.params.IpV4Params.dest, pBuf, 4);
3207 pBuf += 4;
3208 ielen -= (uint8_t)4;
3209 if (unlikely(ielen < 2)) {
3210 pDst->present = 0;
3211 return DOT11F_INCOMPLETE_IE;
3212 }
3213
3214 framesntohs(pCtx, &pDst->info.IpParams.params.IpV4Params.src_port, pBuf, 0);
3215 pBuf += 2;
3216 ielen -= (uint8_t)2;
3217 if (unlikely(ielen < 2)) {
3218 pDst->present = 0;
3219 return DOT11F_INCOMPLETE_IE;
3220 }
3221
3222 framesntohs(pCtx, &pDst->info.IpParams.params.IpV4Params.dest_port, pBuf, 0);
3223 pBuf += 2;
3224 ielen -= (uint8_t)2;
3225 if (unlikely(ielen < 1)) {
3226 pDst->present = 0;
3227 return DOT11F_INCOMPLETE_IE;
3228 }
3229
3230 pDst->info.IpParams.params.IpV4Params.DSCP = *pBuf;
3231 pBuf += 1;
3232 ielen -= (uint8_t)1;
3233 if (unlikely(ielen < 1)) {
3234 pDst->present = 0;
3235 return DOT11F_INCOMPLETE_IE;
3236 }
3237
3238 pDst->info.IpParams.params.IpV4Params.proto = *pBuf;
3239 pBuf += 1;
3240 ielen -= (uint8_t)1;
3241 if (unlikely(ielen < 1)) {
3242 pDst->present = 0;
3243 return DOT11F_INCOMPLETE_IE;
3244 }
3245
3246 pDst->info.IpParams.params.IpV4Params.reserved = *pBuf;
3247 pBuf += 1;
3248 ielen -= (uint8_t)1;
3249 break;
3250 case 6:
3251 if (unlikely(ielen < 16)) {
3252 pDst->present = 0;
3253 return DOT11F_INCOMPLETE_IE;
3254 }
3255
3256 DOT11F_MEMCPY(pCtx, pDst->info.IpParams.params.IpV6Params.source, pBuf, 16);
3257 pBuf += 16;
3258 ielen -= (uint8_t)16;
3259 if (unlikely(ielen < 16)) {
3260 pDst->present = 0;
3261 return DOT11F_INCOMPLETE_IE;
3262 }
3263
3264 DOT11F_MEMCPY(pCtx, pDst->info.IpParams.params.IpV6Params.dest, pBuf, 16);
3265 pBuf += 16;
3266 ielen -= (uint8_t)16;
3267 if (unlikely(ielen < 2)) {
3268 pDst->present = 0;
3269 return DOT11F_INCOMPLETE_IE;
3270 }
3271
3272 framesntohs(pCtx, &pDst->info.IpParams.params.IpV6Params.src_port, pBuf, 0);
3273 pBuf += 2;
3274 ielen -= (uint8_t)2;
3275 if (unlikely(ielen < 2)) {
3276 pDst->present = 0;
3277 return DOT11F_INCOMPLETE_IE;
3278 }
3279
3280 framesntohs(pCtx, &pDst->info.IpParams.params.IpV6Params.dest_port, pBuf, 0);
3281 pBuf += 2;
3282 ielen -= (uint8_t)2;
3283 if (unlikely(ielen < 3)) {
3284 pDst->present = 0;
3285 return DOT11F_INCOMPLETE_IE;
3286 }
3287
3288 DOT11F_MEMCPY(pCtx, pDst->info.IpParams.params.IpV6Params.flow_label, pBuf, 3);
3289 pBuf += 3;
3290 ielen -= (uint8_t)3;
3291 break;
3292 }
3293 break;
3294 case 2:
3295 if (unlikely(ielen < 2)) {
3296 pDst->present = 0;
3297 return DOT11F_INCOMPLETE_IE;
3298 }
3299
3300 framesntohs(pCtx, &pDst->info.Params8021dq.tag_type, pBuf, 0);
3301 pBuf += 2;
3302 ielen -= (uint8_t)2;
3303 break;
3304 }
3305 (void)pCtx;
3306 return status;
3307 } /* End dot11f_unpack_ie_wmmtclas. */
3308
3309 #define SigIeWMMTCLAS (0x001a)
3310
3311
dot11f_unpack_ie_wmmtclasproc(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEWMMTCLASPROC * pDst,bool append_ie)3312 uint32_t dot11f_unpack_ie_wmmtclasproc(tpAniSirGlobal pCtx,
3313 uint8_t *pBuf,
3314 uint8_t ielen,
3315 tDot11fIEWMMTCLASPROC *pDst,
3316 bool append_ie)
3317 {
3318 uint32_t status = DOT11F_PARSE_SUCCESS;
3319 (void) pBuf; (void)ielen; /* Shutup the compiler */
3320 if (pDst->present)
3321 return DOT11F_DUPLICATE_IE;
3322 pDst->present = 1;
3323 if (unlikely(ielen < 1)) {
3324 pDst->present = 0;
3325 return DOT11F_INCOMPLETE_IE;
3326 }
3327
3328 pDst->version = *pBuf;
3329 pBuf += 1;
3330 ielen -= (uint8_t)1;
3331 if (pDst->version != 0x1) {
3332 pDst->present = 0;
3333 return status | DOT11F_BAD_FIXED_VALUE;
3334 }
3335 if (unlikely(ielen < 1)) {
3336 pDst->present = 0;
3337 return DOT11F_INCOMPLETE_IE;
3338 }
3339
3340 pDst->processing = *pBuf;
3341 (void)pCtx;
3342 return status;
3343 } /* End dot11f_unpack_ie_wmmtclasproc. */
3344
3345 #define SigIeWMMTCLASPROC (0x001b)
3346
3347
dot11f_unpack_ie_wmmts_delay(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEWMMTSDelay * pDst,bool append_ie)3348 uint32_t dot11f_unpack_ie_wmmts_delay(tpAniSirGlobal pCtx,
3349 uint8_t *pBuf,
3350 uint8_t ielen,
3351 tDot11fIEWMMTSDelay *pDst,
3352 bool append_ie)
3353 {
3354 uint32_t status = DOT11F_PARSE_SUCCESS;
3355 (void) pBuf; (void)ielen; /* Shutup the compiler */
3356 if (pDst->present)
3357 return DOT11F_DUPLICATE_IE;
3358 pDst->present = 1;
3359 if (unlikely(ielen < 1)) {
3360 pDst->present = 0;
3361 return DOT11F_INCOMPLETE_IE;
3362 }
3363
3364 pDst->version = *pBuf;
3365 pBuf += 1;
3366 ielen -= (uint8_t)1;
3367 if (pDst->version != 0x1) {
3368 pDst->present = 0;
3369 return status | DOT11F_BAD_FIXED_VALUE;
3370 }
3371 if (unlikely(ielen < 4)) {
3372 pDst->present = 0;
3373 return DOT11F_INCOMPLETE_IE;
3374 }
3375
3376 framesntohl(pCtx, &pDst->delay, pBuf, 0);
3377 (void)pCtx;
3378 return status;
3379 } /* End dot11f_unpack_ie_wmmts_delay. */
3380
3381 #define SigIeWMMTSDelay (0x001c)
3382
3383
dot11f_unpack_ie_wmmtspec(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEWMMTSPEC * pDst,bool append_ie)3384 uint32_t dot11f_unpack_ie_wmmtspec(tpAniSirGlobal pCtx,
3385 uint8_t *pBuf,
3386 uint8_t ielen,
3387 tDot11fIEWMMTSPEC *pDst,
3388 bool append_ie)
3389 {
3390 uint32_t status = DOT11F_PARSE_SUCCESS;
3391 uint16_t tmp26__;
3392 uint8_t tmp27__;
3393 uint16_t tmp28__;
3394 (void) pBuf; (void)ielen; /* Shutup the compiler */
3395 if (pDst->present)
3396 return DOT11F_DUPLICATE_IE;
3397 pDst->present = 1;
3398 if (unlikely(ielen < 1)) {
3399 pDst->present = 0;
3400 return DOT11F_INCOMPLETE_IE;
3401 }
3402
3403 pDst->version = *pBuf;
3404 pBuf += 1;
3405 ielen -= (uint8_t)1;
3406 if (pDst->version != 0x1) {
3407 pDst->present = 0;
3408 return status | DOT11F_BAD_FIXED_VALUE;
3409 }
3410 if (unlikely(ielen < 2)) {
3411 pDst->present = 0;
3412 return DOT11F_INCOMPLETE_IE;
3413 }
3414
3415 framesntohs(pCtx, &tmp26__, pBuf, 0);
3416 pBuf += 2;
3417 ielen -= 2;
3418 pDst->traffic_type = tmp26__ >> 0 & 0x1;
3419 pDst->tsid = tmp26__ >> 1 & 0xf;
3420 pDst->direction = tmp26__ >> 5 & 0x3;
3421 pDst->access_policy = tmp26__ >> 7 & 0x3;
3422 pDst->aggregation = tmp26__ >> 9 & 0x1;
3423 pDst->psb = tmp26__ >> 10 & 0x1;
3424 pDst->user_priority = tmp26__ >> 11 & 0x7;
3425 pDst->tsinfo_ack_pol = tmp26__ >> 14 & 0x3;
3426 if (unlikely(ielen < 1)) {
3427 pDst->present = 0;
3428 return DOT11F_INCOMPLETE_IE;
3429 }
3430
3431 tmp27__ = *pBuf;
3432 pBuf += 1;
3433 ielen -= 1;
3434 pDst->tsinfo_rsvd = tmp27__ >> 0 & 0x7f;
3435 pDst->burst_size_defn = tmp27__ >> 7 & 0x1;
3436 if (unlikely(ielen < 2)) {
3437 pDst->present = 0;
3438 return DOT11F_INCOMPLETE_IE;
3439 }
3440
3441 framesntohs(pCtx, &tmp28__, pBuf, 0);
3442 pBuf += 2;
3443 ielen -= 2;
3444 pDst->size = tmp28__ >> 0 & 0x7fff;
3445 pDst->fixed = tmp28__ >> 15 & 0x1;
3446 if (unlikely(ielen < 2)) {
3447 pDst->present = 0;
3448 return DOT11F_INCOMPLETE_IE;
3449 }
3450
3451 framesntohs(pCtx, &pDst->max_msdu_size, pBuf, 0);
3452 pBuf += 2;
3453 ielen -= (uint8_t)2;
3454 if (unlikely(ielen < 4)) {
3455 pDst->present = 0;
3456 return DOT11F_INCOMPLETE_IE;
3457 }
3458
3459 framesntohl(pCtx, &pDst->min_service_int, pBuf, 0);
3460 pBuf += 4;
3461 ielen -= (uint8_t)4;
3462 if (unlikely(ielen < 4)) {
3463 pDst->present = 0;
3464 return DOT11F_INCOMPLETE_IE;
3465 }
3466
3467 framesntohl(pCtx, &pDst->max_service_int, pBuf, 0);
3468 pBuf += 4;
3469 ielen -= (uint8_t)4;
3470 if (unlikely(ielen < 4)) {
3471 pDst->present = 0;
3472 return DOT11F_INCOMPLETE_IE;
3473 }
3474
3475 framesntohl(pCtx, &pDst->inactivity_int, pBuf, 0);
3476 pBuf += 4;
3477 ielen -= (uint8_t)4;
3478 if (unlikely(ielen < 4)) {
3479 pDst->present = 0;
3480 return DOT11F_INCOMPLETE_IE;
3481 }
3482
3483 framesntohl(pCtx, &pDst->suspension_int, pBuf, 0);
3484 pBuf += 4;
3485 ielen -= (uint8_t)4;
3486 if (unlikely(ielen < 4)) {
3487 pDst->present = 0;
3488 return DOT11F_INCOMPLETE_IE;
3489 }
3490
3491 framesntohl(pCtx, &pDst->service_start_time, pBuf, 0);
3492 pBuf += 4;
3493 ielen -= (uint8_t)4;
3494 if (unlikely(ielen < 4)) {
3495 pDst->present = 0;
3496 return DOT11F_INCOMPLETE_IE;
3497 }
3498
3499 framesntohl(pCtx, &pDst->min_data_rate, pBuf, 0);
3500 pBuf += 4;
3501 ielen -= (uint8_t)4;
3502 if (unlikely(ielen < 4)) {
3503 pDst->present = 0;
3504 return DOT11F_INCOMPLETE_IE;
3505 }
3506
3507 framesntohl(pCtx, &pDst->mean_data_rate, pBuf, 0);
3508 pBuf += 4;
3509 ielen -= (uint8_t)4;
3510 if (unlikely(ielen < 4)) {
3511 pDst->present = 0;
3512 return DOT11F_INCOMPLETE_IE;
3513 }
3514
3515 framesntohl(pCtx, &pDst->peak_data_rate, pBuf, 0);
3516 pBuf += 4;
3517 ielen -= (uint8_t)4;
3518 if (unlikely(ielen < 4)) {
3519 pDst->present = 0;
3520 return DOT11F_INCOMPLETE_IE;
3521 }
3522
3523 framesntohl(pCtx, &pDst->burst_size, pBuf, 0);
3524 pBuf += 4;
3525 ielen -= (uint8_t)4;
3526 if (unlikely(ielen < 4)) {
3527 pDst->present = 0;
3528 return DOT11F_INCOMPLETE_IE;
3529 }
3530
3531 framesntohl(pCtx, &pDst->delay_bound, pBuf, 0);
3532 pBuf += 4;
3533 ielen -= (uint8_t)4;
3534 if (unlikely(ielen < 4)) {
3535 pDst->present = 0;
3536 return DOT11F_INCOMPLETE_IE;
3537 }
3538
3539 framesntohl(pCtx, &pDst->min_phy_rate, pBuf, 0);
3540 pBuf += 4;
3541 ielen -= (uint8_t)4;
3542 if (unlikely(ielen < 2)) {
3543 pDst->present = 0;
3544 return DOT11F_INCOMPLETE_IE;
3545 }
3546
3547 framesntohs(pCtx, &pDst->surplus_bw_allowance, pBuf, 0);
3548 pBuf += 2;
3549 ielen -= (uint8_t)2;
3550 if (unlikely(ielen < 2)) {
3551 pDst->present = 0;
3552 return DOT11F_INCOMPLETE_IE;
3553 }
3554
3555 framesntohs(pCtx, &pDst->medium_time, pBuf, 0);
3556 (void)pCtx;
3557 return status;
3558 } /* End dot11f_unpack_ie_wmmtspec. */
3559
3560 #define SigIeWMMTSPEC (0x001d)
3561
3562
dot11f_unpack_ie_wider_bw_chan_switch_ann(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEWiderBWChanSwitchAnn * pDst,bool append_ie)3563 uint32_t dot11f_unpack_ie_wider_bw_chan_switch_ann(tpAniSirGlobal pCtx,
3564 uint8_t *pBuf,
3565 uint8_t ielen,
3566 tDot11fIEWiderBWChanSwitchAnn *pDst,
3567 bool append_ie)
3568 {
3569 uint32_t status = DOT11F_PARSE_SUCCESS;
3570 (void) pBuf; (void)ielen; /* Shutup the compiler */
3571 if (pDst->present)
3572 return DOT11F_DUPLICATE_IE;
3573 pDst->present = 1;
3574 if (unlikely(ielen < 1)) {
3575 pDst->present = 0;
3576 return DOT11F_INCOMPLETE_IE;
3577 }
3578
3579 pDst->newChanWidth = *pBuf;
3580 pBuf += 1;
3581 ielen -= (uint8_t)1;
3582 if (unlikely(ielen < 1)) {
3583 pDst->present = 0;
3584 return DOT11F_INCOMPLETE_IE;
3585 }
3586
3587 pDst->newCenterChanFreq0 = *pBuf;
3588 pBuf += 1;
3589 ielen -= (uint8_t)1;
3590 if (unlikely(ielen < 1)) {
3591 pDst->present = 0;
3592 return DOT11F_INCOMPLETE_IE;
3593 }
3594
3595 pDst->newCenterChanFreq1 = *pBuf;
3596 (void)pCtx;
3597 return status;
3598 } /* End dot11f_unpack_ie_wider_bw_chan_switch_ann. */
3599
3600 #define SigIeWiderBWChanSwitchAnn (0x001e)
3601
3602
dot11f_unpack_ie_azimuth_req(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEazimuth_req * pDst,bool append_ie)3603 uint32_t dot11f_unpack_ie_azimuth_req(tpAniSirGlobal pCtx,
3604 uint8_t *pBuf,
3605 uint8_t ielen,
3606 tDot11fIEazimuth_req *pDst,
3607 bool append_ie)
3608 {
3609 uint32_t status = DOT11F_PARSE_SUCCESS;
3610 (void) pBuf; (void)ielen; /* Shutup the compiler */
3611 if (pDst->present)
3612 return DOT11F_DUPLICATE_IE;
3613 pDst->present = 1;
3614 if (unlikely(ielen < 1)) {
3615 pDst->present = 0;
3616 return DOT11F_INCOMPLETE_IE;
3617 }
3618
3619 pDst->request = *pBuf;
3620 (void)pCtx;
3621 return status;
3622 } /* End dot11f_unpack_ie_azimuth_req. */
3623
3624 #define SigIeazimuth_req (0x001f)
3625
3626
dot11f_unpack_ie_beacon_report_frm_body_fragment_id(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEbeacon_report_frm_body_fragment_id * pDst,bool append_ie)3627 uint32_t dot11f_unpack_ie_beacon_report_frm_body_fragment_id(tpAniSirGlobal pCtx,
3628 uint8_t *pBuf,
3629 uint8_t ielen,
3630 tDot11fIEbeacon_report_frm_body_fragment_id *pDst,
3631 bool append_ie)
3632 {
3633 uint32_t status = DOT11F_PARSE_SUCCESS;
3634 uint16_t tmp29__;
3635 (void) pBuf; (void)ielen; /* Shutup the compiler */
3636 if (pDst->present)
3637 return DOT11F_DUPLICATE_IE;
3638 pDst->present = 1;
3639 if (unlikely(ielen < 2)) {
3640 pDst->present = 0;
3641 return DOT11F_INCOMPLETE_IE;
3642 }
3643
3644 framesntohs(pCtx, &tmp29__, pBuf, 0);
3645 pDst->beacon_report_id = tmp29__ >> 0 & 0xff;
3646 pDst->fragment_id_number = tmp29__ >> 8 & 0x7f;
3647 pDst->more_fragments = tmp29__ >> 15 & 0x1;
3648 (void)pCtx;
3649 return status;
3650 } /* End dot11f_unpack_ie_beacon_report_frm_body_fragment_id. */
3651
3652 #define SigIebeacon_report_frm_body_fragment_id (0x0020)
3653
3654
dot11f_unpack_ie_bw_ind_element(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEbw_ind_element * pDst,bool append_ie)3655 uint32_t dot11f_unpack_ie_bw_ind_element(tpAniSirGlobal pCtx,
3656 uint8_t *pBuf,
3657 uint8_t ielen,
3658 tDot11fIEbw_ind_element *pDst,
3659 bool append_ie)
3660 {
3661 uint32_t status = DOT11F_PARSE_SUCCESS;
3662 uint8_t tmp30__;
3663 uint8_t tmp31__;
3664 (void) pBuf; (void)ielen; /* Shutup the compiler */
3665 if (pDst->present)
3666 return DOT11F_DUPLICATE_IE;
3667 pDst->present = 1;
3668 if (unlikely(ielen < 1)) {
3669 pDst->present = 0;
3670 return DOT11F_INCOMPLETE_IE;
3671 }
3672
3673 tmp30__ = *pBuf;
3674 pBuf += 1;
3675 ielen -= 1;
3676 pDst->reserved = tmp30__ >> 0 & 0x1;
3677 pDst->disabled_sub_chan_bitmap_present = tmp30__ >> 1 & 0x1;
3678 pDst->reserved_1 = tmp30__ >> 2 & 0x3f;
3679 if (unlikely(ielen < 1)) {
3680 pDst->present = 0;
3681 return DOT11F_INCOMPLETE_IE;
3682 }
3683
3684 tmp31__ = *pBuf;
3685 pBuf += 1;
3686 ielen -= 1;
3687 pDst->channel_width = tmp31__ >> 0 & 0x7;
3688 pDst->reserved_2 = tmp31__ >> 3 & 0x1f;
3689 if (unlikely(ielen < 1)) {
3690 pDst->present = 0;
3691 return DOT11F_INCOMPLETE_IE;
3692 }
3693
3694 pDst->ccfs0 = *pBuf;
3695 pBuf += 1;
3696 ielen -= (uint8_t)1;
3697 if (unlikely(ielen < 1)) {
3698 pDst->present = 0;
3699 return DOT11F_INCOMPLETE_IE;
3700 }
3701
3702 pDst->ccfs1 = *pBuf;
3703 pBuf += 1;
3704 ielen -= (uint8_t)1;
3705 if (unlikely(ielen < pDst->disabled_sub_chan_bitmap_present * 2)) {
3706 pDst->present = 0;
3707 return DOT11F_INCOMPLETE_IE;
3708 }
3709
3710 if (pDst->disabled_sub_chan_bitmap_present > 1) {
3711 pDst->present = 0;
3712 return DOT11F_SKIPPED_BAD_IE;
3713 }
3714
3715 DOT11F_MEMCPY(pCtx, pDst->disabled_sub_chan_bitmap, pBuf, (pDst->disabled_sub_chan_bitmap_present * 2));
3716 (void)pCtx;
3717 return status;
3718 } /* End dot11f_unpack_ie_bw_ind_element. */
3719
3720 #define SigIebw_ind_element (0x0021)
3721
3722
dot11f_unpack_ie_bw_indication(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEbw_indication * pDst,bool append_ie)3723 uint32_t dot11f_unpack_ie_bw_indication(tpAniSirGlobal pCtx,
3724 uint8_t *pBuf,
3725 uint8_t ielen,
3726 tDot11fIEbw_indication *pDst,
3727 bool append_ie)
3728 {
3729 uint32_t status = DOT11F_PARSE_SUCCESS;
3730 uint8_t tmp32__;
3731 uint8_t tmp33__;
3732 (void) pBuf; (void)ielen; /* Shutup the compiler */
3733 if (pDst->present)
3734 return DOT11F_DUPLICATE_IE;
3735 pDst->present = 1;
3736 if (unlikely(ielen < 1)) {
3737 pDst->present = 0;
3738 return DOT11F_INCOMPLETE_IE;
3739 }
3740
3741 tmp32__ = *pBuf;
3742 pBuf += 1;
3743 ielen -= 1;
3744 pDst->reserved = tmp32__ >> 0 & 0x1;
3745 pDst->disabled_sub_chan_bitmap_present = tmp32__ >> 1 & 0x1;
3746 pDst->reserved_1 = tmp32__ >> 2 & 0x3f;
3747 if (unlikely(ielen < 1)) {
3748 pDst->present = 0;
3749 return DOT11F_INCOMPLETE_IE;
3750 }
3751
3752 tmp33__ = *pBuf;
3753 pBuf += 1;
3754 ielen -= 1;
3755 pDst->channel_width = tmp33__ >> 0 & 0x7;
3756 pDst->reserved_2 = tmp33__ >> 3 & 0x1f;
3757 if (unlikely(ielen < 1)) {
3758 pDst->present = 0;
3759 return DOT11F_INCOMPLETE_IE;
3760 }
3761
3762 pDst->ccfs0 = *pBuf;
3763 pBuf += 1;
3764 ielen -= (uint8_t)1;
3765 if (unlikely(ielen < 1)) {
3766 pDst->present = 0;
3767 return DOT11F_INCOMPLETE_IE;
3768 }
3769
3770 pDst->ccfs1 = *pBuf;
3771 pBuf += 1;
3772 ielen -= (uint8_t)1;
3773 if (unlikely(ielen < pDst->disabled_sub_chan_bitmap_present * 2)) {
3774 pDst->present = 0;
3775 return DOT11F_INCOMPLETE_IE;
3776 }
3777
3778 if (pDst->disabled_sub_chan_bitmap_present > 1) {
3779 pDst->present = 0;
3780 return DOT11F_SKIPPED_BAD_IE;
3781 }
3782
3783 DOT11F_MEMCPY(pCtx, pDst->disabled_sub_chan_bitmap, pBuf, (pDst->disabled_sub_chan_bitmap_present * 2));
3784 (void)pCtx;
3785 return status;
3786 } /* End dot11f_unpack_ie_bw_indication. */
3787
3788 #define SigIebw_indication (0x0022)
3789
3790
dot11f_unpack_ie_last_beacon_report_indication(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIElast_beacon_report_indication * pDst,bool append_ie)3791 uint32_t dot11f_unpack_ie_last_beacon_report_indication(tpAniSirGlobal pCtx,
3792 uint8_t *pBuf,
3793 uint8_t ielen,
3794 tDot11fIElast_beacon_report_indication *pDst,
3795 bool append_ie)
3796 {
3797 uint32_t status = DOT11F_PARSE_SUCCESS;
3798 (void) pBuf; (void)ielen; /* Shutup the compiler */
3799 if (pDst->present)
3800 return DOT11F_DUPLICATE_IE;
3801 pDst->present = 1;
3802 if (unlikely(ielen < 1)) {
3803 pDst->present = 0;
3804 return DOT11F_INCOMPLETE_IE;
3805 }
3806
3807 pDst->last_fragment = *pBuf;
3808 (void)pCtx;
3809 return status;
3810 } /* End dot11f_unpack_ie_last_beacon_report_indication. */
3811
3812 #define SigIelast_beacon_report_indication (0x0023)
3813
3814
dot11f_unpack_ie_max_age(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEmax_age * pDst,bool append_ie)3815 uint32_t dot11f_unpack_ie_max_age(tpAniSirGlobal pCtx,
3816 uint8_t *pBuf,
3817 uint8_t ielen,
3818 tDot11fIEmax_age *pDst,
3819 bool append_ie)
3820 {
3821 uint32_t status = DOT11F_PARSE_SUCCESS;
3822 (void) pBuf; (void)ielen; /* Shutup the compiler */
3823 if (pDst->present)
3824 return DOT11F_DUPLICATE_IE;
3825 pDst->present = 1;
3826 if (unlikely(ielen < 2)) {
3827 pDst->present = 0;
3828 return DOT11F_INCOMPLETE_IE;
3829 }
3830
3831 framesntohs(pCtx, &pDst->max_age, pBuf, 0);
3832 (void)pCtx;
3833 return status;
3834 } /* End dot11f_unpack_ie_max_age. */
3835
3836 #define SigIemax_age (0x0024)
3837
3838
dot11f_unpack_ie_mscs_status(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEmscs_status * pDst,bool append_ie)3839 uint32_t dot11f_unpack_ie_mscs_status(tpAniSirGlobal pCtx,
3840 uint8_t *pBuf,
3841 uint8_t ielen,
3842 tDot11fIEmscs_status *pDst,
3843 bool append_ie)
3844 {
3845 uint32_t status = DOT11F_PARSE_SUCCESS;
3846 (void) pBuf; (void)ielen; /* Shutup the compiler */
3847 if (pDst->present)
3848 return DOT11F_DUPLICATE_IE;
3849 pDst->present = 1;
3850 if (unlikely(ielen < 1)) {
3851 pDst->present = 0;
3852 return DOT11F_INCOMPLETE_IE;
3853 }
3854
3855 pDst->status_code = *pBuf;
3856 (void)pCtx;
3857 return status;
3858 } /* End dot11f_unpack_ie_mscs_status. */
3859
3860 #define SigIemscs_status (0x0025)
3861
3862
3863 static const tFFDefn FFS_neighbor_rpt[] = {
3864 { NULL, 0, 0, 0,},
3865 };
3866
3867 static const tIEDefn IES_neighbor_rpt[] = {
3868 { offsetof(tDot11fIEneighbor_rpt, TSFInfo), offsetof(tDot11fIETSFInfo,
3869 present), 0, "TSFInfo", 0, 6, 6, SigIeTSFInfo, {0, 0, 0, 0, 0},
3870 0, DOT11F_EID_TSFINFO, 0, 0, },
3871 { offsetof(tDot11fIEneighbor_rpt, CondensedCountryStr),
3872 offsetof(tDot11fIECondensedCountryStr, present), 0, "CondensedCountryStr",
3873 0, 4, 4, SigIeCondensedCountryStr, {0, 0, 0, 0, 0},
3874 0, DOT11F_EID_CONDENSEDCOUNTRYSTR, 0, 0, },
3875 { offsetof(tDot11fIEneighbor_rpt, MeasurementPilot),
3876 offsetof(tDot11fIEMeasurementPilot, present), 0, "MeasurementPilot",
3877 0, 3, 258, SigIeMeasurementPilot, {0, 0, 0, 0, 0},
3878 0, DOT11F_EID_MEASUREMENTPILOT, 0, 0, },
3879 { offsetof(tDot11fIEneighbor_rpt, RRMEnabledCap),
3880 offsetof(tDot11fIERRMEnabledCap, present), 0, "RRMEnabledCap",
3881 0, 7, 7, SigIeRRMEnabledCap, {0, 0, 0, 0, 0},
3882 0, DOT11F_EID_RRMENABLEDCAP, 0, 0, },
3883 { offsetof(tDot11fIEneighbor_rpt, MultiBssid),
3884 offsetof(tDot11fIEMultiBssid, present), 0, "MultiBssid",
3885 0, 3, 258, SigIeMultiBssid, {0, 0, 0, 0, 0},
3886 0, DOT11F_EID_MULTIBSSID, 0, 0, },
3887 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },
3888 };
3889
dot11f_unpack_ie_neighbor_rpt(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEneighbor_rpt * pDst,bool append_ie)3890 uint32_t dot11f_unpack_ie_neighbor_rpt(tpAniSirGlobal pCtx,
3891 uint8_t *pBuf,
3892 uint8_t ielen,
3893 tDot11fIEneighbor_rpt *pDst,
3894 bool append_ie)
3895 {
3896 uint32_t status = DOT11F_PARSE_SUCCESS;
3897 uint8_t tmp34__;
3898 uint8_t tmp35__;
3899 (void) pBuf; (void)ielen; /* Shutup the compiler */
3900 if (pDst->present)
3901 return DOT11F_DUPLICATE_IE;
3902 pDst->present = 1;
3903 if (unlikely(ielen < 6)) {
3904 pDst->present = 0;
3905 return DOT11F_INCOMPLETE_IE;
3906 }
3907
3908 DOT11F_MEMCPY(pCtx, pDst->bssid, pBuf, 6);
3909 pBuf += 6;
3910 ielen -= (uint8_t)6;
3911 if (unlikely(ielen < 1)) {
3912 pDst->present = 0;
3913 return DOT11F_INCOMPLETE_IE;
3914 }
3915
3916 tmp34__ = *pBuf;
3917 pBuf += 1;
3918 ielen -= 1;
3919 pDst->APReachability = tmp34__ >> 0 & 0x3;
3920 pDst->Security = tmp34__ >> 2 & 0x1;
3921 pDst->KeyScope = tmp34__ >> 3 & 0x1;
3922 pDst->SpecMgmtCap = tmp34__ >> 4 & 0x1;
3923 pDst->QosCap = tmp34__ >> 5 & 0x1;
3924 pDst->apsd = tmp34__ >> 6 & 0x1;
3925 pDst->rrm = tmp34__ >> 7 & 0x1;
3926 if (unlikely(ielen < 1)) {
3927 pDst->present = 0;
3928 return DOT11F_INCOMPLETE_IE;
3929 }
3930
3931 tmp35__ = *pBuf;
3932 pBuf += 1;
3933 ielen -= 1;
3934 pDst->DelayedBA = tmp35__ >> 0 & 0x1;
3935 pDst->ImmBA = tmp35__ >> 1 & 0x1;
3936 pDst->MobilityDomain = tmp35__ >> 2 & 0x1;
3937 pDst->reserved = tmp35__ >> 3 & 0x1f;
3938 if (unlikely(ielen < 2)) {
3939 pDst->present = 0;
3940 return DOT11F_INCOMPLETE_IE;
3941 }
3942
3943 framesntohs(pCtx, &pDst->reserved1, pBuf, 0);
3944 pBuf += 2;
3945 ielen -= (uint8_t)2;
3946 if (unlikely(ielen < 1)) {
3947 pDst->present = 0;
3948 return DOT11F_INCOMPLETE_IE;
3949 }
3950
3951 pDst->regulatoryClass = *pBuf;
3952 pBuf += 1;
3953 ielen -= (uint8_t)1;
3954 if (unlikely(ielen < 1)) {
3955 pDst->present = 0;
3956 return DOT11F_INCOMPLETE_IE;
3957 }
3958
3959 pDst->channel = *pBuf;
3960 pBuf += 1;
3961 ielen -= (uint8_t)1;
3962 if (unlikely(ielen < 1)) {
3963 pDst->present = 0;
3964 return DOT11F_INCOMPLETE_IE;
3965 }
3966
3967 pDst->PhyType = *pBuf;
3968 pBuf += 1;
3969 ielen -= (uint8_t)1;
3970 (void)pCtx;
3971 status |= unpack_core(pCtx,
3972 pBuf,
3973 ielen,
3974 FFS_neighbor_rpt,
3975 IES_neighbor_rpt,
3976 (uint8_t *)pDst,
3977 sizeof(*pDst),
3978 append_ie);
3979 return status;
3980 } /* End dot11f_unpack_ie_neighbor_rpt. */
3981
3982 #define SigIeneighbor_rpt (0x0026)
3983
3984
dot11f_unpack_ie_reporting_reason(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEreporting_reason * pDst,bool append_ie)3985 uint32_t dot11f_unpack_ie_reporting_reason(tpAniSirGlobal pCtx,
3986 uint8_t *pBuf,
3987 uint8_t ielen,
3988 tDot11fIEreporting_reason *pDst,
3989 bool append_ie)
3990 {
3991 uint32_t status = DOT11F_PARSE_SUCCESS;
3992 uint8_t tmp36__;
3993 (void) pBuf; (void)ielen; /* Shutup the compiler */
3994 if (pDst->present)
3995 return DOT11F_DUPLICATE_IE;
3996 pDst->present = 1;
3997 if (unlikely(ielen < 1)) {
3998 pDst->present = 0;
3999 return DOT11F_INCOMPLETE_IE;
4000 }
4001
4002 tmp36__ = *pBuf;
4003 pDst->failed_count = tmp36__ >> 0 & 0x1;
4004 pDst->fcs_error = tmp36__ >> 1 & 0x1;
4005 pDst->multiple_retry = tmp36__ >> 2 & 0x1;
4006 pDst->frame_duplicate = tmp36__ >> 3 & 0x1;
4007 pDst->rts_failure = tmp36__ >> 4 & 0x1;
4008 pDst->ack_failure = tmp36__ >> 5 & 0x1;
4009 pDst->retry = tmp36__ >> 6 & 0x1;
4010 pDst->reserved = tmp36__ >> 7 & 0x1;
4011 (void)pCtx;
4012 return status;
4013 } /* End dot11f_unpack_ie_reporting_reason. */
4014
4015 #define SigIereporting_reason (0x0027)
4016
4017
dot11f_unpack_ie_req_mac_addr(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEreq_mac_addr * pDst,bool append_ie)4018 uint32_t dot11f_unpack_ie_req_mac_addr(tpAniSirGlobal pCtx,
4019 uint8_t *pBuf,
4020 uint8_t ielen,
4021 tDot11fIEreq_mac_addr *pDst,
4022 bool append_ie)
4023 {
4024 uint32_t status = DOT11F_PARSE_SUCCESS;
4025 (void) pBuf; (void)ielen; /* Shutup the compiler */
4026 if (pDst->present)
4027 return DOT11F_DUPLICATE_IE;
4028 pDst->present = 1;
4029 if (unlikely(ielen < 6)) {
4030 pDst->present = 0;
4031 return DOT11F_INCOMPLETE_IE;
4032 }
4033
4034 DOT11F_MEMCPY(pCtx, pDst->addr, pBuf, 6);
4035 (void)pCtx;
4036 return status;
4037 } /* End dot11f_unpack_ie_req_mac_addr. */
4038
4039 #define SigIereq_mac_addr (0x0028)
4040
4041
dot11f_unpack_ie_rrm_reporting(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIErrm_reporting * pDst,bool append_ie)4042 uint32_t dot11f_unpack_ie_rrm_reporting(tpAniSirGlobal pCtx,
4043 uint8_t *pBuf,
4044 uint8_t ielen,
4045 tDot11fIErrm_reporting *pDst,
4046 bool append_ie)
4047 {
4048 uint32_t status = DOT11F_PARSE_SUCCESS;
4049 (void) pBuf; (void)ielen; /* Shutup the compiler */
4050 if (pDst->present)
4051 return DOT11F_DUPLICATE_IE;
4052 pDst->present = 1;
4053 if (unlikely(ielen < 1)) {
4054 pDst->present = 0;
4055 return DOT11F_INCOMPLETE_IE;
4056 }
4057
4058 pDst->reporting_condition = *pBuf;
4059 pBuf += 1;
4060 ielen -= (uint8_t)1;
4061 if (unlikely(ielen < 1)) {
4062 pDst->present = 0;
4063 return DOT11F_INCOMPLETE_IE;
4064 }
4065
4066 pDst->threshold = *pBuf;
4067 (void)pCtx;
4068 return status;
4069 } /* End dot11f_unpack_ie_rrm_reporting. */
4070
4071 #define SigIerrm_reporting (0x0029)
4072
4073
dot11f_unpack_ie_tclas_mask(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEtclas_mask * pDst,bool append_ie)4074 uint32_t dot11f_unpack_ie_tclas_mask(tpAniSirGlobal pCtx,
4075 uint8_t *pBuf,
4076 uint8_t ielen,
4077 tDot11fIEtclas_mask *pDst,
4078 bool append_ie)
4079 {
4080 uint32_t status = DOT11F_PARSE_SUCCESS;
4081 (void) pBuf; (void)ielen; /* Shutup the compiler */
4082 if (pDst->present)
4083 return DOT11F_DUPLICATE_IE;
4084 pDst->present = 1;
4085 if (unlikely(ielen < 1)) {
4086 pDst->present = 0;
4087 return DOT11F_INCOMPLETE_IE;
4088 }
4089
4090 pDst->classifier_type = *pBuf;
4091 pBuf += 1;
4092 ielen -= (uint8_t)1;
4093 if (unlikely(ielen < 1)) {
4094 pDst->present = 0;
4095 return DOT11F_INCOMPLETE_IE;
4096 }
4097
4098 pDst->classifier_mask = *pBuf;
4099 pBuf += 1;
4100 ielen -= (uint8_t)1;
4101 switch (pDst->classifier_type) {
4102 case 4:
4103 if (unlikely(ielen < 16)) {
4104 pDst->present = 0;
4105 return DOT11F_INCOMPLETE_IE;
4106 }
4107
4108 DOT11F_MEMCPY(pCtx, pDst->info.ip_param.reserved, pBuf, 16);
4109 pBuf += 16;
4110 ielen -= (uint8_t)16;
4111 break;
4112 }
4113 (void)pCtx;
4114 return status;
4115 } /* End dot11f_unpack_ie_tclas_mask. */
4116
4117 #define SigIetclas_mask (0x002a)
4118
4119
dot11f_unpack_ie_tgt_mac_addr(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEtgt_mac_addr * pDst,bool append_ie)4120 uint32_t dot11f_unpack_ie_tgt_mac_addr(tpAniSirGlobal pCtx,
4121 uint8_t *pBuf,
4122 uint8_t ielen,
4123 tDot11fIEtgt_mac_addr *pDst,
4124 bool append_ie)
4125 {
4126 uint32_t status = DOT11F_PARSE_SUCCESS;
4127 (void) pBuf; (void)ielen; /* Shutup the compiler */
4128 if (pDst->present)
4129 return DOT11F_DUPLICATE_IE;
4130 pDst->present = 1;
4131 if (unlikely(ielen < 6)) {
4132 pDst->present = 0;
4133 return DOT11F_INCOMPLETE_IE;
4134 }
4135
4136 DOT11F_MEMCPY(pCtx, pDst->addr, pBuf, 6);
4137 (void)pCtx;
4138 return status;
4139 } /* End dot11f_unpack_ie_tgt_mac_addr. */
4140
4141 #define SigIetgt_mac_addr (0x002b)
4142
4143
dot11f_unpack_ie_transmit_power_env(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEtransmit_power_env * pDst,bool append_ie)4144 uint32_t dot11f_unpack_ie_transmit_power_env(tpAniSirGlobal pCtx,
4145 uint8_t *pBuf,
4146 uint8_t ielen,
4147 tDot11fIEtransmit_power_env *pDst,
4148 bool append_ie)
4149 {
4150 uint32_t status = DOT11F_PARSE_SUCCESS;
4151 uint8_t tmp37__;
4152 uint8_t tmp38__;
4153 uint8_t tmp39__;
4154 (void) pBuf; (void)ielen; /* Shutup the compiler */
4155 if (pDst->present)
4156 return DOT11F_DUPLICATE_IE;
4157 pDst->present = 1;
4158 if (unlikely(ielen < 1)) {
4159 pDst->present = 0;
4160 return DOT11F_INCOMPLETE_IE;
4161 }
4162
4163 tmp37__ = *pBuf;
4164 pBuf += 1;
4165 ielen -= 1;
4166 pDst->max_tx_pwr_count = tmp37__ >> 0 & 0x7;
4167 pDst->max_tx_pwr_interpret = tmp37__ >> 3 & 0x7;
4168 pDst->max_tx_pwr_category = tmp37__ >> 6 & 0x3;
4169 pDst->num_tx_power = (uint8_t)(ielen);
4170 if (ielen > 8) {
4171 pDst->present = 0;
4172 return DOT11F_SKIPPED_BAD_IE;
4173 }
4174
4175 DOT11F_MEMCPY(pCtx, pDst->tx_power, pBuf, (ielen));
4176 pBuf += (ielen);
4177 ielen -= (ielen);
4178 if (!ielen) {
4179 return 0U;
4180 } else {
4181 switch (pDst->max_tx_pwr_interpret) {
4182 case 0:
4183 if (unlikely(ielen < 1)) {
4184 pDst->present = 0;
4185 return DOT11F_INCOMPLETE_IE;
4186 }
4187
4188 pDst->ext_max_tx_power.ext_max_tx_power_local_eirp.max_tx_power_for_320 = *pBuf;
4189 pBuf += 1;
4190 ielen -= (uint8_t)1;
4191 break;
4192 case 1:
4193 if (unlikely(ielen < 1)) {
4194 pDst->present = 0;
4195 return DOT11F_INCOMPLETE_IE;
4196 }
4197
4198 tmp38__ = *pBuf;
4199 pBuf += 1;
4200 ielen -= 1;
4201 pDst->ext_max_tx_power.ext_max_tx_power_local_psd.ext_count = tmp38__ >> 0 & 0xf;
4202 pDst->ext_max_tx_power.ext_max_tx_power_local_psd.reserved = tmp38__ >> 4 & 0xf;
4203 if (unlikely(ielen < 8)) {
4204 pDst->present = 0;
4205 return DOT11F_INCOMPLETE_IE;
4206 }
4207
4208 DOT11F_MEMCPY(pCtx, pDst->ext_max_tx_power.ext_max_tx_power_local_psd.max_tx_psd_power, pBuf, 8);
4209 pBuf += 8;
4210 ielen -= (uint8_t)8;
4211 break;
4212 case 2:
4213 if (unlikely(ielen < 1)) {
4214 pDst->present = 0;
4215 return DOT11F_INCOMPLETE_IE;
4216 }
4217
4218 pDst->ext_max_tx_power.ext_max_tx_power_reg_eirp.max_tx_power_for_320 = *pBuf;
4219 pBuf += 1;
4220 ielen -= (uint8_t)1;
4221 break;
4222 case 3:
4223 if (unlikely(ielen < 1)) {
4224 pDst->present = 0;
4225 return DOT11F_INCOMPLETE_IE;
4226 }
4227
4228 tmp39__ = *pBuf;
4229 pBuf += 1;
4230 ielen -= 1;
4231 pDst->ext_max_tx_power.ext_max_tx_power_reg_psd.ext_count = tmp39__ >> 0 & 0xf;
4232 pDst->ext_max_tx_power.ext_max_tx_power_reg_psd.reserved = tmp39__ >> 4 & 0xf;
4233 if (unlikely(ielen < 8)) {
4234 pDst->present = 0;
4235 return DOT11F_INCOMPLETE_IE;
4236 }
4237
4238 DOT11F_MEMCPY(pCtx, pDst->ext_max_tx_power.ext_max_tx_power_reg_psd.max_tx_psd_power, pBuf, 8);
4239 pBuf += 8;
4240 ielen -= (uint8_t)8;
4241 break;
4242 }
4243 }
4244 (void)pCtx;
4245 return status;
4246 } /* End dot11f_unpack_ie_transmit_power_env. */
4247
4248 #define SigIetransmit_power_env (0x002c)
4249
4250
dot11f_unpack_ie_wide_bw_chan_switch(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEwide_bw_chan_switch * pDst,bool append_ie)4251 uint32_t dot11f_unpack_ie_wide_bw_chan_switch(tpAniSirGlobal pCtx,
4252 uint8_t *pBuf,
4253 uint8_t ielen,
4254 tDot11fIEwide_bw_chan_switch *pDst,
4255 bool append_ie)
4256 {
4257 uint32_t status = DOT11F_PARSE_SUCCESS;
4258 (void) pBuf; (void)ielen; /* Shutup the compiler */
4259 if (pDst->present)
4260 return DOT11F_DUPLICATE_IE;
4261 pDst->present = 1;
4262 if (unlikely(ielen < 1)) {
4263 pDst->present = 0;
4264 return DOT11F_INCOMPLETE_IE;
4265 }
4266
4267 pDst->new_chan_width = *pBuf;
4268 pBuf += 1;
4269 ielen -= (uint8_t)1;
4270 if (unlikely(ielen < 1)) {
4271 pDst->present = 0;
4272 return DOT11F_INCOMPLETE_IE;
4273 }
4274
4275 pDst->new_center_chan_freq0 = *pBuf;
4276 pBuf += 1;
4277 ielen -= (uint8_t)1;
4278 if (unlikely(ielen < 1)) {
4279 pDst->present = 0;
4280 return DOT11F_INCOMPLETE_IE;
4281 }
4282
4283 pDst->new_center_chan_freq1 = *pBuf;
4284 (void)pCtx;
4285 return status;
4286 } /* End dot11f_unpack_ie_wide_bw_chan_switch. */
4287
4288 #define SigIewide_bw_chan_switch (0x002d)
4289
4290
dot11f_unpack_ie_aid(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEAID * pDst,bool append_ie)4291 uint32_t dot11f_unpack_ie_aid(tpAniSirGlobal pCtx,
4292 uint8_t *pBuf,
4293 uint8_t ielen,
4294 tDot11fIEAID *pDst,
4295 bool append_ie)
4296 {
4297 uint32_t status = DOT11F_PARSE_SUCCESS;
4298 (void) pBuf; (void)ielen; /* Shutup the compiler */
4299 if (pDst->present)
4300 return DOT11F_DUPLICATE_IE;
4301 pDst->present = 1;
4302 if (unlikely(ielen < 2)) {
4303 pDst->present = 0;
4304 return DOT11F_INCOMPLETE_IE;
4305 }
4306
4307 framesntohs(pCtx, &pDst->assocId, pBuf, 0);
4308 (void)pCtx;
4309 return status;
4310 } /* End dot11f_unpack_ie_aid. */
4311
4312 #define SigIeAID (0x002e)
4313
4314
dot11f_unpack_ie_cf_params(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIECFParams * pDst,bool append_ie)4315 uint32_t dot11f_unpack_ie_cf_params(tpAniSirGlobal pCtx,
4316 uint8_t *pBuf,
4317 uint8_t ielen,
4318 tDot11fIECFParams *pDst,
4319 bool append_ie)
4320 {
4321 uint32_t status = DOT11F_PARSE_SUCCESS;
4322 (void) pBuf; (void)ielen; /* Shutup the compiler */
4323 if (pDst->present)
4324 return DOT11F_DUPLICATE_IE;
4325 pDst->present = 1;
4326 if (unlikely(ielen < 1)) {
4327 pDst->present = 0;
4328 return DOT11F_INCOMPLETE_IE;
4329 }
4330
4331 pDst->cfp_count = *pBuf;
4332 pBuf += 1;
4333 ielen -= (uint8_t)1;
4334 if (unlikely(ielen < 1)) {
4335 pDst->present = 0;
4336 return DOT11F_INCOMPLETE_IE;
4337 }
4338
4339 pDst->cfp_period = *pBuf;
4340 pBuf += 1;
4341 ielen -= (uint8_t)1;
4342 if (unlikely(ielen < 2)) {
4343 pDst->present = 0;
4344 return DOT11F_INCOMPLETE_IE;
4345 }
4346
4347 framesntohs(pCtx, &pDst->cfp_maxduration, pBuf, 0);
4348 pBuf += 2;
4349 ielen -= (uint8_t)2;
4350 if (unlikely(ielen < 2)) {
4351 pDst->present = 0;
4352 return DOT11F_INCOMPLETE_IE;
4353 }
4354
4355 framesntohs(pCtx, &pDst->cfp_durremaining, pBuf, 0);
4356 (void)pCtx;
4357 return status;
4358 } /* End dot11f_unpack_ie_cf_params. */
4359
4360 #define SigIeCFParams (0x002f)
4361
4362
dot11f_unpack_ie_challenge_text(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEChallengeText * pDst,bool append_ie)4363 uint32_t dot11f_unpack_ie_challenge_text(tpAniSirGlobal pCtx,
4364 uint8_t *pBuf,
4365 uint8_t ielen,
4366 tDot11fIEChallengeText *pDst,
4367 bool append_ie)
4368 {
4369 uint32_t status = DOT11F_PARSE_SUCCESS;
4370 (void) pBuf; (void)ielen; /* Shutup the compiler */
4371 if (pDst->present)
4372 return DOT11F_DUPLICATE_IE;
4373 pDst->present = 1;
4374 pDst->num_text = (uint8_t)(ielen);
4375 if (ielen > 253) {
4376 pDst->present = 0;
4377 return DOT11F_SKIPPED_BAD_IE;
4378 }
4379
4380 DOT11F_MEMCPY(pCtx, pDst->text, pBuf, (ielen));
4381 (void)pCtx;
4382 return status;
4383 } /* End dot11f_unpack_ie_challenge_text. */
4384
4385 #define SigIeChallengeText (0x0030)
4386
4387
dot11f_unpack_ie_chan_switch_ann(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEChanSwitchAnn * pDst,bool append_ie)4388 uint32_t dot11f_unpack_ie_chan_switch_ann(tpAniSirGlobal pCtx,
4389 uint8_t *pBuf,
4390 uint8_t ielen,
4391 tDot11fIEChanSwitchAnn *pDst,
4392 bool append_ie)
4393 {
4394 uint32_t status = DOT11F_PARSE_SUCCESS;
4395 (void) pBuf; (void)ielen; /* Shutup the compiler */
4396 if (pDst->present)
4397 return DOT11F_DUPLICATE_IE;
4398 pDst->present = 1;
4399 if (unlikely(ielen < 1)) {
4400 pDst->present = 0;
4401 return DOT11F_INCOMPLETE_IE;
4402 }
4403
4404 pDst->switchMode = *pBuf;
4405 pBuf += 1;
4406 ielen -= (uint8_t)1;
4407 if (unlikely(ielen < 1)) {
4408 pDst->present = 0;
4409 return DOT11F_INCOMPLETE_IE;
4410 }
4411
4412 pDst->newChannel = *pBuf;
4413 pBuf += 1;
4414 ielen -= (uint8_t)1;
4415 if (unlikely(ielen < 1)) {
4416 pDst->present = 0;
4417 return DOT11F_INCOMPLETE_IE;
4418 }
4419
4420 pDst->switchCount = *pBuf;
4421 (void)pCtx;
4422 return status;
4423 } /* End dot11f_unpack_ie_chan_switch_ann. */
4424
4425 #define SigIeChanSwitchAnn (0x0031)
4426
4427
4428 static const tFFDefn FFS_ChannelSwitchWrapper[] = {
4429 { NULL, 0, 0, 0,},
4430 };
4431
4432 static const tIEDefn IES_ChannelSwitchWrapper[] = {
4433 { offsetof(tDot11fIEChannelSwitchWrapper, WiderBWChanSwitchAnn),
4434 offsetof(tDot11fIEWiderBWChanSwitchAnn, present), 0,
4435 "WiderBWChanSwitchAnn", 0, 5, 5, SigIeWiderBWChanSwitchAnn,
4436 {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, 0, },
4437 { offsetof(tDot11fIEChannelSwitchWrapper, transmit_power_env),
4438 offsetof(tDot11fIEtransmit_power_env, present), 0, "transmit_power_env",
4439 0, 4, 20, SigIetransmit_power_env, {0, 0, 0, 0, 0},
4440 0, DOT11F_EID_TRANSMIT_POWER_ENV, 0, 0, },
4441 { offsetof(tDot11fIEChannelSwitchWrapper, bw_ind_element),
4442 offsetof(tDot11fIEbw_ind_element, present), 0, "bw_ind_element",
4443 0, 6, 8, SigIebw_ind_element, {0, 0, 0, 0, 0},
4444 0, DOT11F_EID_BW_IND_ELEMENT, 135, 0, },
4445 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },
4446 };
4447
dot11f_unpack_ie_channel_switch_wrapper(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEChannelSwitchWrapper * pDst,bool append_ie)4448 uint32_t dot11f_unpack_ie_channel_switch_wrapper(tpAniSirGlobal pCtx,
4449 uint8_t *pBuf,
4450 uint8_t ielen,
4451 tDot11fIEChannelSwitchWrapper *pDst,
4452 bool append_ie)
4453 {
4454 uint32_t status = DOT11F_PARSE_SUCCESS;
4455 (void) pBuf; (void)ielen; /* Shutup the compiler */
4456 if (pDst->present)
4457 return DOT11F_DUPLICATE_IE;
4458 pDst->present = 1;
4459 (void)pCtx;
4460 status |= unpack_core(pCtx,
4461 pBuf,
4462 ielen,
4463 FFS_ChannelSwitchWrapper,
4464 IES_ChannelSwitchWrapper,
4465 (uint8_t *)pDst,
4466 sizeof(*pDst),
4467 append_ie);
4468 return status;
4469 } /* End dot11f_unpack_ie_channel_switch_wrapper. */
4470
4471 #define SigIeChannelSwitchWrapper (0x0032)
4472
4473
dot11f_unpack_ie_country(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIECountry * pDst,bool append_ie)4474 uint32_t dot11f_unpack_ie_country(tpAniSirGlobal pCtx,
4475 uint8_t *pBuf,
4476 uint8_t ielen,
4477 tDot11fIECountry *pDst,
4478 bool append_ie)
4479 {
4480 uint32_t status = DOT11F_PARSE_SUCCESS;
4481 (void) pBuf; (void)ielen; /* Shutup the compiler */
4482 if (pDst->present)
4483 return DOT11F_DUPLICATE_IE;
4484 pDst->present = 1;
4485 if (unlikely(ielen < 3)) {
4486 pDst->present = 0;
4487 return DOT11F_INCOMPLETE_IE;
4488 }
4489
4490 DOT11F_MEMCPY(pCtx, pDst->country, pBuf, 3);
4491 pBuf += 3;
4492 ielen -= (uint8_t)3;
4493 if (unlikely(ielen < 3)) {
4494 pDst->present = 0;
4495 return DOT11F_INCOMPLETE_IE;
4496 }
4497
4498 DOT11F_MEMCPY(pCtx, pDst->first_triplet, pBuf, 3);
4499 pBuf += 3;
4500 ielen -= (uint8_t)3;
4501 if (!ielen) {
4502 pDst->num_more_triplets = 0U;
4503 return 0U;
4504 } else {
4505 pDst->num_more_triplets = (uint8_t)(ielen / 3);
4506 if (ielen / 3 > 80) {
4507 pDst->present = 0;
4508 return DOT11F_SKIPPED_BAD_IE;
4509 }
4510
4511 DOT11F_MEMCPY(pCtx, pDst->more_triplets, pBuf, (ielen));
4512 }
4513 (void)pCtx;
4514 return status;
4515 } /* End dot11f_unpack_ie_country. */
4516
4517 #define SigIeCountry (0x0033)
4518
4519
4520 #define SigIeDSParams (0x0034)
4521
4522
dot11f_unpack_ie_edca_param_set(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEEDCAParamSet * pDst,bool append_ie)4523 uint32_t dot11f_unpack_ie_edca_param_set(tpAniSirGlobal pCtx,
4524 uint8_t *pBuf,
4525 uint8_t ielen,
4526 tDot11fIEEDCAParamSet *pDst,
4527 bool append_ie)
4528 {
4529 uint32_t status = DOT11F_PARSE_SUCCESS;
4530 uint8_t tmp40__;
4531 uint8_t tmp41__;
4532 uint8_t tmp42__;
4533 uint8_t tmp43__;
4534 uint8_t tmp44__;
4535 uint8_t tmp45__;
4536 uint8_t tmp46__;
4537 uint8_t tmp47__;
4538 (void) pBuf; (void)ielen; /* Shutup the compiler */
4539 if (pDst->present)
4540 return DOT11F_DUPLICATE_IE;
4541 pDst->present = 1;
4542 if (unlikely(ielen < 1)) {
4543 pDst->present = 0;
4544 return DOT11F_INCOMPLETE_IE;
4545 }
4546
4547 pDst->qos = *pBuf;
4548 pBuf += 1;
4549 ielen -= (uint8_t)1;
4550 if (unlikely(ielen < 1)) {
4551 pDst->present = 0;
4552 return DOT11F_INCOMPLETE_IE;
4553 }
4554
4555 pDst->reserved = *pBuf;
4556 pBuf += 1;
4557 ielen -= (uint8_t)1;
4558 if (unlikely(ielen < 1)) {
4559 pDst->present = 0;
4560 return DOT11F_INCOMPLETE_IE;
4561 }
4562
4563 tmp40__ = *pBuf;
4564 pBuf += 1;
4565 ielen -= 1;
4566 pDst->acbe_aifsn = tmp40__ >> 0 & 0xf;
4567 pDst->acbe_acm = tmp40__ >> 4 & 0x1;
4568 pDst->acbe_aci = tmp40__ >> 5 & 0x3;
4569 pDst->unused1 = tmp40__ >> 7 & 0x1;
4570 if (unlikely(ielen < 1)) {
4571 pDst->present = 0;
4572 return DOT11F_INCOMPLETE_IE;
4573 }
4574
4575 tmp41__ = *pBuf;
4576 pBuf += 1;
4577 ielen -= 1;
4578 pDst->acbe_acwmin = tmp41__ >> 0 & 0xf;
4579 pDst->acbe_acwmax = tmp41__ >> 4 & 0xf;
4580 if (unlikely(ielen < 2)) {
4581 pDst->present = 0;
4582 return DOT11F_INCOMPLETE_IE;
4583 }
4584
4585 framesntohs(pCtx, &pDst->acbe_txoplimit, pBuf, 0);
4586 pBuf += 2;
4587 ielen -= (uint8_t)2;
4588 if (unlikely(ielen < 1)) {
4589 pDst->present = 0;
4590 return DOT11F_INCOMPLETE_IE;
4591 }
4592
4593 tmp42__ = *pBuf;
4594 pBuf += 1;
4595 ielen -= 1;
4596 pDst->acbk_aifsn = tmp42__ >> 0 & 0xf;
4597 pDst->acbk_acm = tmp42__ >> 4 & 0x1;
4598 pDst->acbk_aci = tmp42__ >> 5 & 0x3;
4599 pDst->unused2 = tmp42__ >> 7 & 0x1;
4600 if (unlikely(ielen < 1)) {
4601 pDst->present = 0;
4602 return DOT11F_INCOMPLETE_IE;
4603 }
4604
4605 tmp43__ = *pBuf;
4606 pBuf += 1;
4607 ielen -= 1;
4608 pDst->acbk_acwmin = tmp43__ >> 0 & 0xf;
4609 pDst->acbk_acwmax = tmp43__ >> 4 & 0xf;
4610 if (unlikely(ielen < 2)) {
4611 pDst->present = 0;
4612 return DOT11F_INCOMPLETE_IE;
4613 }
4614
4615 framesntohs(pCtx, &pDst->acbk_txoplimit, pBuf, 0);
4616 pBuf += 2;
4617 ielen -= (uint8_t)2;
4618 if (unlikely(ielen < 1)) {
4619 pDst->present = 0;
4620 return DOT11F_INCOMPLETE_IE;
4621 }
4622
4623 tmp44__ = *pBuf;
4624 pBuf += 1;
4625 ielen -= 1;
4626 pDst->acvi_aifsn = tmp44__ >> 0 & 0xf;
4627 pDst->acvi_acm = tmp44__ >> 4 & 0x1;
4628 pDst->acvi_aci = tmp44__ >> 5 & 0x3;
4629 pDst->unused3 = tmp44__ >> 7 & 0x1;
4630 if (unlikely(ielen < 1)) {
4631 pDst->present = 0;
4632 return DOT11F_INCOMPLETE_IE;
4633 }
4634
4635 tmp45__ = *pBuf;
4636 pBuf += 1;
4637 ielen -= 1;
4638 pDst->acvi_acwmin = tmp45__ >> 0 & 0xf;
4639 pDst->acvi_acwmax = tmp45__ >> 4 & 0xf;
4640 if (unlikely(ielen < 2)) {
4641 pDst->present = 0;
4642 return DOT11F_INCOMPLETE_IE;
4643 }
4644
4645 framesntohs(pCtx, &pDst->acvi_txoplimit, pBuf, 0);
4646 pBuf += 2;
4647 ielen -= (uint8_t)2;
4648 if (unlikely(ielen < 1)) {
4649 pDst->present = 0;
4650 return DOT11F_INCOMPLETE_IE;
4651 }
4652
4653 tmp46__ = *pBuf;
4654 pBuf += 1;
4655 ielen -= 1;
4656 pDst->acvo_aifsn = tmp46__ >> 0 & 0xf;
4657 pDst->acvo_acm = tmp46__ >> 4 & 0x1;
4658 pDst->acvo_aci = tmp46__ >> 5 & 0x3;
4659 pDst->unused4 = tmp46__ >> 7 & 0x1;
4660 if (unlikely(ielen < 1)) {
4661 pDst->present = 0;
4662 return DOT11F_INCOMPLETE_IE;
4663 }
4664
4665 tmp47__ = *pBuf;
4666 pBuf += 1;
4667 ielen -= 1;
4668 pDst->acvo_acwmin = tmp47__ >> 0 & 0xf;
4669 pDst->acvo_acwmax = tmp47__ >> 4 & 0xf;
4670 if (unlikely(ielen < 2)) {
4671 pDst->present = 0;
4672 return DOT11F_INCOMPLETE_IE;
4673 }
4674
4675 framesntohs(pCtx, &pDst->acvo_txoplimit, pBuf, 0);
4676 (void)pCtx;
4677 return status;
4678 } /* End dot11f_unpack_ie_edca_param_set. */
4679
4680 #define SigIeEDCAParamSet (0x0035)
4681
4682
dot11f_unpack_ie_erp_info(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEERPInfo * pDst,bool append_ie)4683 uint32_t dot11f_unpack_ie_erp_info(tpAniSirGlobal pCtx,
4684 uint8_t *pBuf,
4685 uint8_t ielen,
4686 tDot11fIEERPInfo *pDst,
4687 bool append_ie)
4688 {
4689 uint32_t status = DOT11F_PARSE_SUCCESS;
4690 uint8_t tmp48__;
4691 (void) pBuf; (void)ielen; /* Shutup the compiler */
4692 if (pDst->present)
4693 return DOT11F_DUPLICATE_IE;
4694 pDst->present = 1;
4695 if (unlikely(ielen < 1)) {
4696 pDst->present = 0;
4697 return DOT11F_INCOMPLETE_IE;
4698 }
4699
4700 tmp48__ = *pBuf;
4701 pDst->non_erp_present = tmp48__ >> 0 & 0x1;
4702 pDst->use_prot = tmp48__ >> 1 & 0x1;
4703 pDst->barker_preamble = tmp48__ >> 2 & 0x1;
4704 pDst->unused = tmp48__ >> 3 & 0x1f;
4705 (void)pCtx;
4706 return status;
4707 } /* End dot11f_unpack_ie_erp_info. */
4708
4709 #define SigIeERPInfo (0x0036)
4710
4711
dot11f_unpack_ie_ese_cckm_opaque(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEESECckmOpaque * pDst,bool append_ie)4712 uint32_t dot11f_unpack_ie_ese_cckm_opaque(tpAniSirGlobal pCtx,
4713 uint8_t *pBuf,
4714 uint8_t ielen,
4715 tDot11fIEESECckmOpaque *pDst,
4716 bool append_ie)
4717 {
4718 uint32_t status = DOT11F_PARSE_SUCCESS;
4719 (void) pBuf; (void)ielen; /* Shutup the compiler */
4720 if (pDst->present)
4721 return DOT11F_DUPLICATE_IE;
4722 pDst->present = 1;
4723 pDst->num_data = (uint8_t)(ielen);
4724 if (ielen > 20) {
4725 pDst->present = 0;
4726 return DOT11F_SKIPPED_BAD_IE;
4727 }
4728
4729 DOT11F_MEMCPY(pCtx, pDst->data, pBuf, (ielen));
4730 (void)pCtx;
4731 return status;
4732 } /* End dot11f_unpack_ie_ese_cckm_opaque. */
4733
4734 #define SigIeESECckmOpaque (0x0037)
4735
4736
dot11f_unpack_ie_ese_rad_mgmt_cap(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEESERadMgmtCap * pDst,bool append_ie)4737 uint32_t dot11f_unpack_ie_ese_rad_mgmt_cap(tpAniSirGlobal pCtx,
4738 uint8_t *pBuf,
4739 uint8_t ielen,
4740 tDot11fIEESERadMgmtCap *pDst,
4741 bool append_ie)
4742 {
4743 uint32_t status = DOT11F_PARSE_SUCCESS;
4744 uint8_t tmp49__;
4745 (void) pBuf; (void)ielen; /* Shutup the compiler */
4746 if (pDst->present)
4747 return DOT11F_DUPLICATE_IE;
4748 pDst->present = 1;
4749 if (unlikely(ielen < 1)) {
4750 pDst->present = 0;
4751 return DOT11F_INCOMPLETE_IE;
4752 }
4753
4754 pDst->mgmt_state = *pBuf;
4755 pBuf += 1;
4756 ielen -= (uint8_t)1;
4757 if (unlikely(ielen < 1)) {
4758 pDst->present = 0;
4759 return DOT11F_INCOMPLETE_IE;
4760 }
4761
4762 tmp49__ = *pBuf;
4763 pDst->mbssid_mask = tmp49__ >> 0 & 0x7;
4764 pDst->reserved = tmp49__ >> 3 & 0x1f;
4765 (void)pCtx;
4766 return status;
4767 } /* End dot11f_unpack_ie_ese_rad_mgmt_cap. */
4768
4769 #define SigIeESERadMgmtCap (0x0038)
4770
4771
dot11f_unpack_ie_ese_traf_strm_met(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEESETrafStrmMet * pDst,bool append_ie)4772 uint32_t dot11f_unpack_ie_ese_traf_strm_met(tpAniSirGlobal pCtx,
4773 uint8_t *pBuf,
4774 uint8_t ielen,
4775 tDot11fIEESETrafStrmMet *pDst,
4776 bool append_ie)
4777 {
4778 uint32_t status = DOT11F_PARSE_SUCCESS;
4779 (void) pBuf; (void)ielen; /* Shutup the compiler */
4780 if (pDst->present)
4781 return DOT11F_DUPLICATE_IE;
4782 pDst->present = 1;
4783 if (unlikely(ielen < 1)) {
4784 pDst->present = 0;
4785 return DOT11F_INCOMPLETE_IE;
4786 }
4787
4788 pDst->tsid = *pBuf;
4789 pBuf += 1;
4790 ielen -= (uint8_t)1;
4791 if (unlikely(ielen < 1)) {
4792 pDst->present = 0;
4793 return DOT11F_INCOMPLETE_IE;
4794 }
4795
4796 pDst->state = *pBuf;
4797 pBuf += 1;
4798 ielen -= (uint8_t)1;
4799 if (unlikely(ielen < 2)) {
4800 pDst->present = 0;
4801 return DOT11F_INCOMPLETE_IE;
4802 }
4803
4804 framesntohs(pCtx, &pDst->msmt_interval, pBuf, 0);
4805 (void)pCtx;
4806 return status;
4807 } /* End dot11f_unpack_ie_ese_traf_strm_met. */
4808
4809 #define SigIeESETrafStrmMet (0x0039)
4810
4811
dot11f_unpack_ie_ese_traf_strm_rate_set(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEESETrafStrmRateSet * pDst,bool append_ie)4812 uint32_t dot11f_unpack_ie_ese_traf_strm_rate_set(tpAniSirGlobal pCtx,
4813 uint8_t *pBuf,
4814 uint8_t ielen,
4815 tDot11fIEESETrafStrmRateSet *pDst,
4816 bool append_ie)
4817 {
4818 uint32_t status = DOT11F_PARSE_SUCCESS;
4819 (void) pBuf; (void)ielen; /* Shutup the compiler */
4820 if (pDst->present)
4821 return DOT11F_DUPLICATE_IE;
4822 pDst->present = 1;
4823 if (unlikely(ielen < 1)) {
4824 pDst->present = 0;
4825 return DOT11F_INCOMPLETE_IE;
4826 }
4827
4828 pDst->tsid = *pBuf;
4829 pBuf += 1;
4830 ielen -= (uint8_t)1;
4831 pDst->num_tsrates = (uint8_t)(ielen);
4832 if (ielen > 8) {
4833 pDst->present = 0;
4834 return DOT11F_SKIPPED_BAD_IE;
4835 }
4836
4837 DOT11F_MEMCPY(pCtx, pDst->tsrates, pBuf, (ielen));
4838 (void)pCtx;
4839 return status;
4840 } /* End dot11f_unpack_ie_ese_traf_strm_rate_set. */
4841
4842 #define SigIeESETrafStrmRateSet (0x003a)
4843
4844
dot11f_unpack_ie_ese_txmit_power(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEESETxmitPower * pDst,bool append_ie)4845 uint32_t dot11f_unpack_ie_ese_txmit_power(tpAniSirGlobal pCtx,
4846 uint8_t *pBuf,
4847 uint8_t ielen,
4848 tDot11fIEESETxmitPower *pDst,
4849 bool append_ie)
4850 {
4851 uint32_t status = DOT11F_PARSE_SUCCESS;
4852 (void) pBuf; (void)ielen; /* Shutup the compiler */
4853 if (pDst->present)
4854 return DOT11F_DUPLICATE_IE;
4855 pDst->present = 1;
4856 if (unlikely(ielen < 1)) {
4857 pDst->present = 0;
4858 return DOT11F_INCOMPLETE_IE;
4859 }
4860
4861 pDst->power_limit = *pBuf;
4862 pBuf += 1;
4863 ielen -= (uint8_t)1;
4864 if (unlikely(ielen < 1)) {
4865 pDst->present = 0;
4866 return DOT11F_INCOMPLETE_IE;
4867 }
4868
4869 pDst->reserved = *pBuf;
4870 (void)pCtx;
4871 return status;
4872 } /* End dot11f_unpack_ie_ese_txmit_power. */
4873
4874 #define SigIeESETxmitPower (0x003b)
4875
4876
dot11f_unpack_ie_ese_version(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEESEVersion * pDst,bool append_ie)4877 uint32_t dot11f_unpack_ie_ese_version(tpAniSirGlobal pCtx,
4878 uint8_t *pBuf,
4879 uint8_t ielen,
4880 tDot11fIEESEVersion *pDst,
4881 bool append_ie)
4882 {
4883 uint32_t status = DOT11F_PARSE_SUCCESS;
4884 (void) pBuf; (void)ielen; /* Shutup the compiler */
4885 if (pDst->present)
4886 return DOT11F_DUPLICATE_IE;
4887 pDst->present = 1;
4888 if (unlikely(ielen < 1)) {
4889 pDst->present = 0;
4890 return DOT11F_INCOMPLETE_IE;
4891 }
4892
4893 pDst->version = *pBuf;
4894 (void)pCtx;
4895 return status;
4896 } /* End dot11f_unpack_ie_ese_version. */
4897
4898 #define SigIeESEVersion (0x003c)
4899
4900
dot11f_unpack_ie_ext_cap(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEExtCap * pDst,bool append_ie)4901 uint32_t dot11f_unpack_ie_ext_cap(tpAniSirGlobal pCtx,
4902 uint8_t *pBuf,
4903 uint8_t ielen,
4904 tDot11fIEExtCap *pDst,
4905 bool append_ie)
4906 {
4907 uint32_t status = DOT11F_PARSE_SUCCESS;
4908 (void) pBuf; (void)ielen; /* Shutup the compiler */
4909 if (pDst->present)
4910 return DOT11F_DUPLICATE_IE;
4911 pDst->present = 1;
4912
4913 if (!ielen) /* Check to ensure copying of ielen bytes */
4914 goto endUnpackIeExtCap;
4915 pDst->num_bytes = (uint8_t)(ielen);
4916 if (ielen > 15) {
4917 pDst->present = 0;
4918 return DOT11F_SKIPPED_BAD_IE;
4919 }
4920
4921 DOT11F_MEMCPY(pCtx, pDst->bytes, pBuf, (ielen));
4922
4923 endUnpackIeExtCap:
4924 (void)pCtx;
4925 return status;
4926 } /* End dot11f_unpack_ie_ext_cap. */
4927
4928 #define SigIeExtCap (0x003d)
4929
4930
dot11f_unpack_ie_ext_supp_rates(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEExtSuppRates * pDst,bool append_ie)4931 uint32_t dot11f_unpack_ie_ext_supp_rates(tpAniSirGlobal pCtx,
4932 uint8_t *pBuf,
4933 uint8_t ielen,
4934 tDot11fIEExtSuppRates *pDst,
4935 bool append_ie)
4936 {
4937 uint8_t i;
4938 uint8_t rate_indx = 0;
4939 uint32_t status = DOT11F_PARSE_SUCCESS;
4940 (void) pBuf; (void)ielen; /* Shutup the compiler */
4941 if (pDst->present)
4942 return DOT11F_DUPLICATE_IE;
4943 pDst->present = 1;
4944 for (i = 0; i < ielen; i++) {
4945 if ((DOT11F_IS_BG_RATE(pBuf[i] & 0x7F)) &&
4946 (rate_indx < 12)) {
4947 pDst->rates[rate_indx++] = pBuf[i];
4948 }
4949 }
4950
4951 if (rate_indx == 0) {
4952 pDst->present = 0;
4953 return DOT11F_SKIPPED_BAD_IE;
4954 }
4955
4956 pDst->num_rates = rate_indx;
4957 (void)pCtx;
4958 return status;
4959 } /* End dot11f_unpack_ie_ext_supp_rates. */
4960
4961 #define SigIeExtSuppRates (0x003e)
4962
4963
dot11f_unpack_ie_fh_param_set(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEFHParamSet * pDst,bool append_ie)4964 uint32_t dot11f_unpack_ie_fh_param_set(tpAniSirGlobal pCtx,
4965 uint8_t *pBuf,
4966 uint8_t ielen,
4967 tDot11fIEFHParamSet *pDst,
4968 bool append_ie)
4969 {
4970 uint32_t status = DOT11F_PARSE_SUCCESS;
4971 (void) pBuf; (void)ielen; /* Shutup the compiler */
4972 if (pDst->present)
4973 return DOT11F_DUPLICATE_IE;
4974 pDst->present = 1;
4975 if (unlikely(ielen < 2)) {
4976 pDst->present = 0;
4977 return DOT11F_INCOMPLETE_IE;
4978 }
4979
4980 framesntohs(pCtx, &pDst->dwell_time, pBuf, 0);
4981 pBuf += 2;
4982 ielen -= (uint8_t)2;
4983 if (unlikely(ielen < 1)) {
4984 pDst->present = 0;
4985 return DOT11F_INCOMPLETE_IE;
4986 }
4987
4988 pDst->hop_set = *pBuf;
4989 pBuf += 1;
4990 ielen -= (uint8_t)1;
4991 if (unlikely(ielen < 1)) {
4992 pDst->present = 0;
4993 return DOT11F_INCOMPLETE_IE;
4994 }
4995
4996 pDst->hop_pattern = *pBuf;
4997 pBuf += 1;
4998 ielen -= (uint8_t)1;
4999 if (unlikely(ielen < 1)) {
5000 pDst->present = 0;
5001 return DOT11F_INCOMPLETE_IE;
5002 }
5003
5004 pDst->hop_index = *pBuf;
5005 (void)pCtx;
5006 return status;
5007 } /* End dot11f_unpack_ie_fh_param_set. */
5008
5009 #define SigIeFHParamSet (0x003f)
5010
5011
dot11f_unpack_ie_fh_params(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEFHParams * pDst,bool append_ie)5012 uint32_t dot11f_unpack_ie_fh_params(tpAniSirGlobal pCtx,
5013 uint8_t *pBuf,
5014 uint8_t ielen,
5015 tDot11fIEFHParams *pDst,
5016 bool append_ie)
5017 {
5018 uint32_t status = DOT11F_PARSE_SUCCESS;
5019 (void) pBuf; (void)ielen; /* Shutup the compiler */
5020 if (pDst->present)
5021 return DOT11F_DUPLICATE_IE;
5022 pDst->present = 1;
5023 if (unlikely(ielen < 1)) {
5024 pDst->present = 0;
5025 return DOT11F_INCOMPLETE_IE;
5026 }
5027
5028 pDst->radix = *pBuf;
5029 pBuf += 1;
5030 ielen -= (uint8_t)1;
5031 if (unlikely(ielen < 1)) {
5032 pDst->present = 0;
5033 return DOT11F_INCOMPLETE_IE;
5034 }
5035
5036 pDst->nchannels = *pBuf;
5037 (void)pCtx;
5038 return status;
5039 } /* End dot11f_unpack_ie_fh_params. */
5040
5041 #define SigIeFHParams (0x0040)
5042
5043
dot11f_unpack_ie_fh_patt_table(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEFHPattTable * pDst,bool append_ie)5044 uint32_t dot11f_unpack_ie_fh_patt_table(tpAniSirGlobal pCtx,
5045 uint8_t *pBuf,
5046 uint8_t ielen,
5047 tDot11fIEFHPattTable *pDst,
5048 bool append_ie)
5049 {
5050 uint32_t status = DOT11F_PARSE_SUCCESS;
5051 (void) pBuf; (void)ielen; /* Shutup the compiler */
5052 if (pDst->present)
5053 return DOT11F_DUPLICATE_IE;
5054 pDst->present = 1;
5055 if (unlikely(ielen < 1)) {
5056 pDst->present = 0;
5057 return DOT11F_INCOMPLETE_IE;
5058 }
5059
5060 pDst->flag = *pBuf;
5061 pBuf += 1;
5062 ielen -= (uint8_t)1;
5063 if (unlikely(ielen < 1)) {
5064 pDst->present = 0;
5065 return DOT11F_INCOMPLETE_IE;
5066 }
5067
5068 pDst->nsets = *pBuf;
5069 pBuf += 1;
5070 ielen -= (uint8_t)1;
5071 if (unlikely(ielen < 1)) {
5072 pDst->present = 0;
5073 return DOT11F_INCOMPLETE_IE;
5074 }
5075
5076 pDst->modulus = *pBuf;
5077 pBuf += 1;
5078 ielen -= (uint8_t)1;
5079 if (unlikely(ielen < 1)) {
5080 pDst->present = 0;
5081 return DOT11F_INCOMPLETE_IE;
5082 }
5083
5084 pDst->offset = *pBuf;
5085 pBuf += 1;
5086 ielen -= (uint8_t)1;
5087 pDst->num_randtable = (uint8_t)(ielen);
5088 if (ielen > 251) {
5089 pDst->present = 0;
5090 return DOT11F_SKIPPED_BAD_IE;
5091 }
5092
5093 DOT11F_MEMCPY(pCtx, pDst->randtable, pBuf, (ielen));
5094 (void)pCtx;
5095 return status;
5096 } /* End dot11f_unpack_ie_fh_patt_table. */
5097
5098 #define SigIeFHPattTable (0x0041)
5099
5100
5101 static const tFFDefn FFS_FTInfo[] = {
5102 { NULL, 0, 0, 0,},
5103 };
5104
5105 static const tIEDefn IES_FTInfo[] = {
5106 { offsetof(tDot11fIEFTInfo, R1KH_ID), offsetof(tDot11fIER1KH_ID, present),
5107 0, "R1KH_ID", 0, 8, 8, SigIeR1KH_ID, {0, 0, 0, 0, 0},
5108 0, DOT11F_EID_R1KH_ID, 0, 0, },
5109 { offsetof(tDot11fIEFTInfo, GTK), offsetof(tDot11fIEGTK, present), 0, "GTK",
5110 0, 18, 45, SigIeGTK, {0, 0, 0, 0, 0}, 0, DOT11F_EID_GTK, 0, 0, },
5111 { offsetof(tDot11fIEFTInfo, R0KH_ID), offsetof(tDot11fIER0KH_ID, present),
5112 0, "R0KH_ID", 0, 3, 50, SigIeR0KH_ID, {0, 0, 0, 0, 0},
5113 0, DOT11F_EID_R0KH_ID, 0, 0, },
5114 { offsetof(tDot11fIEFTInfo, IGTK), offsetof(tDot11fIEIGTK, present), 0,
5115 "IGTK", 0, 35, 35, SigIeIGTK, {0, 0, 0, 0, 0},
5116 0, DOT11F_EID_IGTK, 0, 0, },
5117 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },
5118 };
5119
dot11f_unpack_ie_ft_info(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEFTInfo * pDst,bool append_ie)5120 uint32_t dot11f_unpack_ie_ft_info(tpAniSirGlobal pCtx,
5121 uint8_t *pBuf,
5122 uint8_t ielen,
5123 tDot11fIEFTInfo *pDst,
5124 bool append_ie)
5125 {
5126 uint32_t status = DOT11F_PARSE_SUCCESS;
5127 uint16_t tmp50__;
5128 (void) pBuf; (void)ielen; /* Shutup the compiler */
5129 if (pDst->present)
5130 return DOT11F_DUPLICATE_IE;
5131 pDst->present = 1;
5132 if (unlikely(ielen < 2)) {
5133 pDst->present = 0;
5134 return DOT11F_INCOMPLETE_IE;
5135 }
5136
5137 framesntohs(pCtx, &tmp50__, pBuf, 0);
5138 pBuf += 2;
5139 ielen -= 2;
5140 pDst->reserved = tmp50__ >> 0 & 0xff;
5141 pDst->IECount = tmp50__ >> 8 & 0xff;
5142 if (unlikely(ielen < 16)) {
5143 pDst->present = 0;
5144 return DOT11F_INCOMPLETE_IE;
5145 }
5146
5147 DOT11F_MEMCPY(pCtx, pDst->MIC, pBuf, 16);
5148 pBuf += 16;
5149 ielen -= (uint8_t)16;
5150 if (unlikely(ielen < 32)) {
5151 pDst->present = 0;
5152 return DOT11F_INCOMPLETE_IE;
5153 }
5154
5155 DOT11F_MEMCPY(pCtx, pDst->Anonce, pBuf, 32);
5156 pBuf += 32;
5157 ielen -= (uint8_t)32;
5158 if (unlikely(ielen < 32)) {
5159 pDst->present = 0;
5160 return DOT11F_INCOMPLETE_IE;
5161 }
5162
5163 DOT11F_MEMCPY(pCtx, pDst->Snonce, pBuf, 32);
5164 pBuf += 32;
5165 ielen -= (uint8_t)32;
5166 (void)pCtx;
5167 status |= unpack_core(pCtx,
5168 pBuf,
5169 ielen,
5170 FFS_FTInfo,
5171 IES_FTInfo,
5172 (uint8_t *)pDst,
5173 sizeof(*pDst),
5174 append_ie);
5175 return status;
5176 } /* End dot11f_unpack_ie_ft_info. */
5177
5178 #define SigIeFTInfo (0x0042)
5179
5180
dot11f_unpack_ie_ht_caps(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEHTCaps * pDst,bool append_ie)5181 uint32_t dot11f_unpack_ie_ht_caps(tpAniSirGlobal pCtx,
5182 uint8_t *pBuf,
5183 uint8_t ielen,
5184 tDot11fIEHTCaps *pDst,
5185 bool append_ie)
5186 {
5187 uint32_t status = DOT11F_PARSE_SUCCESS;
5188 uint16_t tmp51__;
5189 uint8_t tmp52__;
5190 uint16_t tmp53__;
5191 uint32_t tmp54__;
5192 uint8_t tmp55__;
5193 (void) pBuf; (void)ielen; /* Shutup the compiler */
5194 if (pDst->present)
5195 return DOT11F_DUPLICATE_IE;
5196 pDst->present = 1;
5197 if (unlikely(ielen < 2)) {
5198 pDst->present = 0;
5199 return DOT11F_INCOMPLETE_IE;
5200 }
5201
5202 framesntohs(pCtx, &tmp51__, pBuf, 0);
5203 pBuf += 2;
5204 ielen -= 2;
5205 pDst->advCodingCap = tmp51__ >> 0 & 0x1;
5206 pDst->supportedChannelWidthSet = tmp51__ >> 1 & 0x1;
5207 pDst->mimoPowerSave = tmp51__ >> 2 & 0x3;
5208 pDst->greenField = tmp51__ >> 4 & 0x1;
5209 pDst->shortGI20MHz = tmp51__ >> 5 & 0x1;
5210 pDst->shortGI40MHz = tmp51__ >> 6 & 0x1;
5211 pDst->txSTBC = tmp51__ >> 7 & 0x1;
5212 pDst->rxSTBC = tmp51__ >> 8 & 0x3;
5213 pDst->delayedBA = tmp51__ >> 10 & 0x1;
5214 pDst->maximalAMSDUsize = tmp51__ >> 11 & 0x1;
5215 pDst->dsssCckMode40MHz = tmp51__ >> 12 & 0x1;
5216 pDst->psmp = tmp51__ >> 13 & 0x1;
5217 pDst->stbcControlFrame = tmp51__ >> 14 & 0x1;
5218 pDst->lsigTXOPProtection = tmp51__ >> 15 & 0x1;
5219 if (unlikely(ielen < 1)) {
5220 pDst->present = 0;
5221 return DOT11F_INCOMPLETE_IE;
5222 }
5223
5224 tmp52__ = *pBuf;
5225 pBuf += 1;
5226 ielen -= 1;
5227 pDst->maxRxAMPDUFactor = tmp52__ >> 0 & 0x3;
5228 pDst->mpduDensity = tmp52__ >> 2 & 0x7;
5229 pDst->reserved1 = tmp52__ >> 5 & 0x7;
5230 if (unlikely(ielen < 16)) {
5231 pDst->present = 0;
5232 return DOT11F_INCOMPLETE_IE;
5233 }
5234
5235 DOT11F_MEMCPY(pCtx, pDst->supportedMCSSet, pBuf, 16);
5236 pBuf += 16;
5237 ielen -= (uint8_t)16;
5238 if (unlikely(ielen < 2)) {
5239 pDst->present = 0;
5240 return DOT11F_INCOMPLETE_IE;
5241 }
5242
5243 framesntohs(pCtx, &tmp53__, pBuf, 0);
5244 pBuf += 2;
5245 ielen -= 2;
5246 pDst->pco = tmp53__ >> 0 & 0x1;
5247 pDst->transitionTime = tmp53__ >> 1 & 0x3;
5248 pDst->reserved2 = tmp53__ >> 3 & 0x1f;
5249 pDst->mcsFeedback = tmp53__ >> 8 & 0x3;
5250 pDst->reserved3 = tmp53__ >> 10 & 0x3f;
5251 if (unlikely(ielen < 4)) {
5252 pDst->present = 0;
5253 return DOT11F_INCOMPLETE_IE;
5254 }
5255
5256 framesntohl(pCtx, &tmp54__, pBuf, 0);
5257 pBuf += 4;
5258 ielen -= 4;
5259 pDst->txBF = tmp54__ >> 0 & 0x1;
5260 pDst->rxStaggeredSounding = tmp54__ >> 1 & 0x1;
5261 pDst->txStaggeredSounding = tmp54__ >> 2 & 0x1;
5262 pDst->rxZLF = tmp54__ >> 3 & 0x1;
5263 pDst->txZLF = tmp54__ >> 4 & 0x1;
5264 pDst->implicitTxBF = tmp54__ >> 5 & 0x1;
5265 pDst->calibration = tmp54__ >> 6 & 0x3;
5266 pDst->explicitCSITxBF = tmp54__ >> 8 & 0x1;
5267 pDst->explicitUncompressedSteeringMatrix = tmp54__ >> 9 & 0x1;
5268 pDst->explicitBFCSIFeedback = tmp54__ >> 10 & 0x7;
5269 pDst->explicitUncompressedSteeringMatrixFeedback = tmp54__ >> 13 & 0x7;
5270 pDst->explicitCompressedSteeringMatrixFeedback = tmp54__ >> 16 & 0x7;
5271 pDst->csiNumBFAntennae = tmp54__ >> 19 & 0x3;
5272 pDst->uncompressedSteeringMatrixBFAntennae = tmp54__ >> 21 & 0x3;
5273 pDst->compressedSteeringMatrixBFAntennae = tmp54__ >> 23 & 0x3;
5274 pDst->reserved4 = tmp54__ >> 25 & 0x7f;
5275 if (unlikely(ielen < 1)) {
5276 pDst->present = 0;
5277 return DOT11F_INCOMPLETE_IE;
5278 }
5279
5280 tmp55__ = *pBuf;
5281 pBuf += 1;
5282 ielen -= 1;
5283 pDst->antennaSelection = tmp55__ >> 0 & 0x1;
5284 pDst->explicitCSIFeedbackTx = tmp55__ >> 1 & 0x1;
5285 pDst->antennaIndicesFeedbackTx = tmp55__ >> 2 & 0x1;
5286 pDst->explicitCSIFeedback = tmp55__ >> 3 & 0x1;
5287 pDst->antennaIndicesFeedback = tmp55__ >> 4 & 0x1;
5288 pDst->rxAS = tmp55__ >> 5 & 0x1;
5289 pDst->txSoundingPPDUs = tmp55__ >> 6 & 0x1;
5290 pDst->reserved5 = tmp55__ >> 7 & 0x1;
5291 pDst->num_rsvd = (uint8_t)(ielen);
5292 if (ielen > 32) {
5293 pDst->present = 0;
5294 return DOT11F_SKIPPED_BAD_IE;
5295 }
5296
5297 DOT11F_MEMCPY(pCtx, pDst->rsvd, pBuf, (ielen));
5298 (void)pCtx;
5299 return status;
5300 } /* End dot11f_unpack_ie_ht_caps. */
5301
5302 #define SigIeHTCaps (0x0043)
5303
5304
dot11f_unpack_ie_ht_info(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEHTInfo * pDst,bool append_ie)5305 uint32_t dot11f_unpack_ie_ht_info(tpAniSirGlobal pCtx,
5306 uint8_t *pBuf,
5307 uint8_t ielen,
5308 tDot11fIEHTInfo *pDst,
5309 bool append_ie)
5310 {
5311 uint32_t status = DOT11F_PARSE_SUCCESS;
5312 uint8_t tmp56__;
5313 uint16_t tmp57__;
5314 uint16_t tmp58__;
5315 (void) pBuf; (void)ielen; /* Shutup the compiler */
5316 if (pDst->present)
5317 return DOT11F_DUPLICATE_IE;
5318 pDst->present = 1;
5319 if (unlikely(ielen < 1)) {
5320 pDst->present = 0;
5321 return DOT11F_INCOMPLETE_IE;
5322 }
5323
5324 pDst->primaryChannel = *pBuf;
5325 pBuf += 1;
5326 ielen -= (uint8_t)1;
5327 if (unlikely(ielen < 1)) {
5328 pDst->present = 0;
5329 return DOT11F_INCOMPLETE_IE;
5330 }
5331
5332 tmp56__ = *pBuf;
5333 pBuf += 1;
5334 ielen -= 1;
5335 pDst->secondaryChannelOffset = tmp56__ >> 0 & 0x3;
5336 pDst->recommendedTxWidthSet = tmp56__ >> 2 & 0x1;
5337 pDst->rifsMode = tmp56__ >> 3 & 0x1;
5338 pDst->controlledAccessOnly = tmp56__ >> 4 & 0x1;
5339 pDst->serviceIntervalGranularity = tmp56__ >> 5 & 0x7;
5340 if (unlikely(ielen < 2)) {
5341 pDst->present = 0;
5342 return DOT11F_INCOMPLETE_IE;
5343 }
5344
5345 framesntohs(pCtx, &tmp57__, pBuf, 0);
5346 pBuf += 2;
5347 ielen -= 2;
5348 pDst->opMode = tmp57__ >> 0 & 0x3;
5349 pDst->nonGFDevicesPresent = tmp57__ >> 2 & 0x1;
5350 pDst->transmitBurstLimit = tmp57__ >> 3 & 0x1;
5351 pDst->obssNonHTStaPresent = tmp57__ >> 4 & 0x1;
5352 pDst->chan_center_freq_seg2 = tmp57__ >> 5 & 0xff;
5353 pDst->reserved = tmp57__ >> 13 & 0x7;
5354 if (unlikely(ielen < 2)) {
5355 pDst->present = 0;
5356 return DOT11F_INCOMPLETE_IE;
5357 }
5358
5359 framesntohs(pCtx, &tmp58__, pBuf, 0);
5360 pBuf += 2;
5361 ielen -= 2;
5362 pDst->basicSTBCMCS = tmp58__ >> 0 & 0x7f;
5363 pDst->dualCTSProtection = tmp58__ >> 7 & 0x1;
5364 pDst->secondaryBeacon = tmp58__ >> 8 & 0x1;
5365 pDst->lsigTXOPProtectionFullSupport = tmp58__ >> 9 & 0x1;
5366 pDst->pcoActive = tmp58__ >> 10 & 0x1;
5367 pDst->pcoPhase = tmp58__ >> 11 & 0x1;
5368 pDst->reserved2 = tmp58__ >> 12 & 0xf;
5369 if (unlikely(ielen < 16)) {
5370 pDst->present = 0;
5371 return DOT11F_INCOMPLETE_IE;
5372 }
5373
5374 DOT11F_MEMCPY(pCtx, pDst->basicMCSSet, pBuf, 16);
5375 pBuf += 16;
5376 ielen -= (uint8_t)16;
5377 pDst->num_rsvd = (uint8_t)(ielen);
5378 if (ielen > 32) {
5379 pDst->present = 0;
5380 return DOT11F_SKIPPED_BAD_IE;
5381 }
5382
5383 DOT11F_MEMCPY(pCtx, pDst->rsvd, pBuf, (ielen));
5384 (void)pCtx;
5385 return status;
5386 } /* End dot11f_unpack_ie_ht_info. */
5387
5388 #define SigIeHTInfo (0x0044)
5389
5390
dot11f_unpack_ie_link_identifier(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIELinkIdentifier * pDst,bool append_ie)5391 uint32_t dot11f_unpack_ie_link_identifier(tpAniSirGlobal pCtx,
5392 uint8_t *pBuf,
5393 uint8_t ielen,
5394 tDot11fIELinkIdentifier *pDst,
5395 bool append_ie)
5396 {
5397 uint32_t status = DOT11F_PARSE_SUCCESS;
5398 (void) pBuf; (void)ielen; /* Shutup the compiler */
5399 if (pDst->present)
5400 return DOT11F_DUPLICATE_IE;
5401 pDst->present = 1;
5402 if (unlikely(ielen < 6)) {
5403 pDst->present = 0;
5404 return DOT11F_INCOMPLETE_IE;
5405 }
5406
5407 DOT11F_MEMCPY(pCtx, pDst->bssid, pBuf, 6);
5408 pBuf += 6;
5409 ielen -= (uint8_t)6;
5410 if (unlikely(ielen < 6)) {
5411 pDst->present = 0;
5412 return DOT11F_INCOMPLETE_IE;
5413 }
5414
5415 DOT11F_MEMCPY(pCtx, pDst->InitStaAddr, pBuf, 6);
5416 pBuf += 6;
5417 ielen -= (uint8_t)6;
5418 if (unlikely(ielen < 6)) {
5419 pDst->present = 0;
5420 return DOT11F_INCOMPLETE_IE;
5421 }
5422
5423 DOT11F_MEMCPY(pCtx, pDst->RespStaAddr, pBuf, 6);
5424 (void)pCtx;
5425 return status;
5426 } /* End dot11f_unpack_ie_link_identifier. */
5427
5428 #define SigIeLinkIdentifier (0x0045)
5429
5430
5431 static const tTLVDefn TLVS_MBO_IE[] = {
5432 { offsetof(tDot11fIEMBO_IE, mbo_ap_cap), offsetof(tDot11fTLVmbo_ap_cap,
5433 present), "mbo_ap_cap", SigTlvmbo_ap_cap, DOT11F_TLV_MBO_AP_CAP,
5434 0, 3, 3, 0, 1, 1, 0, },
5435 { offsetof(tDot11fIEMBO_IE, non_prefferd_chan_rep),
5436 offsetof(tDot11fTLVnon_prefferd_chan_rep, present),
5437 "non_prefferd_chan_rep", SigTlvnon_prefferd_chan_rep,
5438 DOT11F_TLV_NON_PREFFERD_CHAN_REP, 0, 6, 257, 0, 1, 1, 0, },
5439 { offsetof(tDot11fIEMBO_IE, cellular_data_cap),
5440 offsetof(tDot11fTLVcellular_data_cap, present), "cellular_data_cap",
5441 SigTlvcellular_data_cap, DOT11F_TLV_CELLULAR_DATA_CAP,
5442 0, 3, 3, 0, 1, 1, 0, },
5443 { offsetof(tDot11fIEMBO_IE, assoc_disallowed),
5444 offsetof(tDot11fTLVassoc_disallowed, present), "assoc_disallowed",
5445 SigTlvassoc_disallowed, DOT11F_TLV_ASSOC_DISALLOWED,
5446 0, 3, 3, 0, 1, 1, 0, },
5447 { offsetof(tDot11fIEMBO_IE, cellular_data_con_pref),
5448 offsetof(tDot11fTLVcellular_data_con_pref, present),
5449 "cellular_data_con_pref", SigTlvcellular_data_con_pref,
5450 DOT11F_TLV_CELLULAR_DATA_CON_PREF, 0, 3, 3, 0, 1, 1, 0, },
5451 { offsetof(tDot11fIEMBO_IE, transition_reason),
5452 offsetof(tDot11fTLVtransition_reason, present), "transition_reason",
5453 SigTlvtransition_reason, DOT11F_TLV_TRANSITION_REASON,
5454 0, 3, 3, 0, 1, 1, 0, },
5455 { offsetof(tDot11fIEMBO_IE, transition_reject_reason),
5456 offsetof(tDot11fTLVtransition_reject_reason, present),
5457 "transition_reject_reason", SigTlvtransition_reject_reason,
5458 DOT11F_TLV_TRANSITION_REJECT_REASON, 0, 3, 3, 0, 1, 1, 0, },
5459 { offsetof(tDot11fIEMBO_IE, assoc_retry_delay),
5460 offsetof(tDot11fTLVassoc_retry_delay, present), "assoc_retry_delay",
5461 SigTlvassoc_retry_delay, DOT11F_TLV_ASSOC_RETRY_DELAY,
5462 0, 4, 4, 0, 1, 1, 0, },
5463 { offsetof(tDot11fIEMBO_IE, oce_cap), offsetof(tDot11fTLVoce_cap,
5464 present), "oce_cap", SigTlvoce_cap, DOT11F_TLV_OCE_CAP,
5465 0, 3, 3, 0, 1, 1, 0, },
5466 { offsetof(tDot11fIEMBO_IE, rssi_assoc_rej),
5467 offsetof(tDot11fTLVrssi_assoc_rej, present), "rssi_assoc_rej",
5468 SigTlvrssi_assoc_rej, DOT11F_TLV_RSSI_ASSOC_REJ, 0, 4, 4, 0, 1, 1, 0, },
5469 { offsetof(tDot11fIEMBO_IE, reduced_wan_metrics),
5470 offsetof(tDot11fTLVreduced_wan_metrics, present), "reduced_wan_metrics",
5471 SigTlvreduced_wan_metrics, DOT11F_TLV_REDUCED_WAN_METRICS,
5472 0, 3, 3, 0, 1, 1, 0, },
5473 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
5474 };
5475
dot11f_unpack_ie_MBO_IE(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEMBO_IE * pDst,bool append_ie)5476 uint32_t dot11f_unpack_ie_MBO_IE(tpAniSirGlobal pCtx,
5477 uint8_t *pBuf,
5478 uint8_t ielen,
5479 tDot11fIEMBO_IE *pDst,
5480 bool append_ie)
5481 {
5482 uint32_t status = DOT11F_PARSE_SUCCESS;
5483 (void)pBuf; (void)ielen; /* Shutup the compiler */
5484 pDst->present = 1;
5485 status = unpack_tlv_core(pCtx, pBuf, ielen,
5486 TLVS_MBO_IE,
5487 (uint8_t *)pDst, sizeof(*pDst));
5488 return status;
5489 } /* End dot11f_unpack_ie_MBO_IE. */
5490
5491 #define SigIeMBO_IE (0x0046)
5492
5493
5494 static const tFFDefn FFS_reportchannel_load_report[] = {
5495 { NULL, 0, 0, 0,},
5496 };
5497
5498 static const tIEDefn IES_reportchannel_load_report[] = {
5499 { offsetof(tDot11fIEMeasurementReport,
5500 report.channel_load_report.wide_bw_chan_switch),
5501 offsetof(tDot11fIEwide_bw_chan_switch, present), 0, "wide_bw_chan_switch",
5502 0, 5, 5, SigIewide_bw_chan_switch, {0, 0, 0, 0, 0},
5503 0, DOT11F_EID_WIDE_BW_CHAN_SWITCH, 0, 0, },
5504 { offsetof(tDot11fIEMeasurementReport,
5505 report.channel_load_report.bw_indication),
5506 offsetof(tDot11fIEbw_indication, present), 0, "bw_indication",
5507 0, 6, 8, SigIebw_indication, {0, 0, 0, 0, 0},
5508 0, DOT11F_EID_BW_INDICATION, 0, 0, },
5509 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },
5510 };
5511
5512 static const tFFDefn FFS_reportBeacon[] = {
5513 { NULL, 0, 0, 0,},
5514 };
5515
5516 static const tIEDefn IES_reportBeacon[] = {
5517 { offsetof(tDot11fIEMeasurementReport,
5518 report.Beacon.BeaconReportFrmBody),
5519 offsetof(tDot11fIEBeaconReportFrmBody, present), 0, "BeaconReportFrmBody",
5520 0, 2, 226, SigIeBeaconReportFrmBody, {0, 0, 0, 0, 0},
5521 0, DOT11F_EID_BEACONREPORTFRMBODY, 0, 0, },
5522 { offsetof(tDot11fIEMeasurementReport,
5523 report.Beacon.beacon_report_frm_body_fragment_id),
5524 offsetof(tDot11fIEbeacon_report_frm_body_fragment_id, present), 0,
5525 "beacon_report_frm_body_fragment_id",
5526 0, 4, 4, SigIebeacon_report_frm_body_fragment_id, {0, 0, 0, 0, 0},
5527 0, DOT11F_EID_BEACON_REPORT_FRM_BODY_FRAGMENT_ID, 0, 0, },
5528 { offsetof(tDot11fIEMeasurementReport,
5529 report.Beacon.last_beacon_report_indication),
5530 offsetof(tDot11fIElast_beacon_report_indication, present), 0,
5531 "last_beacon_report_indication",
5532 0, 3, 3, SigIelast_beacon_report_indication, {0, 0, 0, 0, 0},
5533 0, DOT11F_EID_LAST_BEACON_REPORT_INDICATION, 0, 0, },
5534 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },
5535 };
5536
5537 static const tFFDefn FFS_reportsta_stats[] = {
5538 { NULL, 0, 0, 0,},
5539 };
5540
5541 static const tIEDefn IES_reportsta_stats[] = {
5542 { offsetof(tDot11fIEMeasurementReport,
5543 report.sta_stats.reporting_reason), offsetof(tDot11fIEreporting_reason,
5544 present), 0, "reporting_reason", 0, 3, 3, SigIereporting_reason,
5545 {0, 0, 0, 0, 0}, 0, DOT11F_EID_REPORTING_REASON, 0, 0, },
5546 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },
5547 };
5548
dot11f_unpack_ie_measurement_report(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEMeasurementReport * pDst,bool append_ie)5549 uint32_t dot11f_unpack_ie_measurement_report(tpAniSirGlobal pCtx,
5550 uint8_t *pBuf,
5551 uint8_t ielen,
5552 tDot11fIEMeasurementReport *pDst,
5553 bool append_ie)
5554 {
5555 uint32_t status = DOT11F_PARSE_SUCCESS;
5556 uint8_t tmp59__;
5557 uint8_t tmp60__;
5558 uint8_t tmp61__;
5559 (void) pBuf; (void)ielen; /* Shutup the compiler */
5560 if (pDst->present)
5561 return DOT11F_DUPLICATE_IE;
5562 pDst->present = 1;
5563 if (unlikely(ielen < 1)) {
5564 pDst->present = 0;
5565 return DOT11F_INCOMPLETE_IE;
5566 }
5567
5568 pDst->token = *pBuf;
5569 pBuf += 1;
5570 ielen -= (uint8_t)1;
5571 if (unlikely(ielen < 1)) {
5572 pDst->present = 0;
5573 return DOT11F_INCOMPLETE_IE;
5574 }
5575
5576 tmp59__ = *pBuf;
5577 pBuf += 1;
5578 ielen -= 1;
5579 pDst->late = tmp59__ >> 0 & 0x1;
5580 pDst->incapable = tmp59__ >> 1 & 0x1;
5581 pDst->refused = tmp59__ >> 2 & 0x1;
5582 pDst->unused = tmp59__ >> 3 & 0x1f;
5583 if (unlikely(ielen < 1)) {
5584 pDst->present = 0;
5585 return DOT11F_INCOMPLETE_IE;
5586 }
5587
5588 pDst->type = *pBuf;
5589 pBuf += 1;
5590 ielen -= (uint8_t)1;
5591 if (!ielen) {
5592 return 0U;
5593 } else {
5594 switch (pDst->type) {
5595 case 0:
5596 if (unlikely(ielen < 1)) {
5597 pDst->present = 0;
5598 return DOT11F_INCOMPLETE_IE;
5599 }
5600
5601 pDst->report.Basic.channel = *pBuf;
5602 pBuf += 1;
5603 ielen -= (uint8_t)1;
5604 if (unlikely(ielen < 8)) {
5605 pDst->present = 0;
5606 return DOT11F_INCOMPLETE_IE;
5607 }
5608
5609 framesntohq(pCtx, &pDst->report.Basic.meas_start_time, pBuf, 0);
5610 pBuf += 8;
5611 ielen -= (uint8_t)8;
5612 if (unlikely(ielen < 2)) {
5613 pDst->present = 0;
5614 return DOT11F_INCOMPLETE_IE;
5615 }
5616
5617 framesntohs(pCtx, &pDst->report.Basic.meas_duration, pBuf, 0);
5618 pBuf += 2;
5619 ielen -= (uint8_t)2;
5620 if (unlikely(ielen < 1)) {
5621 pDst->present = 0;
5622 return DOT11F_INCOMPLETE_IE;
5623 }
5624
5625 tmp60__ = *pBuf;
5626 pBuf += 1;
5627 ielen -= 1;
5628 pDst->report.Basic.bss = tmp60__ >> 0 & 0x1;
5629 pDst->report.Basic.ofdm_preamble = tmp60__ >> 1 & 0x1;
5630 pDst->report.Basic.unid_signal = tmp60__ >> 2 & 0x1;
5631 pDst->report.Basic.rader = tmp60__ >> 3 & 0x1;
5632 pDst->report.Basic.unmeasured = tmp60__ >> 4 & 0x1;
5633 pDst->report.Basic.unused = tmp60__ >> 5 & 0x7;
5634 break;
5635 case 1:
5636 if (unlikely(ielen < 1)) {
5637 pDst->present = 0;
5638 return DOT11F_INCOMPLETE_IE;
5639 }
5640
5641 pDst->report.CCA.channel = *pBuf;
5642 pBuf += 1;
5643 ielen -= (uint8_t)1;
5644 if (unlikely(ielen < 8)) {
5645 pDst->present = 0;
5646 return DOT11F_INCOMPLETE_IE;
5647 }
5648
5649 framesntohq(pCtx, &pDst->report.CCA.meas_start_time, pBuf, 0);
5650 pBuf += 8;
5651 ielen -= (uint8_t)8;
5652 if (unlikely(ielen < 2)) {
5653 pDst->present = 0;
5654 return DOT11F_INCOMPLETE_IE;
5655 }
5656
5657 framesntohs(pCtx, &pDst->report.CCA.meas_duration, pBuf, 0);
5658 pBuf += 2;
5659 ielen -= (uint8_t)2;
5660 if (unlikely(ielen < 1)) {
5661 pDst->present = 0;
5662 return DOT11F_INCOMPLETE_IE;
5663 }
5664
5665 pDst->report.CCA.cca_busy_fraction = *pBuf;
5666 pBuf += 1;
5667 ielen -= (uint8_t)1;
5668 break;
5669 case 2:
5670 if (unlikely(ielen < 1)) {
5671 pDst->present = 0;
5672 return DOT11F_INCOMPLETE_IE;
5673 }
5674
5675 pDst->report.RPIHistogram.channel = *pBuf;
5676 pBuf += 1;
5677 ielen -= (uint8_t)1;
5678 if (unlikely(ielen < 8)) {
5679 pDst->present = 0;
5680 return DOT11F_INCOMPLETE_IE;
5681 }
5682
5683 framesntohq(pCtx, &pDst->report.RPIHistogram.meas_start_time, pBuf, 0);
5684 pBuf += 8;
5685 ielen -= (uint8_t)8;
5686 if (unlikely(ielen < 2)) {
5687 pDst->present = 0;
5688 return DOT11F_INCOMPLETE_IE;
5689 }
5690
5691 framesntohs(pCtx, &pDst->report.RPIHistogram.meas_duration, pBuf, 0);
5692 pBuf += 2;
5693 ielen -= (uint8_t)2;
5694 if (unlikely(ielen < 1)) {
5695 pDst->present = 0;
5696 return DOT11F_INCOMPLETE_IE;
5697 }
5698
5699 pDst->report.RPIHistogram.rpi0_density = *pBuf;
5700 pBuf += 1;
5701 ielen -= (uint8_t)1;
5702 if (unlikely(ielen < 1)) {
5703 pDst->present = 0;
5704 return DOT11F_INCOMPLETE_IE;
5705 }
5706
5707 pDst->report.RPIHistogram.rpi1_density = *pBuf;
5708 pBuf += 1;
5709 ielen -= (uint8_t)1;
5710 if (unlikely(ielen < 1)) {
5711 pDst->present = 0;
5712 return DOT11F_INCOMPLETE_IE;
5713 }
5714
5715 pDst->report.RPIHistogram.rpi2_density = *pBuf;
5716 pBuf += 1;
5717 ielen -= (uint8_t)1;
5718 if (unlikely(ielen < 1)) {
5719 pDst->present = 0;
5720 return DOT11F_INCOMPLETE_IE;
5721 }
5722
5723 pDst->report.RPIHistogram.rpi3_density = *pBuf;
5724 pBuf += 1;
5725 ielen -= (uint8_t)1;
5726 if (unlikely(ielen < 1)) {
5727 pDst->present = 0;
5728 return DOT11F_INCOMPLETE_IE;
5729 }
5730
5731 pDst->report.RPIHistogram.rpi4_density = *pBuf;
5732 pBuf += 1;
5733 ielen -= (uint8_t)1;
5734 if (unlikely(ielen < 1)) {
5735 pDst->present = 0;
5736 return DOT11F_INCOMPLETE_IE;
5737 }
5738
5739 pDst->report.RPIHistogram.rpi5_density = *pBuf;
5740 pBuf += 1;
5741 ielen -= (uint8_t)1;
5742 if (unlikely(ielen < 1)) {
5743 pDst->present = 0;
5744 return DOT11F_INCOMPLETE_IE;
5745 }
5746
5747 pDst->report.RPIHistogram.rpi6_density = *pBuf;
5748 pBuf += 1;
5749 ielen -= (uint8_t)1;
5750 if (unlikely(ielen < 1)) {
5751 pDst->present = 0;
5752 return DOT11F_INCOMPLETE_IE;
5753 }
5754
5755 pDst->report.RPIHistogram.rpi7_density = *pBuf;
5756 pBuf += 1;
5757 ielen -= (uint8_t)1;
5758 break;
5759 case 3:
5760 if (unlikely(ielen < 1)) {
5761 pDst->present = 0;
5762 return DOT11F_INCOMPLETE_IE;
5763 }
5764
5765 pDst->report.channel_load_report.op_class = *pBuf;
5766 pBuf += 1;
5767 ielen -= (uint8_t)1;
5768 if (unlikely(ielen < 1)) {
5769 pDst->present = 0;
5770 return DOT11F_INCOMPLETE_IE;
5771 }
5772
5773 pDst->report.channel_load_report.channel = *pBuf;
5774 pBuf += 1;
5775 ielen -= (uint8_t)1;
5776 if (unlikely(ielen < 8)) {
5777 pDst->present = 0;
5778 return DOT11F_INCOMPLETE_IE;
5779 }
5780
5781 framesntohq(pCtx, &pDst->report.channel_load_report.meas_start_time, pBuf, 0);
5782 pBuf += 8;
5783 ielen -= (uint8_t)8;
5784 if (unlikely(ielen < 2)) {
5785 pDst->present = 0;
5786 return DOT11F_INCOMPLETE_IE;
5787 }
5788
5789 framesntohs(pCtx, &pDst->report.channel_load_report.meas_duration, pBuf, 0);
5790 pBuf += 2;
5791 ielen -= (uint8_t)2;
5792 if (unlikely(ielen < 1)) {
5793 pDst->present = 0;
5794 return DOT11F_INCOMPLETE_IE;
5795 }
5796
5797 pDst->report.channel_load_report.chan_load = *pBuf;
5798 pBuf += 1;
5799 ielen -= (uint8_t)1;
5800 status |= unpack_core(pCtx,
5801 pBuf,
5802 ielen,
5803 FFS_reportchannel_load_report,
5804 IES_reportchannel_load_report,
5805 (uint8_t *)pDst,
5806 sizeof(*pDst), append_ie);
5807 break;
5808 case 5:
5809 if (unlikely(ielen < 1)) {
5810 pDst->present = 0;
5811 return DOT11F_INCOMPLETE_IE;
5812 }
5813
5814 pDst->report.Beacon.regClass = *pBuf;
5815 pBuf += 1;
5816 ielen -= (uint8_t)1;
5817 if (unlikely(ielen < 1)) {
5818 pDst->present = 0;
5819 return DOT11F_INCOMPLETE_IE;
5820 }
5821
5822 pDst->report.Beacon.channel = *pBuf;
5823 pBuf += 1;
5824 ielen -= (uint8_t)1;
5825 if (unlikely(ielen < 8)) {
5826 pDst->present = 0;
5827 return DOT11F_INCOMPLETE_IE;
5828 }
5829
5830 framesntohq(pCtx, &pDst->report.Beacon.meas_start_time, pBuf, 0);
5831 pBuf += 8;
5832 ielen -= (uint8_t)8;
5833 if (unlikely(ielen < 2)) {
5834 pDst->present = 0;
5835 return DOT11F_INCOMPLETE_IE;
5836 }
5837
5838 framesntohs(pCtx, &pDst->report.Beacon.meas_duration, pBuf, 0);
5839 pBuf += 2;
5840 ielen -= (uint8_t)2;
5841 if (unlikely(ielen < 1)) {
5842 pDst->present = 0;
5843 return DOT11F_INCOMPLETE_IE;
5844 }
5845
5846 tmp61__ = *pBuf;
5847 pBuf += 1;
5848 ielen -= 1;
5849 pDst->report.Beacon.condensed_PHY = tmp61__ >> 0 & 0x7f;
5850 pDst->report.Beacon.reported_frame_type = tmp61__ >> 7 & 0x1;
5851 if (unlikely(ielen < 1)) {
5852 pDst->present = 0;
5853 return DOT11F_INCOMPLETE_IE;
5854 }
5855
5856 pDst->report.Beacon.RCPI = *pBuf;
5857 pBuf += 1;
5858 ielen -= (uint8_t)1;
5859 if (unlikely(ielen < 1)) {
5860 pDst->present = 0;
5861 return DOT11F_INCOMPLETE_IE;
5862 }
5863
5864 pDst->report.Beacon.RSNI = *pBuf;
5865 pBuf += 1;
5866 ielen -= (uint8_t)1;
5867 if (unlikely(ielen < 6)) {
5868 pDst->present = 0;
5869 return DOT11F_INCOMPLETE_IE;
5870 }
5871
5872 DOT11F_MEMCPY(pCtx, pDst->report.Beacon.BSSID, pBuf, 6);
5873 pBuf += 6;
5874 ielen -= (uint8_t)6;
5875 if (unlikely(ielen < 1)) {
5876 pDst->present = 0;
5877 return DOT11F_INCOMPLETE_IE;
5878 }
5879
5880 pDst->report.Beacon.antenna_id = *pBuf;
5881 pBuf += 1;
5882 ielen -= (uint8_t)1;
5883 if (unlikely(ielen < 4)) {
5884 pDst->present = 0;
5885 return DOT11F_INCOMPLETE_IE;
5886 }
5887
5888 framesntohl(pCtx, &pDst->report.Beacon.parent_TSF, pBuf, 0);
5889 pBuf += 4;
5890 ielen -= (uint8_t)4;
5891 status |= unpack_core(pCtx,
5892 pBuf,
5893 ielen,
5894 FFS_reportBeacon,
5895 IES_reportBeacon,
5896 (uint8_t *)pDst,
5897 sizeof(*pDst), append_ie);
5898 break;
5899 case 7:
5900 if (unlikely(ielen < 2)) {
5901 pDst->present = 0;
5902 return DOT11F_INCOMPLETE_IE;
5903 }
5904
5905 framesntohs(pCtx, &pDst->report.sta_stats.meas_duration, pBuf, 0);
5906 pBuf += 2;
5907 ielen -= (uint8_t)2;
5908 if (unlikely(ielen < 1)) {
5909 pDst->present = 0;
5910 return DOT11F_INCOMPLETE_IE;
5911 }
5912
5913 pDst->report.sta_stats.group_id = *pBuf;
5914 pBuf += 1;
5915 ielen -= (uint8_t)1;
5916 switch (pDst->report.sta_stats.group_id) {
5917 case 0:
5918 if (unlikely(ielen < 4)) {
5919 pDst->present = 0;
5920 return DOT11F_INCOMPLETE_IE;
5921 }
5922
5923 framesntohl(pCtx, &pDst->report.sta_stats.statsgroupdata.dot11_counter_stats.transmitted_fragment_count, pBuf, 0);
5924 pBuf += 4;
5925 ielen -= (uint8_t)4;
5926 if (unlikely(ielen < 4)) {
5927 pDst->present = 0;
5928 return DOT11F_INCOMPLETE_IE;
5929 }
5930
5931 framesntohl(pCtx, &pDst->report.sta_stats.statsgroupdata.dot11_counter_stats.group_transmitted_frame_count, pBuf, 0);
5932 pBuf += 4;
5933 ielen -= (uint8_t)4;
5934 if (unlikely(ielen < 4)) {
5935 pDst->present = 0;
5936 return DOT11F_INCOMPLETE_IE;
5937 }
5938
5939 framesntohl(pCtx, &pDst->report.sta_stats.statsgroupdata.dot11_counter_stats.failed_count, pBuf, 0);
5940 pBuf += 4;
5941 ielen -= (uint8_t)4;
5942 if (unlikely(ielen < 4)) {
5943 pDst->present = 0;
5944 return DOT11F_INCOMPLETE_IE;
5945 }
5946
5947 framesntohl(pCtx, &pDst->report.sta_stats.statsgroupdata.dot11_counter_stats.received_fragment_count, pBuf, 0);
5948 pBuf += 4;
5949 ielen -= (uint8_t)4;
5950 if (unlikely(ielen < 4)) {
5951 pDst->present = 0;
5952 return DOT11F_INCOMPLETE_IE;
5953 }
5954
5955 framesntohl(pCtx, &pDst->report.sta_stats.statsgroupdata.dot11_counter_stats.group_received_frame_count, pBuf, 0);
5956 pBuf += 4;
5957 ielen -= (uint8_t)4;
5958 if (unlikely(ielen < 4)) {
5959 pDst->present = 0;
5960 return DOT11F_INCOMPLETE_IE;
5961 }
5962
5963 framesntohl(pCtx, &pDst->report.sta_stats.statsgroupdata.dot11_counter_stats.fcs_error_count, pBuf, 0);
5964 pBuf += 4;
5965 ielen -= (uint8_t)4;
5966 if (unlikely(ielen < 4)) {
5967 pDst->present = 0;
5968 return DOT11F_INCOMPLETE_IE;
5969 }
5970
5971 framesntohl(pCtx, &pDst->report.sta_stats.statsgroupdata.dot11_counter_stats.transmitted_frame_count, pBuf, 0);
5972 pBuf += 4;
5973 ielen -= (uint8_t)4;
5974 break;
5975 case 1:
5976 if (unlikely(ielen < 4)) {
5977 pDst->present = 0;
5978 return DOT11F_INCOMPLETE_IE;
5979 }
5980
5981 framesntohl(pCtx, &pDst->report.sta_stats.statsgroupdata.dot11_mac_stats.retry_count, pBuf, 0);
5982 pBuf += 4;
5983 ielen -= (uint8_t)4;
5984 if (unlikely(ielen < 4)) {
5985 pDst->present = 0;
5986 return DOT11F_INCOMPLETE_IE;
5987 }
5988
5989 framesntohl(pCtx, &pDst->report.sta_stats.statsgroupdata.dot11_mac_stats.multiple_retry_count, pBuf, 0);
5990 pBuf += 4;
5991 ielen -= (uint8_t)4;
5992 if (unlikely(ielen < 4)) {
5993 pDst->present = 0;
5994 return DOT11F_INCOMPLETE_IE;
5995 }
5996
5997 framesntohl(pCtx, &pDst->report.sta_stats.statsgroupdata.dot11_mac_stats.frame_duplicate_count, pBuf, 0);
5998 pBuf += 4;
5999 ielen -= (uint8_t)4;
6000 if (unlikely(ielen < 4)) {
6001 pDst->present = 0;
6002 return DOT11F_INCOMPLETE_IE;
6003 }
6004
6005 framesntohl(pCtx, &pDst->report.sta_stats.statsgroupdata.dot11_mac_stats.rts_success_count, pBuf, 0);
6006 pBuf += 4;
6007 ielen -= (uint8_t)4;
6008 if (unlikely(ielen < 4)) {
6009 pDst->present = 0;
6010 return DOT11F_INCOMPLETE_IE;
6011 }
6012
6013 framesntohl(pCtx, &pDst->report.sta_stats.statsgroupdata.dot11_mac_stats.rts_failure_count, pBuf, 0);
6014 pBuf += 4;
6015 ielen -= (uint8_t)4;
6016 if (unlikely(ielen < 4)) {
6017 pDst->present = 0;
6018 return DOT11F_INCOMPLETE_IE;
6019 }
6020
6021 framesntohl(pCtx, &pDst->report.sta_stats.statsgroupdata.dot11_mac_stats.ack_failure_count, pBuf, 0);
6022 pBuf += 4;
6023 ielen -= (uint8_t)4;
6024 break;
6025 case 2:
6026 if (unlikely(ielen < 4)) {
6027 pDst->present = 0;
6028 return DOT11F_INCOMPLETE_IE;
6029 }
6030
6031 framesntohl(pCtx, &pDst->report.sta_stats.statsgroupdata.dot11_qos_counter.qos_transmitted_fragment_count, pBuf, 0);
6032 pBuf += 4;
6033 ielen -= (uint8_t)4;
6034 if (unlikely(ielen < 4)) {
6035 pDst->present = 0;
6036 return DOT11F_INCOMPLETE_IE;
6037 }
6038
6039 framesntohl(pCtx, &pDst->report.sta_stats.statsgroupdata.dot11_qos_counter.qos_failed_count, pBuf, 0);
6040 pBuf += 4;
6041 ielen -= (uint8_t)4;
6042 if (unlikely(ielen < 4)) {
6043 pDst->present = 0;
6044 return DOT11F_INCOMPLETE_IE;
6045 }
6046
6047 framesntohl(pCtx, &pDst->report.sta_stats.statsgroupdata.dot11_qos_counter.qos_retry_count, pBuf, 0);
6048 pBuf += 4;
6049 ielen -= (uint8_t)4;
6050 if (unlikely(ielen < 4)) {
6051 pDst->present = 0;
6052 return DOT11F_INCOMPLETE_IE;
6053 }
6054
6055 framesntohl(pCtx, &pDst->report.sta_stats.statsgroupdata.dot11_qos_counter.qos_multiple_retry_count, pBuf, 0);
6056 pBuf += 4;
6057 ielen -= (uint8_t)4;
6058 if (unlikely(ielen < 4)) {
6059 pDst->present = 0;
6060 return DOT11F_INCOMPLETE_IE;
6061 }
6062
6063 framesntohl(pCtx, &pDst->report.sta_stats.statsgroupdata.dot11_qos_counter.qos_frame_duplicate_count, pBuf, 0);
6064 pBuf += 4;
6065 ielen -= (uint8_t)4;
6066 if (unlikely(ielen < 4)) {
6067 pDst->present = 0;
6068 return DOT11F_INCOMPLETE_IE;
6069 }
6070
6071 framesntohl(pCtx, &pDst->report.sta_stats.statsgroupdata.dot11_qos_counter.qos_rts_success_count, pBuf, 0);
6072 pBuf += 4;
6073 ielen -= (uint8_t)4;
6074 if (unlikely(ielen < 4)) {
6075 pDst->present = 0;
6076 return DOT11F_INCOMPLETE_IE;
6077 }
6078
6079 framesntohl(pCtx, &pDst->report.sta_stats.statsgroupdata.dot11_qos_counter.qos_rts_failure_count, pBuf, 0);
6080 pBuf += 4;
6081 ielen -= (uint8_t)4;
6082 if (unlikely(ielen < 4)) {
6083 pDst->present = 0;
6084 return DOT11F_INCOMPLETE_IE;
6085 }
6086
6087 framesntohl(pCtx, &pDst->report.sta_stats.statsgroupdata.dot11_qos_counter.qos_ack_failure_count, pBuf, 0);
6088 pBuf += 4;
6089 ielen -= (uint8_t)4;
6090 if (unlikely(ielen < 4)) {
6091 pDst->present = 0;
6092 return DOT11F_INCOMPLETE_IE;
6093 }
6094
6095 framesntohl(pCtx, &pDst->report.sta_stats.statsgroupdata.dot11_qos_counter.qos_received_fragment_count, pBuf, 0);
6096 pBuf += 4;
6097 ielen -= (uint8_t)4;
6098 if (unlikely(ielen < 4)) {
6099 pDst->present = 0;
6100 return DOT11F_INCOMPLETE_IE;
6101 }
6102
6103 framesntohl(pCtx, &pDst->report.sta_stats.statsgroupdata.dot11_qos_counter.qos_transmitted_frame_count, pBuf, 0);
6104 pBuf += 4;
6105 ielen -= (uint8_t)4;
6106 if (unlikely(ielen < 4)) {
6107 pDst->present = 0;
6108 return DOT11F_INCOMPLETE_IE;
6109 }
6110
6111 framesntohl(pCtx, &pDst->report.sta_stats.statsgroupdata.dot11_qos_counter.qos_discarded_frame_count, pBuf, 0);
6112 pBuf += 4;
6113 ielen -= (uint8_t)4;
6114 if (unlikely(ielen < 4)) {
6115 pDst->present = 0;
6116 return DOT11F_INCOMPLETE_IE;
6117 }
6118
6119 framesntohl(pCtx, &pDst->report.sta_stats.statsgroupdata.dot11_qos_counter.qos_mpdus_received_count, pBuf, 0);
6120 pBuf += 4;
6121 ielen -= (uint8_t)4;
6122 if (unlikely(ielen < 4)) {
6123 pDst->present = 0;
6124 return DOT11F_INCOMPLETE_IE;
6125 }
6126
6127 framesntohl(pCtx, &pDst->report.sta_stats.statsgroupdata.dot11_qos_counter.qos_retries_received_count, pBuf, 0);
6128 pBuf += 4;
6129 ielen -= (uint8_t)4;
6130 break;
6131 case 10:
6132 if (unlikely(ielen < 1)) {
6133 pDst->present = 0;
6134 return DOT11F_INCOMPLETE_IE;
6135 }
6136
6137 pDst->report.sta_stats.statsgroupdata.dot11_bss_average_access_delay.ap_average_access_delay = *pBuf;
6138 pBuf += 1;
6139 ielen -= (uint8_t)1;
6140 if (unlikely(ielen < 1)) {
6141 pDst->present = 0;
6142 return DOT11F_INCOMPLETE_IE;
6143 }
6144
6145 pDst->report.sta_stats.statsgroupdata.dot11_bss_average_access_delay.average_access_delay_besteffort = *pBuf;
6146 pBuf += 1;
6147 ielen -= (uint8_t)1;
6148 if (unlikely(ielen < 1)) {
6149 pDst->present = 0;
6150 return DOT11F_INCOMPLETE_IE;
6151 }
6152
6153 pDst->report.sta_stats.statsgroupdata.dot11_bss_average_access_delay.average_access_delay_background = *pBuf;
6154 pBuf += 1;
6155 ielen -= (uint8_t)1;
6156 if (unlikely(ielen < 1)) {
6157 pDst->present = 0;
6158 return DOT11F_INCOMPLETE_IE;
6159 }
6160
6161 pDst->report.sta_stats.statsgroupdata.dot11_bss_average_access_delay.average_access_delay_video = *pBuf;
6162 pBuf += 1;
6163 ielen -= (uint8_t)1;
6164 if (unlikely(ielen < 1)) {
6165 pDst->present = 0;
6166 return DOT11F_INCOMPLETE_IE;
6167 }
6168
6169 pDst->report.sta_stats.statsgroupdata.dot11_bss_average_access_delay.average_access_delay_voice = *pBuf;
6170 pBuf += 1;
6171 ielen -= (uint8_t)1;
6172 if (unlikely(ielen < 2)) {
6173 pDst->present = 0;
6174 return DOT11F_INCOMPLETE_IE;
6175 }
6176
6177 framesntohs(pCtx, &pDst->report.sta_stats.statsgroupdata.dot11_bss_average_access_delay.station_count, pBuf, 0);
6178 pBuf += 2;
6179 ielen -= (uint8_t)2;
6180 if (unlikely(ielen < 1)) {
6181 pDst->present = 0;
6182 return DOT11F_INCOMPLETE_IE;
6183 }
6184
6185 pDst->report.sta_stats.statsgroupdata.dot11_bss_average_access_delay.channel_utilization = *pBuf;
6186 pBuf += 1;
6187 ielen -= (uint8_t)1;
6188 break;
6189 }
6190 status |= unpack_core(pCtx,
6191 pBuf,
6192 ielen,
6193 FFS_reportsta_stats,
6194 IES_reportsta_stats,
6195 (uint8_t *)pDst,
6196 sizeof(*pDst), append_ie);
6197 break;
6198 }
6199 }
6200 (void)pCtx;
6201 return status;
6202 } /* End dot11f_unpack_ie_measurement_report. */
6203
6204 #define SigIeMeasurementReport (0x0047)
6205
6206
6207 static const tFFDefn FFS_measurement_requestchannel_load[] = {
6208 { NULL, 0, 0, 0,},
6209 };
6210
6211 static const tIEDefn IES_measurement_requestchannel_load[] = {
6212 { offsetof(tDot11fIEMeasurementRequest,
6213 measurement_request.channel_load.rrm_reporting),
6214 offsetof(tDot11fIErrm_reporting, present), 0, "rrm_reporting",
6215 0, 4, 4, SigIerrm_reporting, {0, 0, 0, 0, 0},
6216 0, DOT11F_EID_RRM_REPORTING, 0, 0, },
6217 { offsetof(tDot11fIEMeasurementRequest,
6218 measurement_request.channel_load.wide_bw_chan_switch),
6219 offsetof(tDot11fIEwide_bw_chan_switch, present), 0, "wide_bw_chan_switch",
6220 0, 5, 5, SigIewide_bw_chan_switch, {0, 0, 0, 0, 0},
6221 0, DOT11F_EID_WIDE_BW_CHAN_SWITCH, 0, 0, },
6222 { offsetof(tDot11fIEMeasurementRequest,
6223 measurement_request.channel_load.bw_indication),
6224 offsetof(tDot11fIEbw_indication, present), 0, "bw_indication",
6225 0, 6, 8, SigIebw_indication, {0, 0, 0, 0, 0},
6226 0, DOT11F_EID_BW_INDICATION, 0, 0, },
6227 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },
6228 };
6229
6230 static const tFFDefn FFS_measurement_requestBeacon[] = {
6231 { NULL, 0, 0, 0,},
6232 };
6233
6234 static const tIEDefn IES_measurement_requestBeacon[] = {
6235 { offsetof(tDot11fIEMeasurementRequest,
6236 measurement_request.Beacon.SSID), offsetof(tDot11fIESSID, present), 0,
6237 "SSID", 0, 2, 34, SigIeSSID, {0, 0, 0, 0, 0}, 0, DOT11F_EID_SSID, 0, 0, },
6238 { offsetof(tDot11fIEMeasurementRequest,
6239 measurement_request.Beacon.rrm_reporting),
6240 offsetof(tDot11fIErrm_reporting, present), 0, "rrm_reporting",
6241 0, 4, 4, SigIerrm_reporting, {0, 0, 0, 0, 0},
6242 0, DOT11F_EID_RRM_REPORTING, 0, 0, },
6243 { offsetof(tDot11fIEMeasurementRequest,
6244 measurement_request.Beacon.BcnReportingDetail),
6245 offsetof(tDot11fIEBcnReportingDetail, present), 0, "BcnReportingDetail",
6246 0, 3, 3, SigIeBcnReportingDetail, {0, 0, 0, 0, 0},
6247 0, DOT11F_EID_BCNREPORTINGDETAIL, 0, 0, },
6248 { offsetof(tDot11fIEMeasurementRequest,
6249 measurement_request.Beacon.RequestedInfo),
6250 offsetof(tDot11fIERequestedInfo, present), 0, "RequestedInfo",
6251 0, 2, 257, SigIeRequestedInfo, {0, 0, 0, 0, 0},
6252 0, DOT11F_EID_REQUESTEDINFO, 0, 0, },
6253 { offsetof(tDot11fIEMeasurementRequest,
6254 measurement_request.Beacon.ExtRequestedInfo),
6255 offsetof(tDot11fIEExtRequestedInfo, present), 0, "ExtRequestedInfo",
6256 0, 3, 258, SigIeExtRequestedInfo, {0, 0, 0, 0, 0},
6257 0, DOT11F_EID_EXTREQUESTEDINFO, 0, 0, },
6258 { offsetof(tDot11fIEMeasurementRequest,
6259 measurement_request.Beacon.APChannelReport),
6260 offsetof(tDot11fIEAPChannelReport, present),
6261 offsetof(tDot11fIEMeasurementRequest, measurement_request.Beacon.num_APChannelReport), "APChannelReport", 2, 3, 53, SigIeAPChannelReport, {0, 0, 0, 0, 0}, 0, DOT11F_EID_APCHANNELREPORT, 0, 0, },
6262 { offsetof(tDot11fIEMeasurementRequest,
6263 measurement_request.Beacon.last_beacon_report_indication),
6264 offsetof(tDot11fIElast_beacon_report_indication, present), 0,
6265 "last_beacon_report_indication",
6266 0, 3, 3, SigIelast_beacon_report_indication, {0, 0, 0, 0, 0},
6267 0, DOT11F_EID_LAST_BEACON_REPORT_INDICATION, 0, 0, },
6268 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },
6269 };
6270
6271 static const tFFDefn FFS_measurement_requestlci[] = {
6272 { NULL, 0, 0, 0,},
6273 };
6274
6275 static const tIEDefn IES_measurement_requestlci[] = {
6276 { offsetof(tDot11fIEMeasurementRequest,
6277 measurement_request.lci.azimuth_req), offsetof(tDot11fIEazimuth_req,
6278 present), 0, "azimuth_req", 0, 3, 3, SigIeazimuth_req, {0, 0, 0, 0, 0},
6279 0, DOT11F_EID_AZIMUTH_REQ, 0, 0, },
6280 { offsetof(tDot11fIEMeasurementRequest,
6281 measurement_request.lci.req_mac_addr), offsetof(tDot11fIEreq_mac_addr,
6282 present), 0, "req_mac_addr", 0, 8, 8, SigIereq_mac_addr, {0, 0, 0, 0, 0},
6283 0, DOT11F_EID_REQ_MAC_ADDR, 0, 0, },
6284 { offsetof(tDot11fIEMeasurementRequest,
6285 measurement_request.lci.tgt_mac_addr), offsetof(tDot11fIEtgt_mac_addr,
6286 present), 0, "tgt_mac_addr", 0, 8, 8, SigIetgt_mac_addr, {0, 0, 0, 0, 0},
6287 0, DOT11F_EID_TGT_MAC_ADDR, 0, 0, },
6288 { offsetof(tDot11fIEMeasurementRequest,
6289 measurement_request.lci.max_age), offsetof(tDot11fIEmax_age, present), 0,
6290 "max_age", 0, 4, 4, SigIemax_age, {0, 0, 0, 0, 0},
6291 0, DOT11F_EID_MAX_AGE, 0, 0, },
6292 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },
6293 };
6294
6295 static const tFFDefn FFS_measurement_requestftmrr[] = {
6296 { NULL, 0, 0, 0,},
6297 };
6298
6299 static const tIEDefn IES_measurement_requestftmrr[] = {
6300 { offsetof(tDot11fIEMeasurementRequest,
6301 measurement_request.ftmrr.neighbor_rpt), offsetof(tDot11fIEneighbor_rpt,
6302 present), 0, "neighbor_rpt", 0, 15, 548, SigIeneighbor_rpt,
6303 {0, 0, 0, 0, 0}, 0, DOT11F_EID_NEIGHBOR_RPT, 0, 0, },
6304 { offsetof(tDot11fIEMeasurementRequest,
6305 measurement_request.ftmrr.max_age), offsetof(tDot11fIEmax_age, present),
6306 0, "max_age", 0, 4, 4, SigIemax_age, {0, 0, 0, 0, 0},
6307 0, DOT11F_EID_MAX_AGE, 0, 0, },
6308 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },
6309 };
6310
dot11f_unpack_ie_measurement_request(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEMeasurementRequest * pDst,bool append_ie)6311 uint32_t dot11f_unpack_ie_measurement_request(tpAniSirGlobal pCtx,
6312 uint8_t *pBuf,
6313 uint8_t ielen,
6314 tDot11fIEMeasurementRequest *pDst,
6315 bool append_ie)
6316 {
6317 uint32_t status = DOT11F_PARSE_SUCCESS;
6318 uint8_t tmp62__;
6319 (void) pBuf; (void)ielen; /* Shutup the compiler */
6320 if (pDst->present)
6321 return DOT11F_DUPLICATE_IE;
6322 pDst->present = 1;
6323 if (unlikely(ielen < 1)) {
6324 pDst->present = 0;
6325 return DOT11F_INCOMPLETE_IE;
6326 }
6327
6328 pDst->measurement_token = *pBuf;
6329 pBuf += 1;
6330 ielen -= (uint8_t)1;
6331 if (unlikely(ielen < 1)) {
6332 pDst->present = 0;
6333 return DOT11F_INCOMPLETE_IE;
6334 }
6335
6336 tmp62__ = *pBuf;
6337 pBuf += 1;
6338 ielen -= 1;
6339 pDst->parallel = tmp62__ >> 0 & 0x1;
6340 pDst->enable = tmp62__ >> 1 & 0x1;
6341 pDst->request = tmp62__ >> 2 & 0x1;
6342 pDst->report = tmp62__ >> 3 & 0x1;
6343 pDst->durationMandatory = tmp62__ >> 4 & 0x1;
6344 pDst->unused = tmp62__ >> 5 & 0x7;
6345 if (unlikely(ielen < 1)) {
6346 pDst->present = 0;
6347 return DOT11F_INCOMPLETE_IE;
6348 }
6349
6350 pDst->measurement_type = *pBuf;
6351 pBuf += 1;
6352 ielen -= (uint8_t)1;
6353 switch (pDst->measurement_type) {
6354 case 0:
6355 if (unlikely(ielen < 1)) {
6356 pDst->present = 0;
6357 return DOT11F_INCOMPLETE_IE;
6358 }
6359
6360 pDst->measurement_request.Basic.channel_no = *pBuf;
6361 pBuf += 1;
6362 ielen -= (uint8_t)1;
6363 if (unlikely(ielen < 8)) {
6364 pDst->present = 0;
6365 return DOT11F_INCOMPLETE_IE;
6366 }
6367
6368 DOT11F_MEMCPY(pCtx, pDst->measurement_request.Basic.meas_start_time, pBuf, 8);
6369 pBuf += 8;
6370 ielen -= (uint8_t)8;
6371 if (unlikely(ielen < 2)) {
6372 pDst->present = 0;
6373 return DOT11F_INCOMPLETE_IE;
6374 }
6375
6376 framesntohs(pCtx, &pDst->measurement_request.Basic.meas_duration, pBuf, 0);
6377 pBuf += 2;
6378 ielen -= (uint8_t)2;
6379 break;
6380 case 1:
6381 if (unlikely(ielen < 1)) {
6382 pDst->present = 0;
6383 return DOT11F_INCOMPLETE_IE;
6384 }
6385
6386 pDst->measurement_request.CCA.channel_no = *pBuf;
6387 pBuf += 1;
6388 ielen -= (uint8_t)1;
6389 if (unlikely(ielen < 8)) {
6390 pDst->present = 0;
6391 return DOT11F_INCOMPLETE_IE;
6392 }
6393
6394 DOT11F_MEMCPY(pCtx, pDst->measurement_request.CCA.meas_start_time, pBuf, 8);
6395 pBuf += 8;
6396 ielen -= (uint8_t)8;
6397 if (unlikely(ielen < 2)) {
6398 pDst->present = 0;
6399 return DOT11F_INCOMPLETE_IE;
6400 }
6401
6402 framesntohs(pCtx, &pDst->measurement_request.CCA.meas_duration, pBuf, 0);
6403 pBuf += 2;
6404 ielen -= (uint8_t)2;
6405 break;
6406 case 2:
6407 if (unlikely(ielen < 1)) {
6408 pDst->present = 0;
6409 return DOT11F_INCOMPLETE_IE;
6410 }
6411
6412 pDst->measurement_request.RPIHistogram.channel_no = *pBuf;
6413 pBuf += 1;
6414 ielen -= (uint8_t)1;
6415 if (unlikely(ielen < 8)) {
6416 pDst->present = 0;
6417 return DOT11F_INCOMPLETE_IE;
6418 }
6419
6420 DOT11F_MEMCPY(pCtx, pDst->measurement_request.RPIHistogram.meas_start_time, pBuf, 8);
6421 pBuf += 8;
6422 ielen -= (uint8_t)8;
6423 if (unlikely(ielen < 2)) {
6424 pDst->present = 0;
6425 return DOT11F_INCOMPLETE_IE;
6426 }
6427
6428 framesntohs(pCtx, &pDst->measurement_request.RPIHistogram.meas_duration, pBuf, 0);
6429 pBuf += 2;
6430 ielen -= (uint8_t)2;
6431 break;
6432 case 3:
6433 if (unlikely(ielen < 1)) {
6434 pDst->present = 0;
6435 return DOT11F_INCOMPLETE_IE;
6436 }
6437
6438 pDst->measurement_request.channel_load.op_class = *pBuf;
6439 pBuf += 1;
6440 ielen -= (uint8_t)1;
6441 if (unlikely(ielen < 1)) {
6442 pDst->present = 0;
6443 return DOT11F_INCOMPLETE_IE;
6444 }
6445
6446 pDst->measurement_request.channel_load.channel = *pBuf;
6447 pBuf += 1;
6448 ielen -= (uint8_t)1;
6449 if (unlikely(ielen < 2)) {
6450 pDst->present = 0;
6451 return DOT11F_INCOMPLETE_IE;
6452 }
6453
6454 framesntohs(pCtx, &pDst->measurement_request.channel_load.randomization_intv, pBuf, 0);
6455 pBuf += 2;
6456 ielen -= (uint8_t)2;
6457 if (unlikely(ielen < 2)) {
6458 pDst->present = 0;
6459 return DOT11F_INCOMPLETE_IE;
6460 }
6461
6462 framesntohs(pCtx, &pDst->measurement_request.channel_load.meas_duration, pBuf, 0);
6463 pBuf += 2;
6464 ielen -= (uint8_t)2;
6465 status |= unpack_core(pCtx,
6466 pBuf,
6467 ielen,
6468 FFS_measurement_requestchannel_load,
6469 IES_measurement_requestchannel_load,
6470 (uint8_t *)pDst,
6471 sizeof(*pDst), append_ie);
6472 break;
6473 case 5:
6474 if (unlikely(ielen < 1)) {
6475 pDst->present = 0;
6476 return DOT11F_INCOMPLETE_IE;
6477 }
6478
6479 pDst->measurement_request.Beacon.regClass = *pBuf;
6480 pBuf += 1;
6481 ielen -= (uint8_t)1;
6482 if (unlikely(ielen < 1)) {
6483 pDst->present = 0;
6484 return DOT11F_INCOMPLETE_IE;
6485 }
6486
6487 pDst->measurement_request.Beacon.channel = *pBuf;
6488 pBuf += 1;
6489 ielen -= (uint8_t)1;
6490 if (unlikely(ielen < 2)) {
6491 pDst->present = 0;
6492 return DOT11F_INCOMPLETE_IE;
6493 }
6494
6495 framesntohs(pCtx, &pDst->measurement_request.Beacon.randomization, pBuf, 0);
6496 pBuf += 2;
6497 ielen -= (uint8_t)2;
6498 if (unlikely(ielen < 2)) {
6499 pDst->present = 0;
6500 return DOT11F_INCOMPLETE_IE;
6501 }
6502
6503 framesntohs(pCtx, &pDst->measurement_request.Beacon.meas_duration, pBuf, 0);
6504 pBuf += 2;
6505 ielen -= (uint8_t)2;
6506 if (unlikely(ielen < 1)) {
6507 pDst->present = 0;
6508 return DOT11F_INCOMPLETE_IE;
6509 }
6510
6511 pDst->measurement_request.Beacon.meas_mode = *pBuf;
6512 pBuf += 1;
6513 ielen -= (uint8_t)1;
6514 if (unlikely(ielen < 6)) {
6515 pDst->present = 0;
6516 return DOT11F_INCOMPLETE_IE;
6517 }
6518
6519 DOT11F_MEMCPY(pCtx, pDst->measurement_request.Beacon.BSSID, pBuf, 6);
6520 pBuf += 6;
6521 ielen -= (uint8_t)6;
6522 status |= unpack_core(pCtx,
6523 pBuf,
6524 ielen,
6525 FFS_measurement_requestBeacon,
6526 IES_measurement_requestBeacon,
6527 (uint8_t *)pDst,
6528 sizeof(*pDst), append_ie);
6529 break;
6530 case 8:
6531 if (unlikely(ielen < 1)) {
6532 pDst->present = 0;
6533 return DOT11F_INCOMPLETE_IE;
6534 }
6535
6536 pDst->measurement_request.lci.loc_subject = *pBuf;
6537 pBuf += 1;
6538 ielen -= (uint8_t)1;
6539 status |= unpack_core(pCtx,
6540 pBuf,
6541 ielen,
6542 FFS_measurement_requestlci,
6543 IES_measurement_requestlci,
6544 (uint8_t *)pDst,
6545 sizeof(*pDst), append_ie);
6546 break;
6547 case 16:
6548 if (unlikely(ielen < 2)) {
6549 pDst->present = 0;
6550 return DOT11F_INCOMPLETE_IE;
6551 }
6552
6553 framesntohs(pCtx, &pDst->measurement_request.ftmrr.random_interval, pBuf, 0);
6554 pBuf += 2;
6555 ielen -= (uint8_t)2;
6556 if (unlikely(ielen < 1)) {
6557 pDst->present = 0;
6558 return DOT11F_INCOMPLETE_IE;
6559 }
6560
6561 pDst->measurement_request.ftmrr.min_ap_count = *pBuf;
6562 pBuf += 1;
6563 ielen -= (uint8_t)1;
6564 status |= unpack_core(pCtx,
6565 pBuf,
6566 ielen,
6567 FFS_measurement_requestftmrr,
6568 IES_measurement_requestftmrr,
6569 (uint8_t *)pDst,
6570 sizeof(*pDst), append_ie);
6571 break;
6572 case 7:
6573 if (unlikely(ielen < 6)) {
6574 pDst->present = 0;
6575 return DOT11F_INCOMPLETE_IE;
6576 }
6577
6578 DOT11F_MEMCPY(pCtx, pDst->measurement_request.sta_stats.peer_mac_addr, pBuf, 6);
6579 pBuf += 6;
6580 ielen -= (uint8_t)6;
6581 if (unlikely(ielen < 2)) {
6582 pDst->present = 0;
6583 return DOT11F_INCOMPLETE_IE;
6584 }
6585
6586 framesntohs(pCtx, &pDst->measurement_request.sta_stats.randomization, pBuf, 0);
6587 pBuf += 2;
6588 ielen -= (uint8_t)2;
6589 if (unlikely(ielen < 2)) {
6590 pDst->present = 0;
6591 return DOT11F_INCOMPLETE_IE;
6592 }
6593
6594 framesntohs(pCtx, &pDst->measurement_request.sta_stats.meas_duration, pBuf, 0);
6595 pBuf += 2;
6596 ielen -= (uint8_t)2;
6597 if (unlikely(ielen < 1)) {
6598 pDst->present = 0;
6599 return DOT11F_INCOMPLETE_IE;
6600 }
6601
6602 pDst->measurement_request.sta_stats.group_identity = *pBuf;
6603 pBuf += 1;
6604 ielen -= (uint8_t)1;
6605 break;
6606 }
6607 (void)pCtx;
6608 return status;
6609 } /* End dot11f_unpack_ie_measurement_request. */
6610
6611 #define SigIeMeasurementRequest (0x0048)
6612
6613
dot11f_unpack_ie_mobility_domain(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEMobilityDomain * pDst,bool append_ie)6614 uint32_t dot11f_unpack_ie_mobility_domain(tpAniSirGlobal pCtx,
6615 uint8_t *pBuf,
6616 uint8_t ielen,
6617 tDot11fIEMobilityDomain *pDst,
6618 bool append_ie)
6619 {
6620 uint32_t status = DOT11F_PARSE_SUCCESS;
6621 uint8_t tmp63__;
6622 (void) pBuf; (void)ielen; /* Shutup the compiler */
6623 if (pDst->present)
6624 return DOT11F_DUPLICATE_IE;
6625 pDst->present = 1;
6626 if (unlikely(ielen < 2)) {
6627 pDst->present = 0;
6628 return DOT11F_INCOMPLETE_IE;
6629 }
6630
6631 framesntohs(pCtx, &pDst->MDID, pBuf, 0);
6632 pBuf += 2;
6633 ielen -= (uint8_t)2;
6634 if (unlikely(ielen < 1)) {
6635 pDst->present = 0;
6636 return DOT11F_INCOMPLETE_IE;
6637 }
6638
6639 tmp63__ = *pBuf;
6640 pDst->overDSCap = tmp63__ >> 0 & 0x1;
6641 pDst->resourceReqCap = tmp63__ >> 1 & 0x1;
6642 pDst->reserved = tmp63__ >> 2 & 0x3f;
6643 (void)pCtx;
6644 return status;
6645 } /* End dot11f_unpack_ie_mobility_domain. */
6646
6647 #define SigIeMobilityDomain (0x0049)
6648
6649
6650 static const tFFDefn FFS_NeighborReport[] = {
6651 { NULL, 0, 0, 0,},
6652 };
6653
6654 static const tIEDefn IES_NeighborReport[] = {
6655 { offsetof(tDot11fIENeighborReport, TSFInfo), offsetof(tDot11fIETSFInfo,
6656 present), 0, "TSFInfo", 0, 6, 6, SigIeTSFInfo, {0, 0, 0, 0, 0},
6657 0, DOT11F_EID_TSFINFO, 0, 0, },
6658 { offsetof(tDot11fIENeighborReport, CondensedCountryStr),
6659 offsetof(tDot11fIECondensedCountryStr, present), 0, "CondensedCountryStr",
6660 0, 4, 4, SigIeCondensedCountryStr, {0, 0, 0, 0, 0},
6661 0, DOT11F_EID_CONDENSEDCOUNTRYSTR, 0, 0, },
6662 { offsetof(tDot11fIENeighborReport, MeasurementPilot),
6663 offsetof(tDot11fIEMeasurementPilot, present), 0, "MeasurementPilot",
6664 0, 3, 258, SigIeMeasurementPilot, {0, 0, 0, 0, 0},
6665 0, DOT11F_EID_MEASUREMENTPILOT, 0, 0, },
6666 { offsetof(tDot11fIENeighborReport, RRMEnabledCap),
6667 offsetof(tDot11fIERRMEnabledCap, present), 0, "RRMEnabledCap",
6668 0, 7, 7, SigIeRRMEnabledCap, {0, 0, 0, 0, 0},
6669 0, DOT11F_EID_RRMENABLEDCAP, 0, 0, },
6670 { offsetof(tDot11fIENeighborReport, MultiBssid),
6671 offsetof(tDot11fIEMultiBssid, present), 0, "MultiBssid",
6672 0, 3, 258, SigIeMultiBssid, {0, 0, 0, 0, 0},
6673 0, DOT11F_EID_MULTIBSSID, 0, 0, },
6674 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },
6675 };
6676
dot11f_unpack_ie_neighbor_report(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIENeighborReport * pDst,bool append_ie)6677 uint32_t dot11f_unpack_ie_neighbor_report(tpAniSirGlobal pCtx,
6678 uint8_t *pBuf,
6679 uint8_t ielen,
6680 tDot11fIENeighborReport *pDst,
6681 bool append_ie)
6682 {
6683 uint32_t status = DOT11F_PARSE_SUCCESS;
6684 uint8_t tmp64__;
6685 uint8_t tmp65__;
6686 (void) pBuf; (void)ielen; /* Shutup the compiler */
6687 if (pDst->present)
6688 return DOT11F_DUPLICATE_IE;
6689 pDst->present = 1;
6690 if (unlikely(ielen < 6)) {
6691 pDst->present = 0;
6692 return DOT11F_INCOMPLETE_IE;
6693 }
6694
6695 DOT11F_MEMCPY(pCtx, pDst->bssid, pBuf, 6);
6696 pBuf += 6;
6697 ielen -= (uint8_t)6;
6698 if (unlikely(ielen < 1)) {
6699 pDst->present = 0;
6700 return DOT11F_INCOMPLETE_IE;
6701 }
6702
6703 tmp64__ = *pBuf;
6704 pBuf += 1;
6705 ielen -= 1;
6706 pDst->APReachability = tmp64__ >> 0 & 0x3;
6707 pDst->Security = tmp64__ >> 2 & 0x1;
6708 pDst->KeyScope = tmp64__ >> 3 & 0x1;
6709 pDst->SpecMgmtCap = tmp64__ >> 4 & 0x1;
6710 pDst->QosCap = tmp64__ >> 5 & 0x1;
6711 pDst->apsd = tmp64__ >> 6 & 0x1;
6712 pDst->rrm = tmp64__ >> 7 & 0x1;
6713 if (unlikely(ielen < 1)) {
6714 pDst->present = 0;
6715 return DOT11F_INCOMPLETE_IE;
6716 }
6717
6718 tmp65__ = *pBuf;
6719 pBuf += 1;
6720 ielen -= 1;
6721 pDst->DelayedBA = tmp65__ >> 0 & 0x1;
6722 pDst->ImmBA = tmp65__ >> 1 & 0x1;
6723 pDst->MobilityDomain = tmp65__ >> 2 & 0x1;
6724 pDst->reserved = tmp65__ >> 3 & 0x1f;
6725 if (unlikely(ielen < 2)) {
6726 pDst->present = 0;
6727 return DOT11F_INCOMPLETE_IE;
6728 }
6729
6730 framesntohs(pCtx, &pDst->reserved1, pBuf, 0);
6731 pBuf += 2;
6732 ielen -= (uint8_t)2;
6733 if (unlikely(ielen < 1)) {
6734 pDst->present = 0;
6735 return DOT11F_INCOMPLETE_IE;
6736 }
6737
6738 pDst->regulatoryClass = *pBuf;
6739 pBuf += 1;
6740 ielen -= (uint8_t)1;
6741 if (unlikely(ielen < 1)) {
6742 pDst->present = 0;
6743 return DOT11F_INCOMPLETE_IE;
6744 }
6745
6746 pDst->channel = *pBuf;
6747 pBuf += 1;
6748 ielen -= (uint8_t)1;
6749 if (unlikely(ielen < 1)) {
6750 pDst->present = 0;
6751 return DOT11F_INCOMPLETE_IE;
6752 }
6753
6754 pDst->PhyType = *pBuf;
6755 pBuf += 1;
6756 ielen -= (uint8_t)1;
6757 (void)pCtx;
6758 status |= unpack_core(pCtx,
6759 pBuf,
6760 ielen,
6761 FFS_NeighborReport,
6762 IES_NeighborReport,
6763 (uint8_t *)pDst,
6764 sizeof(*pDst),
6765 append_ie);
6766 return status;
6767 } /* End dot11f_unpack_ie_neighbor_report. */
6768
6769 #define SigIeNeighborReport (0x004a)
6770
6771
dot11f_unpack_ie_obss_scan_parameters(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEOBSSScanParameters * pDst,bool append_ie)6772 uint32_t dot11f_unpack_ie_obss_scan_parameters(tpAniSirGlobal pCtx,
6773 uint8_t *pBuf,
6774 uint8_t ielen,
6775 tDot11fIEOBSSScanParameters *pDst,
6776 bool append_ie)
6777 {
6778 uint32_t status = DOT11F_PARSE_SUCCESS;
6779 (void) pBuf; (void)ielen; /* Shutup the compiler */
6780 if (pDst->present)
6781 return DOT11F_DUPLICATE_IE;
6782 pDst->present = 1;
6783 if (unlikely(ielen < 2)) {
6784 pDst->present = 0;
6785 return DOT11F_INCOMPLETE_IE;
6786 }
6787
6788 framesntohs(pCtx, &pDst->obssScanPassiveDwell, pBuf, 0);
6789 pBuf += 2;
6790 ielen -= (uint8_t)2;
6791 if (unlikely(ielen < 2)) {
6792 pDst->present = 0;
6793 return DOT11F_INCOMPLETE_IE;
6794 }
6795
6796 framesntohs(pCtx, &pDst->obssScanActiveDwell, pBuf, 0);
6797 pBuf += 2;
6798 ielen -= (uint8_t)2;
6799 if (unlikely(ielen < 2)) {
6800 pDst->present = 0;
6801 return DOT11F_INCOMPLETE_IE;
6802 }
6803
6804 framesntohs(pCtx, &pDst->bssChannelWidthTriggerScanInterval, pBuf, 0);
6805 pBuf += 2;
6806 ielen -= (uint8_t)2;
6807 if (unlikely(ielen < 2)) {
6808 pDst->present = 0;
6809 return DOT11F_INCOMPLETE_IE;
6810 }
6811
6812 framesntohs(pCtx, &pDst->obssScanPassiveTotalPerChannel, pBuf, 0);
6813 pBuf += 2;
6814 ielen -= (uint8_t)2;
6815 if (unlikely(ielen < 2)) {
6816 pDst->present = 0;
6817 return DOT11F_INCOMPLETE_IE;
6818 }
6819
6820 framesntohs(pCtx, &pDst->obssScanActiveTotalPerChannel, pBuf, 0);
6821 pBuf += 2;
6822 ielen -= (uint8_t)2;
6823 if (unlikely(ielen < 2)) {
6824 pDst->present = 0;
6825 return DOT11F_INCOMPLETE_IE;
6826 }
6827
6828 framesntohs(pCtx, &pDst->bssWidthChannelTransitionDelayFactor, pBuf, 0);
6829 pBuf += 2;
6830 ielen -= (uint8_t)2;
6831 if (unlikely(ielen < 2)) {
6832 pDst->present = 0;
6833 return DOT11F_INCOMPLETE_IE;
6834 }
6835
6836 framesntohs(pCtx, &pDst->obssScanActivityThreshold, pBuf, 0);
6837 (void)pCtx;
6838 return status;
6839 } /* End dot11f_unpack_ie_obss_scan_parameters. */
6840
6841 #define SigIeOBSSScanParameters (0x004b)
6842
6843
dot11f_unpack_ie_operating_mode(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEOperatingMode * pDst,bool append_ie)6844 uint32_t dot11f_unpack_ie_operating_mode(tpAniSirGlobal pCtx,
6845 uint8_t *pBuf,
6846 uint8_t ielen,
6847 tDot11fIEOperatingMode *pDst,
6848 bool append_ie)
6849 {
6850 uint32_t status = DOT11F_PARSE_SUCCESS;
6851 uint8_t tmp66__;
6852 (void) pBuf; (void)ielen; /* Shutup the compiler */
6853 if (pDst->present)
6854 return DOT11F_DUPLICATE_IE;
6855 pDst->present = 1;
6856 if (unlikely(ielen < 1)) {
6857 pDst->present = 0;
6858 return DOT11F_INCOMPLETE_IE;
6859 }
6860
6861 tmp66__ = *pBuf;
6862 pDst->chanWidth = tmp66__ >> 0 & 0x3;
6863 pDst->vht_160_80p80_supp = tmp66__ >> 2 & 0x1;
6864 pDst->no_ldpc = tmp66__ >> 3 & 0x1;
6865 pDst->rxNSS = tmp66__ >> 4 & 0x7;
6866 pDst->rxNSSType = tmp66__ >> 7 & 0x1;
6867 (void)pCtx;
6868 return status;
6869 } /* End dot11f_unpack_ie_operating_mode. */
6870
6871 #define SigIeOperatingMode (0x004c)
6872
6873
6874 static const tTLVDefn TLVS_P2PAssocReq[] = {
6875 { offsetof(tDot11fIEP2PAssocReq, P2PCapability),
6876 offsetof(tDot11fTLVP2PCapability, present), "P2PCapability",
6877 SigTlvP2PCapability, DOT11F_TLV_P2PCAPABILITY, 0, 5, 5, 1, 1, 2, 0, },
6878 { offsetof(tDot11fIEP2PAssocReq, ExtendedListenTiming),
6879 offsetof(tDot11fTLVExtendedListenTiming, present),
6880 "ExtendedListenTiming", SigTlvExtendedListenTiming,
6881 DOT11F_TLV_EXTENDEDLISTENTIMING, 0, 7, 7, 0, 1, 2, 0, },
6882 { offsetof(tDot11fIEP2PAssocReq, P2PDeviceInfo),
6883 offsetof(tDot11fTLVP2PDeviceInfo, present), "P2PDeviceInfo",
6884 SigTlvP2PDeviceInfo, DOT11F_TLV_P2PDEVICEINFO, 0, 19, 55, 1, 1, 2, 0, },
6885 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
6886 };
6887
dot11f_unpack_ie_p2_p_assoc_req(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEP2PAssocReq * pDst,bool append_ie)6888 uint32_t dot11f_unpack_ie_p2_p_assoc_req(tpAniSirGlobal pCtx,
6889 uint8_t *pBuf,
6890 uint8_t ielen,
6891 tDot11fIEP2PAssocReq *pDst,
6892 bool append_ie)
6893 {
6894 uint32_t status = DOT11F_PARSE_SUCCESS;
6895 (void)pBuf; (void)ielen; /* Shutup the compiler */
6896 pDst->present = 1;
6897 status = unpack_tlv_core(pCtx, pBuf, ielen,
6898 TLVS_P2PAssocReq,
6899 (uint8_t *)pDst, sizeof(*pDst));
6900 return status;
6901 } /* End dot11f_unpack_ie_p2_p_assoc_req. */
6902
6903 #define SigIeP2PAssocReq (0x004d)
6904
6905
6906 static const tTLVDefn TLVS_P2PAssocRes[] = {
6907 { offsetof(tDot11fIEP2PAssocRes, P2PStatus),
6908 offsetof(tDot11fTLVP2PStatus, present), "P2PStatus", SigTlvP2PStatus,
6909 DOT11F_TLV_P2PSTATUS, 0, 4, 4, 1, 1, 2, 0, },
6910 { offsetof(tDot11fIEP2PAssocRes, ExtendedListenTiming),
6911 offsetof(tDot11fTLVExtendedListenTiming, present),
6912 "ExtendedListenTiming", SigTlvExtendedListenTiming,
6913 DOT11F_TLV_EXTENDEDLISTENTIMING, 0, 7, 7, 0, 1, 2, 0, },
6914 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
6915 };
6916
dot11f_unpack_ie_p2_p_assoc_res(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEP2PAssocRes * pDst,bool append_ie)6917 uint32_t dot11f_unpack_ie_p2_p_assoc_res(tpAniSirGlobal pCtx,
6918 uint8_t *pBuf,
6919 uint8_t ielen,
6920 tDot11fIEP2PAssocRes *pDst,
6921 bool append_ie)
6922 {
6923 uint32_t status = DOT11F_PARSE_SUCCESS;
6924 (void)pBuf; (void)ielen; /* Shutup the compiler */
6925 pDst->present = 1;
6926 status = unpack_tlv_core(pCtx, pBuf, ielen,
6927 TLVS_P2PAssocRes,
6928 (uint8_t *)pDst, sizeof(*pDst));
6929 return status;
6930 } /* End dot11f_unpack_ie_p2_p_assoc_res. */
6931
6932 #define SigIeP2PAssocRes (0x004e)
6933
6934
6935 static const tTLVDefn TLVS_P2PBeacon[] = {
6936 { offsetof(tDot11fIEP2PBeacon, P2PCapability),
6937 offsetof(tDot11fTLVP2PCapability, present), "P2PCapability",
6938 SigTlvP2PCapability, DOT11F_TLV_P2PCAPABILITY, 0, 5, 5, 1, 1, 2, 0, },
6939 { offsetof(tDot11fIEP2PBeacon, P2PDeviceId),
6940 offsetof(tDot11fTLVP2PDeviceId, present), "P2PDeviceId",
6941 SigTlvP2PDeviceId, DOT11F_TLV_P2PDEVICEID, 0, 9, 9, 1, 1, 2, 0, },
6942 { offsetof(tDot11fIEP2PBeacon, NoticeOfAbsence),
6943 offsetof(tDot11fTLVNoticeOfAbsence, present), "NoticeOfAbsence",
6944 SigTlvNoticeOfAbsence, DOT11F_TLV_NOTICEOFABSENCE,
6945 0, 5, 41, 0, 1, 2, 0, },
6946 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
6947 };
6948
dot11f_unpack_ie_p2_p_beacon(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEP2PBeacon * pDst,bool append_ie)6949 uint32_t dot11f_unpack_ie_p2_p_beacon(tpAniSirGlobal pCtx,
6950 uint8_t *pBuf,
6951 uint8_t ielen,
6952 tDot11fIEP2PBeacon *pDst,
6953 bool append_ie)
6954 {
6955 uint32_t status = DOT11F_PARSE_SUCCESS;
6956 (void)pBuf; (void)ielen; /* Shutup the compiler */
6957 pDst->present = 1;
6958 status = unpack_tlv_core(pCtx, pBuf, ielen,
6959 TLVS_P2PBeacon,
6960 (uint8_t *)pDst, sizeof(*pDst));
6961 return status;
6962 } /* End dot11f_unpack_ie_p2_p_beacon. */
6963
6964 #define SigIeP2PBeacon (0x004f)
6965
6966
6967 static const tTLVDefn TLVS_P2PBeaconProbeRes[] = {
6968 { offsetof(tDot11fIEP2PBeaconProbeRes, P2PCapability),
6969 offsetof(tDot11fTLVP2PCapability, present), "P2PCapability",
6970 SigTlvP2PCapability, DOT11F_TLV_P2PCAPABILITY, 0, 5, 5, 0, 1, 2, 0, },
6971 { offsetof(tDot11fIEP2PBeaconProbeRes, P2PDeviceId),
6972 offsetof(tDot11fTLVP2PDeviceId, present), "P2PDeviceId",
6973 SigTlvP2PDeviceId, DOT11F_TLV_P2PDEVICEID, 0, 9, 9, 0, 1, 2, 0, },
6974 { offsetof(tDot11fIEP2PBeaconProbeRes, ExtendedListenTiming),
6975 offsetof(tDot11fTLVExtendedListenTiming, present),
6976 "ExtendedListenTiming", SigTlvExtendedListenTiming,
6977 DOT11F_TLV_EXTENDEDLISTENTIMING, 0, 7, 7, 0, 1, 2, 0, },
6978 { offsetof(tDot11fIEP2PBeaconProbeRes, NoticeOfAbsence),
6979 offsetof(tDot11fTLVNoticeOfAbsence, present), "NoticeOfAbsence",
6980 SigTlvNoticeOfAbsence, DOT11F_TLV_NOTICEOFABSENCE,
6981 0, 5, 41, 0, 1, 2, 0, },
6982 { offsetof(tDot11fIEP2PBeaconProbeRes, P2PDeviceInfo),
6983 offsetof(tDot11fTLVP2PDeviceInfo, present), "P2PDeviceInfo",
6984 SigTlvP2PDeviceInfo, DOT11F_TLV_P2PDEVICEINFO, 0, 19, 55, 0, 1, 2, 0, },
6985 { offsetof(tDot11fIEP2PBeaconProbeRes, P2PGroupInfo),
6986 offsetof(tDot11fTLVP2PGroupInfo, present), "P2PGroupInfo",
6987 SigTlvP2PGroupInfo, DOT11F_TLV_P2PGROUPINFO, 0, 3, 1027, 0, 1, 2, 0, },
6988 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
6989 };
6990
dot11f_unpack_ie_p2_p_beacon_probe_res(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEP2PBeaconProbeRes * pDst,bool append_ie)6991 uint32_t dot11f_unpack_ie_p2_p_beacon_probe_res(tpAniSirGlobal pCtx,
6992 uint8_t *pBuf,
6993 uint8_t ielen,
6994 tDot11fIEP2PBeaconProbeRes *pDst,
6995 bool append_ie)
6996 {
6997 uint32_t status = DOT11F_PARSE_SUCCESS;
6998 (void)pBuf; (void)ielen; /* Shutup the compiler */
6999 pDst->present = 1;
7000 status = unpack_tlv_core(pCtx, pBuf, ielen,
7001 TLVS_P2PBeaconProbeRes,
7002 (uint8_t *)pDst, sizeof(*pDst));
7003 return status;
7004 } /* End dot11f_unpack_ie_p2_p_beacon_probe_res. */
7005
7006 #define SigIeP2PBeaconProbeRes (0x0050)
7007
7008
7009 static const tTLVDefn TLVS_P2PDeAuth[] = {
7010 { offsetof(tDot11fIEP2PDeAuth, MinorReasonCode),
7011 offsetof(tDot11fTLVMinorReasonCode, present), "MinorReasonCode",
7012 SigTlvMinorReasonCode, DOT11F_TLV_MINORREASONCODE,
7013 0, 4, 4, 1, 1, 2, 0, },
7014 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
7015 };
7016
dot11f_unpack_ie_p2_p_de_auth(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEP2PDeAuth * pDst,bool append_ie)7017 uint32_t dot11f_unpack_ie_p2_p_de_auth(tpAniSirGlobal pCtx,
7018 uint8_t *pBuf,
7019 uint8_t ielen,
7020 tDot11fIEP2PDeAuth *pDst,
7021 bool append_ie)
7022 {
7023 uint32_t status = DOT11F_PARSE_SUCCESS;
7024 (void)pBuf; (void)ielen; /* Shutup the compiler */
7025 pDst->present = 1;
7026 status = unpack_tlv_core(pCtx, pBuf, ielen,
7027 TLVS_P2PDeAuth,
7028 (uint8_t *)pDst, sizeof(*pDst));
7029 return status;
7030 } /* End dot11f_unpack_ie_p2_p_de_auth. */
7031
7032 #define SigIeP2PDeAuth (0x0051)
7033
7034
7035 static const tTLVDefn TLVS_P2PDisAssoc[] = {
7036 { offsetof(tDot11fIEP2PDisAssoc, MinorReasonCode),
7037 offsetof(tDot11fTLVMinorReasonCode, present), "MinorReasonCode",
7038 SigTlvMinorReasonCode, DOT11F_TLV_MINORREASONCODE,
7039 0, 4, 4, 1, 1, 2, 0, },
7040 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
7041 };
7042
dot11f_unpack_ie_p2_p_dis_assoc(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEP2PDisAssoc * pDst,bool append_ie)7043 uint32_t dot11f_unpack_ie_p2_p_dis_assoc(tpAniSirGlobal pCtx,
7044 uint8_t *pBuf,
7045 uint8_t ielen,
7046 tDot11fIEP2PDisAssoc *pDst,
7047 bool append_ie)
7048 {
7049 uint32_t status = DOT11F_PARSE_SUCCESS;
7050 (void)pBuf; (void)ielen; /* Shutup the compiler */
7051 pDst->present = 1;
7052 status = unpack_tlv_core(pCtx, pBuf, ielen,
7053 TLVS_P2PDisAssoc,
7054 (uint8_t *)pDst, sizeof(*pDst));
7055 return status;
7056 } /* End dot11f_unpack_ie_p2_p_dis_assoc. */
7057
7058 #define SigIeP2PDisAssoc (0x0052)
7059
7060
dot11f_unpack_ie_p2_pie_opaque(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEP2PIEOpaque * pDst,bool append_ie)7061 uint32_t dot11f_unpack_ie_p2_pie_opaque(tpAniSirGlobal pCtx,
7062 uint8_t *pBuf,
7063 uint8_t ielen,
7064 tDot11fIEP2PIEOpaque *pDst,
7065 bool append_ie)
7066 {
7067 uint32_t status = DOT11F_PARSE_SUCCESS;
7068 (void) pBuf; (void)ielen; /* Shutup the compiler */
7069 if (pDst->present)
7070 return DOT11F_DUPLICATE_IE;
7071 pDst->present = 1;
7072 pDst->num_data = (uint8_t)(ielen);
7073 if (ielen > 249) {
7074 pDst->present = 0;
7075 return DOT11F_SKIPPED_BAD_IE;
7076 }
7077
7078 DOT11F_MEMCPY(pCtx, pDst->data, pBuf, (ielen));
7079 (void)pCtx;
7080 return status;
7081 } /* End dot11f_unpack_ie_p2_pie_opaque. */
7082
7083 #define SigIeP2PIEOpaque (0x0053)
7084
7085
7086 static const tTLVDefn TLVS_P2PProbeReq[] = {
7087 { offsetof(tDot11fIEP2PProbeReq, P2PCapability),
7088 offsetof(tDot11fTLVP2PCapability, present), "P2PCapability",
7089 SigTlvP2PCapability, DOT11F_TLV_P2PCAPABILITY, 0, 5, 5, 1, 1, 2, 0, },
7090 { offsetof(tDot11fIEP2PProbeReq, P2PDeviceId),
7091 offsetof(tDot11fTLVP2PDeviceId, present), "P2PDeviceId",
7092 SigTlvP2PDeviceId, DOT11F_TLV_P2PDEVICEID, 0, 9, 9, 0, 1, 2, 0, },
7093 { offsetof(tDot11fIEP2PProbeReq, ListenChannel),
7094 offsetof(tDot11fTLVListenChannel, present), "ListenChannel",
7095 SigTlvListenChannel, DOT11F_TLV_LISTENCHANNEL, 0, 8, 8, 1, 1, 2, 0, },
7096 { offsetof(tDot11fIEP2PProbeReq, ExtendedListenTiming),
7097 offsetof(tDot11fTLVExtendedListenTiming, present),
7098 "ExtendedListenTiming", SigTlvExtendedListenTiming,
7099 DOT11F_TLV_EXTENDEDLISTENTIMING, 0, 7, 7, 0, 1, 2, 0, },
7100 { offsetof(tDot11fIEP2PProbeReq, OperatingChannel),
7101 offsetof(tDot11fTLVOperatingChannel, present), "OperatingChannel",
7102 SigTlvOperatingChannel, DOT11F_TLV_OPERATINGCHANNEL,
7103 0, 8, 8, 0, 1, 2, 0, },
7104 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
7105 };
7106
dot11f_unpack_ie_p2_p_probe_req(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEP2PProbeReq * pDst,bool append_ie)7107 uint32_t dot11f_unpack_ie_p2_p_probe_req(tpAniSirGlobal pCtx,
7108 uint8_t *pBuf,
7109 uint8_t ielen,
7110 tDot11fIEP2PProbeReq *pDst,
7111 bool append_ie)
7112 {
7113 uint32_t status = DOT11F_PARSE_SUCCESS;
7114 (void)pBuf; (void)ielen; /* Shutup the compiler */
7115 pDst->present = 1;
7116 status = unpack_tlv_core(pCtx, pBuf, ielen,
7117 TLVS_P2PProbeReq,
7118 (uint8_t *)pDst, sizeof(*pDst));
7119 return status;
7120 } /* End dot11f_unpack_ie_p2_p_probe_req. */
7121
7122 #define SigIeP2PProbeReq (0x0054)
7123
7124
7125 static const tTLVDefn TLVS_P2PProbeRes[] = {
7126 { offsetof(tDot11fIEP2PProbeRes, P2PCapability),
7127 offsetof(tDot11fTLVP2PCapability, present), "P2PCapability",
7128 SigTlvP2PCapability, DOT11F_TLV_P2PCAPABILITY, 0, 5, 5, 1, 1, 2, 0, },
7129 { offsetof(tDot11fIEP2PProbeRes, ExtendedListenTiming),
7130 offsetof(tDot11fTLVExtendedListenTiming, present),
7131 "ExtendedListenTiming", SigTlvExtendedListenTiming,
7132 DOT11F_TLV_EXTENDEDLISTENTIMING, 0, 7, 7, 0, 1, 2, 0, },
7133 { offsetof(tDot11fIEP2PProbeRes, NoticeOfAbsence),
7134 offsetof(tDot11fTLVNoticeOfAbsence, present), "NoticeOfAbsence",
7135 SigTlvNoticeOfAbsence, DOT11F_TLV_NOTICEOFABSENCE,
7136 0, 5, 41, 0, 1, 2, 0, },
7137 { offsetof(tDot11fIEP2PProbeRes, P2PDeviceInfo),
7138 offsetof(tDot11fTLVP2PDeviceInfo, present), "P2PDeviceInfo",
7139 SigTlvP2PDeviceInfo, DOT11F_TLV_P2PDEVICEINFO, 0, 19, 55, 1, 1, 2, 0, },
7140 { offsetof(tDot11fIEP2PProbeRes, P2PGroupInfo),
7141 offsetof(tDot11fTLVP2PGroupInfo, present), "P2PGroupInfo",
7142 SigTlvP2PGroupInfo, DOT11F_TLV_P2PGROUPINFO, 0, 3, 1027, 0, 1, 2, 0, },
7143 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
7144 };
7145
dot11f_unpack_ie_p2_p_probe_res(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEP2PProbeRes * pDst,bool append_ie)7146 uint32_t dot11f_unpack_ie_p2_p_probe_res(tpAniSirGlobal pCtx,
7147 uint8_t *pBuf,
7148 uint8_t ielen,
7149 tDot11fIEP2PProbeRes *pDst,
7150 bool append_ie)
7151 {
7152 uint32_t status = DOT11F_PARSE_SUCCESS;
7153 (void)pBuf; (void)ielen; /* Shutup the compiler */
7154 pDst->present = 1;
7155 status = unpack_tlv_core(pCtx, pBuf, ielen,
7156 TLVS_P2PProbeRes,
7157 (uint8_t *)pDst, sizeof(*pDst));
7158 return status;
7159 } /* End dot11f_unpack_ie_p2_p_probe_res. */
7160
7161 #define SigIeP2PProbeRes (0x0055)
7162
7163
dot11f_unpack_ie_pti_control(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEPTIControl * pDst,bool append_ie)7164 uint32_t dot11f_unpack_ie_pti_control(tpAniSirGlobal pCtx,
7165 uint8_t *pBuf,
7166 uint8_t ielen,
7167 tDot11fIEPTIControl *pDst,
7168 bool append_ie)
7169 {
7170 uint32_t status = DOT11F_PARSE_SUCCESS;
7171 (void) pBuf; (void)ielen; /* Shutup the compiler */
7172 if (pDst->present)
7173 return DOT11F_DUPLICATE_IE;
7174 pDst->present = 1;
7175 if (unlikely(ielen < 1)) {
7176 pDst->present = 0;
7177 return DOT11F_INCOMPLETE_IE;
7178 }
7179
7180 pDst->tid = *pBuf;
7181 pBuf += 1;
7182 ielen -= (uint8_t)1;
7183 if (unlikely(ielen < 2)) {
7184 pDst->present = 0;
7185 return DOT11F_INCOMPLETE_IE;
7186 }
7187
7188 framesntohs(pCtx, &pDst->sequence_control, pBuf, 0);
7189 (void)pCtx;
7190 return status;
7191 } /* End dot11f_unpack_ie_pti_control. */
7192
7193 #define SigIePTIControl (0x0056)
7194
7195
dot11f_unpack_ie_pu_buffer_status(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEPUBufferStatus * pDst,bool append_ie)7196 uint32_t dot11f_unpack_ie_pu_buffer_status(tpAniSirGlobal pCtx,
7197 uint8_t *pBuf,
7198 uint8_t ielen,
7199 tDot11fIEPUBufferStatus *pDst,
7200 bool append_ie)
7201 {
7202 uint32_t status = DOT11F_PARSE_SUCCESS;
7203 uint8_t tmp67__;
7204 (void) pBuf; (void)ielen; /* Shutup the compiler */
7205 if (pDst->present)
7206 return DOT11F_DUPLICATE_IE;
7207 pDst->present = 1;
7208 if (unlikely(ielen < 1)) {
7209 pDst->present = 0;
7210 return DOT11F_INCOMPLETE_IE;
7211 }
7212
7213 tmp67__ = *pBuf;
7214 pDst->ac_bk_traffic_aval = tmp67__ >> 0 & 0x1;
7215 pDst->ac_be_traffic_aval = tmp67__ >> 1 & 0x1;
7216 pDst->ac_vi_traffic_aval = tmp67__ >> 2 & 0x1;
7217 pDst->ac_vo_traffic_aval = tmp67__ >> 3 & 0x1;
7218 pDst->reserved = tmp67__ >> 4 & 0xf;
7219 (void)pCtx;
7220 return status;
7221 } /* End dot11f_unpack_ie_pu_buffer_status. */
7222
7223 #define SigIePUBufferStatus (0x0057)
7224
7225
dot11f_unpack_ie_power_caps(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEPowerCaps * pDst,bool append_ie)7226 uint32_t dot11f_unpack_ie_power_caps(tpAniSirGlobal pCtx,
7227 uint8_t *pBuf,
7228 uint8_t ielen,
7229 tDot11fIEPowerCaps *pDst,
7230 bool append_ie)
7231 {
7232 uint32_t status = DOT11F_PARSE_SUCCESS;
7233 (void) pBuf; (void)ielen; /* Shutup the compiler */
7234 if (pDst->present)
7235 return DOT11F_DUPLICATE_IE;
7236 pDst->present = 1;
7237 if (unlikely(ielen < 1)) {
7238 pDst->present = 0;
7239 return DOT11F_INCOMPLETE_IE;
7240 }
7241
7242 pDst->minTxPower = *pBuf;
7243 pBuf += 1;
7244 ielen -= (uint8_t)1;
7245 if (unlikely(ielen < 1)) {
7246 pDst->present = 0;
7247 return DOT11F_INCOMPLETE_IE;
7248 }
7249
7250 pDst->maxTxPower = *pBuf;
7251 (void)pCtx;
7252 return status;
7253 } /* End dot11f_unpack_ie_power_caps. */
7254
7255 #define SigIePowerCaps (0x0058)
7256
7257
dot11f_unpack_ie_power_constraints(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEPowerConstraints * pDst,bool append_ie)7258 uint32_t dot11f_unpack_ie_power_constraints(tpAniSirGlobal pCtx,
7259 uint8_t *pBuf,
7260 uint8_t ielen,
7261 tDot11fIEPowerConstraints *pDst,
7262 bool append_ie)
7263 {
7264 uint32_t status = DOT11F_PARSE_SUCCESS;
7265 (void) pBuf; (void)ielen; /* Shutup the compiler */
7266 if (pDst->present)
7267 return DOT11F_DUPLICATE_IE;
7268 pDst->present = 1;
7269 if (unlikely(ielen < 1)) {
7270 pDst->present = 0;
7271 return DOT11F_INCOMPLETE_IE;
7272 }
7273
7274 pDst->localPowerConstraints = *pBuf;
7275 (void)pCtx;
7276 return status;
7277 } /* End dot11f_unpack_ie_power_constraints. */
7278
7279 #define SigIePowerConstraints (0x0059)
7280
7281
dot11f_unpack_ie_qbss_load(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEQBSSLoad * pDst,bool append_ie)7282 uint32_t dot11f_unpack_ie_qbss_load(tpAniSirGlobal pCtx,
7283 uint8_t *pBuf,
7284 uint8_t ielen,
7285 tDot11fIEQBSSLoad *pDst,
7286 bool append_ie)
7287 {
7288 uint32_t status = DOT11F_PARSE_SUCCESS;
7289 (void) pBuf; (void)ielen; /* Shutup the compiler */
7290 if (pDst->present)
7291 return DOT11F_DUPLICATE_IE;
7292 pDst->present = 1;
7293 if (unlikely(ielen < 2)) {
7294 pDst->present = 0;
7295 return DOT11F_INCOMPLETE_IE;
7296 }
7297
7298 framesntohs(pCtx, &pDst->stacount, pBuf, 0);
7299 pBuf += 2;
7300 ielen -= (uint8_t)2;
7301 if (unlikely(ielen < 1)) {
7302 pDst->present = 0;
7303 return DOT11F_INCOMPLETE_IE;
7304 }
7305
7306 pDst->chautil = *pBuf;
7307 pBuf += 1;
7308 ielen -= (uint8_t)1;
7309 if (unlikely(ielen < 2)) {
7310 pDst->present = 0;
7311 return DOT11F_INCOMPLETE_IE;
7312 }
7313
7314 framesntohs(pCtx, &pDst->avail, pBuf, 0);
7315 (void)pCtx;
7316 return status;
7317 } /* End dot11f_unpack_ie_qbss_load. */
7318
7319 #define SigIeQBSSLoad (0x005a)
7320
7321
dot11f_unpack_ie_QComVendorIE(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEQComVendorIE * pDst,bool append_ie)7322 uint32_t dot11f_unpack_ie_QComVendorIE(tpAniSirGlobal pCtx,
7323 uint8_t *pBuf,
7324 uint8_t ielen,
7325 tDot11fIEQComVendorIE *pDst,
7326 bool append_ie)
7327 {
7328 uint32_t status = DOT11F_PARSE_SUCCESS;
7329 (void) pBuf; (void)ielen; /* Shutup the compiler */
7330 if (pDst->present)
7331 return DOT11F_DUPLICATE_IE;
7332 pDst->present = 1;
7333 if (unlikely(ielen < 1)) {
7334 pDst->present = 0;
7335 return DOT11F_INCOMPLETE_IE;
7336 }
7337
7338 pDst->type = *pBuf;
7339 pBuf += 1;
7340 ielen -= (uint8_t)1;
7341 if (unlikely(ielen < 1)) {
7342 pDst->present = 0;
7343 return DOT11F_INCOMPLETE_IE;
7344 }
7345
7346 pDst->channel = *pBuf;
7347 (void)pCtx;
7348 return status;
7349 } /* End dot11f_unpack_ie_QComVendorIE. */
7350
7351 #define SigIeQComVendorIE (0x005b)
7352
7353
dot11f_unpack_ie_qos_caps_ap(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEQOSCapsAp * pDst,bool append_ie)7354 uint32_t dot11f_unpack_ie_qos_caps_ap(tpAniSirGlobal pCtx,
7355 uint8_t *pBuf,
7356 uint8_t ielen,
7357 tDot11fIEQOSCapsAp *pDst,
7358 bool append_ie)
7359 {
7360 uint32_t status = DOT11F_PARSE_SUCCESS;
7361 uint8_t tmp68__;
7362 (void) pBuf; (void)ielen; /* Shutup the compiler */
7363 if (pDst->present)
7364 return DOT11F_DUPLICATE_IE;
7365 pDst->present = 1;
7366 if (unlikely(ielen < 1)) {
7367 pDst->present = 0;
7368 return DOT11F_INCOMPLETE_IE;
7369 }
7370
7371 tmp68__ = *pBuf;
7372 pDst->count = tmp68__ >> 0 & 0xf;
7373 pDst->qack = tmp68__ >> 4 & 0x1;
7374 pDst->qreq = tmp68__ >> 5 & 0x1;
7375 pDst->txopreq = tmp68__ >> 6 & 0x1;
7376 pDst->reserved = tmp68__ >> 7 & 0x1;
7377 (void)pCtx;
7378 return status;
7379 } /* End dot11f_unpack_ie_qos_caps_ap. */
7380
7381 #define SigIeQOSCapsAp (0x005c)
7382
7383
dot11f_unpack_ie_qos_caps_station(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEQOSCapsStation * pDst,bool append_ie)7384 uint32_t dot11f_unpack_ie_qos_caps_station(tpAniSirGlobal pCtx,
7385 uint8_t *pBuf,
7386 uint8_t ielen,
7387 tDot11fIEQOSCapsStation *pDst,
7388 bool append_ie)
7389 {
7390 uint32_t status = DOT11F_PARSE_SUCCESS;
7391 uint8_t tmp69__;
7392 (void) pBuf; (void)ielen; /* Shutup the compiler */
7393 if (pDst->present)
7394 return DOT11F_DUPLICATE_IE;
7395 pDst->present = 1;
7396 if (unlikely(ielen < 1)) {
7397 pDst->present = 0;
7398 return DOT11F_INCOMPLETE_IE;
7399 }
7400
7401 tmp69__ = *pBuf;
7402 pDst->acvo_uapsd = tmp69__ >> 0 & 0x1;
7403 pDst->acvi_uapsd = tmp69__ >> 1 & 0x1;
7404 pDst->acbk_uapsd = tmp69__ >> 2 & 0x1;
7405 pDst->acbe_uapsd = tmp69__ >> 3 & 0x1;
7406 pDst->qack = tmp69__ >> 4 & 0x1;
7407 pDst->max_sp_length = tmp69__ >> 5 & 0x3;
7408 pDst->more_data_ack = tmp69__ >> 7 & 0x1;
7409 (void)pCtx;
7410 return status;
7411 } /* End dot11f_unpack_ie_qos_caps_station. */
7412
7413 #define SigIeQOSCapsStation (0x005d)
7414
7415
dot11f_unpack_ie_qos_map_set(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEQosMapSet * pDst,bool append_ie)7416 uint32_t dot11f_unpack_ie_qos_map_set(tpAniSirGlobal pCtx,
7417 uint8_t *pBuf,
7418 uint8_t ielen,
7419 tDot11fIEQosMapSet *pDst,
7420 bool append_ie)
7421 {
7422 uint32_t status = DOT11F_PARSE_SUCCESS;
7423 (void) pBuf; (void)ielen; /* Shutup the compiler */
7424 if (pDst->present)
7425 return DOT11F_DUPLICATE_IE;
7426 pDst->present = 1;
7427 pDst->num_dscp_exceptions = (uint8_t)(ielen);
7428 if (ielen > 58) {
7429 pDst->present = 0;
7430 return DOT11F_SKIPPED_BAD_IE;
7431 }
7432
7433 DOT11F_MEMCPY(pCtx, pDst->dscp_exceptions, pBuf, (ielen));
7434 (void)pCtx;
7435 return status;
7436 } /* End dot11f_unpack_ie_qos_map_set. */
7437
7438 #define SigIeQosMapSet (0x005e)
7439
7440
dot11f_unpack_ie_quiet(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEQuiet * pDst,bool append_ie)7441 uint32_t dot11f_unpack_ie_quiet(tpAniSirGlobal pCtx,
7442 uint8_t *pBuf,
7443 uint8_t ielen,
7444 tDot11fIEQuiet *pDst,
7445 bool append_ie)
7446 {
7447 uint32_t status = DOT11F_PARSE_SUCCESS;
7448 (void) pBuf; (void)ielen; /* Shutup the compiler */
7449 if (pDst->present)
7450 return DOT11F_DUPLICATE_IE;
7451 pDst->present = 1;
7452 if (unlikely(ielen < 1)) {
7453 pDst->present = 0;
7454 return DOT11F_INCOMPLETE_IE;
7455 }
7456
7457 pDst->count = *pBuf;
7458 pBuf += 1;
7459 ielen -= (uint8_t)1;
7460 if (unlikely(ielen < 1)) {
7461 pDst->present = 0;
7462 return DOT11F_INCOMPLETE_IE;
7463 }
7464
7465 pDst->period = *pBuf;
7466 pBuf += 1;
7467 ielen -= (uint8_t)1;
7468 if (unlikely(ielen < 2)) {
7469 pDst->present = 0;
7470 return DOT11F_INCOMPLETE_IE;
7471 }
7472
7473 framesntohs(pCtx, &pDst->duration, pBuf, 0);
7474 pBuf += 2;
7475 ielen -= (uint8_t)2;
7476 if (unlikely(ielen < 2)) {
7477 pDst->present = 0;
7478 return DOT11F_INCOMPLETE_IE;
7479 }
7480
7481 framesntohs(pCtx, &pDst->offset, pBuf, 0);
7482 (void)pCtx;
7483 return status;
7484 } /* End dot11f_unpack_ie_quiet. */
7485
7486 #define SigIeQuiet (0x005f)
7487
7488
dot11f_unpack_ie_rcpiie(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIERCPIIE * pDst,bool append_ie)7489 uint32_t dot11f_unpack_ie_rcpiie(tpAniSirGlobal pCtx,
7490 uint8_t *pBuf,
7491 uint8_t ielen,
7492 tDot11fIERCPIIE *pDst,
7493 bool append_ie)
7494 {
7495 uint32_t status = DOT11F_PARSE_SUCCESS;
7496 (void) pBuf; (void)ielen; /* Shutup the compiler */
7497 if (pDst->present)
7498 return DOT11F_DUPLICATE_IE;
7499 pDst->present = 1;
7500 if (unlikely(ielen < 1)) {
7501 pDst->present = 0;
7502 return DOT11F_INCOMPLETE_IE;
7503 }
7504
7505 pDst->rcpi = *pBuf;
7506 (void)pCtx;
7507 return status;
7508 } /* End dot11f_unpack_ie_rcpiie. */
7509
7510 #define SigIeRCPIIE (0x0060)
7511
7512
7513 static const tFFDefn FFS_RICDataDesc[] = {
7514 { NULL, 0, 0, 0,},
7515 };
7516
7517 static const tIEDefn IES_RICDataDesc[] = {
7518 { offsetof(tDot11fIERICDataDesc, RICData), offsetof(tDot11fIERICData,
7519 present), 0, "RICData", 0, 6, 6, SigIeRICData, {0, 0, 0, 0, 0},
7520 0, DOT11F_EID_RICDATA, 0, 1, },
7521 { offsetof(tDot11fIERICDataDesc, RICDescriptor),
7522 offsetof(tDot11fIERICDescriptor, present), 0, "RICDescriptor",
7523 0, 3, 258, SigIeRICDescriptor, {0, 0, 0, 0, 0},
7524 0, DOT11F_EID_RICDESCRIPTOR, 0, 0, },
7525 { offsetof(tDot11fIERICDataDesc, TSPEC), offsetof(tDot11fIETSPEC,
7526 present), 0, "TSPEC", 0, 57, 57, SigIeTSPEC, {0, 0, 0, 0, 0},
7527 0, DOT11F_EID_TSPEC, 0, 0, },
7528 { offsetof(tDot11fIERICDataDesc, TCLAS), offsetof(tDot11fIETCLAS,
7529 present), offsetof(tDot11fIERICDataDesc, num_TCLAS), "TCLAS",
7530 2, 7, 45, SigIeTCLAS, {0, 0, 0, 0, 0}, 0, DOT11F_EID_TCLAS, 0, 0, },
7531 { offsetof(tDot11fIERICDataDesc, TCLASSPROC),
7532 offsetof(tDot11fIETCLASSPROC, present), 0, "TCLASSPROC",
7533 0, 3, 3, SigIeTCLASSPROC, {0, 0, 0, 0, 0},
7534 0, DOT11F_EID_TCLASSPROC, 0, 0, },
7535 { offsetof(tDot11fIERICDataDesc, TSDelay), offsetof(tDot11fIETSDelay,
7536 present), 0, "TSDelay", 0, 6, 6, SigIeTSDelay, {0, 0, 0, 0, 0},
7537 0, DOT11F_EID_TSDELAY, 0, 0, },
7538 { offsetof(tDot11fIERICDataDesc, Schedule), offsetof(tDot11fIESchedule,
7539 present), 0, "Schedule", 0, 16, 16, SigIeSchedule, {0, 0, 0, 0, 0},
7540 0, DOT11F_EID_SCHEDULE, 0, 0, },
7541 { offsetof(tDot11fIERICDataDesc, WMMTSPEC), offsetof(tDot11fIEWMMTSPEC,
7542 present), 0, "WMMTSPEC", 0, 63, 63, SigIeWMMTSPEC, {0, 80, 242, 2, 2},
7543 5, DOT11F_EID_WMMTSPEC, 0, 0, },
7544 { offsetof(tDot11fIERICDataDesc, WMMTCLAS), offsetof(tDot11fIEWMMTCLAS,
7545 present), offsetof(tDot11fIERICDataDesc, num_WMMTCLAS), "WMMTCLAS",
7546 2, 13, 51, SigIeWMMTCLAS, {0, 80, 242, 2, 6},
7547 5, DOT11F_EID_WMMTCLAS, 0, 0, },
7548 { offsetof(tDot11fIERICDataDesc, WMMTCLASPROC),
7549 offsetof(tDot11fIEWMMTCLASPROC, present), 0, "WMMTCLASPROC",
7550 0, 9, 9, SigIeWMMTCLASPROC, {0, 80, 242, 2, 7},
7551 5, DOT11F_EID_WMMTCLASPROC, 0, 0, },
7552 { offsetof(tDot11fIERICDataDesc, WMMTSDelay),
7553 offsetof(tDot11fIEWMMTSDelay, present), 0, "WMMTSDelay",
7554 0, 12, 12, SigIeWMMTSDelay, {0, 80, 242, 2, 8},
7555 5, DOT11F_EID_WMMTSDELAY, 0, 0, },
7556 { offsetof(tDot11fIERICDataDesc, WMMSchedule),
7557 offsetof(tDot11fIEWMMSchedule, present), 0, "WMMSchedule",
7558 0, 22, 22, SigIeWMMSchedule, {0, 80, 242, 2, 9},
7559 5, DOT11F_EID_WMMSCHEDULE, 0, 0, },
7560 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },
7561 };
7562
dot11f_unpack_ie_ric_data_desc(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIERICDataDesc * pDst,bool append_ie)7563 uint32_t dot11f_unpack_ie_ric_data_desc(tpAniSirGlobal pCtx,
7564 uint8_t *pBuf,
7565 uint8_t ielen,
7566 tDot11fIERICDataDesc *pDst,
7567 bool append_ie)
7568 {
7569 uint32_t status = DOT11F_PARSE_SUCCESS;
7570 (void) pBuf; (void)ielen; /* Shutup the compiler */
7571 if (pDst->present)
7572 return DOT11F_DUPLICATE_IE;
7573 pDst->present = 1;
7574 (void)pCtx;
7575 status |= unpack_core(pCtx,
7576 pBuf,
7577 ielen,
7578 FFS_RICDataDesc,
7579 IES_RICDataDesc,
7580 (uint8_t *)pDst,
7581 sizeof(*pDst),
7582 append_ie);
7583 return status;
7584 } /* End dot11f_unpack_ie_ric_data_desc. */
7585
7586 #define SigIeRICDataDesc (0x0061)
7587
7588
dot11f_unpack_ie_rsn(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIERSN * pDst,bool append_ie)7589 uint32_t dot11f_unpack_ie_rsn(tpAniSirGlobal pCtx,
7590 uint8_t *pBuf,
7591 uint8_t ielen,
7592 tDot11fIERSN *pDst,
7593 bool append_ie)
7594 {
7595 uint32_t status = DOT11F_PARSE_SUCCESS;
7596 uint8_t def_cipher_suite[4] = {0x00, 0x0f, 0xac, 0x04};
7597 uint8_t def_akm_suite[4] = {0x00, 0x0f, 0xac, 0x01};
7598
7599 (void) pBuf; (void)ielen; /* Shutup the compiler */
7600 if (pDst->present)
7601 return DOT11F_DUPLICATE_IE;
7602 pDst->present = 1;
7603 if (unlikely(ielen < 2)) {
7604 pDst->present = 0;
7605 return DOT11F_INCOMPLETE_IE;
7606 }
7607
7608 framesntohs(pCtx, &pDst->version, pBuf, 0);
7609 pBuf += 2;
7610 ielen -= (uint8_t)2;
7611 if (pDst->version != 0x1) {
7612 pDst->present = 0;
7613 return status | DOT11F_BAD_FIXED_VALUE;
7614 }
7615 if (!ielen) {
7616 pDst->RSN_Cap_present = 0U;
7617 pDst->gp_mgmt_cipher_suite_present = 0U;
7618 pDst->gp_cipher_suite_present = 1;
7619 DOT11F_MEMCPY(pCtx, pDst->gp_cipher_suite, def_cipher_suite, 4);
7620 pDst->pwise_cipher_suite_count = 1;
7621 DOT11F_MEMCPY(pCtx,
7622 pDst->pwise_cipher_suites, def_cipher_suite, 4);
7623 pDst->akm_suite_cnt = 1;
7624 DOT11F_MEMCPY(pCtx, pDst->akm_suite, def_akm_suite, 4);
7625 pDst->pmkid_count = 0U;
7626 return 0U;
7627 } else {
7628 pDst->gp_cipher_suite_present = 1;
7629 if (unlikely(ielen < 4)) {
7630 pDst->present = 0;
7631 return DOT11F_INCOMPLETE_IE;
7632 }
7633
7634 DOT11F_MEMCPY(pCtx, pDst->gp_cipher_suite, pBuf, 4);
7635 pBuf += 4;
7636 ielen -= (uint8_t)4;
7637 }
7638 if (!ielen) {
7639 pDst->RSN_Cap_present = 0U;
7640 pDst->gp_mgmt_cipher_suite_present = 0U;
7641 pDst->pwise_cipher_suite_count = 1;
7642 DOT11F_MEMCPY(pCtx,
7643 pDst->pwise_cipher_suites, def_cipher_suite, 4);
7644 pDst->akm_suite_cnt = 1;
7645 DOT11F_MEMCPY(pCtx, pDst->akm_suite, def_akm_suite, 4);
7646 pDst->pmkid_count = 0U;
7647 return 0U;
7648 } else {
7649 if (unlikely(ielen < 2)) {
7650 pDst->present = 0;
7651 return DOT11F_INCOMPLETE_IE;
7652 }
7653
7654 framesntohs(pCtx, &pDst->pwise_cipher_suite_count, pBuf, 0);
7655 pBuf += 2;
7656 ielen -= (uint8_t)2;
7657 }
7658 if (unlikely(ielen < pDst->pwise_cipher_suite_count * 4)) {
7659 pDst->present = 0;
7660 return DOT11F_INCOMPLETE_IE;
7661 }
7662
7663 if (!pDst->pwise_cipher_suite_count ||
7664 pDst->pwise_cipher_suite_count > 6) {
7665 pDst->present = 0;
7666 return DOT11F_SKIPPED_BAD_IE;
7667 }
7668
7669 DOT11F_MEMCPY(pCtx, pDst->pwise_cipher_suites, pBuf, (pDst->pwise_cipher_suite_count * 4));
7670 pBuf += (pDst->pwise_cipher_suite_count * 4);
7671 ielen -= (pDst->pwise_cipher_suite_count * 4);
7672 if (!ielen) {
7673 pDst->RSN_Cap_present = 0U;
7674 pDst->gp_mgmt_cipher_suite_present = 0U;
7675 pDst->akm_suite_cnt = 1;
7676 DOT11F_MEMCPY(pCtx, pDst->akm_suite, def_akm_suite, 4);
7677 pDst->pmkid_count = 0U;
7678 return 0U;
7679 } else {
7680 if (unlikely(ielen < 2)) {
7681 pDst->present = 0;
7682 return DOT11F_INCOMPLETE_IE;
7683 }
7684
7685 framesntohs(pCtx, &pDst->akm_suite_cnt, pBuf, 0);
7686 pBuf += 2;
7687 ielen -= (uint8_t)2;
7688 }
7689 if (unlikely(ielen < pDst->akm_suite_cnt * 4)) {
7690 pDst->present = 0;
7691 return DOT11F_INCOMPLETE_IE;
7692 }
7693
7694 if (!pDst->akm_suite_cnt ||
7695 pDst->akm_suite_cnt > 6) {
7696 pDst->present = 0;
7697 return DOT11F_SKIPPED_BAD_IE;
7698 }
7699
7700 DOT11F_MEMCPY(pCtx, pDst->akm_suite, pBuf, (pDst->akm_suite_cnt * 4));
7701 pBuf += (pDst->akm_suite_cnt * 4);
7702 ielen -= (pDst->akm_suite_cnt * 4);
7703 if (!ielen) {
7704 pDst->RSN_Cap_present = 0U;
7705 pDst->gp_mgmt_cipher_suite_present = 0U;
7706 pDst->pmkid_count = 0U;
7707 return 0U;
7708 } else {
7709 pDst->RSN_Cap_present = 1;
7710 if (unlikely(ielen < 2)) {
7711 pDst->present = 0;
7712 return DOT11F_INCOMPLETE_IE;
7713 }
7714
7715 DOT11F_MEMCPY(pCtx, pDst->RSN_Cap, pBuf, 2);
7716 pBuf += 2;
7717 ielen -= (uint8_t)2;
7718 }
7719 if (!ielen) {
7720 pDst->gp_mgmt_cipher_suite_present = 0U;
7721 pDst->pmkid_count = 0U;
7722 return 0U;
7723 } else {
7724 if (unlikely(ielen < 2)) {
7725 pDst->present = 0;
7726 return DOT11F_INCOMPLETE_IE;
7727 }
7728
7729 framesntohs(pCtx, &pDst->pmkid_count, pBuf, 0);
7730 pBuf += 2;
7731 ielen -= (uint8_t)2;
7732 }
7733 if (unlikely(ielen < pDst->pmkid_count * 16)) {
7734 pDst->present = 0;
7735 return DOT11F_INCOMPLETE_IE;
7736 }
7737
7738 if (pDst->pmkid_count > 4) {
7739 pDst->present = 0;
7740 return DOT11F_SKIPPED_BAD_IE;
7741 }
7742
7743 DOT11F_MEMCPY(pCtx, pDst->pmkid, pBuf, (pDst->pmkid_count * 16));
7744 pBuf += (pDst->pmkid_count * 16);
7745 ielen -= (pDst->pmkid_count * 16);
7746 if (!ielen) {
7747 return 0U;
7748 } else {
7749 pDst->gp_mgmt_cipher_suite_present = 1;
7750 if (unlikely(ielen < 4)) {
7751 pDst->present = 0;
7752 return DOT11F_INCOMPLETE_IE;
7753 }
7754
7755 DOT11F_MEMCPY(pCtx, pDst->gp_mgmt_cipher_suite, pBuf, 4);
7756 }
7757 (void)pCtx;
7758 return status;
7759 } /* End dot11f_unpack_ie_rsn. */
7760
7761 #define SigIeRSN (0x0062)
7762
7763
dot11f_unpack_ie_rsniie(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIERSNIIE * pDst,bool append_ie)7764 uint32_t dot11f_unpack_ie_rsniie(tpAniSirGlobal pCtx,
7765 uint8_t *pBuf,
7766 uint8_t ielen,
7767 tDot11fIERSNIIE *pDst,
7768 bool append_ie)
7769 {
7770 uint32_t status = DOT11F_PARSE_SUCCESS;
7771 (void) pBuf; (void)ielen; /* Shutup the compiler */
7772 if (pDst->present)
7773 return DOT11F_DUPLICATE_IE;
7774 pDst->present = 1;
7775 if (unlikely(ielen < 1)) {
7776 pDst->present = 0;
7777 return DOT11F_INCOMPLETE_IE;
7778 }
7779
7780 pDst->rsni = *pBuf;
7781 (void)pCtx;
7782 return status;
7783 } /* End dot11f_unpack_ie_rsniie. */
7784
7785 #define SigIeRSNIIE (0x0063)
7786
7787
dot11f_unpack_ie_rsn_opaque(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIERSNOpaque * pDst,bool append_ie)7788 uint32_t dot11f_unpack_ie_rsn_opaque(tpAniSirGlobal pCtx,
7789 uint8_t *pBuf,
7790 uint8_t ielen,
7791 tDot11fIERSNOpaque *pDst,
7792 bool append_ie)
7793 {
7794 uint32_t status = DOT11F_PARSE_SUCCESS;
7795 (void) pBuf; (void)ielen; /* Shutup the compiler */
7796 if (pDst->present)
7797 return DOT11F_DUPLICATE_IE;
7798 pDst->present = 1;
7799 pDst->num_data = (uint8_t)(ielen);
7800 if (ielen > 253) {
7801 pDst->present = 0;
7802 return DOT11F_SKIPPED_BAD_IE;
7803 }
7804
7805 DOT11F_MEMCPY(pCtx, pDst->data, pBuf, (ielen));
7806 (void)pCtx;
7807 return status;
7808 } /* End dot11f_unpack_ie_rsn_opaque. */
7809
7810 #define SigIeRSNOpaque (0x0064)
7811
7812
dot11f_unpack_ie_supp_channels(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIESuppChannels * pDst,bool append_ie)7813 uint32_t dot11f_unpack_ie_supp_channels(tpAniSirGlobal pCtx,
7814 uint8_t *pBuf,
7815 uint8_t ielen,
7816 tDot11fIESuppChannels *pDst,
7817 bool append_ie)
7818 {
7819 uint32_t status = DOT11F_PARSE_SUCCESS;
7820 (void) pBuf; (void)ielen; /* Shutup the compiler */
7821 if (pDst->present)
7822 return DOT11F_DUPLICATE_IE;
7823 pDst->present = 1;
7824 pDst->num_bands = (uint8_t)(ielen / 2);
7825 if (ielen > 48 * 2) {
7826 pDst->present = 0;
7827 return DOT11F_SKIPPED_BAD_IE;
7828 }
7829
7830 DOT11F_MEMCPY(pCtx, pDst->bands, pBuf, (ielen));
7831 (void)pCtx;
7832 return status;
7833 } /* End dot11f_unpack_ie_supp_channels. */
7834
7835 #define SigIeSuppChannels (0x0065)
7836
7837
dot11f_unpack_ie_supp_operating_classes(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIESuppOperatingClasses * pDst,bool append_ie)7838 uint32_t dot11f_unpack_ie_supp_operating_classes(tpAniSirGlobal pCtx,
7839 uint8_t *pBuf,
7840 uint8_t ielen,
7841 tDot11fIESuppOperatingClasses *pDst,
7842 bool append_ie)
7843 {
7844 uint32_t status = DOT11F_PARSE_SUCCESS;
7845 (void) pBuf; (void)ielen; /* Shutup the compiler */
7846 if (pDst->present)
7847 return DOT11F_DUPLICATE_IE;
7848 pDst->present = 1;
7849 pDst->num_classes = (uint8_t)(ielen);
7850 if (ielen > 32) {
7851 pDst->present = 0;
7852 return DOT11F_SKIPPED_BAD_IE;
7853 }
7854
7855 DOT11F_MEMCPY(pCtx, pDst->classes, pBuf, (ielen));
7856 (void)pCtx;
7857 return status;
7858 } /* End dot11f_unpack_ie_supp_operating_classes. */
7859
7860 #define SigIeSuppOperatingClasses (0x0066)
7861
7862
dot11f_unpack_ie_supp_rates(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIESuppRates * pDst,bool append_ie)7863 uint32_t dot11f_unpack_ie_supp_rates(tpAniSirGlobal pCtx,
7864 uint8_t *pBuf,
7865 uint8_t ielen,
7866 tDot11fIESuppRates *pDst,
7867 bool append_ie)
7868 {
7869 uint8_t i;
7870 uint8_t rate_indx = 0;
7871 uint32_t status = DOT11F_PARSE_SUCCESS;
7872 (void) pBuf; (void)ielen; /* Shutup the compiler */
7873 if (pDst->present)
7874 return DOT11F_DUPLICATE_IE;
7875 pDst->present = 1;
7876 for (i = 0; i < ielen; i++) {
7877 if ((DOT11F_IS_BG_RATE(pBuf[i] & 0x7F)) &&
7878 (rate_indx < 12)) {
7879 pDst->rates[rate_indx++] = pBuf[i];
7880 }
7881 }
7882
7883 if (rate_indx == 0) {
7884 pDst->present = 0;
7885 return DOT11F_SKIPPED_BAD_IE;
7886 }
7887
7888 pDst->num_rates = rate_indx;
7889 (void)pCtx;
7890 return status;
7891 } /* End dot11f_unpack_ie_supp_rates. */
7892
7893 #define SigIeSuppRates (0x0067)
7894
7895
dot11f_unpack_ie_tim(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIETIM * pDst,bool append_ie)7896 uint32_t dot11f_unpack_ie_tim(tpAniSirGlobal pCtx,
7897 uint8_t *pBuf,
7898 uint8_t ielen,
7899 tDot11fIETIM *pDst,
7900 bool append_ie)
7901 {
7902 uint32_t status = DOT11F_PARSE_SUCCESS;
7903 (void) pBuf; (void)ielen; /* Shutup the compiler */
7904 if (pDst->present)
7905 return DOT11F_DUPLICATE_IE;
7906 pDst->present = 1;
7907 if (unlikely(ielen < 1)) {
7908 pDst->present = 0;
7909 return DOT11F_INCOMPLETE_IE;
7910 }
7911
7912 pDst->dtim_count = *pBuf;
7913 pBuf += 1;
7914 ielen -= (uint8_t)1;
7915 if (unlikely(ielen < 1)) {
7916 pDst->present = 0;
7917 return DOT11F_INCOMPLETE_IE;
7918 }
7919
7920 pDst->dtim_period = *pBuf;
7921 pBuf += 1;
7922 ielen -= (uint8_t)1;
7923 if (unlikely(ielen < 1)) {
7924 pDst->present = 0;
7925 return DOT11F_INCOMPLETE_IE;
7926 }
7927
7928 pDst->bmpctl = *pBuf;
7929 pBuf += 1;
7930 ielen -= (uint8_t)1;
7931 pDst->num_vbmp = (uint8_t)(ielen);
7932 if (ielen > 251) {
7933 pDst->present = 0;
7934 return DOT11F_SKIPPED_BAD_IE;
7935 }
7936
7937 DOT11F_MEMCPY(pCtx, pDst->vbmp, pBuf, (ielen));
7938 (void)pCtx;
7939 return status;
7940 } /* End dot11f_unpack_ie_tim. */
7941
7942 #define SigIeTIM (0x0068)
7943
7944
dot11f_unpack_ie_tpc_report(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIETPCReport * pDst,bool append_ie)7945 uint32_t dot11f_unpack_ie_tpc_report(tpAniSirGlobal pCtx,
7946 uint8_t *pBuf,
7947 uint8_t ielen,
7948 tDot11fIETPCReport *pDst,
7949 bool append_ie)
7950 {
7951 uint32_t status = DOT11F_PARSE_SUCCESS;
7952 (void) pBuf; (void)ielen; /* Shutup the compiler */
7953 if (pDst->present)
7954 return DOT11F_DUPLICATE_IE;
7955 pDst->present = 1;
7956 if (unlikely(ielen < 1)) {
7957 pDst->present = 0;
7958 return DOT11F_INCOMPLETE_IE;
7959 }
7960
7961 pDst->tx_power = *pBuf;
7962 pBuf += 1;
7963 ielen -= (uint8_t)1;
7964 if (unlikely(ielen < 1)) {
7965 pDst->present = 0;
7966 return DOT11F_INCOMPLETE_IE;
7967 }
7968
7969 pDst->link_margin = *pBuf;
7970 (void)pCtx;
7971 return status;
7972 } /* End dot11f_unpack_ie_tpc_report. */
7973
7974 #define SigIeTPCReport (0x0069)
7975
7976
dot11f_unpack_ie_tpc_request(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIETPCRequest * pDst,bool append_ie)7977 uint32_t dot11f_unpack_ie_tpc_request(tpAniSirGlobal pCtx,
7978 uint8_t *pBuf,
7979 uint8_t ielen,
7980 tDot11fIETPCRequest *pDst,
7981 bool append_ie)
7982 {
7983 uint32_t status = DOT11F_PARSE_SUCCESS;
7984 (void) pBuf; (void)ielen; /* Shutup the compiler */
7985 if (pDst->present)
7986 return DOT11F_DUPLICATE_IE;
7987 pDst->present = 1;
7988 (void)pCtx;
7989 return status;
7990 } /* End dot11f_unpack_ie_tpc_request. */
7991
7992 #define SigIeTPCRequest (0x006a)
7993
7994
dot11f_unpack_ie_time_advertisement(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIETimeAdvertisement * pDst,bool append_ie)7995 uint32_t dot11f_unpack_ie_time_advertisement(tpAniSirGlobal pCtx,
7996 uint8_t *pBuf,
7997 uint8_t ielen,
7998 tDot11fIETimeAdvertisement *pDst,
7999 bool append_ie)
8000 {
8001 uint32_t status = DOT11F_PARSE_SUCCESS;
8002 (void) pBuf; (void)ielen; /* Shutup the compiler */
8003 if (pDst->present)
8004 return DOT11F_DUPLICATE_IE;
8005 pDst->present = 1;
8006 if (unlikely(ielen < 1)) {
8007 pDst->present = 0;
8008 return DOT11F_INCOMPLETE_IE;
8009 }
8010
8011 pDst->timing_capabilities = *pBuf;
8012 pBuf += 1;
8013 ielen -= (uint8_t)1;
8014 if (unlikely(ielen < 10)) {
8015 pDst->present = 0;
8016 return DOT11F_INCOMPLETE_IE;
8017 }
8018
8019 DOT11F_MEMCPY(pCtx, pDst->time_value, pBuf, 10);
8020 pBuf += 10;
8021 ielen -= (uint8_t)10;
8022 if (unlikely(ielen < 5)) {
8023 pDst->present = 0;
8024 return DOT11F_INCOMPLETE_IE;
8025 }
8026
8027 DOT11F_MEMCPY(pCtx, pDst->time_error, pBuf, 5);
8028 (void)pCtx;
8029 return status;
8030 } /* End dot11f_unpack_ie_time_advertisement. */
8031
8032 #define SigIeTimeAdvertisement (0x006b)
8033
8034
dot11f_unpack_ie_timeout_interval(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIETimeoutInterval * pDst,bool append_ie)8035 uint32_t dot11f_unpack_ie_timeout_interval(tpAniSirGlobal pCtx,
8036 uint8_t *pBuf,
8037 uint8_t ielen,
8038 tDot11fIETimeoutInterval *pDst,
8039 bool append_ie)
8040 {
8041 uint32_t status = DOT11F_PARSE_SUCCESS;
8042 (void) pBuf; (void)ielen; /* Shutup the compiler */
8043 if (pDst->present)
8044 return DOT11F_DUPLICATE_IE;
8045 pDst->present = 1;
8046 if (unlikely(ielen < 1)) {
8047 pDst->present = 0;
8048 return DOT11F_INCOMPLETE_IE;
8049 }
8050
8051 pDst->timeoutType = *pBuf;
8052 pBuf += 1;
8053 ielen -= (uint8_t)1;
8054 if (unlikely(ielen < 4)) {
8055 pDst->present = 0;
8056 return DOT11F_INCOMPLETE_IE;
8057 }
8058
8059 framesntohl(pCtx, &pDst->timeoutValue, pBuf, 0);
8060 (void)pCtx;
8061 return status;
8062 } /* End dot11f_unpack_ie_timeout_interval. */
8063
8064 #define SigIeTimeoutInterval (0x006c)
8065
8066
dot11f_unpack_ie_vht_ext_bss_load(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEVHTExtBssLoad * pDst,bool append_ie)8067 uint32_t dot11f_unpack_ie_vht_ext_bss_load(tpAniSirGlobal pCtx,
8068 uint8_t *pBuf,
8069 uint8_t ielen,
8070 tDot11fIEVHTExtBssLoad *pDst,
8071 bool append_ie)
8072 {
8073 uint32_t status = DOT11F_PARSE_SUCCESS;
8074 (void) pBuf; (void)ielen; /* Shutup the compiler */
8075 if (pDst->present)
8076 return DOT11F_DUPLICATE_IE;
8077 pDst->present = 1;
8078 if (unlikely(ielen < 1)) {
8079 pDst->present = 0;
8080 return DOT11F_INCOMPLETE_IE;
8081 }
8082
8083 pDst->muMIMOCapStaCount = *pBuf;
8084 pBuf += 1;
8085 ielen -= (uint8_t)1;
8086 if (unlikely(ielen < 1)) {
8087 pDst->present = 0;
8088 return DOT11F_INCOMPLETE_IE;
8089 }
8090
8091 pDst->ssUnderUtil = *pBuf;
8092 pBuf += 1;
8093 ielen -= (uint8_t)1;
8094 if (unlikely(ielen < 1)) {
8095 pDst->present = 0;
8096 return DOT11F_INCOMPLETE_IE;
8097 }
8098
8099 pDst->FortyMHzUtil = *pBuf;
8100 pBuf += 1;
8101 ielen -= (uint8_t)1;
8102 if (unlikely(ielen < 1)) {
8103 pDst->present = 0;
8104 return DOT11F_INCOMPLETE_IE;
8105 }
8106
8107 pDst->EightyMHzUtil = *pBuf;
8108 pBuf += 1;
8109 ielen -= (uint8_t)1;
8110 if (unlikely(ielen < 1)) {
8111 pDst->present = 0;
8112 return DOT11F_INCOMPLETE_IE;
8113 }
8114
8115 pDst->OneSixtyMHzUtil = *pBuf;
8116 (void)pCtx;
8117 return status;
8118 } /* End dot11f_unpack_ie_vht_ext_bss_load. */
8119
8120 #define SigIeVHTExtBssLoad (0x006d)
8121
8122
dot11f_unpack_ie_vendor1_ie(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEVendor1IE * pDst,bool append_ie)8123 uint32_t dot11f_unpack_ie_vendor1_ie(tpAniSirGlobal pCtx,
8124 uint8_t *pBuf,
8125 uint8_t ielen,
8126 tDot11fIEVendor1IE *pDst,
8127 bool append_ie)
8128 {
8129 uint32_t status = DOT11F_PARSE_SUCCESS;
8130 (void) pBuf; (void)ielen; /* Shutup the compiler */
8131 if (pDst->present)
8132 return DOT11F_DUPLICATE_IE;
8133 pDst->present = 1;
8134 (void)pCtx;
8135 return status;
8136 } /* End dot11f_unpack_ie_vendor1_ie. */
8137
8138 #define SigIeVendor1IE (0x006e)
8139
8140
dot11f_unpack_ie_vendor3_ie(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEVendor3IE * pDst,bool append_ie)8141 uint32_t dot11f_unpack_ie_vendor3_ie(tpAniSirGlobal pCtx,
8142 uint8_t *pBuf,
8143 uint8_t ielen,
8144 tDot11fIEVendor3IE *pDst,
8145 bool append_ie)
8146 {
8147 uint32_t status = DOT11F_PARSE_SUCCESS;
8148 (void) pBuf; (void)ielen; /* Shutup the compiler */
8149 if (pDst->present)
8150 return DOT11F_DUPLICATE_IE;
8151 pDst->present = 1;
8152 (void)pCtx;
8153 return status;
8154 } /* End dot11f_unpack_ie_vendor3_ie. */
8155
8156 #define SigIeVendor3IE (0x006f)
8157
8158
dot11f_unpack_ie_wapi(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEWAPI * pDst,bool append_ie)8159 uint32_t dot11f_unpack_ie_wapi(tpAniSirGlobal pCtx,
8160 uint8_t *pBuf,
8161 uint8_t ielen,
8162 tDot11fIEWAPI *pDst,
8163 bool append_ie)
8164 {
8165 uint32_t status = DOT11F_PARSE_SUCCESS;
8166 uint16_t tmp70__;
8167 (void) pBuf; (void)ielen; /* Shutup the compiler */
8168 if (pDst->present)
8169 return DOT11F_DUPLICATE_IE;
8170 pDst->present = 1;
8171 if (unlikely(ielen < 2)) {
8172 pDst->present = 0;
8173 return DOT11F_INCOMPLETE_IE;
8174 }
8175
8176 framesntohs(pCtx, &pDst->version, pBuf, 0);
8177 pBuf += 2;
8178 ielen -= (uint8_t)2;
8179 if (pDst->version != 0x1) {
8180 pDst->present = 0;
8181 return status | DOT11F_BAD_FIXED_VALUE;
8182 }
8183 if (unlikely(ielen < 2)) {
8184 pDst->present = 0;
8185 return DOT11F_INCOMPLETE_IE;
8186 }
8187
8188 framesntohs(pCtx, &pDst->akm_suite_count, pBuf, 0);
8189 pBuf += 2;
8190 ielen -= (uint8_t)2;
8191 if (unlikely(ielen < pDst->akm_suite_count * 4)) {
8192 pDst->present = 0;
8193 return DOT11F_INCOMPLETE_IE;
8194 }
8195
8196 if (pDst->akm_suite_count > 4) {
8197 pDst->present = 0;
8198 return DOT11F_SKIPPED_BAD_IE;
8199 }
8200
8201 DOT11F_MEMCPY(pCtx, pDst->akm_suites, pBuf, (pDst->akm_suite_count * 4));
8202 pBuf += (pDst->akm_suite_count * 4);
8203 ielen -= (pDst->akm_suite_count * 4);
8204 if (unlikely(ielen < 2)) {
8205 pDst->present = 0;
8206 return DOT11F_INCOMPLETE_IE;
8207 }
8208
8209 framesntohs(pCtx, &pDst->unicast_cipher_suite_count, pBuf, 0);
8210 pBuf += 2;
8211 ielen -= (uint8_t)2;
8212 if (unlikely(ielen < pDst->unicast_cipher_suite_count * 4)) {
8213 pDst->present = 0;
8214 return DOT11F_INCOMPLETE_IE;
8215 }
8216
8217 if (pDst->unicast_cipher_suite_count > 4) {
8218 pDst->present = 0;
8219 return DOT11F_SKIPPED_BAD_IE;
8220 }
8221
8222 DOT11F_MEMCPY(pCtx, pDst->unicast_cipher_suites, pBuf, (pDst->unicast_cipher_suite_count * 4));
8223 pBuf += (pDst->unicast_cipher_suite_count * 4);
8224 ielen -= (pDst->unicast_cipher_suite_count * 4);
8225 if (unlikely(ielen < 4)) {
8226 pDst->present = 0;
8227 return DOT11F_INCOMPLETE_IE;
8228 }
8229
8230 DOT11F_MEMCPY(pCtx, pDst->multicast_cipher_suite, pBuf, 4);
8231 pBuf += 4;
8232 ielen -= (uint8_t)4;
8233 if (unlikely(ielen < 2)) {
8234 pDst->present = 0;
8235 return DOT11F_INCOMPLETE_IE;
8236 }
8237
8238 framesntohs(pCtx, &tmp70__, pBuf, 0);
8239 pBuf += 2;
8240 ielen -= 2;
8241 pDst->preauth = tmp70__ >> 0 & 0x1;
8242 pDst->reserved = tmp70__ >> 1 & 0x7fff;
8243 if (!ielen) {
8244 pDst->bkid_count = 0U;
8245 return 0U;
8246 } else {
8247 if (unlikely(ielen < 2)) {
8248 pDst->present = 0;
8249 return DOT11F_INCOMPLETE_IE;
8250 }
8251
8252 framesntohs(pCtx, &pDst->bkid_count, pBuf, 0);
8253 pBuf += 2;
8254 ielen -= (uint8_t)2;
8255 }
8256 if (unlikely(ielen < pDst->bkid_count * 16)) {
8257 pDst->present = 0;
8258 return DOT11F_INCOMPLETE_IE;
8259 }
8260
8261 if (pDst->bkid_count > 4) {
8262 pDst->present = 0;
8263 return DOT11F_SKIPPED_BAD_IE;
8264 }
8265
8266 DOT11F_MEMCPY(pCtx, pDst->bkid, pBuf, (pDst->bkid_count * 16));
8267 (void)pCtx;
8268 return status;
8269 } /* End dot11f_unpack_ie_wapi. */
8270
8271 #define SigIeWAPI (0x0070)
8272
8273
dot11f_unpack_ie_wapi_opaque(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEWAPIOpaque * pDst,bool append_ie)8274 uint32_t dot11f_unpack_ie_wapi_opaque(tpAniSirGlobal pCtx,
8275 uint8_t *pBuf,
8276 uint8_t ielen,
8277 tDot11fIEWAPIOpaque *pDst,
8278 bool append_ie)
8279 {
8280 uint32_t status = DOT11F_PARSE_SUCCESS;
8281 (void) pBuf; (void)ielen; /* Shutup the compiler */
8282 if (pDst->present)
8283 return DOT11F_DUPLICATE_IE;
8284 pDst->present = 1;
8285 pDst->num_data = (uint8_t)(ielen);
8286 if (ielen > 253) {
8287 pDst->present = 0;
8288 return DOT11F_SKIPPED_BAD_IE;
8289 }
8290
8291 DOT11F_MEMCPY(pCtx, pDst->data, pBuf, (ielen));
8292 (void)pCtx;
8293 return status;
8294 } /* End dot11f_unpack_ie_wapi_opaque. */
8295
8296 #define SigIeWAPIOpaque (0x0071)
8297
8298
dot11f_unpack_ie_wfatpc(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEWFATPC * pDst,bool append_ie)8299 uint32_t dot11f_unpack_ie_wfatpc(tpAniSirGlobal pCtx,
8300 uint8_t *pBuf,
8301 uint8_t ielen,
8302 tDot11fIEWFATPC *pDst,
8303 bool append_ie)
8304 {
8305 uint32_t status = DOT11F_PARSE_SUCCESS;
8306 (void) pBuf; (void)ielen; /* Shutup the compiler */
8307 if (pDst->present)
8308 return DOT11F_DUPLICATE_IE;
8309 pDst->present = 1;
8310 if (unlikely(ielen < 1)) {
8311 pDst->present = 0;
8312 return DOT11F_INCOMPLETE_IE;
8313 }
8314
8315 pDst->txPower = *pBuf;
8316 pBuf += 1;
8317 ielen -= (uint8_t)1;
8318 if (unlikely(ielen < 1)) {
8319 pDst->present = 0;
8320 return DOT11F_INCOMPLETE_IE;
8321 }
8322
8323 pDst->linkMargin = *pBuf;
8324 (void)pCtx;
8325 return status;
8326 } /* End dot11f_unpack_ie_wfatpc. */
8327
8328 #define SigIeWFATPC (0x0072)
8329
8330
dot11f_unpack_ie_wfdie_opaque(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEWFDIEOpaque * pDst,bool append_ie)8331 uint32_t dot11f_unpack_ie_wfdie_opaque(tpAniSirGlobal pCtx,
8332 uint8_t *pBuf,
8333 uint8_t ielen,
8334 tDot11fIEWFDIEOpaque *pDst,
8335 bool append_ie)
8336 {
8337 uint32_t status = DOT11F_PARSE_SUCCESS;
8338 (void) pBuf; (void)ielen; /* Shutup the compiler */
8339 if (pDst->present)
8340 return DOT11F_DUPLICATE_IE;
8341 pDst->present = 1;
8342 pDst->num_data = (uint8_t)(ielen);
8343 if (ielen > 249) {
8344 pDst->present = 0;
8345 return DOT11F_SKIPPED_BAD_IE;
8346 }
8347
8348 DOT11F_MEMCPY(pCtx, pDst->data, pBuf, (ielen));
8349 (void)pCtx;
8350 return status;
8351 } /* End dot11f_unpack_ie_wfdie_opaque. */
8352
8353 #define SigIeWFDIEOpaque (0x0073)
8354
8355
dot11f_unpack_ie_wmm_caps(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEWMMCaps * pDst,bool append_ie)8356 uint32_t dot11f_unpack_ie_wmm_caps(tpAniSirGlobal pCtx,
8357 uint8_t *pBuf,
8358 uint8_t ielen,
8359 tDot11fIEWMMCaps *pDst,
8360 bool append_ie)
8361 {
8362 uint32_t status = DOT11F_PARSE_SUCCESS;
8363 uint8_t tmp71__;
8364 (void) pBuf; (void)ielen; /* Shutup the compiler */
8365 if (pDst->present)
8366 return DOT11F_DUPLICATE_IE;
8367 pDst->present = 1;
8368 if (unlikely(ielen < 1)) {
8369 pDst->present = 0;
8370 return DOT11F_INCOMPLETE_IE;
8371 }
8372
8373 pDst->version = *pBuf;
8374 pBuf += 1;
8375 ielen -= (uint8_t)1;
8376 if (pDst->version != 0x1) {
8377 pDst->present = 0;
8378 return status | DOT11F_BAD_FIXED_VALUE;
8379 }
8380 if (unlikely(ielen < 1)) {
8381 pDst->present = 0;
8382 return DOT11F_INCOMPLETE_IE;
8383 }
8384
8385 tmp71__ = *pBuf;
8386 pDst->reserved = tmp71__ >> 0 & 0xf;
8387 pDst->qack = tmp71__ >> 4 & 0x1;
8388 pDst->queue_request = tmp71__ >> 5 & 0x1;
8389 pDst->txop_request = tmp71__ >> 6 & 0x1;
8390 pDst->more_ack = tmp71__ >> 7 & 0x1;
8391 (void)pCtx;
8392 return status;
8393 } /* End dot11f_unpack_ie_wmm_caps. */
8394
8395 #define SigIeWMMCaps (0x0074)
8396
8397
dot11f_unpack_ie_wmm_info_ap(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEWMMInfoAp * pDst,bool append_ie)8398 uint32_t dot11f_unpack_ie_wmm_info_ap(tpAniSirGlobal pCtx,
8399 uint8_t *pBuf,
8400 uint8_t ielen,
8401 tDot11fIEWMMInfoAp *pDst,
8402 bool append_ie)
8403 {
8404 uint32_t status = DOT11F_PARSE_SUCCESS;
8405 uint8_t tmp72__;
8406 (void) pBuf; (void)ielen; /* Shutup the compiler */
8407 if (pDst->present)
8408 return DOT11F_DUPLICATE_IE;
8409 pDst->present = 1;
8410 if (unlikely(ielen < 1)) {
8411 pDst->present = 0;
8412 return DOT11F_INCOMPLETE_IE;
8413 }
8414
8415 pDst->version = *pBuf;
8416 pBuf += 1;
8417 ielen -= (uint8_t)1;
8418 if (unlikely(ielen < 1)) {
8419 pDst->present = 0;
8420 return DOT11F_INCOMPLETE_IE;
8421 }
8422
8423 tmp72__ = *pBuf;
8424 pDst->param_set_count = tmp72__ >> 0 & 0xf;
8425 pDst->reserved = tmp72__ >> 4 & 0x7;
8426 pDst->uapsd = tmp72__ >> 7 & 0x1;
8427 (void)pCtx;
8428 return status;
8429 } /* End dot11f_unpack_ie_wmm_info_ap. */
8430
8431 #define SigIeWMMInfoAp (0x0075)
8432
8433
dot11f_unpack_ie_wmm_info_station(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEWMMInfoStation * pDst,bool append_ie)8434 uint32_t dot11f_unpack_ie_wmm_info_station(tpAniSirGlobal pCtx,
8435 uint8_t *pBuf,
8436 uint8_t ielen,
8437 tDot11fIEWMMInfoStation *pDst,
8438 bool append_ie)
8439 {
8440 uint32_t status = DOT11F_PARSE_SUCCESS;
8441 uint8_t tmp73__;
8442 (void) pBuf; (void)ielen; /* Shutup the compiler */
8443 if (pDst->present)
8444 return DOT11F_DUPLICATE_IE;
8445 pDst->present = 1;
8446 if (unlikely(ielen < 1)) {
8447 pDst->present = 0;
8448 return DOT11F_INCOMPLETE_IE;
8449 }
8450
8451 pDst->version = *pBuf;
8452 pBuf += 1;
8453 ielen -= (uint8_t)1;
8454 if (unlikely(ielen < 1)) {
8455 pDst->present = 0;
8456 return DOT11F_INCOMPLETE_IE;
8457 }
8458
8459 tmp73__ = *pBuf;
8460 pDst->acvo_uapsd = tmp73__ >> 0 & 0x1;
8461 pDst->acvi_uapsd = tmp73__ >> 1 & 0x1;
8462 pDst->acbk_uapsd = tmp73__ >> 2 & 0x1;
8463 pDst->acbe_uapsd = tmp73__ >> 3 & 0x1;
8464 pDst->reserved1 = tmp73__ >> 4 & 0x1;
8465 pDst->max_sp_length = tmp73__ >> 5 & 0x3;
8466 pDst->reserved2 = tmp73__ >> 7 & 0x1;
8467 (void)pCtx;
8468 return status;
8469 } /* End dot11f_unpack_ie_wmm_info_station. */
8470
8471 #define SigIeWMMInfoStation (0x0076)
8472
8473
dot11f_unpack_ie_wmm_params(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEWMMParams * pDst,bool append_ie)8474 uint32_t dot11f_unpack_ie_wmm_params(tpAniSirGlobal pCtx,
8475 uint8_t *pBuf,
8476 uint8_t ielen,
8477 tDot11fIEWMMParams *pDst,
8478 bool append_ie)
8479 {
8480 uint32_t status = DOT11F_PARSE_SUCCESS;
8481 uint8_t tmp74__;
8482 uint8_t tmp75__;
8483 uint8_t tmp76__;
8484 uint8_t tmp77__;
8485 uint8_t tmp78__;
8486 uint8_t tmp79__;
8487 uint8_t tmp80__;
8488 uint8_t tmp81__;
8489 (void) pBuf; (void)ielen; /* Shutup the compiler */
8490 if (pDst->present)
8491 return DOT11F_DUPLICATE_IE;
8492 pDst->present = 1;
8493 if (unlikely(ielen < 1)) {
8494 pDst->present = 0;
8495 return DOT11F_INCOMPLETE_IE;
8496 }
8497
8498 pDst->version = *pBuf;
8499 pBuf += 1;
8500 ielen -= (uint8_t)1;
8501 if (pDst->version != 0x1) {
8502 pDst->present = 0;
8503 return status | DOT11F_BAD_FIXED_VALUE;
8504 }
8505 if (unlikely(ielen < 1)) {
8506 pDst->present = 0;
8507 return DOT11F_INCOMPLETE_IE;
8508 }
8509
8510 pDst->qosInfo = *pBuf;
8511 pBuf += 1;
8512 ielen -= (uint8_t)1;
8513 if (unlikely(ielen < 1)) {
8514 pDst->present = 0;
8515 return DOT11F_INCOMPLETE_IE;
8516 }
8517
8518 pDst->reserved2 = *pBuf;
8519 pBuf += 1;
8520 ielen -= (uint8_t)1;
8521 if (unlikely(ielen < 1)) {
8522 pDst->present = 0;
8523 return DOT11F_INCOMPLETE_IE;
8524 }
8525
8526 tmp74__ = *pBuf;
8527 pBuf += 1;
8528 ielen -= 1;
8529 pDst->acbe_aifsn = tmp74__ >> 0 & 0xf;
8530 pDst->acbe_acm = tmp74__ >> 4 & 0x1;
8531 pDst->acbe_aci = tmp74__ >> 5 & 0x3;
8532 pDst->unused1 = tmp74__ >> 7 & 0x1;
8533 if (unlikely(ielen < 1)) {
8534 pDst->present = 0;
8535 return DOT11F_INCOMPLETE_IE;
8536 }
8537
8538 tmp75__ = *pBuf;
8539 pBuf += 1;
8540 ielen -= 1;
8541 pDst->acbe_acwmin = tmp75__ >> 0 & 0xf;
8542 pDst->acbe_acwmax = tmp75__ >> 4 & 0xf;
8543 if (unlikely(ielen < 2)) {
8544 pDst->present = 0;
8545 return DOT11F_INCOMPLETE_IE;
8546 }
8547
8548 framesntohs(pCtx, &pDst->acbe_txoplimit, pBuf, 0);
8549 pBuf += 2;
8550 ielen -= (uint8_t)2;
8551 if (unlikely(ielen < 1)) {
8552 pDst->present = 0;
8553 return DOT11F_INCOMPLETE_IE;
8554 }
8555
8556 tmp76__ = *pBuf;
8557 pBuf += 1;
8558 ielen -= 1;
8559 pDst->acbk_aifsn = tmp76__ >> 0 & 0xf;
8560 pDst->acbk_acm = tmp76__ >> 4 & 0x1;
8561 pDst->acbk_aci = tmp76__ >> 5 & 0x3;
8562 pDst->unused2 = tmp76__ >> 7 & 0x1;
8563 if (unlikely(ielen < 1)) {
8564 pDst->present = 0;
8565 return DOT11F_INCOMPLETE_IE;
8566 }
8567
8568 tmp77__ = *pBuf;
8569 pBuf += 1;
8570 ielen -= 1;
8571 pDst->acbk_acwmin = tmp77__ >> 0 & 0xf;
8572 pDst->acbk_acwmax = tmp77__ >> 4 & 0xf;
8573 if (unlikely(ielen < 2)) {
8574 pDst->present = 0;
8575 return DOT11F_INCOMPLETE_IE;
8576 }
8577
8578 framesntohs(pCtx, &pDst->acbk_txoplimit, pBuf, 0);
8579 pBuf += 2;
8580 ielen -= (uint8_t)2;
8581 if (unlikely(ielen < 1)) {
8582 pDst->present = 0;
8583 return DOT11F_INCOMPLETE_IE;
8584 }
8585
8586 tmp78__ = *pBuf;
8587 pBuf += 1;
8588 ielen -= 1;
8589 pDst->acvi_aifsn = tmp78__ >> 0 & 0xf;
8590 pDst->acvi_acm = tmp78__ >> 4 & 0x1;
8591 pDst->acvi_aci = tmp78__ >> 5 & 0x3;
8592 pDst->unused3 = tmp78__ >> 7 & 0x1;
8593 if (unlikely(ielen < 1)) {
8594 pDst->present = 0;
8595 return DOT11F_INCOMPLETE_IE;
8596 }
8597
8598 tmp79__ = *pBuf;
8599 pBuf += 1;
8600 ielen -= 1;
8601 pDst->acvi_acwmin = tmp79__ >> 0 & 0xf;
8602 pDst->acvi_acwmax = tmp79__ >> 4 & 0xf;
8603 if (unlikely(ielen < 2)) {
8604 pDst->present = 0;
8605 return DOT11F_INCOMPLETE_IE;
8606 }
8607
8608 framesntohs(pCtx, &pDst->acvi_txoplimit, pBuf, 0);
8609 pBuf += 2;
8610 ielen -= (uint8_t)2;
8611 if (unlikely(ielen < 1)) {
8612 pDst->present = 0;
8613 return DOT11F_INCOMPLETE_IE;
8614 }
8615
8616 tmp80__ = *pBuf;
8617 pBuf += 1;
8618 ielen -= 1;
8619 pDst->acvo_aifsn = tmp80__ >> 0 & 0xf;
8620 pDst->acvo_acm = tmp80__ >> 4 & 0x1;
8621 pDst->acvo_aci = tmp80__ >> 5 & 0x3;
8622 pDst->unused4 = tmp80__ >> 7 & 0x1;
8623 if (unlikely(ielen < 1)) {
8624 pDst->present = 0;
8625 return DOT11F_INCOMPLETE_IE;
8626 }
8627
8628 tmp81__ = *pBuf;
8629 pBuf += 1;
8630 ielen -= 1;
8631 pDst->acvo_acwmin = tmp81__ >> 0 & 0xf;
8632 pDst->acvo_acwmax = tmp81__ >> 4 & 0xf;
8633 if (unlikely(ielen < 2)) {
8634 pDst->present = 0;
8635 return DOT11F_INCOMPLETE_IE;
8636 }
8637
8638 framesntohs(pCtx, &pDst->acvo_txoplimit, pBuf, 0);
8639 (void)pCtx;
8640 return status;
8641 } /* End dot11f_unpack_ie_wmm_params. */
8642
8643 #define SigIeWMMParams (0x0077)
8644
8645
dot11f_unpack_ie_wpa(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEWPA * pDst,bool append_ie)8646 uint32_t dot11f_unpack_ie_wpa(tpAniSirGlobal pCtx,
8647 uint8_t *pBuf,
8648 uint8_t ielen,
8649 tDot11fIEWPA *pDst,
8650 bool append_ie)
8651 {
8652 uint32_t status = DOT11F_PARSE_SUCCESS;
8653 (void) pBuf; (void)ielen; /* Shutup the compiler */
8654 if (pDst->present)
8655 return DOT11F_DUPLICATE_IE;
8656 pDst->present = 1;
8657 if (unlikely(ielen < 2)) {
8658 pDst->present = 0;
8659 return DOT11F_INCOMPLETE_IE;
8660 }
8661
8662 framesntohs(pCtx, &pDst->version, pBuf, 0);
8663 pBuf += 2;
8664 ielen -= (uint8_t)2;
8665 if (pDst->version != 0x1) {
8666 pDst->present = 0;
8667 return status | DOT11F_BAD_FIXED_VALUE;
8668 }
8669 if (!ielen) {
8670 pDst->multicast_cipher_present = 0U;
8671 pDst->unicast_cipher_count = 0U;
8672 pDst->auth_suite_count = 0U;
8673 return 0U;
8674 } else {
8675 pDst->multicast_cipher_present = 1U;
8676 if (unlikely(ielen < 4)) {
8677 pDst->present = 0;
8678 return DOT11F_INCOMPLETE_IE;
8679 }
8680
8681 DOT11F_MEMCPY(pCtx, pDst->multicast_cipher, pBuf, 4);
8682 pBuf += 4;
8683 ielen -= (uint8_t)4;
8684 }
8685 if (!ielen) {
8686 pDst->unicast_cipher_count = 0U;
8687 pDst->auth_suite_count = 0U;
8688 return 0U;
8689 } else {
8690 if (unlikely(ielen < 2)) {
8691 pDst->present = 0;
8692 return DOT11F_INCOMPLETE_IE;
8693 }
8694
8695 framesntohs(pCtx, &pDst->unicast_cipher_count, pBuf, 0);
8696 pBuf += 2;
8697 ielen -= (uint8_t)2;
8698 }
8699 if (unlikely(ielen < pDst->unicast_cipher_count * 4)) {
8700 pDst->present = 0;
8701 return DOT11F_INCOMPLETE_IE;
8702 }
8703
8704 if (pDst->unicast_cipher_count > 4) {
8705 pDst->present = 0;
8706 return DOT11F_SKIPPED_BAD_IE;
8707 }
8708
8709 DOT11F_MEMCPY(pCtx, pDst->unicast_ciphers, pBuf, (pDst->unicast_cipher_count * 4));
8710 pBuf += (pDst->unicast_cipher_count * 4);
8711 ielen -= (pDst->unicast_cipher_count * 4);
8712 if (!ielen) {
8713 pDst->auth_suite_count = 0U;
8714 return 0U;
8715 } else {
8716 if (unlikely(ielen < 2)) {
8717 pDst->present = 0;
8718 return DOT11F_INCOMPLETE_IE;
8719 }
8720
8721 framesntohs(pCtx, &pDst->auth_suite_count, pBuf, 0);
8722 pBuf += 2;
8723 ielen -= (uint8_t)2;
8724 }
8725 if (unlikely(ielen < pDst->auth_suite_count * 4)) {
8726 pDst->present = 0;
8727 return DOT11F_INCOMPLETE_IE;
8728 }
8729
8730 if (pDst->auth_suite_count > 4) {
8731 pDst->present = 0;
8732 return DOT11F_SKIPPED_BAD_IE;
8733 }
8734
8735 DOT11F_MEMCPY(pCtx, pDst->auth_suites, pBuf, (pDst->auth_suite_count * 4));
8736 pBuf += (pDst->auth_suite_count * 4);
8737 ielen -= (pDst->auth_suite_count * 4);
8738 if (!ielen) {
8739 return 0U;
8740 } else {
8741 if (unlikely(ielen < 2)) {
8742 pDst->present = 0;
8743 return DOT11F_INCOMPLETE_IE;
8744 }
8745
8746 framesntohs(pCtx, &pDst->caps, pBuf, 0);
8747 }
8748 (void)pCtx;
8749 return status;
8750 } /* End dot11f_unpack_ie_wpa. */
8751
8752 #define SigIeWPA (0x0078)
8753
8754
dot11f_unpack_ie_wpa_opaque(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEWPAOpaque * pDst,bool append_ie)8755 uint32_t dot11f_unpack_ie_wpa_opaque(tpAniSirGlobal pCtx,
8756 uint8_t *pBuf,
8757 uint8_t ielen,
8758 tDot11fIEWPAOpaque *pDst,
8759 bool append_ie)
8760 {
8761 uint32_t status = DOT11F_PARSE_SUCCESS;
8762 (void) pBuf; (void)ielen; /* Shutup the compiler */
8763 if (pDst->present)
8764 return DOT11F_DUPLICATE_IE;
8765 pDst->present = 1;
8766 pDst->num_data = (uint8_t)(ielen);
8767 if (ielen > 249) {
8768 pDst->present = 0;
8769 return DOT11F_SKIPPED_BAD_IE;
8770 }
8771
8772 DOT11F_MEMCPY(pCtx, pDst->data, pBuf, (ielen));
8773 (void)pCtx;
8774 return status;
8775 } /* End dot11f_unpack_ie_wpa_opaque. */
8776
8777 #define SigIeWPAOpaque (0x0079)
8778
8779
8780 static const tTLVDefn TLVS_WSC[] = {
8781 { offsetof(tDot11fIEWSC, Version), offsetof(tDot11fTLVVersion, present),
8782 "Version", SigTlvVersion, DOT11F_TLV_VERSION, 0, 5, 5, 1, 2, 2, 1, },
8783 { offsetof(tDot11fIEWSC, WPSState), offsetof(tDot11fTLVWPSState, present),
8784 "WPSState", SigTlvWPSState, DOT11F_TLV_WPSSTATE, 0, 5, 5, 0, 2, 2, 1, },
8785 { offsetof(tDot11fIEWSC, APSetupLocked),
8786 offsetof(tDot11fTLVAPSetupLocked, present), "APSetupLocked",
8787 SigTlvAPSetupLocked, DOT11F_TLV_APSETUPLOCKED, 0, 5, 5, 0, 2, 2, 1, },
8788 { offsetof(tDot11fIEWSC, SelectedRegistrarConfigMethods),
8789 offsetof(tDot11fTLVSelectedRegistrarConfigMethods, present),
8790 "SelectedRegistrarConfigMethods", SigTlvSelectedRegistrarConfigMethods,
8791 DOT11F_TLV_SELECTEDREGISTRARCONFIGMETHODS, 0, 6, 6, 0, 2, 2, 1, },
8792 { offsetof(tDot11fIEWSC, UUID_E), offsetof(tDot11fTLVUUID_E, present),
8793 "UUID_E", SigTlvUUID_E, DOT11F_TLV_UUID_E, 0, 20, 20, 0, 2, 2, 1, },
8794 { offsetof(tDot11fIEWSC, UUID_R), offsetof(tDot11fTLVUUID_R, present),
8795 "UUID_R", SigTlvUUID_R, DOT11F_TLV_UUID_R, 0, 20, 20, 0, 2, 2, 1, },
8796 { offsetof(tDot11fIEWSC, RFBands), offsetof(tDot11fTLVRFBands, present),
8797 "RFBands", SigTlvRFBands, DOT11F_TLV_RFBANDS, 0, 5, 5, 0, 2, 2, 1, },
8798 { offsetof(tDot11fIEWSC, SelectedRegistrar),
8799 offsetof(tDot11fTLVSelectedRegistrar, present), "SelectedRegistrar",
8800 SigTlvSelectedRegistrar, DOT11F_TLV_SELECTEDREGISTRAR,
8801 0, 5, 5, 0, 2, 2, 1, },
8802 { offsetof(tDot11fIEWSC, ConfigMethods),
8803 offsetof(tDot11fTLVConfigMethods, present), "ConfigMethods",
8804 SigTlvConfigMethods, DOT11F_TLV_CONFIGMETHODS, 0, 6, 6, 0, 2, 2, 1, },
8805 { offsetof(tDot11fIEWSC, AssociationState),
8806 offsetof(tDot11fTLVAssociationState, present), "AssociationState",
8807 SigTlvAssociationState, DOT11F_TLV_ASSOCIATIONSTATE,
8808 0, 6, 6, 0, 2, 2, 1, },
8809 { offsetof(tDot11fIEWSC, ConfigurationError),
8810 offsetof(tDot11fTLVConfigurationError, present), "ConfigurationError",
8811 SigTlvConfigurationError, DOT11F_TLV_CONFIGURATIONERROR,
8812 0, 6, 6, 0, 2, 2, 1, },
8813 { offsetof(tDot11fIEWSC, Manufacturer), offsetof(tDot11fTLVManufacturer,
8814 present), "Manufacturer", SigTlvManufacturer, DOT11F_TLV_MANUFACTURER,
8815 0, 4, 68, 0, 2, 2, 1, },
8816 { offsetof(tDot11fIEWSC, ModelName), offsetof(tDot11fTLVModelName,
8817 present), "ModelName", SigTlvModelName, DOT11F_TLV_MODELNAME,
8818 0, 4, 36, 0, 2, 2, 1, },
8819 { offsetof(tDot11fIEWSC, ModelNumber), offsetof(tDot11fTLVModelNumber,
8820 present), "ModelNumber", SigTlvModelNumber, DOT11F_TLV_MODELNUMBER,
8821 0, 4, 36, 0, 2, 2, 1, },
8822 { offsetof(tDot11fIEWSC, SerialNumber), offsetof(tDot11fTLVSerialNumber,
8823 present), "SerialNumber", SigTlvSerialNumber, DOT11F_TLV_SERIALNUMBER,
8824 0, 4, 36, 0, 2, 2, 1, },
8825 { offsetof(tDot11fIEWSC, DeviceName), offsetof(tDot11fTLVDeviceName,
8826 present), "DeviceName", SigTlvDeviceName, DOT11F_TLV_DEVICENAME,
8827 0, 4, 36, 0, 2, 2, 1, },
8828 { offsetof(tDot11fIEWSC, DevicePasswordID),
8829 offsetof(tDot11fTLVDevicePasswordID, present), "DevicePasswordID",
8830 SigTlvDevicePasswordID, DOT11F_TLV_DEVICEPASSWORDID,
8831 0, 6, 6, 0, 2, 2, 1, },
8832 { offsetof(tDot11fIEWSC, PrimaryDeviceType),
8833 offsetof(tDot11fTLVPrimaryDeviceType, present), "PrimaryDeviceType",
8834 SigTlvPrimaryDeviceType, DOT11F_TLV_PRIMARYDEVICETYPE,
8835 0, 12, 12, 0, 2, 2, 1, },
8836 { offsetof(tDot11fIEWSC, RequestType), offsetof(tDot11fTLVRequestType,
8837 present), "RequestType", SigTlvRequestType, DOT11F_TLV_REQUESTTYPE,
8838 0, 5, 5, 0, 2, 2, 1, },
8839 { offsetof(tDot11fIEWSC, ResponseType), offsetof(tDot11fTLVResponseType,
8840 present), "ResponseType", SigTlvResponseType, DOT11F_TLV_RESPONSETYPE,
8841 0, 5, 5, 0, 2, 2, 1, },
8842 { offsetof(tDot11fIEWSC, VendorExtension),
8843 offsetof(tDot11fTLVVendorExtension, present), "VendorExtension",
8844 SigTlvVendorExtension, DOT11F_TLV_VENDOREXTENSION,
8845 0, 7, 21, 0, 2, 2, 1, },
8846 { offsetof(tDot11fIEWSC, RequestDeviceType),
8847 offsetof(tDot11fTLVRequestDeviceType, present), "RequestDeviceType",
8848 SigTlvRequestDeviceType, DOT11F_TLV_REQUESTDEVICETYPE,
8849 0, 12, 12, 0, 2, 2, 1, },
8850 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
8851 };
8852
dot11f_unpack_ie_wsc(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEWSC * pDst,bool append_ie)8853 uint32_t dot11f_unpack_ie_wsc(tpAniSirGlobal pCtx,
8854 uint8_t *pBuf,
8855 uint8_t ielen,
8856 tDot11fIEWSC *pDst,
8857 bool append_ie)
8858 {
8859 uint32_t status = DOT11F_PARSE_SUCCESS;
8860 (void)pBuf; (void)ielen; /* Shutup the compiler */
8861 pDst->present = 1;
8862 status = unpack_tlv_core(pCtx, pBuf, ielen,
8863 TLVS_WSC,
8864 (uint8_t *)pDst, sizeof(*pDst));
8865 return status;
8866 } /* End dot11f_unpack_ie_wsc. */
8867
8868 #define SigIeWSC (0x007a)
8869
8870
8871 static const tTLVDefn TLVS_WscAssocReq[] = {
8872 { offsetof(tDot11fIEWscAssocReq, Version), offsetof(tDot11fTLVVersion,
8873 present), "Version", SigTlvVersion, DOT11F_TLV_VERSION,
8874 0, 5, 5, 1, 2, 2, 1, },
8875 { offsetof(tDot11fIEWscAssocReq, RequestType),
8876 offsetof(tDot11fTLVRequestType, present), "RequestType",
8877 SigTlvRequestType, DOT11F_TLV_REQUESTTYPE, 0, 5, 5, 1, 2, 2, 1, },
8878 { offsetof(tDot11fIEWscAssocReq, VendorExtension),
8879 offsetof(tDot11fTLVVendorExtension, present), "VendorExtension",
8880 SigTlvVendorExtension, DOT11F_TLV_VENDOREXTENSION,
8881 0, 7, 21, 0, 2, 2, 1, },
8882 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
8883 };
8884
dot11f_unpack_ie_wsc_assoc_req(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEWscAssocReq * pDst,bool append_ie)8885 uint32_t dot11f_unpack_ie_wsc_assoc_req(tpAniSirGlobal pCtx,
8886 uint8_t *pBuf,
8887 uint8_t ielen,
8888 tDot11fIEWscAssocReq *pDst,
8889 bool append_ie)
8890 {
8891 uint32_t status = DOT11F_PARSE_SUCCESS;
8892 (void)pBuf; (void)ielen; /* Shutup the compiler */
8893 pDst->present = 1;
8894 status = unpack_tlv_core(pCtx, pBuf, ielen,
8895 TLVS_WscAssocReq,
8896 (uint8_t *)pDst, sizeof(*pDst));
8897 return status;
8898 } /* End dot11f_unpack_ie_wsc_assoc_req. */
8899
8900 #define SigIeWscAssocReq (0x007b)
8901
8902
8903 static const tTLVDefn TLVS_WscAssocRes[] = {
8904 { offsetof(tDot11fIEWscAssocRes, Version), offsetof(tDot11fTLVVersion,
8905 present), "Version", SigTlvVersion, DOT11F_TLV_VERSION,
8906 0, 5, 5, 1, 2, 2, 1, },
8907 { offsetof(tDot11fIEWscAssocRes, ResponseType),
8908 offsetof(tDot11fTLVResponseType, present), "ResponseType",
8909 SigTlvResponseType, DOT11F_TLV_RESPONSETYPE, 0, 5, 5, 1, 2, 2, 1, },
8910 { offsetof(tDot11fIEWscAssocRes, VendorExtension),
8911 offsetof(tDot11fTLVVendorExtension, present), "VendorExtension",
8912 SigTlvVendorExtension, DOT11F_TLV_VENDOREXTENSION,
8913 0, 7, 21, 0, 2, 2, 1, },
8914 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
8915 };
8916
dot11f_unpack_ie_wsc_assoc_res(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEWscAssocRes * pDst,bool append_ie)8917 uint32_t dot11f_unpack_ie_wsc_assoc_res(tpAniSirGlobal pCtx,
8918 uint8_t *pBuf,
8919 uint8_t ielen,
8920 tDot11fIEWscAssocRes *pDst,
8921 bool append_ie)
8922 {
8923 uint32_t status = DOT11F_PARSE_SUCCESS;
8924 (void)pBuf; (void)ielen; /* Shutup the compiler */
8925 pDst->present = 1;
8926 status = unpack_tlv_core(pCtx, pBuf, ielen,
8927 TLVS_WscAssocRes,
8928 (uint8_t *)pDst, sizeof(*pDst));
8929 return status;
8930 } /* End dot11f_unpack_ie_wsc_assoc_res. */
8931
8932 #define SigIeWscAssocRes (0x007c)
8933
8934
8935 static const tTLVDefn TLVS_WscBeacon[] = {
8936 { offsetof(tDot11fIEWscBeacon, Version), offsetof(tDot11fTLVVersion,
8937 present), "Version", SigTlvVersion, DOT11F_TLV_VERSION,
8938 0, 5, 5, 1, 2, 2, 1, },
8939 { offsetof(tDot11fIEWscBeacon, WPSState), offsetof(tDot11fTLVWPSState,
8940 present), "WPSState", SigTlvWPSState, DOT11F_TLV_WPSSTATE,
8941 0, 5, 5, 1, 2, 2, 1, },
8942 { offsetof(tDot11fIEWscBeacon, APSetupLocked),
8943 offsetof(tDot11fTLVAPSetupLocked, present), "APSetupLocked",
8944 SigTlvAPSetupLocked, DOT11F_TLV_APSETUPLOCKED, 0, 5, 5, 0, 2, 2, 1, },
8945 { offsetof(tDot11fIEWscBeacon, SelectedRegistrar),
8946 offsetof(tDot11fTLVSelectedRegistrar, present), "SelectedRegistrar",
8947 SigTlvSelectedRegistrar, DOT11F_TLV_SELECTEDREGISTRAR,
8948 0, 5, 5, 0, 2, 2, 1, },
8949 { offsetof(tDot11fIEWscBeacon, DevicePasswordID),
8950 offsetof(tDot11fTLVDevicePasswordID, present), "DevicePasswordID",
8951 SigTlvDevicePasswordID, DOT11F_TLV_DEVICEPASSWORDID,
8952 0, 6, 6, 0, 2, 2, 1, },
8953 { offsetof(tDot11fIEWscBeacon, SelectedRegistrarConfigMethods),
8954 offsetof(tDot11fTLVSelectedRegistrarConfigMethods, present),
8955 "SelectedRegistrarConfigMethods", SigTlvSelectedRegistrarConfigMethods,
8956 DOT11F_TLV_SELECTEDREGISTRARCONFIGMETHODS, 0, 6, 6, 0, 2, 2, 1, },
8957 { offsetof(tDot11fIEWscBeacon, UUID_E), offsetof(tDot11fTLVUUID_E,
8958 present), "UUID_E", SigTlvUUID_E, DOT11F_TLV_UUID_E,
8959 0, 20, 20, 0, 2, 2, 1, },
8960 { offsetof(tDot11fIEWscBeacon, RFBands), offsetof(tDot11fTLVRFBands,
8961 present), "RFBands", SigTlvRFBands, DOT11F_TLV_RFBANDS,
8962 0, 5, 5, 0, 2, 2, 1, },
8963 { offsetof(tDot11fIEWscBeacon, VendorExtension),
8964 offsetof(tDot11fTLVVendorExtension, present), "VendorExtension",
8965 SigTlvVendorExtension, DOT11F_TLV_VENDOREXTENSION,
8966 0, 7, 21, 0, 2, 2, 1, },
8967 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
8968 };
8969
dot11f_unpack_ie_wsc_beacon(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEWscBeacon * pDst,bool append_ie)8970 uint32_t dot11f_unpack_ie_wsc_beacon(tpAniSirGlobal pCtx,
8971 uint8_t *pBuf,
8972 uint8_t ielen,
8973 tDot11fIEWscBeacon *pDst,
8974 bool append_ie)
8975 {
8976 uint32_t status = DOT11F_PARSE_SUCCESS;
8977 (void)pBuf; (void)ielen; /* Shutup the compiler */
8978 pDst->present = 1;
8979 status = unpack_tlv_core(pCtx, pBuf, ielen,
8980 TLVS_WscBeacon,
8981 (uint8_t *)pDst, sizeof(*pDst));
8982 return status;
8983 } /* End dot11f_unpack_ie_wsc_beacon. */
8984
8985 #define SigIeWscBeacon (0x007d)
8986
8987
8988 static const tTLVDefn TLVS_WscBeaconProbeRes[] = {
8989 { offsetof(tDot11fIEWscBeaconProbeRes, Version),
8990 offsetof(tDot11fTLVVersion, present), "Version", SigTlvVersion,
8991 DOT11F_TLV_VERSION, 0, 5, 5, 0, 2, 2, 1, },
8992 { offsetof(tDot11fIEWscBeaconProbeRes, WPSState),
8993 offsetof(tDot11fTLVWPSState, present), "WPSState", SigTlvWPSState,
8994 DOT11F_TLV_WPSSTATE, 0, 5, 5, 0, 2, 2, 1, },
8995 { offsetof(tDot11fIEWscBeaconProbeRes, APSetupLocked),
8996 offsetof(tDot11fTLVAPSetupLocked, present), "APSetupLocked",
8997 SigTlvAPSetupLocked, DOT11F_TLV_APSETUPLOCKED, 0, 5, 5, 0, 2, 2, 1, },
8998 { offsetof(tDot11fIEWscBeaconProbeRes, SelectedRegistrar),
8999 offsetof(tDot11fTLVSelectedRegistrar, present), "SelectedRegistrar",
9000 SigTlvSelectedRegistrar, DOT11F_TLV_SELECTEDREGISTRAR,
9001 0, 5, 5, 0, 2, 2, 1, },
9002 { offsetof(tDot11fIEWscBeaconProbeRes, DevicePasswordID),
9003 offsetof(tDot11fTLVDevicePasswordID, present), "DevicePasswordID",
9004 SigTlvDevicePasswordID, DOT11F_TLV_DEVICEPASSWORDID,
9005 0, 6, 6, 0, 2, 2, 1, },
9006 { offsetof(tDot11fIEWscBeaconProbeRes, SelectedRegistrarConfigMethods),
9007 offsetof(tDot11fTLVSelectedRegistrarConfigMethods, present),
9008 "SelectedRegistrarConfigMethods", SigTlvSelectedRegistrarConfigMethods,
9009 DOT11F_TLV_SELECTEDREGISTRARCONFIGMETHODS, 0, 6, 6, 0, 2, 2, 1, },
9010 { offsetof(tDot11fIEWscBeaconProbeRes, ResponseType),
9011 offsetof(tDot11fTLVResponseType, present), "ResponseType",
9012 SigTlvResponseType, DOT11F_TLV_RESPONSETYPE, 0, 5, 5, 0, 2, 2, 1, },
9013 { offsetof(tDot11fIEWscBeaconProbeRes, UUID_E),
9014 offsetof(tDot11fTLVUUID_E, present), "UUID_E", SigTlvUUID_E,
9015 DOT11F_TLV_UUID_E, 0, 20, 20, 0, 2, 2, 1, },
9016 { offsetof(tDot11fIEWscBeaconProbeRes, Manufacturer),
9017 offsetof(tDot11fTLVManufacturer, present), "Manufacturer",
9018 SigTlvManufacturer, DOT11F_TLV_MANUFACTURER, 0, 4, 68, 0, 2, 2, 1, },
9019 { offsetof(tDot11fIEWscBeaconProbeRes, ModelName),
9020 offsetof(tDot11fTLVModelName, present), "ModelName", SigTlvModelName,
9021 DOT11F_TLV_MODELNAME, 0, 4, 36, 0, 2, 2, 1, },
9022 { offsetof(tDot11fIEWscBeaconProbeRes, ModelNumber),
9023 offsetof(tDot11fTLVModelNumber, present), "ModelNumber",
9024 SigTlvModelNumber, DOT11F_TLV_MODELNUMBER, 0, 4, 36, 0, 2, 2, 1, },
9025 { offsetof(tDot11fIEWscBeaconProbeRes, SerialNumber),
9026 offsetof(tDot11fTLVSerialNumber, present), "SerialNumber",
9027 SigTlvSerialNumber, DOT11F_TLV_SERIALNUMBER, 0, 4, 36, 0, 2, 2, 1, },
9028 { offsetof(tDot11fIEWscBeaconProbeRes, PrimaryDeviceType),
9029 offsetof(tDot11fTLVPrimaryDeviceType, present), "PrimaryDeviceType",
9030 SigTlvPrimaryDeviceType, DOT11F_TLV_PRIMARYDEVICETYPE,
9031 0, 12, 12, 0, 2, 2, 1, },
9032 { offsetof(tDot11fIEWscBeaconProbeRes, DeviceName),
9033 offsetof(tDot11fTLVDeviceName, present), "DeviceName", SigTlvDeviceName,
9034 DOT11F_TLV_DEVICENAME, 0, 4, 36, 0, 2, 2, 1, },
9035 { offsetof(tDot11fIEWscBeaconProbeRes, ConfigMethods),
9036 offsetof(tDot11fTLVConfigMethods, present), "ConfigMethods",
9037 SigTlvConfigMethods, DOT11F_TLV_CONFIGMETHODS, 0, 6, 6, 0, 2, 2, 1, },
9038 { offsetof(tDot11fIEWscBeaconProbeRes, RFBands),
9039 offsetof(tDot11fTLVRFBands, present), "RFBands", SigTlvRFBands,
9040 DOT11F_TLV_RFBANDS, 0, 5, 5, 0, 2, 2, 1, },
9041 { offsetof(tDot11fIEWscBeaconProbeRes, VendorExtension),
9042 offsetof(tDot11fTLVVendorExtension, present), "VendorExtension",
9043 SigTlvVendorExtension, DOT11F_TLV_VENDOREXTENSION,
9044 0, 7, 21, 0, 2, 2, 1, },
9045 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
9046 };
9047
dot11f_unpack_ie_wsc_beacon_probe_res(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEWscBeaconProbeRes * pDst,bool append_ie)9048 uint32_t dot11f_unpack_ie_wsc_beacon_probe_res(tpAniSirGlobal pCtx,
9049 uint8_t *pBuf,
9050 uint8_t ielen,
9051 tDot11fIEWscBeaconProbeRes *pDst,
9052 bool append_ie)
9053 {
9054 uint32_t status = DOT11F_PARSE_SUCCESS;
9055 (void)pBuf; (void)ielen; /* Shutup the compiler */
9056 pDst->present = 1;
9057 status = unpack_tlv_core(pCtx, pBuf, ielen,
9058 TLVS_WscBeaconProbeRes,
9059 (uint8_t *)pDst, sizeof(*pDst));
9060 return status;
9061 } /* End dot11f_unpack_ie_wsc_beacon_probe_res. */
9062
9063 #define SigIeWscBeaconProbeRes (0x007e)
9064
9065
dot11f_unpack_ie_wsc_ie_opaque(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEWscIEOpaque * pDst,bool append_ie)9066 uint32_t dot11f_unpack_ie_wsc_ie_opaque(tpAniSirGlobal pCtx,
9067 uint8_t *pBuf,
9068 uint8_t ielen,
9069 tDot11fIEWscIEOpaque *pDst,
9070 bool append_ie)
9071 {
9072 uint32_t status = DOT11F_PARSE_SUCCESS;
9073 (void) pBuf; (void)ielen; /* Shutup the compiler */
9074 if (pDst->present)
9075 return DOT11F_DUPLICATE_IE;
9076 pDst->present = 1;
9077 pDst->num_data = (uint8_t)(ielen);
9078 if (ielen > 249) {
9079 pDst->present = 0;
9080 return DOT11F_SKIPPED_BAD_IE;
9081 }
9082
9083 DOT11F_MEMCPY(pCtx, pDst->data, pBuf, (ielen));
9084 (void)pCtx;
9085 return status;
9086 } /* End dot11f_unpack_ie_wsc_ie_opaque. */
9087
9088 #define SigIeWscIEOpaque (0x007f)
9089
9090
9091 static const tTLVDefn TLVS_WscProbeReq[] = {
9092 { offsetof(tDot11fIEWscProbeReq, Version), offsetof(tDot11fTLVVersion,
9093 present), "Version", SigTlvVersion, DOT11F_TLV_VERSION,
9094 0, 5, 5, 1, 2, 2, 1, },
9095 { offsetof(tDot11fIEWscProbeReq, RequestType),
9096 offsetof(tDot11fTLVRequestType, present), "RequestType",
9097 SigTlvRequestType, DOT11F_TLV_REQUESTTYPE, 0, 5, 5, 1, 2, 2, 1, },
9098 { offsetof(tDot11fIEWscProbeReq, ConfigMethods),
9099 offsetof(tDot11fTLVConfigMethods, present), "ConfigMethods",
9100 SigTlvConfigMethods, DOT11F_TLV_CONFIGMETHODS, 0, 6, 6, 1, 2, 2, 1, },
9101 { offsetof(tDot11fIEWscProbeReq, UUID_E), offsetof(tDot11fTLVUUID_E,
9102 present), "UUID_E", SigTlvUUID_E, DOT11F_TLV_UUID_E,
9103 0, 20, 20, 1, 2, 2, 1, },
9104 { offsetof(tDot11fIEWscProbeReq, PrimaryDeviceType),
9105 offsetof(tDot11fTLVPrimaryDeviceType, present), "PrimaryDeviceType",
9106 SigTlvPrimaryDeviceType, DOT11F_TLV_PRIMARYDEVICETYPE,
9107 0, 12, 12, 1, 2, 2, 1, },
9108 { offsetof(tDot11fIEWscProbeReq, RFBands), offsetof(tDot11fTLVRFBands,
9109 present), "RFBands", SigTlvRFBands, DOT11F_TLV_RFBANDS,
9110 0, 5, 5, 1, 2, 2, 1, },
9111 { offsetof(tDot11fIEWscProbeReq, AssociationState),
9112 offsetof(tDot11fTLVAssociationState, present), "AssociationState",
9113 SigTlvAssociationState, DOT11F_TLV_ASSOCIATIONSTATE,
9114 0, 6, 6, 1, 2, 2, 1, },
9115 { offsetof(tDot11fIEWscProbeReq, ConfigurationError),
9116 offsetof(tDot11fTLVConfigurationError, present), "ConfigurationError",
9117 SigTlvConfigurationError, DOT11F_TLV_CONFIGURATIONERROR,
9118 0, 6, 6, 1, 2, 2, 1, },
9119 { offsetof(tDot11fIEWscProbeReq, DevicePasswordID),
9120 offsetof(tDot11fTLVDevicePasswordID, present), "DevicePasswordID",
9121 SigTlvDevicePasswordID, DOT11F_TLV_DEVICEPASSWORDID,
9122 0, 6, 6, 1, 2, 2, 1, },
9123 { offsetof(tDot11fIEWscProbeReq, Manufacturer),
9124 offsetof(tDot11fTLVManufacturer, present), "Manufacturer",
9125 SigTlvManufacturer, DOT11F_TLV_MANUFACTURER, 0, 4, 68, 0, 2, 2, 1, },
9126 { offsetof(tDot11fIEWscProbeReq, ModelName),
9127 offsetof(tDot11fTLVModelName, present), "ModelName", SigTlvModelName,
9128 DOT11F_TLV_MODELNAME, 0, 4, 36, 0, 2, 2, 1, },
9129 { offsetof(tDot11fIEWscProbeReq, ModelNumber),
9130 offsetof(tDot11fTLVModelNumber, present), "ModelNumber",
9131 SigTlvModelNumber, DOT11F_TLV_MODELNUMBER, 0, 4, 36, 0, 2, 2, 1, },
9132 { offsetof(tDot11fIEWscProbeReq, DeviceName),
9133 offsetof(tDot11fTLVDeviceName, present), "DeviceName", SigTlvDeviceName,
9134 DOT11F_TLV_DEVICENAME, 0, 4, 36, 0, 2, 2, 1, },
9135 { offsetof(tDot11fIEWscProbeReq, VendorExtension),
9136 offsetof(tDot11fTLVVendorExtension, present), "VendorExtension",
9137 SigTlvVendorExtension, DOT11F_TLV_VENDOREXTENSION,
9138 0, 7, 21, 0, 2, 2, 1, },
9139 { offsetof(tDot11fIEWscProbeReq, RequestDeviceType),
9140 offsetof(tDot11fTLVRequestDeviceType, present), "RequestDeviceType",
9141 SigTlvRequestDeviceType, DOT11F_TLV_REQUESTDEVICETYPE,
9142 0, 12, 12, 0, 2, 2, 1, },
9143 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
9144 };
9145
dot11f_unpack_ie_wsc_probe_req(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEWscProbeReq * pDst,bool append_ie)9146 uint32_t dot11f_unpack_ie_wsc_probe_req(tpAniSirGlobal pCtx,
9147 uint8_t *pBuf,
9148 uint8_t ielen,
9149 tDot11fIEWscProbeReq *pDst,
9150 bool append_ie)
9151 {
9152 uint32_t status = DOT11F_PARSE_SUCCESS;
9153 (void)pBuf; (void)ielen; /* Shutup the compiler */
9154 pDst->present = 1;
9155 status = unpack_tlv_core(pCtx, pBuf, ielen,
9156 TLVS_WscProbeReq,
9157 (uint8_t *)pDst, sizeof(*pDst));
9158 return status;
9159 } /* End dot11f_unpack_ie_wsc_probe_req. */
9160
9161 #define SigIeWscProbeReq (0x0080)
9162
9163
9164 static const tTLVDefn TLVS_WscProbeRes[] = {
9165 { offsetof(tDot11fIEWscProbeRes, Version), offsetof(tDot11fTLVVersion,
9166 present), "Version", SigTlvVersion, DOT11F_TLV_VERSION,
9167 0, 5, 5, 1, 2, 2, 1, },
9168 { offsetof(tDot11fIEWscProbeRes, WPSState), offsetof(tDot11fTLVWPSState,
9169 present), "WPSState", SigTlvWPSState, DOT11F_TLV_WPSSTATE,
9170 0, 5, 5, 1, 2, 2, 1, },
9171 { offsetof(tDot11fIEWscProbeRes, APSetupLocked),
9172 offsetof(tDot11fTLVAPSetupLocked, present), "APSetupLocked",
9173 SigTlvAPSetupLocked, DOT11F_TLV_APSETUPLOCKED, 0, 5, 5, 0, 2, 2, 1, },
9174 { offsetof(tDot11fIEWscProbeRes, SelectedRegistrar),
9175 offsetof(tDot11fTLVSelectedRegistrar, present), "SelectedRegistrar",
9176 SigTlvSelectedRegistrar, DOT11F_TLV_SELECTEDREGISTRAR,
9177 0, 5, 5, 0, 2, 2, 1, },
9178 { offsetof(tDot11fIEWscProbeRes, DevicePasswordID),
9179 offsetof(tDot11fTLVDevicePasswordID, present), "DevicePasswordID",
9180 SigTlvDevicePasswordID, DOT11F_TLV_DEVICEPASSWORDID,
9181 0, 6, 6, 0, 2, 2, 1, },
9182 { offsetof(tDot11fIEWscProbeRes, SelectedRegistrarConfigMethods),
9183 offsetof(tDot11fTLVSelectedRegistrarConfigMethods, present),
9184 "SelectedRegistrarConfigMethods", SigTlvSelectedRegistrarConfigMethods,
9185 DOT11F_TLV_SELECTEDREGISTRARCONFIGMETHODS, 0, 6, 6, 0, 2, 2, 1, },
9186 { offsetof(tDot11fIEWscProbeRes, ResponseType),
9187 offsetof(tDot11fTLVResponseType, present), "ResponseType",
9188 SigTlvResponseType, DOT11F_TLV_RESPONSETYPE, 0, 5, 5, 1, 2, 2, 1, },
9189 { offsetof(tDot11fIEWscProbeRes, UUID_E), offsetof(tDot11fTLVUUID_E,
9190 present), "UUID_E", SigTlvUUID_E, DOT11F_TLV_UUID_E,
9191 0, 20, 20, 1, 2, 2, 1, },
9192 { offsetof(tDot11fIEWscProbeRes, Manufacturer),
9193 offsetof(tDot11fTLVManufacturer, present), "Manufacturer",
9194 SigTlvManufacturer, DOT11F_TLV_MANUFACTURER, 0, 4, 68, 1, 2, 2, 1, },
9195 { offsetof(tDot11fIEWscProbeRes, ModelName),
9196 offsetof(tDot11fTLVModelName, present), "ModelName", SigTlvModelName,
9197 DOT11F_TLV_MODELNAME, 0, 4, 36, 1, 2, 2, 1, },
9198 { offsetof(tDot11fIEWscProbeRes, ModelNumber),
9199 offsetof(tDot11fTLVModelNumber, present), "ModelNumber",
9200 SigTlvModelNumber, DOT11F_TLV_MODELNUMBER, 0, 4, 36, 1, 2, 2, 1, },
9201 { offsetof(tDot11fIEWscProbeRes, SerialNumber),
9202 offsetof(tDot11fTLVSerialNumber, present), "SerialNumber",
9203 SigTlvSerialNumber, DOT11F_TLV_SERIALNUMBER, 0, 4, 36, 1, 2, 2, 1, },
9204 { offsetof(tDot11fIEWscProbeRes, PrimaryDeviceType),
9205 offsetof(tDot11fTLVPrimaryDeviceType, present), "PrimaryDeviceType",
9206 SigTlvPrimaryDeviceType, DOT11F_TLV_PRIMARYDEVICETYPE,
9207 0, 12, 12, 1, 2, 2, 1, },
9208 { offsetof(tDot11fIEWscProbeRes, DeviceName),
9209 offsetof(tDot11fTLVDeviceName, present), "DeviceName", SigTlvDeviceName,
9210 DOT11F_TLV_DEVICENAME, 0, 4, 36, 1, 2, 2, 1, },
9211 { offsetof(tDot11fIEWscProbeRes, ConfigMethods),
9212 offsetof(tDot11fTLVConfigMethods, present), "ConfigMethods",
9213 SigTlvConfigMethods, DOT11F_TLV_CONFIGMETHODS, 0, 6, 6, 1, 2, 2, 1, },
9214 { offsetof(tDot11fIEWscProbeRes, RFBands), offsetof(tDot11fTLVRFBands,
9215 present), "RFBands", SigTlvRFBands, DOT11F_TLV_RFBANDS,
9216 0, 5, 5, 0, 2, 2, 1, },
9217 { offsetof(tDot11fIEWscProbeRes, VendorExtension),
9218 offsetof(tDot11fTLVVendorExtension, present), "VendorExtension",
9219 SigTlvVendorExtension, DOT11F_TLV_VENDOREXTENSION,
9220 0, 7, 21, 0, 2, 2, 1, },
9221 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
9222 };
9223
dot11f_unpack_ie_wsc_probe_res(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEWscProbeRes * pDst,bool append_ie)9224 uint32_t dot11f_unpack_ie_wsc_probe_res(tpAniSirGlobal pCtx,
9225 uint8_t *pBuf,
9226 uint8_t ielen,
9227 tDot11fIEWscProbeRes *pDst,
9228 bool append_ie)
9229 {
9230 uint32_t status = DOT11F_PARSE_SUCCESS;
9231 (void)pBuf; (void)ielen; /* Shutup the compiler */
9232 pDst->present = 1;
9233 status = unpack_tlv_core(pCtx, pBuf, ielen,
9234 TLVS_WscProbeRes,
9235 (uint8_t *)pDst, sizeof(*pDst));
9236 return status;
9237 } /* End dot11f_unpack_ie_wsc_probe_res. */
9238
9239 #define SigIeWscProbeRes (0x0081)
9240
9241
9242 static const tTLVDefn TLVS_WscReassocRes[] = {
9243 { offsetof(tDot11fIEWscReassocRes, Version), offsetof(tDot11fTLVVersion,
9244 present), "Version", SigTlvVersion, DOT11F_TLV_VERSION,
9245 0, 5, 5, 1, 2, 2, 1, },
9246 { offsetof(tDot11fIEWscReassocRes, ResponseType),
9247 offsetof(tDot11fTLVResponseType, present), "ResponseType",
9248 SigTlvResponseType, DOT11F_TLV_RESPONSETYPE, 0, 5, 5, 1, 2, 2, 1, },
9249 { offsetof(tDot11fIEWscReassocRes, VendorExtension),
9250 offsetof(tDot11fTLVVendorExtension, present), "VendorExtension",
9251 SigTlvVendorExtension, DOT11F_TLV_VENDOREXTENSION,
9252 0, 7, 21, 0, 2, 2, 1, },
9253 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
9254 };
9255
dot11f_unpack_ie_wsc_reassoc_res(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEWscReassocRes * pDst,bool append_ie)9256 uint32_t dot11f_unpack_ie_wsc_reassoc_res(tpAniSirGlobal pCtx,
9257 uint8_t *pBuf,
9258 uint8_t ielen,
9259 tDot11fIEWscReassocRes *pDst,
9260 bool append_ie)
9261 {
9262 uint32_t status = DOT11F_PARSE_SUCCESS;
9263 (void)pBuf; (void)ielen; /* Shutup the compiler */
9264 pDst->present = 1;
9265 status = unpack_tlv_core(pCtx, pBuf, ielen,
9266 TLVS_WscReassocRes,
9267 (uint8_t *)pDst, sizeof(*pDst));
9268 return status;
9269 } /* End dot11f_unpack_ie_wsc_reassoc_res. */
9270
9271 #define SigIeWscReassocRes (0x0082)
9272
9273
dot11f_unpack_ie_addba_extn_element(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEaddba_extn_element * pDst,bool append_ie)9274 uint32_t dot11f_unpack_ie_addba_extn_element(tpAniSirGlobal pCtx,
9275 uint8_t *pBuf,
9276 uint8_t ielen,
9277 tDot11fIEaddba_extn_element *pDst,
9278 bool append_ie)
9279 {
9280 uint32_t status = DOT11F_PARSE_SUCCESS;
9281 uint8_t tmp82__;
9282 (void) pBuf; (void)ielen; /* Shutup the compiler */
9283 if (pDst->present)
9284 return DOT11F_DUPLICATE_IE;
9285 pDst->present = 1;
9286 if (unlikely(ielen < 1)) {
9287 pDst->present = 0;
9288 return DOT11F_INCOMPLETE_IE;
9289 }
9290
9291 tmp82__ = *pBuf;
9292 pDst->no_fragmentation = tmp82__ >> 0 & 0x1;
9293 pDst->he_frag_operation = tmp82__ >> 1 & 0x3;
9294 pDst->reserved = tmp82__ >> 3 & 0x3;
9295 pDst->extd_buff_size = tmp82__ >> 5 & 0x7;
9296 (void)pCtx;
9297 return status;
9298 } /* End dot11f_unpack_ie_addba_extn_element. */
9299
9300 #define SigIeaddba_extn_element (0x0083)
9301
9302
dot11f_unpack_ie_bss_color_change(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEbss_color_change * pDst,bool append_ie)9303 uint32_t dot11f_unpack_ie_bss_color_change(tpAniSirGlobal pCtx,
9304 uint8_t *pBuf,
9305 uint8_t ielen,
9306 tDot11fIEbss_color_change *pDst,
9307 bool append_ie)
9308 {
9309 uint32_t status = DOT11F_PARSE_SUCCESS;
9310 uint8_t tmp83__;
9311 (void) pBuf; (void)ielen; /* Shutup the compiler */
9312 if (pDst->present)
9313 return DOT11F_DUPLICATE_IE;
9314 pDst->present = 1;
9315 if (unlikely(ielen < 1)) {
9316 pDst->present = 0;
9317 return DOT11F_INCOMPLETE_IE;
9318 }
9319
9320 pDst->countdown = *pBuf;
9321 pBuf += 1;
9322 ielen -= (uint8_t)1;
9323 if (unlikely(ielen < 1)) {
9324 pDst->present = 0;
9325 return DOT11F_INCOMPLETE_IE;
9326 }
9327
9328 tmp83__ = *pBuf;
9329 pDst->new_color = tmp83__ >> 0 & 0x3f;
9330 pDst->reserved = tmp83__ >> 6 & 0x3;
9331 (void)pCtx;
9332 return status;
9333 } /* End dot11f_unpack_ie_bss_color_change. */
9334
9335 #define SigIebss_color_change (0x0084)
9336
9337
dot11f_unpack_ie_bss_max_idle_period(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEbss_max_idle_period * pDst,bool append_ie)9338 uint32_t dot11f_unpack_ie_bss_max_idle_period(tpAniSirGlobal pCtx,
9339 uint8_t *pBuf,
9340 uint8_t ielen,
9341 tDot11fIEbss_max_idle_period *pDst,
9342 bool append_ie)
9343 {
9344 uint32_t status = DOT11F_PARSE_SUCCESS;
9345 uint8_t tmp84__;
9346 (void) pBuf; (void)ielen; /* Shutup the compiler */
9347 if (pDst->present)
9348 return DOT11F_DUPLICATE_IE;
9349 pDst->present = 1;
9350 if (unlikely(ielen < 2)) {
9351 pDst->present = 0;
9352 return DOT11F_INCOMPLETE_IE;
9353 }
9354
9355 framesntohs(pCtx, &pDst->max_idle_period, pBuf, 0);
9356 pBuf += 2;
9357 ielen -= (uint8_t)2;
9358 if (unlikely(ielen < 1)) {
9359 pDst->present = 0;
9360 return DOT11F_INCOMPLETE_IE;
9361 }
9362
9363 tmp84__ = *pBuf;
9364 pDst->prot_keep_alive_reqd = tmp84__ >> 0 & 0x1;
9365 pDst->reserved = tmp84__ >> 1 & 0x7f;
9366 (void)pCtx;
9367 return status;
9368 } /* End dot11f_unpack_ie_bss_max_idle_period. */
9369
9370 #define SigIebss_max_idle_period (0x0085)
9371
9372
9373 static const tFFDefn FFS_descriptor_element[] = {
9374 { NULL, 0, 0, 0,},
9375 };
9376
9377 static const tIEDefn IES_descriptor_element[] = {
9378 { offsetof(tDot11fIEdescriptor_element, tclas_mask),
9379 offsetof(tDot11fIEtclas_mask, present), 0, "tclas_mask",
9380 0, 20, 20, SigIetclas_mask, {0, 0, 0, 0, 0},
9381 0, DOT11F_EID_TCLAS_MASK, 89, 0, },
9382 { offsetof(tDot11fIEdescriptor_element, mscs_status),
9383 offsetof(tDot11fIEmscs_status, present), 0, "mscs_status",
9384 0, 3, 3, SigIemscs_status, {0, 0, 0, 0, 0},
9385 0, DOT11F_EID_MSCS_STATUS, 0, 0, },
9386 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },
9387 };
9388
dot11f_unpack_ie_descriptor_element(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEdescriptor_element * pDst,bool append_ie)9389 uint32_t dot11f_unpack_ie_descriptor_element(tpAniSirGlobal pCtx,
9390 uint8_t *pBuf,
9391 uint8_t ielen,
9392 tDot11fIEdescriptor_element *pDst,
9393 bool append_ie)
9394 {
9395 uint32_t status = DOT11F_PARSE_SUCCESS;
9396 (void) pBuf; (void)ielen; /* Shutup the compiler */
9397 if (pDst->present)
9398 return DOT11F_DUPLICATE_IE;
9399 pDst->present = 1;
9400 if (unlikely(ielen < 1)) {
9401 pDst->present = 0;
9402 return DOT11F_INCOMPLETE_IE;
9403 }
9404
9405 pDst->request_type = *pBuf;
9406 pBuf += 1;
9407 ielen -= (uint8_t)1;
9408 if (unlikely(ielen < 2)) {
9409 pDst->present = 0;
9410 return DOT11F_INCOMPLETE_IE;
9411 }
9412
9413 framesntohs(pCtx, &pDst->user_priority_control, pBuf, 0);
9414 pBuf += 2;
9415 ielen -= (uint8_t)2;
9416 if (unlikely(ielen < 4)) {
9417 pDst->present = 0;
9418 return DOT11F_INCOMPLETE_IE;
9419 }
9420
9421 framesntohl(pCtx, &pDst->stream_timeout, pBuf, 0);
9422 pBuf += 4;
9423 ielen -= (uint8_t)4;
9424 (void)pCtx;
9425 status |= unpack_core(pCtx,
9426 pBuf,
9427 ielen,
9428 FFS_descriptor_element,
9429 IES_descriptor_element,
9430 (uint8_t *)pDst,
9431 sizeof(*pDst),
9432 append_ie);
9433 return status;
9434 } /* End dot11f_unpack_ie_descriptor_element. */
9435
9436 #define SigIedescriptor_element (0x0086)
9437
9438
dot11f_unpack_ie_dh_parameter_element(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEdh_parameter_element * pDst,bool append_ie)9439 uint32_t dot11f_unpack_ie_dh_parameter_element(tpAniSirGlobal pCtx,
9440 uint8_t *pBuf,
9441 uint8_t ielen,
9442 tDot11fIEdh_parameter_element *pDst,
9443 bool append_ie)
9444 {
9445 uint32_t status = DOT11F_PARSE_SUCCESS;
9446 (void) pBuf; (void)ielen; /* Shutup the compiler */
9447 if (pDst->present)
9448 return DOT11F_DUPLICATE_IE;
9449 pDst->present = 1;
9450 if (unlikely(ielen < 2)) {
9451 pDst->present = 0;
9452 return DOT11F_INCOMPLETE_IE;
9453 }
9454
9455 DOT11F_MEMCPY(pCtx, pDst->group, pBuf, 2);
9456 pBuf += 2;
9457 ielen -= (uint8_t)2;
9458 pDst->num_public_key = (uint8_t)(ielen);
9459 DOT11F_MEMCPY(pCtx, pDst->public_key, pBuf, (ielen));
9460 (void)pCtx;
9461 return status;
9462 } /* End dot11f_unpack_ie_dh_parameter_element. */
9463
9464 #define SigIedh_parameter_element (0x0087)
9465
9466
dot11f_unpack_ie_eht_cap(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEeht_cap * pDst,bool append_ie)9467 uint32_t dot11f_unpack_ie_eht_cap(tpAniSirGlobal pCtx,
9468 uint8_t *pBuf,
9469 uint8_t ielen,
9470 tDot11fIEeht_cap *pDst,
9471 bool append_ie)
9472 {
9473 uint32_t status = DOT11F_PARSE_SUCCESS;
9474 uint16_t tmp85__;
9475 uint32_t tmp86__;
9476 uint32_t tmp87__;
9477 uint8_t tmp88__;
9478 uint32_t tmp89__;
9479 uint32_t tmp90__;
9480 uint32_t tmp91__;
9481 uint8_t tmp92__;
9482 (void) pBuf; (void)ielen; /* Shutup the compiler */
9483 if (pDst->present)
9484 return DOT11F_DUPLICATE_IE;
9485 pDst->present = 1;
9486 if (unlikely(ielen < 2)) {
9487 pDst->present = 0;
9488 return DOT11F_INCOMPLETE_IE;
9489 }
9490
9491 framesntohs(pCtx, &tmp85__, pBuf, 0);
9492 pBuf += 2;
9493 ielen -= 2;
9494 pDst->epcs_pri_access = tmp85__ >> 0 & 0x1;
9495 pDst->eht_om_ctl = tmp85__ >> 1 & 0x1;
9496 pDst->triggered_txop_sharing_mode1 = tmp85__ >> 2 & 0x1;
9497 pDst->triggered_txop_sharing_mode2 = tmp85__ >> 3 & 0x1;
9498 pDst->restricted_twt = tmp85__ >> 4 & 0x1;
9499 pDst->scs_traffic_desc = tmp85__ >> 5 & 0x1;
9500 pDst->max_mpdu_len = tmp85__ >> 6 & 0x3;
9501 pDst->max_a_mpdu_len_exponent_ext = tmp85__ >> 8 & 0x1;
9502 pDst->eht_trs_support = tmp85__ >> 9 & 0x1;
9503 pDst->txop_return_support_txop_share_m2 = tmp85__ >> 10 & 0x1;
9504 pDst->two_bqrs_support = tmp85__ >> 11 & 0x1;
9505 pDst->eht_link_adaptation_support = tmp85__ >> 12 & 0x3;
9506 pDst->reserved = tmp85__ >> 14 & 0x3;
9507 if (unlikely(ielen < 4)) {
9508 pDst->present = 0;
9509 return DOT11F_INCOMPLETE_IE;
9510 }
9511
9512 framesntohl(pCtx, &tmp86__, pBuf, 0);
9513 pBuf += 4;
9514 ielen -= 4;
9515 pDst->reserved2 = tmp86__ >> 0 & 0x1;
9516 pDst->support_320mhz_6ghz = tmp86__ >> 1 & 0x1;
9517 pDst->ru_242tone_wt_20mhz = tmp86__ >> 2 & 0x1;
9518 pDst->ndp_4x_eht_ltf_3dot2_us_gi = tmp86__ >> 3 & 0x1;
9519 pDst->partial_bw_mu_mimo = tmp86__ >> 4 & 0x1;
9520 pDst->su_beamformer = tmp86__ >> 5 & 0x1;
9521 pDst->su_beamformee = tmp86__ >> 6 & 0x1;
9522 pDst->bfee_ss_le_80mhz = tmp86__ >> 7 & 0x7;
9523 pDst->bfee_ss_160mhz = tmp86__ >> 10 & 0x7;
9524 pDst->bfee_ss_320mhz = tmp86__ >> 13 & 0x7;
9525 pDst->num_sounding_dim_le_80mhz = tmp86__ >> 16 & 0x7;
9526 pDst->num_sounding_dim_160mhz = tmp86__ >> 19 & 0x7;
9527 pDst->num_sounding_dim_320mhz = tmp86__ >> 22 & 0x7;
9528 pDst->ng_16_su_feedback = tmp86__ >> 25 & 0x1;
9529 pDst->ng_16_mu_feedback = tmp86__ >> 26 & 0x1;
9530 pDst->cb_sz_4_2_su_feedback = tmp86__ >> 27 & 0x1;
9531 pDst->cb_sz_7_5_su_feedback = tmp86__ >> 28 & 0x1;
9532 pDst->trig_su_bforming_feedback = tmp86__ >> 29 & 0x1;
9533 pDst->trig_mu_bforming_partial_bw_feedback = tmp86__ >> 30 & 0x1;
9534 pDst->triggered_cqi_feedback = tmp86__ >> 31 & 0x1;
9535 if (unlikely(ielen < 4)) {
9536 pDst->present = 0;
9537 return DOT11F_INCOMPLETE_IE;
9538 }
9539
9540 framesntohl(pCtx, &tmp87__, pBuf, 0);
9541 pBuf += 4;
9542 ielen -= 4;
9543 pDst->partial_bw_dl_mu_mimo = tmp87__ >> 0 & 0x1;
9544 pDst->psr_based_sr = tmp87__ >> 1 & 0x1;
9545 pDst->power_boost_factor = tmp87__ >> 2 & 0x1;
9546 pDst->eht_mu_ppdu_4x_ltf_0_8_us_gi = tmp87__ >> 3 & 0x1;
9547 pDst->max_nc = tmp87__ >> 4 & 0xf;
9548 pDst->non_trig_cqi_feedback = tmp87__ >> 8 & 0x1;
9549 pDst->tx_1024_4096_qam_lt_242_tone_ru = tmp87__ >> 9 & 0x1;
9550 pDst->rx_1024_4096_qam_lt_242_tone_ru = tmp87__ >> 10 & 0x1;
9551 pDst->ppet_present = tmp87__ >> 11 & 0x1;
9552 pDst->common_nominal_pkt_padding = tmp87__ >> 12 & 0x3;
9553 pDst->max_num_eht_ltf = tmp87__ >> 14 & 0x1f;
9554 pDst->mcs_15 = tmp87__ >> 19 & 0xf;
9555 pDst->eht_dup_6ghz = tmp87__ >> 23 & 0x1;
9556 pDst->op_sta_rx_ndp_wider_bw_20mhz = tmp87__ >> 24 & 0x1;
9557 pDst->non_ofdma_ul_mu_mimo_le_80mhz = tmp87__ >> 25 & 0x1;
9558 pDst->non_ofdma_ul_mu_mimo_160mhz = tmp87__ >> 26 & 0x1;
9559 pDst->non_ofdma_ul_mu_mimo_320mhz = tmp87__ >> 27 & 0x1;
9560 pDst->mu_bformer_le_80mhz = tmp87__ >> 28 & 0x1;
9561 pDst->mu_bformer_160mhz = tmp87__ >> 29 & 0x1;
9562 pDst->mu_bformer_320mhz = tmp87__ >> 30 & 0x1;
9563 pDst->tb_sounding_feedback_rl = tmp87__ >> 31 & 0x1;
9564 if (unlikely(ielen < 1)) {
9565 pDst->present = 0;
9566 return DOT11F_INCOMPLETE_IE;
9567 }
9568
9569 tmp88__ = *pBuf;
9570 pBuf += 1;
9571 ielen -= 1;
9572 pDst->rx_1k_qam_in_wider_bw_dl_ofdma = tmp88__ >> 0 & 0x1;
9573 pDst->rx_4k_qam_in_wider_bw_dl_ofdma = tmp88__ >> 1 & 0x1;
9574 pDst->limited_cap_support_20mhz = tmp88__ >> 2 & 0x1;
9575 pDst->triggered_mu_bf_full_bw_fb_and_dl_mumimo = tmp88__ >> 3 & 0x1;
9576 pDst->mru_support_20mhz = tmp88__ >> 4 & 0x1;
9577 pDst->reserved3 = tmp88__ >> 5 & 0x7;
9578 if (unlikely(ielen < 4)) {
9579 pDst->present = 0;
9580 return DOT11F_INCOMPLETE_IE;
9581 }
9582
9583 framesntohl(pCtx, &tmp89__, pBuf, 0);
9584 pBuf += 4;
9585 ielen -= 4;
9586 pDst->bw_20_rx_max_nss_for_mcs_0_to_7 = tmp89__ >> 0 & 0xf;
9587 pDst->bw_20_tx_max_nss_for_mcs_0_to_7 = tmp89__ >> 4 & 0xf;
9588 pDst->bw_20_rx_max_nss_for_mcs_8_and_9 = tmp89__ >> 8 & 0xf;
9589 pDst->bw_20_tx_max_nss_for_mcs_8_and_9 = tmp89__ >> 12 & 0xf;
9590 pDst->bw_20_rx_max_nss_for_mcs_10_and_11 = tmp89__ >> 16 & 0xf;
9591 pDst->bw_20_tx_max_nss_for_mcs_10_and_11 = tmp89__ >> 20 & 0xf;
9592 pDst->bw_20_rx_max_nss_for_mcs_12_and_13 = tmp89__ >> 24 & 0xf;
9593 pDst->bw_20_tx_max_nss_for_mcs_12_and_13 = tmp89__ >> 28 & 0xf;
9594 if (unlikely(ielen < 4)) {
9595 pDst->present = 0;
9596 return DOT11F_INCOMPLETE_IE;
9597 }
9598
9599 framesntohl(pCtx, &tmp90__, pBuf, 0);
9600 pBuf += 4;
9601 ielen -= 4;
9602 pDst->bw_le_80_rx_max_nss_for_mcs_0_to_9 = tmp90__ >> 0 & 0xf;
9603 pDst->bw_le_80_tx_max_nss_for_mcs_0_to_9 = tmp90__ >> 4 & 0xf;
9604 pDst->bw_le_80_rx_max_nss_for_mcs_10_and_11 = tmp90__ >> 8 & 0xf;
9605 pDst->bw_le_80_tx_max_nss_for_mcs_10_and_11 = tmp90__ >> 12 & 0xf;
9606 pDst->bw_le_80_rx_max_nss_for_mcs_12_and_13 = tmp90__ >> 16 & 0xf;
9607 pDst->bw_le_80_tx_max_nss_for_mcs_12_and_13 = tmp90__ >> 20 & 0xf;
9608 pDst->bw_160_rx_max_nss_for_mcs_0_to_9 = tmp90__ >> 24 & 0xf;
9609 pDst->bw_160_tx_max_nss_for_mcs_0_to_9 = tmp90__ >> 28 & 0xf;
9610 if (unlikely(ielen < 4)) {
9611 pDst->present = 0;
9612 return DOT11F_INCOMPLETE_IE;
9613 }
9614
9615 framesntohl(pCtx, &tmp91__, pBuf, 0);
9616 pBuf += 4;
9617 ielen -= 4;
9618 pDst->bw_160_rx_max_nss_for_mcs_10_and_11 = tmp91__ >> 0 & 0xf;
9619 pDst->bw_160_tx_max_nss_for_mcs_10_and_11 = tmp91__ >> 4 & 0xf;
9620 pDst->bw_160_rx_max_nss_for_mcs_12_and_13 = tmp91__ >> 8 & 0xf;
9621 pDst->bw_160_tx_max_nss_for_mcs_12_and_13 = tmp91__ >> 12 & 0xf;
9622 pDst->bw_320_rx_max_nss_for_mcs_0_to_9 = tmp91__ >> 16 & 0xf;
9623 pDst->bw_320_tx_max_nss_for_mcs_0_to_9 = tmp91__ >> 20 & 0xf;
9624 pDst->bw_320_rx_max_nss_for_mcs_10_and_11 = tmp91__ >> 24 & 0xf;
9625 pDst->bw_320_tx_max_nss_for_mcs_10_and_11 = tmp91__ >> 28 & 0xf;
9626 if (unlikely(ielen < 1)) {
9627 pDst->present = 0;
9628 return DOT11F_INCOMPLETE_IE;
9629 }
9630
9631 tmp92__ = *pBuf;
9632 pBuf += 1;
9633 ielen -= 1;
9634 pDst->bw_320_rx_max_nss_for_mcs_12_and_13 = tmp92__ >> 0 & 0xf;
9635 pDst->bw_320_tx_max_nss_for_mcs_12_and_13 = tmp92__ >> 4 & 0xf;
9636 switch (pDst->ppet_present) {
9637 case 1:
9638 pDst->ppet.ppe_threshold.num_ppe_th = (uint8_t)(ielen);
9639 if (ielen > 62) {
9640 pDst->present = 0;
9641 return DOT11F_SKIPPED_BAD_IE;
9642 }
9643
9644 DOT11F_MEMCPY(pCtx, pDst->ppet.ppe_threshold.ppe_th, pBuf, (ielen));
9645 pBuf += (ielen);
9646 ielen -= (ielen);
9647 break;
9648 }
9649 (void)pCtx;
9650 return status;
9651 } /* End dot11f_unpack_ie_eht_cap. */
9652
9653 #define SigIeeht_cap (0x0088)
9654
9655
dot11f_unpack_ie_eht_op(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEeht_op * pDst,bool append_ie)9656 uint32_t dot11f_unpack_ie_eht_op(tpAniSirGlobal pCtx,
9657 uint8_t *pBuf,
9658 uint8_t ielen,
9659 tDot11fIEeht_op *pDst,
9660 bool append_ie)
9661 {
9662 uint32_t status = DOT11F_PARSE_SUCCESS;
9663 uint8_t tmp93__;
9664 uint32_t tmp94__;
9665 uint8_t tmp95__;
9666 (void) pBuf; (void)ielen; /* Shutup the compiler */
9667 if (pDst->present)
9668 return DOT11F_DUPLICATE_IE;
9669 pDst->present = 1;
9670 if (unlikely(ielen < 1)) {
9671 pDst->present = 0;
9672 return DOT11F_INCOMPLETE_IE;
9673 }
9674
9675 tmp93__ = *pBuf;
9676 pBuf += 1;
9677 ielen -= 1;
9678 pDst->eht_op_information_present = tmp93__ >> 0 & 0x1;
9679 pDst->disabled_sub_chan_bitmap_present = tmp93__ >> 1 & 0x1;
9680 pDst->eht_default_pe_duration = tmp93__ >> 2 & 0x1;
9681 pDst->group_addr_bu_indication_limit = tmp93__ >> 3 & 0x1;
9682 pDst->group_addr_bu_indication_exponent = tmp93__ >> 4 & 0x3;
9683 pDst->reserved = tmp93__ >> 6 & 0x3;
9684 if (unlikely(ielen < 4)) {
9685 pDst->present = 0;
9686 return DOT11F_INCOMPLETE_IE;
9687 }
9688
9689 framesntohl(pCtx, &tmp94__, pBuf, 0);
9690 pBuf += 4;
9691 ielen -= 4;
9692 pDst->basic_rx_max_nss_for_mcs_0_to_7 = tmp94__ >> 0 & 0xf;
9693 pDst->basic_tx_max_nss_for_mcs_0_to_7 = tmp94__ >> 4 & 0xf;
9694 pDst->basic_rx_max_nss_for_mcs_8_and_9 = tmp94__ >> 8 & 0xf;
9695 pDst->basic_tx_max_nss_for_mcs_8_and_9 = tmp94__ >> 12 & 0xf;
9696 pDst->basic_rx_max_nss_for_mcs_10_and_11 = tmp94__ >> 16 & 0xf;
9697 pDst->basic_tx_max_nss_for_mcs_10_and_11 = tmp94__ >> 20 & 0xf;
9698 pDst->basic_rx_max_nss_for_mcs_12_and_13 = tmp94__ >> 24 & 0xf;
9699 pDst->basic_tx_max_nss_for_mcs_12_and_13 = tmp94__ >> 28 & 0xf;
9700 if (unlikely(ielen < 1)) {
9701 pDst->present = 0;
9702 return DOT11F_INCOMPLETE_IE;
9703 }
9704
9705 tmp95__ = *pBuf;
9706 pBuf += 1;
9707 ielen -= 1;
9708 pDst->channel_width = tmp95__ >> 0 & 0x7;
9709 pDst->reserved_1 = tmp95__ >> 3 & 0x1f;
9710 if (unlikely(ielen < 1)) {
9711 pDst->present = 0;
9712 return DOT11F_INCOMPLETE_IE;
9713 }
9714
9715 pDst->ccfs0 = *pBuf;
9716 pBuf += 1;
9717 ielen -= (uint8_t)1;
9718 if (unlikely(ielen < 1)) {
9719 pDst->present = 0;
9720 return DOT11F_INCOMPLETE_IE;
9721 }
9722
9723 pDst->ccfs1 = *pBuf;
9724 pBuf += 1;
9725 ielen -= (uint8_t)1;
9726 if (unlikely(ielen < pDst->disabled_sub_chan_bitmap_present * 2)) {
9727 pDst->present = 0;
9728 return DOT11F_INCOMPLETE_IE;
9729 }
9730
9731 if (pDst->disabled_sub_chan_bitmap_present > 1) {
9732 pDst->present = 0;
9733 return DOT11F_SKIPPED_BAD_IE;
9734 }
9735
9736 DOT11F_MEMCPY(pCtx, pDst->disabled_sub_chan_bitmap, pBuf, (pDst->disabled_sub_chan_bitmap_present * 2));
9737 (void)pCtx;
9738 return status;
9739 } /* End dot11f_unpack_ie_eht_op. */
9740
9741 #define SigIeeht_op (0x0089)
9742
9743
dot11f_unpack_ie_esp_information(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEesp_information * pDst,bool append_ie)9744 uint32_t dot11f_unpack_ie_esp_information(tpAniSirGlobal pCtx,
9745 uint8_t *pBuf,
9746 uint8_t ielen,
9747 tDot11fIEesp_information *pDst,
9748 bool append_ie)
9749 {
9750 uint32_t status = DOT11F_PARSE_SUCCESS;
9751 (void) pBuf; (void)ielen; /* Shutup the compiler */
9752 if (pDst->present)
9753 return DOT11F_DUPLICATE_IE;
9754 pDst->present = 1;
9755 pDst->num_data = (uint8_t)(ielen);
9756 if (ielen > 96) {
9757 pDst->present = 0;
9758 return DOT11F_SKIPPED_BAD_IE;
9759 }
9760
9761 DOT11F_MEMCPY(pCtx, pDst->data, pBuf, (ielen));
9762 (void)pCtx;
9763 return status;
9764 } /* End dot11f_unpack_ie_esp_information. */
9765
9766 #define SigIeesp_information (0x008a)
9767
9768
dot11f_unpack_ie_ext_chan_switch_ann(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEext_chan_switch_ann * pDst,bool append_ie)9769 uint32_t dot11f_unpack_ie_ext_chan_switch_ann(tpAniSirGlobal pCtx,
9770 uint8_t *pBuf,
9771 uint8_t ielen,
9772 tDot11fIEext_chan_switch_ann *pDst,
9773 bool append_ie)
9774 {
9775 uint32_t status = DOT11F_PARSE_SUCCESS;
9776 (void) pBuf; (void)ielen; /* Shutup the compiler */
9777 if (pDst->present)
9778 return DOT11F_DUPLICATE_IE;
9779 pDst->present = 1;
9780 if (unlikely(ielen < 1)) {
9781 pDst->present = 0;
9782 return DOT11F_INCOMPLETE_IE;
9783 }
9784
9785 pDst->switch_mode = *pBuf;
9786 pBuf += 1;
9787 ielen -= (uint8_t)1;
9788 if (unlikely(ielen < 1)) {
9789 pDst->present = 0;
9790 return DOT11F_INCOMPLETE_IE;
9791 }
9792
9793 pDst->new_reg_class = *pBuf;
9794 pBuf += 1;
9795 ielen -= (uint8_t)1;
9796 if (unlikely(ielen < 1)) {
9797 pDst->present = 0;
9798 return DOT11F_INCOMPLETE_IE;
9799 }
9800
9801 pDst->new_channel = *pBuf;
9802 pBuf += 1;
9803 ielen -= (uint8_t)1;
9804 if (unlikely(ielen < 1)) {
9805 pDst->present = 0;
9806 return DOT11F_INCOMPLETE_IE;
9807 }
9808
9809 pDst->switch_count = *pBuf;
9810 (void)pCtx;
9811 return status;
9812 } /* End dot11f_unpack_ie_ext_chan_switch_ann. */
9813
9814 #define SigIeext_chan_switch_ann (0x008b)
9815
9816
dot11f_unpack_ie_fils_assoc_delay_info(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEfils_assoc_delay_info * pDst,bool append_ie)9817 uint32_t dot11f_unpack_ie_fils_assoc_delay_info(tpAniSirGlobal pCtx,
9818 uint8_t *pBuf,
9819 uint8_t ielen,
9820 tDot11fIEfils_assoc_delay_info *pDst,
9821 bool append_ie)
9822 {
9823 uint32_t status = DOT11F_PARSE_SUCCESS;
9824 (void) pBuf; (void)ielen; /* Shutup the compiler */
9825 if (pDst->present)
9826 return DOT11F_DUPLICATE_IE;
9827 pDst->present = 1;
9828 if (unlikely(ielen < 1)) {
9829 pDst->present = 0;
9830 return DOT11F_INCOMPLETE_IE;
9831 }
9832
9833 pDst->assoc_delay_info = *pBuf;
9834 (void)pCtx;
9835 return status;
9836 } /* End dot11f_unpack_ie_fils_assoc_delay_info. */
9837
9838 #define SigIefils_assoc_delay_info (0x008c)
9839
9840
dot11f_unpack_ie_fils_hlp_container(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEfils_hlp_container * pDst,bool append_ie)9841 uint32_t dot11f_unpack_ie_fils_hlp_container(tpAniSirGlobal pCtx,
9842 uint8_t *pBuf,
9843 uint8_t ielen,
9844 tDot11fIEfils_hlp_container *pDst,
9845 bool append_ie)
9846 {
9847 uint32_t status = DOT11F_PARSE_SUCCESS;
9848 (void) pBuf; (void)ielen; /* Shutup the compiler */
9849 if (pDst->present)
9850 return DOT11F_DUPLICATE_IE;
9851 pDst->present = 1;
9852 if (unlikely(ielen < 6)) {
9853 pDst->present = 0;
9854 return DOT11F_INCOMPLETE_IE;
9855 }
9856
9857 DOT11F_MEMCPY(pCtx, pDst->dest_mac, pBuf, 6);
9858 pBuf += 6;
9859 ielen -= (uint8_t)6;
9860 if (unlikely(ielen < 6)) {
9861 pDst->present = 0;
9862 return DOT11F_INCOMPLETE_IE;
9863 }
9864
9865 DOT11F_MEMCPY(pCtx, pDst->src_mac, pBuf, 6);
9866 pBuf += 6;
9867 ielen -= (uint8_t)6;
9868 pDst->num_hlp_packet = (uint8_t)(ielen);
9869 DOT11F_MEMCPY(pCtx, pDst->hlp_packet, pBuf, (ielen));
9870 (void)pCtx;
9871 return status;
9872 } /* End dot11f_unpack_ie_fils_hlp_container. */
9873
9874 #define SigIefils_hlp_container (0x008d)
9875
9876
dot11f_unpack_ie_fils_indication(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEfils_indication * pDst,bool append_ie)9877 uint32_t dot11f_unpack_ie_fils_indication(tpAniSirGlobal pCtx,
9878 uint8_t *pBuf,
9879 uint8_t ielen,
9880 tDot11fIEfils_indication *pDst,
9881 bool append_ie)
9882 {
9883 uint32_t status = DOT11F_PARSE_SUCCESS;
9884 uint16_t tmp96__;
9885 (void) pBuf; (void)ielen; /* Shutup the compiler */
9886 if (pDst->present)
9887 return DOT11F_DUPLICATE_IE;
9888 pDst->present = 1;
9889 if (unlikely(ielen < 2)) {
9890 pDst->present = 0;
9891 return DOT11F_INCOMPLETE_IE;
9892 }
9893
9894 framesntohs(pCtx, &tmp96__, pBuf, 0);
9895 pBuf += 2;
9896 ielen -= 2;
9897 pDst->public_key_identifiers_cnt = tmp96__ >> 0 & 0x7;
9898 pDst->realm_identifiers_cnt = tmp96__ >> 3 & 0x7;
9899 pDst->is_ip_config_supported = tmp96__ >> 6 & 0x1;
9900 pDst->is_cache_id_present = tmp96__ >> 7 & 0x1;
9901 pDst->is_hessid_present = tmp96__ >> 8 & 0x1;
9902 pDst->is_fils_sk_auth_supported = tmp96__ >> 9 & 0x1;
9903 pDst->is_fils_sk_auth_pfs_supported = tmp96__ >> 10 & 0x1;
9904 pDst->is_pk_auth_supported = tmp96__ >> 11 & 0x1;
9905 pDst->reserved = tmp96__ >> 12 & 0xf;
9906 pDst->num_variable_data = (uint8_t)(ielen);
9907 DOT11F_MEMCPY(pCtx, pDst->variable_data, pBuf, (ielen));
9908 (void)pCtx;
9909 return status;
9910 } /* End dot11f_unpack_ie_fils_indication. */
9911
9912 #define SigIefils_indication (0x008e)
9913
9914
dot11f_unpack_ie_fils_kde(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEfils_kde * pDst,bool append_ie)9915 uint32_t dot11f_unpack_ie_fils_kde(tpAniSirGlobal pCtx,
9916 uint8_t *pBuf,
9917 uint8_t ielen,
9918 tDot11fIEfils_kde *pDst,
9919 bool append_ie)
9920 {
9921 uint32_t status = DOT11F_PARSE_SUCCESS;
9922 (void) pBuf; (void)ielen; /* Shutup the compiler */
9923 if (pDst->present)
9924 return DOT11F_DUPLICATE_IE;
9925 pDst->present = 1;
9926 if (unlikely(ielen < 8)) {
9927 pDst->present = 0;
9928 return DOT11F_INCOMPLETE_IE;
9929 }
9930
9931 DOT11F_MEMCPY(pCtx, pDst->key_rsc, pBuf, 8);
9932 pBuf += 8;
9933 ielen -= (uint8_t)8;
9934 pDst->num_kde_list = (uint8_t)(ielen);
9935 DOT11F_MEMCPY(pCtx, pDst->kde_list, pBuf, (ielen));
9936 (void)pCtx;
9937 return status;
9938 } /* End dot11f_unpack_ie_fils_kde. */
9939
9940 #define SigIefils_kde (0x008f)
9941
9942
dot11f_unpack_ie_fils_key_confirmation(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEfils_key_confirmation * pDst,bool append_ie)9943 uint32_t dot11f_unpack_ie_fils_key_confirmation(tpAniSirGlobal pCtx,
9944 uint8_t *pBuf,
9945 uint8_t ielen,
9946 tDot11fIEfils_key_confirmation *pDst,
9947 bool append_ie)
9948 {
9949 uint32_t status = DOT11F_PARSE_SUCCESS;
9950 (void) pBuf; (void)ielen; /* Shutup the compiler */
9951 if (pDst->present)
9952 return DOT11F_DUPLICATE_IE;
9953 pDst->present = 1;
9954 pDst->num_key_auth = (uint8_t)(ielen);
9955 DOT11F_MEMCPY(pCtx, pDst->key_auth, pBuf, (ielen));
9956 (void)pCtx;
9957 return status;
9958 } /* End dot11f_unpack_ie_fils_key_confirmation. */
9959
9960 #define SigIefils_key_confirmation (0x0090)
9961
9962
dot11f_unpack_ie_fils_nonce(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEfils_nonce * pDst,bool append_ie)9963 uint32_t dot11f_unpack_ie_fils_nonce(tpAniSirGlobal pCtx,
9964 uint8_t *pBuf,
9965 uint8_t ielen,
9966 tDot11fIEfils_nonce *pDst,
9967 bool append_ie)
9968 {
9969 uint32_t status = DOT11F_PARSE_SUCCESS;
9970 (void) pBuf; (void)ielen; /* Shutup the compiler */
9971 if (pDst->present)
9972 return DOT11F_DUPLICATE_IE;
9973 pDst->present = 1;
9974 if (unlikely(ielen < 16)) {
9975 pDst->present = 0;
9976 return DOT11F_INCOMPLETE_IE;
9977 }
9978
9979 DOT11F_MEMCPY(pCtx, pDst->nonce, pBuf, 16);
9980 (void)pCtx;
9981 return status;
9982 } /* End dot11f_unpack_ie_fils_nonce. */
9983
9984 #define SigIefils_nonce (0x0091)
9985
9986
dot11f_unpack_ie_fils_public_key(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEfils_public_key * pDst,bool append_ie)9987 uint32_t dot11f_unpack_ie_fils_public_key(tpAniSirGlobal pCtx,
9988 uint8_t *pBuf,
9989 uint8_t ielen,
9990 tDot11fIEfils_public_key *pDst,
9991 bool append_ie)
9992 {
9993 uint32_t status = DOT11F_PARSE_SUCCESS;
9994 (void) pBuf; (void)ielen; /* Shutup the compiler */
9995 if (pDst->present)
9996 return DOT11F_DUPLICATE_IE;
9997 pDst->present = 1;
9998 if (unlikely(ielen < 1)) {
9999 pDst->present = 0;
10000 return DOT11F_INCOMPLETE_IE;
10001 }
10002
10003 pDst->key_type = *pBuf;
10004 pBuf += 1;
10005 ielen -= (uint8_t)1;
10006 pDst->num_public_key = (uint8_t)(ielen);
10007 DOT11F_MEMCPY(pCtx, pDst->public_key, pBuf, (ielen));
10008 (void)pCtx;
10009 return status;
10010 } /* End dot11f_unpack_ie_fils_public_key. */
10011
10012 #define SigIefils_public_key (0x0092)
10013
10014
dot11f_unpack_ie_fils_session(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEfils_session * pDst,bool append_ie)10015 uint32_t dot11f_unpack_ie_fils_session(tpAniSirGlobal pCtx,
10016 uint8_t *pBuf,
10017 uint8_t ielen,
10018 tDot11fIEfils_session *pDst,
10019 bool append_ie)
10020 {
10021 uint32_t status = DOT11F_PARSE_SUCCESS;
10022 (void) pBuf; (void)ielen; /* Shutup the compiler */
10023 if (pDst->present)
10024 return DOT11F_DUPLICATE_IE;
10025 pDst->present = 1;
10026 if (unlikely(ielen < 8)) {
10027 pDst->present = 0;
10028 return DOT11F_INCOMPLETE_IE;
10029 }
10030
10031 DOT11F_MEMCPY(pCtx, pDst->session, pBuf, 8);
10032 (void)pCtx;
10033 return status;
10034 } /* End dot11f_unpack_ie_fils_session. */
10035
10036 #define SigIefils_session (0x0093)
10037
10038
dot11f_unpack_ie_fils_wrapped_data(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEfils_wrapped_data * pDst,bool append_ie)10039 uint32_t dot11f_unpack_ie_fils_wrapped_data(tpAniSirGlobal pCtx,
10040 uint8_t *pBuf,
10041 uint8_t ielen,
10042 tDot11fIEfils_wrapped_data *pDst,
10043 bool append_ie)
10044 {
10045 uint32_t status = DOT11F_PARSE_SUCCESS;
10046 (void) pBuf; (void)ielen; /* Shutup the compiler */
10047 if (pDst->present)
10048 return DOT11F_DUPLICATE_IE;
10049 pDst->present = 1;
10050 pDst->num_wrapped_data = (uint8_t)(ielen);
10051 DOT11F_MEMCPY(pCtx, pDst->wrapped_data, pBuf, (ielen));
10052 (void)pCtx;
10053 return status;
10054 } /* End dot11f_unpack_ie_fils_wrapped_data. */
10055
10056 #define SigIefils_wrapped_data (0x0094)
10057
10058
dot11f_unpack_ie_fragment_ie(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEfragment_ie * pDst,bool append_ie)10059 uint32_t dot11f_unpack_ie_fragment_ie(tpAniSirGlobal pCtx,
10060 uint8_t *pBuf,
10061 uint8_t ielen,
10062 tDot11fIEfragment_ie *pDst,
10063 bool append_ie)
10064 {
10065 uint32_t status = DOT11F_PARSE_SUCCESS;
10066 (void) pBuf; (void)ielen; /* Shutup the compiler */
10067 if (pDst->present)
10068 return DOT11F_DUPLICATE_IE;
10069 pDst->present = 1;
10070 pDst->num_data = (uint8_t)(ielen);
10071 DOT11F_MEMCPY(pCtx, pDst->data, pBuf, (ielen));
10072 (void)pCtx;
10073 return status;
10074 } /* End dot11f_unpack_ie_fragment_ie. */
10075
10076 #define SigIefragment_ie (0x0095)
10077
10078
dot11f_unpack_ie_he_6ghz_band_cap(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEhe_6ghz_band_cap * pDst,bool append_ie)10079 uint32_t dot11f_unpack_ie_he_6ghz_band_cap(tpAniSirGlobal pCtx,
10080 uint8_t *pBuf,
10081 uint8_t ielen,
10082 tDot11fIEhe_6ghz_band_cap *pDst,
10083 bool append_ie)
10084 {
10085 uint32_t status = DOT11F_PARSE_SUCCESS;
10086 uint16_t tmp97__;
10087 (void) pBuf; (void)ielen; /* Shutup the compiler */
10088 if (pDst->present)
10089 return DOT11F_DUPLICATE_IE;
10090 pDst->present = 1;
10091 if (unlikely(ielen < 2)) {
10092 pDst->present = 0;
10093 return DOT11F_INCOMPLETE_IE;
10094 }
10095
10096 framesntohs(pCtx, &tmp97__, pBuf, 0);
10097 pDst->min_mpdu_start_spacing = tmp97__ >> 0 & 0x7;
10098 pDst->max_ampdu_len_exp = tmp97__ >> 3 & 0x7;
10099 pDst->max_mpdu_len = tmp97__ >> 6 & 0x7;
10100 pDst->sm_pow_save = tmp97__ >> 9 & 0x3;
10101 pDst->rd_responder = tmp97__ >> 11 & 0x1;
10102 pDst->rx_ant_pattern_consistency = tmp97__ >> 12 & 0x1;
10103 pDst->tx_ant_pattern_consistency = tmp97__ >> 13 & 0x1;
10104 pDst->reserved = tmp97__ >> 14 & 0x3;
10105 (void)pCtx;
10106 return status;
10107 } /* End dot11f_unpack_ie_he_6ghz_band_cap. */
10108
10109 #define SigIehe_6ghz_band_cap (0x0096)
10110
10111
dot11f_unpack_ie_he_cap(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEhe_cap * pDst,bool append_ie)10112 uint32_t dot11f_unpack_ie_he_cap(tpAniSirGlobal pCtx,
10113 uint8_t *pBuf,
10114 uint8_t ielen,
10115 tDot11fIEhe_cap *pDst,
10116 bool append_ie)
10117 {
10118 uint32_t status = DOT11F_PARSE_SUCCESS;
10119 uint32_t tmp98__;
10120 uint16_t tmp99__;
10121 uint32_t tmp100__;
10122 uint32_t tmp101__;
10123 uint16_t tmp102__;
10124 (void) pBuf; (void)ielen; /* Shutup the compiler */
10125 if (pDst->present)
10126 return DOT11F_DUPLICATE_IE;
10127 pDst->present = 1;
10128 if (unlikely(ielen < 4)) {
10129 pDst->present = 0;
10130 return DOT11F_INCOMPLETE_IE;
10131 }
10132
10133 framesntohl(pCtx, &tmp98__, pBuf, 0);
10134 pBuf += 4;
10135 ielen -= 4;
10136 pDst->htc_he = tmp98__ >> 0 & 0x1;
10137 pDst->twt_request = tmp98__ >> 1 & 0x1;
10138 pDst->twt_responder = tmp98__ >> 2 & 0x1;
10139 pDst->fragmentation = tmp98__ >> 3 & 0x3;
10140 pDst->max_num_frag_msdu_amsdu_exp = tmp98__ >> 5 & 0x7;
10141 pDst->min_frag_size = tmp98__ >> 8 & 0x3;
10142 pDst->trigger_frm_mac_pad = tmp98__ >> 10 & 0x3;
10143 pDst->multi_tid_aggr_rx_supp = tmp98__ >> 12 & 0x7;
10144 pDst->he_link_adaptation = tmp98__ >> 15 & 0x3;
10145 pDst->all_ack = tmp98__ >> 17 & 0x1;
10146 pDst->trigd_rsp_sched = tmp98__ >> 18 & 0x1;
10147 pDst->a_bsr = tmp98__ >> 19 & 0x1;
10148 pDst->broadcast_twt = tmp98__ >> 20 & 0x1;
10149 pDst->ba_32bit_bitmap = tmp98__ >> 21 & 0x1;
10150 pDst->mu_cascade = tmp98__ >> 22 & 0x1;
10151 pDst->ack_enabled_multitid = tmp98__ >> 23 & 0x1;
10152 pDst->reserved = tmp98__ >> 24 & 0x1;
10153 pDst->omi_a_ctrl = tmp98__ >> 25 & 0x1;
10154 pDst->ofdma_ra = tmp98__ >> 26 & 0x1;
10155 pDst->max_ampdu_len_exp_ext = tmp98__ >> 27 & 0x3;
10156 pDst->amsdu_frag = tmp98__ >> 29 & 0x1;
10157 pDst->flex_twt_sched = tmp98__ >> 30 & 0x1;
10158 pDst->rx_ctrl_frame = tmp98__ >> 31 & 0x1;
10159 if (unlikely(ielen < 2)) {
10160 pDst->present = 0;
10161 return DOT11F_INCOMPLETE_IE;
10162 }
10163
10164 framesntohs(pCtx, &tmp99__, pBuf, 0);
10165 pBuf += 2;
10166 ielen -= 2;
10167 pDst->bsrp_ampdu_aggr = tmp99__ >> 0 & 0x1;
10168 pDst->qtp = tmp99__ >> 1 & 0x1;
10169 pDst->a_bqr = tmp99__ >> 2 & 0x1;
10170 pDst->spatial_reuse_param_rspder = tmp99__ >> 3 & 0x1;
10171 pDst->ndp_feedback_supp = tmp99__ >> 4 & 0x1;
10172 pDst->ops_supp = tmp99__ >> 5 & 0x1;
10173 pDst->amsdu_in_ampdu = tmp99__ >> 6 & 0x1;
10174 pDst->multi_tid_aggr_tx_supp = tmp99__ >> 7 & 0x7;
10175 pDst->he_sub_ch_sel_tx_supp = tmp99__ >> 10 & 0x1;
10176 pDst->ul_2x996_tone_ru_supp = tmp99__ >> 11 & 0x1;
10177 pDst->om_ctrl_ul_mu_data_dis_rx = tmp99__ >> 12 & 0x1;
10178 pDst->he_dynamic_smps = tmp99__ >> 13 & 0x1;
10179 pDst->punctured_sounding_supp = tmp99__ >> 14 & 0x1;
10180 pDst->ht_vht_trg_frm_rx_supp = tmp99__ >> 15 & 0x1;
10181 if (unlikely(ielen < 4)) {
10182 pDst->present = 0;
10183 return DOT11F_INCOMPLETE_IE;
10184 }
10185
10186 framesntohl(pCtx, &tmp100__, pBuf, 0);
10187 pBuf += 4;
10188 ielen -= 4;
10189 pDst->reserved2 = tmp100__ >> 0 & 0x1;
10190 pDst->chan_width_0 = tmp100__ >> 1 & 0x1;
10191 pDst->chan_width_1 = tmp100__ >> 2 & 0x1;
10192 pDst->chan_width_2 = tmp100__ >> 3 & 0x1;
10193 pDst->chan_width_3 = tmp100__ >> 4 & 0x1;
10194 pDst->chan_width_4 = tmp100__ >> 5 & 0x1;
10195 pDst->chan_width_5 = tmp100__ >> 6 & 0x1;
10196 pDst->chan_width_6 = tmp100__ >> 7 & 0x1;
10197 pDst->rx_pream_puncturing = tmp100__ >> 8 & 0xf;
10198 pDst->device_class = tmp100__ >> 12 & 0x1;
10199 pDst->ldpc_coding = tmp100__ >> 13 & 0x1;
10200 pDst->he_1x_ltf_800_gi_ppdu = tmp100__ >> 14 & 0x1;
10201 pDst->midamble_tx_rx_max_nsts = tmp100__ >> 15 & 0x3;
10202 pDst->he_4x_ltf_3200_gi_ndp = tmp100__ >> 17 & 0x1;
10203 pDst->tb_ppdu_tx_stbc_lt_80mhz = tmp100__ >> 18 & 0x1;
10204 pDst->rx_stbc_lt_80mhz = tmp100__ >> 19 & 0x1;
10205 pDst->doppler = tmp100__ >> 20 & 0x3;
10206 pDst->ul_mu = tmp100__ >> 22 & 0x3;
10207 pDst->dcm_enc_tx = tmp100__ >> 24 & 0x7;
10208 pDst->dcm_enc_rx = tmp100__ >> 27 & 0x7;
10209 pDst->ul_he_mu = tmp100__ >> 30 & 0x1;
10210 pDst->su_beamformer = tmp100__ >> 31 & 0x1;
10211 if (unlikely(ielen < 4)) {
10212 pDst->present = 0;
10213 return DOT11F_INCOMPLETE_IE;
10214 }
10215
10216 framesntohl(pCtx, &tmp101__, pBuf, 0);
10217 pBuf += 4;
10218 ielen -= 4;
10219 pDst->su_beamformee = tmp101__ >> 0 & 0x1;
10220 pDst->mu_beamformer = tmp101__ >> 1 & 0x1;
10221 pDst->bfee_sts_lt_80 = tmp101__ >> 2 & 0x7;
10222 pDst->bfee_sts_gt_80 = tmp101__ >> 5 & 0x7;
10223 pDst->num_sounding_lt_80 = tmp101__ >> 8 & 0x7;
10224 pDst->num_sounding_gt_80 = tmp101__ >> 11 & 0x7;
10225 pDst->su_feedback_tone16 = tmp101__ >> 14 & 0x1;
10226 pDst->mu_feedback_tone16 = tmp101__ >> 15 & 0x1;
10227 pDst->codebook_su = tmp101__ >> 16 & 0x1;
10228 pDst->codebook_mu = tmp101__ >> 17 & 0x1;
10229 pDst->beamforming_feedback = tmp101__ >> 18 & 0x7;
10230 pDst->he_er_su_ppdu = tmp101__ >> 21 & 0x1;
10231 pDst->dl_mu_mimo_part_bw = tmp101__ >> 22 & 0x1;
10232 pDst->ppet_present = tmp101__ >> 23 & 0x1;
10233 pDst->srp = tmp101__ >> 24 & 0x1;
10234 pDst->power_boost = tmp101__ >> 25 & 0x1;
10235 pDst->he_ltf_800_gi_4x = tmp101__ >> 26 & 0x1;
10236 pDst->max_nc = tmp101__ >> 27 & 0x7;
10237 pDst->tb_ppdu_tx_stbc_gt_80mhz = tmp101__ >> 30 & 0x1;
10238 pDst->rx_stbc_gt_80mhz = tmp101__ >> 31 & 0x1;
10239 if (unlikely(ielen < 2)) {
10240 pDst->present = 0;
10241 return DOT11F_INCOMPLETE_IE;
10242 }
10243
10244 framesntohs(pCtx, &tmp102__, pBuf, 0);
10245 pBuf += 2;
10246 ielen -= 2;
10247 pDst->er_he_ltf_800_gi_4x = tmp102__ >> 0 & 0x1;
10248 pDst->he_ppdu_20_in_40Mhz_2G = tmp102__ >> 1 & 0x1;
10249 pDst->he_ppdu_20_in_160_80p80Mhz = tmp102__ >> 2 & 0x1;
10250 pDst->he_ppdu_80_in_160_80p80Mhz = tmp102__ >> 3 & 0x1;
10251 pDst->er_1x_he_ltf_gi = tmp102__ >> 4 & 0x1;
10252 pDst->midamble_tx_rx_1x_he_ltf = tmp102__ >> 5 & 0x1;
10253 pDst->dcm_max_bw = tmp102__ >> 6 & 0x3;
10254 pDst->longer_than_16_he_sigb_ofdm_sym = tmp102__ >> 8 & 0x1;
10255 pDst->non_trig_cqi_feedback = tmp102__ >> 9 & 0x1;
10256 pDst->tx_1024_qam_lt_242_tone_ru = tmp102__ >> 10 & 0x1;
10257 pDst->rx_1024_qam_lt_242_tone_ru = tmp102__ >> 11 & 0x1;
10258 pDst->rx_full_bw_su_he_mu_compress_sigb = tmp102__ >> 12 & 0x1;
10259 pDst->rx_full_bw_su_he_mu_non_cmpr_sigb = tmp102__ >> 13 & 0x1;
10260 pDst->reserved3 = tmp102__ >> 14 & 0x3;
10261 if (unlikely(ielen < 1)) {
10262 pDst->present = 0;
10263 return DOT11F_INCOMPLETE_IE;
10264 }
10265
10266 pDst->reserved4 = *pBuf;
10267 pBuf += 1;
10268 ielen -= (uint8_t)1;
10269 if (unlikely(ielen < 2)) {
10270 pDst->present = 0;
10271 return DOT11F_INCOMPLETE_IE;
10272 }
10273
10274 framesntohs(pCtx, &pDst->rx_he_mcs_map_lt_80, pBuf, 0);
10275 pBuf += 2;
10276 ielen -= (uint8_t)2;
10277 if (unlikely(ielen < 2)) {
10278 pDst->present = 0;
10279 return DOT11F_INCOMPLETE_IE;
10280 }
10281
10282 framesntohs(pCtx, &pDst->tx_he_mcs_map_lt_80, pBuf, 0);
10283 pBuf += 2;
10284 ielen -= (uint8_t)2;
10285 if (unlikely(ielen < pDst->chan_width_2 * 2)) {
10286 pDst->present = 0;
10287 return DOT11F_INCOMPLETE_IE;
10288 }
10289
10290 if (pDst->chan_width_2 > 1) {
10291 pDst->present = 0;
10292 return DOT11F_SKIPPED_BAD_IE;
10293 }
10294
10295 DOT11F_MEMCPY(pCtx, pDst->rx_he_mcs_map_160, pBuf, (pDst->chan_width_2 * 2));
10296 pBuf += (pDst->chan_width_2 * 2);
10297 ielen -= (pDst->chan_width_2 * 2);
10298 if (unlikely(ielen < pDst->chan_width_2 * 2)) {
10299 pDst->present = 0;
10300 return DOT11F_INCOMPLETE_IE;
10301 }
10302
10303 if (pDst->chan_width_2 > 1) {
10304 pDst->present = 0;
10305 return DOT11F_SKIPPED_BAD_IE;
10306 }
10307
10308 DOT11F_MEMCPY(pCtx, pDst->tx_he_mcs_map_160, pBuf, (pDst->chan_width_2 * 2));
10309 pBuf += (pDst->chan_width_2 * 2);
10310 ielen -= (pDst->chan_width_2 * 2);
10311 if (unlikely(ielen < pDst->chan_width_3 * 2)) {
10312 pDst->present = 0;
10313 return DOT11F_INCOMPLETE_IE;
10314 }
10315
10316 if (pDst->chan_width_3 > 1) {
10317 pDst->present = 0;
10318 return DOT11F_SKIPPED_BAD_IE;
10319 }
10320
10321 DOT11F_MEMCPY(pCtx, pDst->rx_he_mcs_map_80_80, pBuf, (pDst->chan_width_3 * 2));
10322 pBuf += (pDst->chan_width_3 * 2);
10323 ielen -= (pDst->chan_width_3 * 2);
10324 if (unlikely(ielen < pDst->chan_width_3 * 2)) {
10325 pDst->present = 0;
10326 return DOT11F_INCOMPLETE_IE;
10327 }
10328
10329 if (pDst->chan_width_3 > 1) {
10330 pDst->present = 0;
10331 return DOT11F_SKIPPED_BAD_IE;
10332 }
10333
10334 DOT11F_MEMCPY(pCtx, pDst->tx_he_mcs_map_80_80, pBuf, (pDst->chan_width_3 * 2));
10335 pBuf += (pDst->chan_width_3 * 2);
10336 ielen -= (pDst->chan_width_3 * 2);
10337 switch (pDst->ppet_present) {
10338 case 1:
10339 pDst->ppet.ppe_threshold.num_ppe_th = (uint8_t)(ielen);
10340 if (ielen > 25) {
10341 pDst->present = 0;
10342 return DOT11F_SKIPPED_BAD_IE;
10343 }
10344
10345 DOT11F_MEMCPY(pCtx, pDst->ppet.ppe_threshold.ppe_th, pBuf, (ielen));
10346 pBuf += (ielen);
10347 ielen -= (ielen);
10348 break;
10349 }
10350 (void)pCtx;
10351 return status;
10352 } /* End dot11f_unpack_ie_he_cap. */
10353
10354 #define SigIehe_cap (0x0097)
10355
10356
dot11f_unpack_ie_he_op(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEhe_op * pDst,bool append_ie)10357 uint32_t dot11f_unpack_ie_he_op(tpAniSirGlobal pCtx,
10358 uint8_t *pBuf,
10359 uint8_t ielen,
10360 tDot11fIEhe_op *pDst,
10361 bool append_ie)
10362 {
10363 uint32_t status = DOT11F_PARSE_SUCCESS;
10364 uint16_t tmp103__;
10365 uint8_t tmp104__;
10366 uint8_t tmp105__;
10367 uint8_t tmp106__;
10368 (void) pBuf; (void)ielen; /* Shutup the compiler */
10369 if (pDst->present)
10370 return DOT11F_DUPLICATE_IE;
10371 pDst->present = 1;
10372 if (unlikely(ielen < 2)) {
10373 pDst->present = 0;
10374 return DOT11F_INCOMPLETE_IE;
10375 }
10376
10377 framesntohs(pCtx, &tmp103__, pBuf, 0);
10378 pBuf += 2;
10379 ielen -= 2;
10380 pDst->default_pe = tmp103__ >> 0 & 0x7;
10381 pDst->twt_required = tmp103__ >> 3 & 0x1;
10382 pDst->txop_rts_threshold = tmp103__ >> 4 & 0x3ff;
10383 pDst->vht_oper_present = tmp103__ >> 14 & 0x1;
10384 pDst->co_located_bss = tmp103__ >> 15 & 0x1;
10385 if (unlikely(ielen < 1)) {
10386 pDst->present = 0;
10387 return DOT11F_INCOMPLETE_IE;
10388 }
10389
10390 tmp104__ = *pBuf;
10391 pBuf += 1;
10392 ielen -= 1;
10393 pDst->er_su_disable = tmp104__ >> 0 & 0x1;
10394 pDst->oper_info_6g_present = tmp104__ >> 1 & 0x1;
10395 pDst->reserved2 = tmp104__ >> 2 & 0x3f;
10396 if (unlikely(ielen < 1)) {
10397 pDst->present = 0;
10398 return DOT11F_INCOMPLETE_IE;
10399 }
10400
10401 tmp105__ = *pBuf;
10402 pBuf += 1;
10403 ielen -= 1;
10404 pDst->bss_color = tmp105__ >> 0 & 0x3f;
10405 pDst->partial_bss_col = tmp105__ >> 6 & 0x1;
10406 pDst->bss_col_disabled = tmp105__ >> 7 & 0x1;
10407 if (unlikely(ielen < 2)) {
10408 pDst->present = 0;
10409 return DOT11F_INCOMPLETE_IE;
10410 }
10411
10412 DOT11F_MEMCPY(pCtx, pDst->basic_mcs_nss, pBuf, 2);
10413 pBuf += 2;
10414 ielen -= (uint8_t)2;
10415 switch (pDst->vht_oper_present) {
10416 case 1:
10417 if (unlikely(ielen < 1)) {
10418 pDst->present = 0;
10419 return DOT11F_INCOMPLETE_IE;
10420 }
10421
10422 pDst->vht_oper.info.chan_width = *pBuf;
10423 pBuf += 1;
10424 ielen -= (uint8_t)1;
10425 if (unlikely(ielen < 1)) {
10426 pDst->present = 0;
10427 return DOT11F_INCOMPLETE_IE;
10428 }
10429
10430 pDst->vht_oper.info.center_freq_seg0 = *pBuf;
10431 pBuf += 1;
10432 ielen -= (uint8_t)1;
10433 if (unlikely(ielen < 1)) {
10434 pDst->present = 0;
10435 return DOT11F_INCOMPLETE_IE;
10436 }
10437
10438 pDst->vht_oper.info.center_freq_seg1 = *pBuf;
10439 pBuf += 1;
10440 ielen -= (uint8_t)1;
10441 break;
10442 }
10443 switch (pDst->co_located_bss) {
10444 case 1:
10445 if (unlikely(ielen < 1)) {
10446 pDst->present = 0;
10447 return DOT11F_INCOMPLETE_IE;
10448 }
10449
10450 pDst->maxbssid_ind.info.data = *pBuf;
10451 pBuf += 1;
10452 ielen -= (uint8_t)1;
10453 break;
10454 }
10455 switch (pDst->oper_info_6g_present) {
10456 case 1:
10457 if (unlikely(ielen < 1)) {
10458 pDst->present = 0;
10459 return DOT11F_INCOMPLETE_IE;
10460 }
10461
10462 pDst->oper_info_6g.info.primary_ch = *pBuf;
10463 pBuf += 1;
10464 ielen -= (uint8_t)1;
10465 if (unlikely(ielen < 1)) {
10466 pDst->present = 0;
10467 return DOT11F_INCOMPLETE_IE;
10468 }
10469
10470 tmp106__ = *pBuf;
10471 pBuf += 1;
10472 ielen -= 1;
10473 pDst->oper_info_6g.info.ch_width = tmp106__ >> 0 & 0x3;
10474 pDst->oper_info_6g.info.dup_bcon = tmp106__ >> 2 & 0x1;
10475 pDst->oper_info_6g.info.reg_info = tmp106__ >> 3 & 0x7;
10476 pDst->oper_info_6g.info.reserved = tmp106__ >> 6 & 0x3;
10477 if (unlikely(ielen < 1)) {
10478 pDst->present = 0;
10479 return DOT11F_INCOMPLETE_IE;
10480 }
10481
10482 pDst->oper_info_6g.info.center_freq_seg0 = *pBuf;
10483 pBuf += 1;
10484 ielen -= (uint8_t)1;
10485 if (unlikely(ielen < 1)) {
10486 pDst->present = 0;
10487 return DOT11F_INCOMPLETE_IE;
10488 }
10489
10490 pDst->oper_info_6g.info.center_freq_seg1 = *pBuf;
10491 pBuf += 1;
10492 ielen -= (uint8_t)1;
10493 if (unlikely(ielen < 1)) {
10494 pDst->present = 0;
10495 return DOT11F_INCOMPLETE_IE;
10496 }
10497
10498 pDst->oper_info_6g.info.min_rate = *pBuf;
10499 pBuf += 1;
10500 ielen -= (uint8_t)1;
10501 break;
10502 }
10503 (void)pCtx;
10504 return status;
10505 } /* End dot11f_unpack_ie_he_op. */
10506
10507 #define SigIehe_op (0x0098)
10508
10509
dot11f_unpack_ie_hs20vendor_ie(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEhs20vendor_ie * pDst,bool append_ie)10510 uint32_t dot11f_unpack_ie_hs20vendor_ie(tpAniSirGlobal pCtx,
10511 uint8_t *pBuf,
10512 uint8_t ielen,
10513 tDot11fIEhs20vendor_ie *pDst,
10514 bool append_ie)
10515 {
10516 uint32_t status = DOT11F_PARSE_SUCCESS;
10517 uint8_t tmp107__;
10518 (void) pBuf; (void)ielen; /* Shutup the compiler */
10519 if (pDst->present)
10520 return DOT11F_DUPLICATE_IE;
10521 pDst->present = 1;
10522 if (unlikely(ielen < 1)) {
10523 pDst->present = 0;
10524 return DOT11F_INCOMPLETE_IE;
10525 }
10526
10527 tmp107__ = *pBuf;
10528 pBuf += 1;
10529 ielen -= 1;
10530 pDst->dgaf_dis = tmp107__ >> 0 & 0x1;
10531 pDst->hs_id_present = tmp107__ >> 1 & 0x3;
10532 pDst->reserved = tmp107__ >> 3 & 0x1;
10533 pDst->release_num = tmp107__ >> 4 & 0xf;
10534 if (!ielen) {
10535 return 0U;
10536 } else {
10537 switch (pDst->hs_id_present) {
10538 case 1:
10539 if (unlikely(ielen < 2)) {
10540 pDst->present = 0;
10541 return DOT11F_INCOMPLETE_IE;
10542 }
10543
10544 framesntohs(pCtx, &pDst->hs_id.pps_mo.pps_mo_id, pBuf, 0);
10545 pBuf += 2;
10546 ielen -= (uint8_t)2;
10547 break;
10548 case 2:
10549 if (unlikely(ielen < 2)) {
10550 pDst->present = 0;
10551 return DOT11F_INCOMPLETE_IE;
10552 }
10553
10554 framesntohs(pCtx, &pDst->hs_id.anqp_domain.anqp_domain_id, pBuf, 0);
10555 pBuf += 2;
10556 ielen -= (uint8_t)2;
10557 break;
10558 }
10559 }
10560 (void)pCtx;
10561 return status;
10562 } /* End dot11f_unpack_ie_hs20vendor_ie. */
10563
10564 #define SigIehs20vendor_ie (0x0099)
10565
10566
dot11f_unpack_ie_ht2040_bss_coexistence(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEht2040_bss_coexistence * pDst,bool append_ie)10567 uint32_t dot11f_unpack_ie_ht2040_bss_coexistence(tpAniSirGlobal pCtx,
10568 uint8_t *pBuf,
10569 uint8_t ielen,
10570 tDot11fIEht2040_bss_coexistence *pDst,
10571 bool append_ie)
10572 {
10573 uint32_t status = DOT11F_PARSE_SUCCESS;
10574 uint8_t tmp108__;
10575 (void) pBuf; (void)ielen; /* Shutup the compiler */
10576 if (pDst->present)
10577 return DOT11F_DUPLICATE_IE;
10578 pDst->present = 1;
10579 if (unlikely(ielen < 1)) {
10580 pDst->present = 0;
10581 return DOT11F_INCOMPLETE_IE;
10582 }
10583
10584 tmp108__ = *pBuf;
10585 pDst->info_request = tmp108__ >> 0 & 0x1;
10586 pDst->forty_mhz_intolerant = tmp108__ >> 1 & 0x1;
10587 pDst->twenty_mhz_bsswidth_req = tmp108__ >> 2 & 0x1;
10588 pDst->obss_scan_exemption_req = tmp108__ >> 3 & 0x1;
10589 pDst->obss_scan_exemption_grant = tmp108__ >> 4 & 0x1;
10590 pDst->unused = tmp108__ >> 5 & 0x7;
10591 (void)pCtx;
10592 return status;
10593 } /* End dot11f_unpack_ie_ht2040_bss_coexistence. */
10594
10595 #define SigIeht2040_bss_coexistence (0x009a)
10596
10597
dot11f_unpack_ie_ht2040_bss_intolerant_report(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEht2040_bss_intolerant_report * pDst,bool append_ie)10598 uint32_t dot11f_unpack_ie_ht2040_bss_intolerant_report(tpAniSirGlobal pCtx,
10599 uint8_t *pBuf,
10600 uint8_t ielen,
10601 tDot11fIEht2040_bss_intolerant_report *pDst,
10602 bool append_ie)
10603 {
10604 uint32_t status = DOT11F_PARSE_SUCCESS;
10605 (void) pBuf; (void)ielen; /* Shutup the compiler */
10606 if (pDst->present)
10607 return DOT11F_DUPLICATE_IE;
10608 pDst->present = 1;
10609 if (unlikely(ielen < 1)) {
10610 pDst->present = 0;
10611 return DOT11F_INCOMPLETE_IE;
10612 }
10613
10614 pDst->operating_class = *pBuf;
10615 pBuf += 1;
10616 ielen -= (uint8_t)1;
10617 pDst->num_channel_list = (uint8_t)(ielen);
10618 if (ielen > 50) {
10619 pDst->present = 0;
10620 return DOT11F_SKIPPED_BAD_IE;
10621 }
10622
10623 DOT11F_MEMCPY(pCtx, pDst->channel_list, pBuf, (ielen));
10624 (void)pCtx;
10625 return status;
10626 } /* End dot11f_unpack_ie_ht2040_bss_intolerant_report. */
10627
10628 #define SigIeht2040_bss_intolerant_report (0x009b)
10629
10630
dot11f_unpack_ie_max_chan_switch_time(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEmax_chan_switch_time * pDst,bool append_ie)10631 uint32_t dot11f_unpack_ie_max_chan_switch_time(tpAniSirGlobal pCtx,
10632 uint8_t *pBuf,
10633 uint8_t ielen,
10634 tDot11fIEmax_chan_switch_time *pDst,
10635 bool append_ie)
10636 {
10637 uint32_t status = DOT11F_PARSE_SUCCESS;
10638 (void) pBuf; (void)ielen; /* Shutup the compiler */
10639 if (pDst->present)
10640 return DOT11F_DUPLICATE_IE;
10641 pDst->present = 1;
10642 if (unlikely(ielen < 3)) {
10643 pDst->present = 0;
10644 return DOT11F_INCOMPLETE_IE;
10645 }
10646
10647 DOT11F_MEMCPY(pCtx, pDst->switch_time, pBuf, 3);
10648 (void)pCtx;
10649 return status;
10650 } /* End dot11f_unpack_ie_max_chan_switch_time. */
10651
10652 #define SigIemax_chan_switch_time (0x009c)
10653
10654
dot11f_unpack_ie_mlo_ie(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEmlo_ie * pDst,bool append_ie)10655 uint32_t dot11f_unpack_ie_mlo_ie(tpAniSirGlobal pCtx,
10656 uint8_t *pBuf,
10657 uint8_t ielen,
10658 tDot11fIEmlo_ie *pDst,
10659 bool append_ie)
10660 {
10661 uint32_t status = DOT11F_PARSE_SUCCESS;
10662 (void) pBuf; (void)ielen; /* Shutup the compiler */
10663 if (pDst->present)
10664 return DOT11F_DUPLICATE_IE;
10665 pDst->present = 1;
10666 pDst->num_data = (uint8_t)(ielen);
10667 DOT11F_MEMCPY(pCtx, pDst->data, pBuf, (ielen));
10668 (void)pCtx;
10669 return status;
10670 } /* End dot11f_unpack_ie_mlo_ie. */
10671
10672 #define SigIemlo_ie (0x009d)
10673
10674
dot11f_unpack_ie_mu_edca_param_set(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEmu_edca_param_set * pDst,bool append_ie)10675 uint32_t dot11f_unpack_ie_mu_edca_param_set(tpAniSirGlobal pCtx,
10676 uint8_t *pBuf,
10677 uint8_t ielen,
10678 tDot11fIEmu_edca_param_set *pDst,
10679 bool append_ie)
10680 {
10681 uint32_t status = DOT11F_PARSE_SUCCESS;
10682 uint8_t tmp109__;
10683 uint8_t tmp110__;
10684 uint8_t tmp111__;
10685 uint8_t tmp112__;
10686 uint8_t tmp113__;
10687 uint8_t tmp114__;
10688 uint8_t tmp115__;
10689 uint8_t tmp116__;
10690 (void) pBuf; (void)ielen; /* Shutup the compiler */
10691 if (pDst->present)
10692 return DOT11F_DUPLICATE_IE;
10693 pDst->present = 1;
10694 if (unlikely(ielen < 1)) {
10695 pDst->present = 0;
10696 return DOT11F_INCOMPLETE_IE;
10697 }
10698
10699 pDst->qos = *pBuf;
10700 pBuf += 1;
10701 ielen -= (uint8_t)1;
10702 if (unlikely(ielen < 1)) {
10703 pDst->present = 0;
10704 return DOT11F_INCOMPLETE_IE;
10705 }
10706
10707 tmp109__ = *pBuf;
10708 pBuf += 1;
10709 ielen -= 1;
10710 pDst->acbe_aifsn = tmp109__ >> 0 & 0xf;
10711 pDst->acbe_acm = tmp109__ >> 4 & 0x1;
10712 pDst->acbe_aci = tmp109__ >> 5 & 0x3;
10713 pDst->unused1 = tmp109__ >> 7 & 0x1;
10714 if (unlikely(ielen < 1)) {
10715 pDst->present = 0;
10716 return DOT11F_INCOMPLETE_IE;
10717 }
10718
10719 tmp110__ = *pBuf;
10720 pBuf += 1;
10721 ielen -= 1;
10722 pDst->acbe_acwmin = tmp110__ >> 0 & 0xf;
10723 pDst->acbe_acwmax = tmp110__ >> 4 & 0xf;
10724 if (unlikely(ielen < 1)) {
10725 pDst->present = 0;
10726 return DOT11F_INCOMPLETE_IE;
10727 }
10728
10729 pDst->acbe_muedca_timer = *pBuf;
10730 pBuf += 1;
10731 ielen -= (uint8_t)1;
10732 if (unlikely(ielen < 1)) {
10733 pDst->present = 0;
10734 return DOT11F_INCOMPLETE_IE;
10735 }
10736
10737 tmp111__ = *pBuf;
10738 pBuf += 1;
10739 ielen -= 1;
10740 pDst->acbk_aifsn = tmp111__ >> 0 & 0xf;
10741 pDst->acbk_acm = tmp111__ >> 4 & 0x1;
10742 pDst->acbk_aci = tmp111__ >> 5 & 0x3;
10743 pDst->unused2 = tmp111__ >> 7 & 0x1;
10744 if (unlikely(ielen < 1)) {
10745 pDst->present = 0;
10746 return DOT11F_INCOMPLETE_IE;
10747 }
10748
10749 tmp112__ = *pBuf;
10750 pBuf += 1;
10751 ielen -= 1;
10752 pDst->acbk_acwmin = tmp112__ >> 0 & 0xf;
10753 pDst->acbk_acwmax = tmp112__ >> 4 & 0xf;
10754 if (unlikely(ielen < 1)) {
10755 pDst->present = 0;
10756 return DOT11F_INCOMPLETE_IE;
10757 }
10758
10759 pDst->acbk_muedca_timer = *pBuf;
10760 pBuf += 1;
10761 ielen -= (uint8_t)1;
10762 if (unlikely(ielen < 1)) {
10763 pDst->present = 0;
10764 return DOT11F_INCOMPLETE_IE;
10765 }
10766
10767 tmp113__ = *pBuf;
10768 pBuf += 1;
10769 ielen -= 1;
10770 pDst->acvi_aifsn = tmp113__ >> 0 & 0xf;
10771 pDst->acvi_acm = tmp113__ >> 4 & 0x1;
10772 pDst->acvi_aci = tmp113__ >> 5 & 0x3;
10773 pDst->unused3 = tmp113__ >> 7 & 0x1;
10774 if (unlikely(ielen < 1)) {
10775 pDst->present = 0;
10776 return DOT11F_INCOMPLETE_IE;
10777 }
10778
10779 tmp114__ = *pBuf;
10780 pBuf += 1;
10781 ielen -= 1;
10782 pDst->acvi_acwmin = tmp114__ >> 0 & 0xf;
10783 pDst->acvi_acwmax = tmp114__ >> 4 & 0xf;
10784 if (unlikely(ielen < 1)) {
10785 pDst->present = 0;
10786 return DOT11F_INCOMPLETE_IE;
10787 }
10788
10789 pDst->acvi_muedca_timer = *pBuf;
10790 pBuf += 1;
10791 ielen -= (uint8_t)1;
10792 if (unlikely(ielen < 1)) {
10793 pDst->present = 0;
10794 return DOT11F_INCOMPLETE_IE;
10795 }
10796
10797 tmp115__ = *pBuf;
10798 pBuf += 1;
10799 ielen -= 1;
10800 pDst->acvo_aifsn = tmp115__ >> 0 & 0xf;
10801 pDst->acvo_acm = tmp115__ >> 4 & 0x1;
10802 pDst->acvo_aci = tmp115__ >> 5 & 0x3;
10803 pDst->unused4 = tmp115__ >> 7 & 0x1;
10804 if (unlikely(ielen < 1)) {
10805 pDst->present = 0;
10806 return DOT11F_INCOMPLETE_IE;
10807 }
10808
10809 tmp116__ = *pBuf;
10810 pBuf += 1;
10811 ielen -= 1;
10812 pDst->acvo_acwmin = tmp116__ >> 0 & 0xf;
10813 pDst->acvo_acwmax = tmp116__ >> 4 & 0xf;
10814 if (unlikely(ielen < 1)) {
10815 pDst->present = 0;
10816 return DOT11F_INCOMPLETE_IE;
10817 }
10818
10819 pDst->acvo_muedca_timer = *pBuf;
10820 (void)pCtx;
10821 return status;
10822 } /* End dot11f_unpack_ie_mu_edca_param_set. */
10823
10824 #define SigIemu_edca_param_set (0x009e)
10825
10826
dot11f_unpack_ie_non_inheritance(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEnon_inheritance * pDst,bool append_ie)10827 uint32_t dot11f_unpack_ie_non_inheritance(tpAniSirGlobal pCtx,
10828 uint8_t *pBuf,
10829 uint8_t ielen,
10830 tDot11fIEnon_inheritance *pDst,
10831 bool append_ie)
10832 {
10833 uint32_t status = DOT11F_PARSE_SUCCESS;
10834 (void) pBuf; (void)ielen; /* Shutup the compiler */
10835 if (pDst->present)
10836 return DOT11F_DUPLICATE_IE;
10837 pDst->present = 1;
10838 pDst->num_data = (uint8_t)(ielen);
10839 DOT11F_MEMCPY(pCtx, pDst->data, pBuf, (ielen));
10840 (void)pCtx;
10841 return status;
10842 } /* End dot11f_unpack_ie_non_inheritance. */
10843
10844 #define SigIenon_inheritance (0x009f)
10845
10846
dot11f_unpack_ie_oci(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEoci * pDst,bool append_ie)10847 uint32_t dot11f_unpack_ie_oci(tpAniSirGlobal pCtx,
10848 uint8_t *pBuf,
10849 uint8_t ielen,
10850 tDot11fIEoci *pDst,
10851 bool append_ie)
10852 {
10853 uint32_t status = DOT11F_PARSE_SUCCESS;
10854 (void) pBuf; (void)ielen; /* Shutup the compiler */
10855 if (pDst->present)
10856 return DOT11F_DUPLICATE_IE;
10857 pDst->present = 1;
10858 if (unlikely(ielen < 1)) {
10859 pDst->present = 0;
10860 return DOT11F_INCOMPLETE_IE;
10861 }
10862
10863 pDst->op_class = *pBuf;
10864 pBuf += 1;
10865 ielen -= (uint8_t)1;
10866 if (unlikely(ielen < 1)) {
10867 pDst->present = 0;
10868 return DOT11F_INCOMPLETE_IE;
10869 }
10870
10871 pDst->prim_ch_num = *pBuf;
10872 pBuf += 1;
10873 ielen -= (uint8_t)1;
10874 if (unlikely(ielen < 1)) {
10875 pDst->present = 0;
10876 return DOT11F_INCOMPLETE_IE;
10877 }
10878
10879 pDst->freq_seg_1_ch_num = *pBuf;
10880 (void)pCtx;
10881 return status;
10882 } /* End dot11f_unpack_ie_oci. */
10883
10884 #define SigIeoci (0x00a0)
10885
10886
dot11f_unpack_ie_osen_ie(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEosen_ie * pDst,bool append_ie)10887 uint32_t dot11f_unpack_ie_osen_ie(tpAniSirGlobal pCtx,
10888 uint8_t *pBuf,
10889 uint8_t ielen,
10890 tDot11fIEosen_ie *pDst,
10891 bool append_ie)
10892 {
10893 uint32_t status = DOT11F_PARSE_SUCCESS;
10894 (void) pBuf; (void)ielen; /* Shutup the compiler */
10895 if (pDst->present)
10896 return DOT11F_DUPLICATE_IE;
10897 pDst->present = 1;
10898 pDst->num_data = (uint8_t)(ielen);
10899 DOT11F_MEMCPY(pCtx, pDst->data, pBuf, (ielen));
10900 (void)pCtx;
10901 return status;
10902 } /* End dot11f_unpack_ie_osen_ie. */
10903
10904 #define SigIeosen_ie (0x00a1)
10905
10906
10907 static const tTLVDefn TLVS_qcn_ie[] = {
10908 { offsetof(tDot11fIEqcn_ie, qcn_version), offsetof(tDot11fTLVqcn_version,
10909 present), "qcn_version", SigTlvqcn_version, DOT11F_TLV_QCN_VERSION,
10910 0, 4, 4, 0, 1, 1, 0, },
10911 { offsetof(tDot11fIEqcn_ie, vht_mcs11_attr),
10912 offsetof(tDot11fTLVvht_mcs11_attr, present), "vht_mcs11_attr",
10913 SigTlvvht_mcs11_attr, DOT11F_TLV_VHT_MCS11_ATTR, 0, 3, 3, 0, 1, 1, 0, },
10914 { offsetof(tDot11fIEqcn_ie, he_400ns_sgi_attr),
10915 offsetof(tDot11fTLVhe_400ns_sgi_attr, present), "he_400ns_sgi_attr",
10916 SigTlvhe_400ns_sgi_attr, DOT11F_TLV_HE_400NS_SGI_ATTR,
10917 0, 5, 5, 0, 1, 1, 0, },
10918 { offsetof(tDot11fIEqcn_ie, he_2xltf_160mhz_supp),
10919 offsetof(tDot11fTLVhe_2xltf_160mhz_supp, present),
10920 "he_2xltf_160mhz_supp", SigTlvhe_2xltf_160mhz_supp,
10921 DOT11F_TLV_HE_2XLTF_160MHZ_SUPP, 0, 3, 3, 0, 1, 1, 0, },
10922 { offsetof(tDot11fIEqcn_ie, he_dl_ofdma_attr),
10923 offsetof(tDot11fTLVhe_dl_ofdma_attr, present), "he_dl_ofdma_attr",
10924 SigTlvhe_dl_ofdma_attr, DOT11F_TLV_HE_DL_OFDMA_ATTR,
10925 0, 3, 3, 0, 1, 1, 0, },
10926 { offsetof(tDot11fIEqcn_ie, trans_reasonp_attr),
10927 offsetof(tDot11fTLVtrans_reasonp_attr, present), "trans_reasonp_attr",
10928 SigTlvtrans_reasonp_attr, DOT11F_TLV_TRANS_REASONP_ATTR,
10929 0, 3, 3, 0, 1, 1, 0, },
10930 { offsetof(tDot11fIEqcn_ie, trans_rejectp_attr),
10931 offsetof(tDot11fTLVtrans_rejectp_attr, present), "trans_rejectp_attr",
10932 SigTlvtrans_rejectp_attr, DOT11F_TLV_TRANS_REJECTP_ATTR,
10933 0, 3, 3, 0, 1, 1, 0, },
10934 { offsetof(tDot11fIEqcn_ie, he_dl_mumimo_attr),
10935 offsetof(tDot11fTLVhe_dl_mumimo_attr, present), "he_dl_mumimo_attr",
10936 SigTlvhe_dl_mumimo_attr, DOT11F_TLV_HE_DL_MUMIMO_ATTR,
10937 0, 3, 3, 0, 1, 1, 0, },
10938 { offsetof(tDot11fIEqcn_ie, he_mcs13_attr),
10939 offsetof(tDot11fTLVhe_mcs13_attr, present), "he_mcs13_attr",
10940 SigTlvhe_mcs13_attr, DOT11F_TLV_HE_MCS13_ATTR, 0, 4, 4, 0, 1, 1, 0, },
10941 { offsetof(tDot11fIEqcn_ie, edca_pifs_param_attr),
10942 offsetof(tDot11fTLVedca_pifs_param_attr, present),
10943 "edca_pifs_param_attr", SigTlvedca_pifs_param_attr,
10944 DOT11F_TLV_EDCA_PIFS_PARAM_ATTR, 0, 6, 7, 0, 1, 1, 0, },
10945 { offsetof(tDot11fIEqcn_ie, ecsa_target_tsf_info_attr),
10946 offsetof(tDot11fTLVecsa_target_tsf_info_attr, present),
10947 "ecsa_target_tsf_info_attr", SigTlvecsa_target_tsf_info_attr,
10948 DOT11F_TLV_ECSA_TARGET_TSF_INFO_ATTR, 0, 11, 11, 0, 1, 1, 0, },
10949 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
10950 };
10951
dot11f_unpack_ie_qcn_ie(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEqcn_ie * pDst,bool append_ie)10952 uint32_t dot11f_unpack_ie_qcn_ie(tpAniSirGlobal pCtx,
10953 uint8_t *pBuf,
10954 uint8_t ielen,
10955 tDot11fIEqcn_ie *pDst,
10956 bool append_ie)
10957 {
10958 uint32_t status = DOT11F_PARSE_SUCCESS;
10959 (void)pBuf; (void)ielen; /* Shutup the compiler */
10960 pDst->present = 1;
10961 status = unpack_tlv_core(pCtx, pBuf, ielen,
10962 TLVS_qcn_ie,
10963 (uint8_t *)pDst, sizeof(*pDst));
10964 return status;
10965 } /* End dot11f_unpack_ie_qcn_ie. */
10966
10967 #define SigIeqcn_ie (0x00a2)
10968
10969
dot11f_unpack_ie_reduced_neighbor_report(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEreduced_neighbor_report * pDst,bool append_ie)10970 uint32_t dot11f_unpack_ie_reduced_neighbor_report(tpAniSirGlobal pCtx,
10971 uint8_t *pBuf,
10972 uint8_t ielen,
10973 tDot11fIEreduced_neighbor_report *pDst,
10974 bool append_ie)
10975 {
10976 uint32_t status = DOT11F_PARSE_SUCCESS;
10977 uint16_t tmp117__;
10978 uint16_t tmp118__;
10979 (void) pBuf; (void)ielen; /* Shutup the compiler */
10980 if (pDst->present)
10981 return DOT11F_DUPLICATE_IE;
10982 pDst->present = 1;
10983 if (unlikely(ielen < 2)) {
10984 pDst->present = 0;
10985 return DOT11F_INCOMPLETE_IE;
10986 }
10987
10988 framesntohs(pCtx, &tmp117__, pBuf, 0);
10989 pBuf += 2;
10990 ielen -= 2;
10991 pDst->tbtt_type = tmp117__ >> 0 & 0x3;
10992 pDst->filtered_neighbor_ap = tmp117__ >> 2 & 0x1;
10993 pDst->reserved = tmp117__ >> 3 & 0x1;
10994 pDst->tbtt_info_count = tmp117__ >> 4 & 0xf;
10995 pDst->tbtt_info_len = tmp117__ >> 8 & 0xff;
10996 if (unlikely(ielen < 1)) {
10997 pDst->present = 0;
10998 return DOT11F_INCOMPLETE_IE;
10999 }
11000
11001 pDst->op_class = *pBuf;
11002 pBuf += 1;
11003 ielen -= (uint8_t)1;
11004 if (unlikely(ielen < 1)) {
11005 pDst->present = 0;
11006 return DOT11F_INCOMPLETE_IE;
11007 }
11008
11009 pDst->channel_num = *pBuf;
11010 pBuf += 1;
11011 ielen -= (uint8_t)1;
11012 switch (pDst->tbtt_info_len) {
11013 case 1:
11014 if (unlikely(ielen < 1)) {
11015 pDst->present = 0;
11016 return DOT11F_INCOMPLETE_IE;
11017 }
11018
11019 pDst->tbtt_info.tbtt_info_1.tbtt_offset = *pBuf;
11020 pBuf += 1;
11021 ielen -= (uint8_t)1;
11022 break;
11023 case 2:
11024 if (unlikely(ielen < 1)) {
11025 pDst->present = 0;
11026 return DOT11F_INCOMPLETE_IE;
11027 }
11028
11029 pDst->tbtt_info.tbtt_info_2.tbtt_offset = *pBuf;
11030 pBuf += 1;
11031 ielen -= (uint8_t)1;
11032 if (unlikely(ielen < 1)) {
11033 pDst->present = 0;
11034 return DOT11F_INCOMPLETE_IE;
11035 }
11036
11037 pDst->tbtt_info.tbtt_info_2.bss_params = *pBuf;
11038 pBuf += 1;
11039 ielen -= (uint8_t)1;
11040 break;
11041 case 5:
11042 if (unlikely(ielen < 1)) {
11043 pDst->present = 0;
11044 return DOT11F_INCOMPLETE_IE;
11045 }
11046
11047 pDst->tbtt_info.tbtt_info_5.tbtt_offset = *pBuf;
11048 pBuf += 1;
11049 ielen -= (uint8_t)1;
11050 if (unlikely(ielen < 4)) {
11051 pDst->present = 0;
11052 return DOT11F_INCOMPLETE_IE;
11053 }
11054
11055 framesntohl(pCtx, &pDst->tbtt_info.tbtt_info_5.short_ssid, pBuf, 0);
11056 pBuf += 4;
11057 ielen -= (uint8_t)4;
11058 break;
11059 case 6:
11060 if (unlikely(ielen < 1)) {
11061 pDst->present = 0;
11062 return DOT11F_INCOMPLETE_IE;
11063 }
11064
11065 pDst->tbtt_info.tbtt_info_6.tbtt_offset = *pBuf;
11066 pBuf += 1;
11067 ielen -= (uint8_t)1;
11068 if (unlikely(ielen < 4)) {
11069 pDst->present = 0;
11070 return DOT11F_INCOMPLETE_IE;
11071 }
11072
11073 framesntohl(pCtx, &pDst->tbtt_info.tbtt_info_6.short_ssid, pBuf, 0);
11074 pBuf += 4;
11075 ielen -= (uint8_t)4;
11076 if (unlikely(ielen < 1)) {
11077 pDst->present = 0;
11078 return DOT11F_INCOMPLETE_IE;
11079 }
11080
11081 pDst->tbtt_info.tbtt_info_6.bss_params = *pBuf;
11082 pBuf += 1;
11083 ielen -= (uint8_t)1;
11084 break;
11085 case 7:
11086 if (unlikely(ielen < 1)) {
11087 pDst->present = 0;
11088 return DOT11F_INCOMPLETE_IE;
11089 }
11090
11091 pDst->tbtt_info.tbtt_info_7.tbtt_offset = *pBuf;
11092 pBuf += 1;
11093 ielen -= (uint8_t)1;
11094 if (unlikely(ielen < 6)) {
11095 pDst->present = 0;
11096 return DOT11F_INCOMPLETE_IE;
11097 }
11098
11099 DOT11F_MEMCPY(pCtx, pDst->tbtt_info.tbtt_info_7.bssid, pBuf, 6);
11100 pBuf += 6;
11101 ielen -= (uint8_t)6;
11102 break;
11103 case 8:
11104 if (unlikely(ielen < 1)) {
11105 pDst->present = 0;
11106 return DOT11F_INCOMPLETE_IE;
11107 }
11108
11109 pDst->tbtt_info.tbtt_info_8.tbtt_offset = *pBuf;
11110 pBuf += 1;
11111 ielen -= (uint8_t)1;
11112 if (unlikely(ielen < 6)) {
11113 pDst->present = 0;
11114 return DOT11F_INCOMPLETE_IE;
11115 }
11116
11117 DOT11F_MEMCPY(pCtx, pDst->tbtt_info.tbtt_info_8.bssid, pBuf, 6);
11118 pBuf += 6;
11119 ielen -= (uint8_t)6;
11120 if (unlikely(ielen < 1)) {
11121 pDst->present = 0;
11122 return DOT11F_INCOMPLETE_IE;
11123 }
11124
11125 pDst->tbtt_info.tbtt_info_8.bss_params = *pBuf;
11126 pBuf += 1;
11127 ielen -= (uint8_t)1;
11128 break;
11129 case 9:
11130 if (unlikely(ielen < 1)) {
11131 pDst->present = 0;
11132 return DOT11F_INCOMPLETE_IE;
11133 }
11134
11135 pDst->tbtt_info.tbtt_info_9.tbtt_offset = *pBuf;
11136 pBuf += 1;
11137 ielen -= (uint8_t)1;
11138 if (unlikely(ielen < 6)) {
11139 pDst->present = 0;
11140 return DOT11F_INCOMPLETE_IE;
11141 }
11142
11143 DOT11F_MEMCPY(pCtx, pDst->tbtt_info.tbtt_info_9.bssid, pBuf, 6);
11144 pBuf += 6;
11145 ielen -= (uint8_t)6;
11146 if (unlikely(ielen < 1)) {
11147 pDst->present = 0;
11148 return DOT11F_INCOMPLETE_IE;
11149 }
11150
11151 pDst->tbtt_info.tbtt_info_9.bss_params = *pBuf;
11152 pBuf += 1;
11153 ielen -= (uint8_t)1;
11154 if (unlikely(ielen < 1)) {
11155 pDst->present = 0;
11156 return DOT11F_INCOMPLETE_IE;
11157 }
11158
11159 pDst->tbtt_info.tbtt_info_9.psd_20mhz = *pBuf;
11160 pBuf += 1;
11161 ielen -= (uint8_t)1;
11162 break;
11163 case 11:
11164 if (unlikely(ielen < 1)) {
11165 pDst->present = 0;
11166 return DOT11F_INCOMPLETE_IE;
11167 }
11168
11169 pDst->tbtt_info.tbtt_info_11.tbtt_offset = *pBuf;
11170 pBuf += 1;
11171 ielen -= (uint8_t)1;
11172 if (unlikely(ielen < 6)) {
11173 pDst->present = 0;
11174 return DOT11F_INCOMPLETE_IE;
11175 }
11176
11177 DOT11F_MEMCPY(pCtx, pDst->tbtt_info.tbtt_info_11.bssid, pBuf, 6);
11178 pBuf += 6;
11179 ielen -= (uint8_t)6;
11180 if (unlikely(ielen < 4)) {
11181 pDst->present = 0;
11182 return DOT11F_INCOMPLETE_IE;
11183 }
11184
11185 framesntohl(pCtx, &pDst->tbtt_info.tbtt_info_11.short_ssid, pBuf, 0);
11186 pBuf += 4;
11187 ielen -= (uint8_t)4;
11188 break;
11189 case 12:
11190 if (unlikely(ielen < 1)) {
11191 pDst->present = 0;
11192 return DOT11F_INCOMPLETE_IE;
11193 }
11194
11195 pDst->tbtt_info.tbtt_info_12.tbtt_offset = *pBuf;
11196 pBuf += 1;
11197 ielen -= (uint8_t)1;
11198 if (unlikely(ielen < 6)) {
11199 pDst->present = 0;
11200 return DOT11F_INCOMPLETE_IE;
11201 }
11202
11203 DOT11F_MEMCPY(pCtx, pDst->tbtt_info.tbtt_info_12.bssid, pBuf, 6);
11204 pBuf += 6;
11205 ielen -= (uint8_t)6;
11206 if (unlikely(ielen < 4)) {
11207 pDst->present = 0;
11208 return DOT11F_INCOMPLETE_IE;
11209 }
11210
11211 framesntohl(pCtx, &pDst->tbtt_info.tbtt_info_12.short_ssid, pBuf, 0);
11212 pBuf += 4;
11213 ielen -= (uint8_t)4;
11214 if (unlikely(ielen < 1)) {
11215 pDst->present = 0;
11216 return DOT11F_INCOMPLETE_IE;
11217 }
11218
11219 pDst->tbtt_info.tbtt_info_12.bss_params = *pBuf;
11220 pBuf += 1;
11221 ielen -= (uint8_t)1;
11222 break;
11223 case 13:
11224 if (unlikely(ielen < 1)) {
11225 pDst->present = 0;
11226 return DOT11F_INCOMPLETE_IE;
11227 }
11228
11229 pDst->tbtt_info.tbtt_info_13.tbtt_offset = *pBuf;
11230 pBuf += 1;
11231 ielen -= (uint8_t)1;
11232 if (unlikely(ielen < 6)) {
11233 pDst->present = 0;
11234 return DOT11F_INCOMPLETE_IE;
11235 }
11236
11237 DOT11F_MEMCPY(pCtx, pDst->tbtt_info.tbtt_info_13.bssid, pBuf, 6);
11238 pBuf += 6;
11239 ielen -= (uint8_t)6;
11240 if (unlikely(ielen < 4)) {
11241 pDst->present = 0;
11242 return DOT11F_INCOMPLETE_IE;
11243 }
11244
11245 framesntohl(pCtx, &pDst->tbtt_info.tbtt_info_13.short_ssid, pBuf, 0);
11246 pBuf += 4;
11247 ielen -= (uint8_t)4;
11248 if (unlikely(ielen < 1)) {
11249 pDst->present = 0;
11250 return DOT11F_INCOMPLETE_IE;
11251 }
11252
11253 pDst->tbtt_info.tbtt_info_13.bss_params = *pBuf;
11254 pBuf += 1;
11255 ielen -= (uint8_t)1;
11256 if (unlikely(ielen < 1)) {
11257 pDst->present = 0;
11258 return DOT11F_INCOMPLETE_IE;
11259 }
11260
11261 pDst->tbtt_info.tbtt_info_13.psd_20mhz = *pBuf;
11262 pBuf += 1;
11263 ielen -= (uint8_t)1;
11264 break;
11265 case 16:
11266 if (unlikely(ielen < 1)) {
11267 pDst->present = 0;
11268 return DOT11F_INCOMPLETE_IE;
11269 }
11270
11271 pDst->tbtt_info.tbtt_info_16.tbtt_offset = *pBuf;
11272 pBuf += 1;
11273 ielen -= (uint8_t)1;
11274 if (unlikely(ielen < 6)) {
11275 pDst->present = 0;
11276 return DOT11F_INCOMPLETE_IE;
11277 }
11278
11279 DOT11F_MEMCPY(pCtx, pDst->tbtt_info.tbtt_info_16.bssid, pBuf, 6);
11280 pBuf += 6;
11281 ielen -= (uint8_t)6;
11282 if (unlikely(ielen < 4)) {
11283 pDst->present = 0;
11284 return DOT11F_INCOMPLETE_IE;
11285 }
11286
11287 framesntohl(pCtx, &pDst->tbtt_info.tbtt_info_16.short_ssid, pBuf, 0);
11288 pBuf += 4;
11289 ielen -= (uint8_t)4;
11290 if (unlikely(ielen < 1)) {
11291 pDst->present = 0;
11292 return DOT11F_INCOMPLETE_IE;
11293 }
11294
11295 pDst->tbtt_info.tbtt_info_16.bss_params = *pBuf;
11296 pBuf += 1;
11297 ielen -= (uint8_t)1;
11298 if (unlikely(ielen < 1)) {
11299 pDst->present = 0;
11300 return DOT11F_INCOMPLETE_IE;
11301 }
11302
11303 pDst->tbtt_info.tbtt_info_16.psd_20mhz = *pBuf;
11304 pBuf += 1;
11305 ielen -= (uint8_t)1;
11306 if (unlikely(ielen < 1)) {
11307 pDst->present = 0;
11308 return DOT11F_INCOMPLETE_IE;
11309 }
11310
11311 pDst->tbtt_info.tbtt_info_16.mld_id = *pBuf;
11312 pBuf += 1;
11313 ielen -= (uint8_t)1;
11314 if (unlikely(ielen < 2)) {
11315 pDst->present = 0;
11316 return DOT11F_INCOMPLETE_IE;
11317 }
11318
11319 framesntohs(pCtx, &tmp118__, pBuf, 0);
11320 pBuf += 2;
11321 ielen -= 2;
11322 pDst->tbtt_info.tbtt_info_16.link_id = tmp118__ >> 0 & 0xf;
11323 pDst->tbtt_info.tbtt_info_16.bss_param_change_cnt = tmp118__ >> 4 & 0xff;
11324 pDst->tbtt_info.tbtt_info_16.all_updates_included = tmp118__ >> 12 & 0x1;
11325 pDst->tbtt_info.tbtt_info_16.reserved = tmp118__ >> 13 & 0x7;
11326 break;
11327 }
11328 (void)pCtx;
11329 return status;
11330 } /* End dot11f_unpack_ie_reduced_neighbor_report. */
11331
11332 #define SigIereduced_neighbor_report (0x00a3)
11333
11334
dot11f_unpack_ie_roaming_consortium_sel(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEroaming_consortium_sel * pDst,bool append_ie)11335 uint32_t dot11f_unpack_ie_roaming_consortium_sel(tpAniSirGlobal pCtx,
11336 uint8_t *pBuf,
11337 uint8_t ielen,
11338 tDot11fIEroaming_consortium_sel *pDst,
11339 bool append_ie)
11340 {
11341 uint32_t status = DOT11F_PARSE_SUCCESS;
11342 (void) pBuf; (void)ielen; /* Shutup the compiler */
11343 if (pDst->present)
11344 return DOT11F_DUPLICATE_IE;
11345 pDst->present = 1;
11346 pDst->num_data = (uint8_t)(ielen);
11347 DOT11F_MEMCPY(pCtx, pDst->data, pBuf, (ielen));
11348 (void)pCtx;
11349 return status;
11350 } /* End dot11f_unpack_ie_roaming_consortium_sel. */
11351
11352 #define SigIeroaming_consortium_sel (0x00a4)
11353
11354
dot11f_unpack_ie_sec_chan_offset_ele(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEsec_chan_offset_ele * pDst,bool append_ie)11355 uint32_t dot11f_unpack_ie_sec_chan_offset_ele(tpAniSirGlobal pCtx,
11356 uint8_t *pBuf,
11357 uint8_t ielen,
11358 tDot11fIEsec_chan_offset_ele *pDst,
11359 bool append_ie)
11360 {
11361 uint32_t status = DOT11F_PARSE_SUCCESS;
11362 (void) pBuf; (void)ielen; /* Shutup the compiler */
11363 if (pDst->present)
11364 return DOT11F_DUPLICATE_IE;
11365 pDst->present = 1;
11366 if (unlikely(ielen < 1)) {
11367 pDst->present = 0;
11368 return DOT11F_INCOMPLETE_IE;
11369 }
11370
11371 pDst->secondaryChannelOffset = *pBuf;
11372 (void)pCtx;
11373 return status;
11374 } /* End dot11f_unpack_ie_sec_chan_offset_ele. */
11375
11376 #define SigIesec_chan_offset_ele (0x00a5)
11377
11378
dot11f_unpack_ie_spatial_reuse(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEspatial_reuse * pDst,bool append_ie)11379 uint32_t dot11f_unpack_ie_spatial_reuse(tpAniSirGlobal pCtx,
11380 uint8_t *pBuf,
11381 uint8_t ielen,
11382 tDot11fIEspatial_reuse *pDst,
11383 bool append_ie)
11384 {
11385 uint32_t status = DOT11F_PARSE_SUCCESS;
11386 uint8_t tmp119__;
11387 (void) pBuf; (void)ielen; /* Shutup the compiler */
11388 if (pDst->present)
11389 return DOT11F_DUPLICATE_IE;
11390 pDst->present = 1;
11391 if (unlikely(ielen < 1)) {
11392 pDst->present = 0;
11393 return DOT11F_INCOMPLETE_IE;
11394 }
11395
11396 tmp119__ = *pBuf;
11397 pBuf += 1;
11398 ielen -= 1;
11399 pDst->psr_disallow = tmp119__ >> 0 & 0x1;
11400 pDst->non_srg_pd_sr_disallow = tmp119__ >> 1 & 0x1;
11401 pDst->non_srg_offset_present = tmp119__ >> 2 & 0x1;
11402 pDst->srg_info_present = tmp119__ >> 3 & 0x1;
11403 pDst->sr_value15_allow = tmp119__ >> 4 & 0x1;
11404 pDst->reserved = tmp119__ >> 5 & 0x7;
11405 switch (pDst->non_srg_offset_present) {
11406 case 1:
11407 if (unlikely(ielen < 1)) {
11408 pDst->present = 0;
11409 return DOT11F_INCOMPLETE_IE;
11410 }
11411
11412 pDst->non_srg_offset.info.non_srg_pd_max_offset = *pBuf;
11413 pBuf += 1;
11414 ielen -= (uint8_t)1;
11415 break;
11416 }
11417 switch (pDst->srg_info_present) {
11418 case 1:
11419 if (unlikely(ielen < 1)) {
11420 pDst->present = 0;
11421 return DOT11F_INCOMPLETE_IE;
11422 }
11423
11424 pDst->srg_info.info.srg_pd_min_offset = *pBuf;
11425 pBuf += 1;
11426 ielen -= (uint8_t)1;
11427 if (unlikely(ielen < 1)) {
11428 pDst->present = 0;
11429 return DOT11F_INCOMPLETE_IE;
11430 }
11431
11432 pDst->srg_info.info.srg_pd_max_offset = *pBuf;
11433 pBuf += 1;
11434 ielen -= (uint8_t)1;
11435 if (unlikely(ielen < 8)) {
11436 pDst->present = 0;
11437 return DOT11F_INCOMPLETE_IE;
11438 }
11439
11440 DOT11F_MEMCPY(pCtx, pDst->srg_info.info.srg_color, pBuf, 8);
11441 pBuf += 8;
11442 ielen -= (uint8_t)8;
11443 if (unlikely(ielen < 8)) {
11444 pDst->present = 0;
11445 return DOT11F_INCOMPLETE_IE;
11446 }
11447
11448 DOT11F_MEMCPY(pCtx, pDst->srg_info.info.srg_partial_bssid, pBuf, 8);
11449 pBuf += 8;
11450 ielen -= (uint8_t)8;
11451 break;
11452 }
11453 (void)pCtx;
11454 return status;
11455 } /* End dot11f_unpack_ie_spatial_reuse. */
11456
11457 #define SigIespatial_reuse (0x00a6)
11458
11459
dot11f_unpack_ie_t2lm_ie(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEt2lm_ie * pDst,bool append_ie)11460 uint32_t dot11f_unpack_ie_t2lm_ie(tpAniSirGlobal pCtx,
11461 uint8_t *pBuf,
11462 uint8_t ielen,
11463 tDot11fIEt2lm_ie *pDst,
11464 bool append_ie)
11465 {
11466 uint32_t status = DOT11F_PARSE_SUCCESS;
11467 (void) pBuf; (void)ielen; /* Shutup the compiler */
11468 if (pDst->present)
11469 return DOT11F_DUPLICATE_IE;
11470 pDst->present = 1;
11471 pDst->num_data = (uint8_t)(ielen);
11472 DOT11F_MEMCPY(pCtx, pDst->data, pBuf, (ielen));
11473 (void)pCtx;
11474 return status;
11475 } /* End dot11f_unpack_ie_t2lm_ie. */
11476
11477 #define SigIet2lm_ie (0x00a7)
11478
11479
11480 static const tFFDefn FFS_vendor_vht_ie[] = {
11481 { NULL, 0, 0, 0,},
11482 };
11483
11484 static const tIEDefn IES_vendor_vht_ie[] = {
11485 { offsetof(tDot11fIEvendor_vht_ie, VHTCaps), offsetof(tDot11fIEVHTCaps,
11486 present), 0, "VHTCaps", 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0},
11487 0, DOT11F_EID_VHTCAPS, 0, 0, },
11488 { offsetof(tDot11fIEvendor_vht_ie, VHTOperation),
11489 offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation",
11490 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0},
11491 0, DOT11F_EID_VHTOPERATION, 0, 0, },
11492 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },
11493 };
11494
dot11f_unpack_ie_vendor_vht_ie(tpAniSirGlobal pCtx,uint8_t * pBuf,uint8_t ielen,tDot11fIEvendor_vht_ie * pDst,bool append_ie)11495 uint32_t dot11f_unpack_ie_vendor_vht_ie(tpAniSirGlobal pCtx,
11496 uint8_t *pBuf,
11497 uint8_t ielen,
11498 tDot11fIEvendor_vht_ie *pDst,
11499 bool append_ie)
11500 {
11501 uint32_t status = DOT11F_PARSE_SUCCESS;
11502 (void) pBuf; (void)ielen; /* Shutup the compiler */
11503 if (pDst->present)
11504 return DOT11F_DUPLICATE_IE;
11505 pDst->present = 1;
11506 if (unlikely(ielen < 1)) {
11507 pDst->present = 0;
11508 return DOT11F_INCOMPLETE_IE;
11509 }
11510
11511 pDst->sub_type = *pBuf;
11512 pBuf += 1;
11513 ielen -= (uint8_t)1;
11514 (void)pCtx;
11515 status |= unpack_core(pCtx,
11516 pBuf,
11517 ielen,
11518 FFS_vendor_vht_ie,
11519 IES_vendor_vht_ie,
11520 (uint8_t *)pDst,
11521 sizeof(*pDst),
11522 append_ie);
11523 return status;
11524 } /* End dot11f_unpack_ie_vendor_vht_ie. */
11525
11526 #define SigIevendor_vht_ie (0x00a8)
11527
11528
11529 static const tFFDefn FFS_AddTSRequest[] = {
11530 { "Category", offsetof(tDot11fAddTSRequest, Category), SigFfCategory,
11531 DOT11F_FF_CATEGORY_LEN, },
11532 { "Action", offsetof(tDot11fAddTSRequest, Action), SigFfAction,
11533 DOT11F_FF_ACTION_LEN, },
11534 { "DialogToken", offsetof(tDot11fAddTSRequest, DialogToken),
11535 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
11536 { NULL, 0, 0, 0,},
11537 };
11538
11539 static const tIEDefn IES_AddTSRequest[] = {
11540 { offsetof(tDot11fAddTSRequest, TSPEC), offsetof(tDot11fIETSPEC, present),
11541 0, "TSPEC", 0, 57, 57, SigIeTSPEC, {0, 0, 0, 0, 0},
11542 0, DOT11F_EID_TSPEC, 0, 1, },
11543 { offsetof(tDot11fAddTSRequest, TCLAS), offsetof(tDot11fIETCLAS, present),
11544 offsetof(tDot11fAddTSRequest, num_TCLAS), "TCLAS", 2, 7, 45, SigIeTCLAS,
11545 {0, 0, 0, 0, 0}, 0, DOT11F_EID_TCLAS, 0, 0, },
11546 { offsetof(tDot11fAddTSRequest, TCLASSPROC),
11547 offsetof(tDot11fIETCLASSPROC, present), 0, "TCLASSPROC",
11548 0, 3, 3, SigIeTCLASSPROC, {0, 0, 0, 0, 0},
11549 0, DOT11F_EID_TCLASSPROC, 0, 0, },
11550 { offsetof(tDot11fAddTSRequest, WMMTSPEC), offsetof(tDot11fIEWMMTSPEC,
11551 present), 0, "WMMTSPEC", 0, 63, 63, SigIeWMMTSPEC, {0, 80, 242, 2, 2},
11552 5, DOT11F_EID_WMMTSPEC, 0, 0, },
11553 { offsetof(tDot11fAddTSRequest, WMMTCLAS), offsetof(tDot11fIEWMMTCLAS,
11554 present), offsetof(tDot11fAddTSRequest, num_WMMTCLAS), "WMMTCLAS",
11555 2, 13, 51, SigIeWMMTCLAS, {0, 80, 242, 2, 6},
11556 5, DOT11F_EID_WMMTCLAS, 0, 0, },
11557 { offsetof(tDot11fAddTSRequest, WMMTCLASPROC),
11558 offsetof(tDot11fIEWMMTCLASPROC, present), 0, "WMMTCLASPROC",
11559 0, 9, 9, SigIeWMMTCLASPROC, {0, 80, 242, 2, 7},
11560 5, DOT11F_EID_WMMTCLASPROC, 0, 0, },
11561 { offsetof(tDot11fAddTSRequest, ESETrafStrmRateSet),
11562 offsetof(tDot11fIEESETrafStrmRateSet, present), 0, "ESETrafStrmRateSet",
11563 0, 7, 15, SigIeESETrafStrmRateSet, {0, 64, 150, 8, 0},
11564 4, DOT11F_EID_ESETRAFSTRMRATESET, 0, 0, },
11565 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
11566
dot11f_unpack_add_ts_request(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fAddTSRequest * pFrm,bool append_ie)11567 uint32_t dot11f_unpack_add_ts_request(tpAniSirGlobal pCtx,
11568 uint8_t *pBuf, uint32_t nBuf,
11569 tDot11fAddTSRequest *pFrm, bool append_ie)
11570 {
11571 uint32_t i = 0;
11572 uint32_t status = 0;
11573 status = unpack_core(pCtx, pBuf, nBuf,
11574 FFS_AddTSRequest, IES_AddTSRequest,
11575 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
11576
11577 (void)i;
11578 return status;
11579
11580 } /* End dot11f_unpack_add_ts_request. */
11581
11582 static const tFFDefn FFS_AddTSResponse[] = {
11583 { "Category", offsetof(tDot11fAddTSResponse, Category), SigFfCategory,
11584 DOT11F_FF_CATEGORY_LEN, },
11585 { "Action", offsetof(tDot11fAddTSResponse, Action), SigFfAction,
11586 DOT11F_FF_ACTION_LEN, },
11587 { "DialogToken", offsetof(tDot11fAddTSResponse, DialogToken),
11588 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
11589 { "Status", offsetof(tDot11fAddTSResponse, Status), SigFfStatus,
11590 DOT11F_FF_STATUS_LEN, },
11591 { NULL, 0, 0, 0,},
11592 };
11593
11594 static const tIEDefn IES_AddTSResponse[] = {
11595 { offsetof(tDot11fAddTSResponse, TSDelay), offsetof(tDot11fIETSDelay,
11596 present), 0, "TSDelay", 0, 6, 6, SigIeTSDelay, {0, 0, 0, 0, 0},
11597 0, DOT11F_EID_TSDELAY, 0, 1, },
11598 { offsetof(tDot11fAddTSResponse, TSPEC), offsetof(tDot11fIETSPEC,
11599 present), 0, "TSPEC", 0, 57, 57, SigIeTSPEC, {0, 0, 0, 0, 0},
11600 0, DOT11F_EID_TSPEC, 0, 1, },
11601 { offsetof(tDot11fAddTSResponse, TCLAS), offsetof(tDot11fIETCLAS,
11602 present), offsetof(tDot11fAddTSResponse, num_TCLAS), "TCLAS",
11603 2, 7, 45, SigIeTCLAS, {0, 0, 0, 0, 0}, 0, DOT11F_EID_TCLAS, 0, 0, },
11604 { offsetof(tDot11fAddTSResponse, TCLASSPROC),
11605 offsetof(tDot11fIETCLASSPROC, present), 0, "TCLASSPROC",
11606 0, 3, 3, SigIeTCLASSPROC, {0, 0, 0, 0, 0},
11607 0, DOT11F_EID_TCLASSPROC, 0, 0, },
11608 { offsetof(tDot11fAddTSResponse, Schedule), offsetof(tDot11fIESchedule,
11609 present), 0, "Schedule", 0, 16, 16, SigIeSchedule, {0, 0, 0, 0, 0},
11610 0, DOT11F_EID_SCHEDULE, 0, 0, },
11611 { offsetof(tDot11fAddTSResponse, WMMTSDelay),
11612 offsetof(tDot11fIEWMMTSDelay, present), 0, "WMMTSDelay",
11613 0, 12, 12, SigIeWMMTSDelay, {0, 80, 242, 2, 8},
11614 5, DOT11F_EID_WMMTSDELAY, 0, 0, },
11615 { offsetof(tDot11fAddTSResponse, WMMSchedule),
11616 offsetof(tDot11fIEWMMSchedule, present), 0, "WMMSchedule",
11617 0, 22, 22, SigIeWMMSchedule, {0, 80, 242, 2, 9},
11618 5, DOT11F_EID_WMMSCHEDULE, 0, 0, },
11619 { offsetof(tDot11fAddTSResponse, WMMTSPEC), offsetof(tDot11fIEWMMTSPEC,
11620 present), 0, "WMMTSPEC", 0, 63, 63, SigIeWMMTSPEC, {0, 80, 242, 2, 2},
11621 5, DOT11F_EID_WMMTSPEC, 0, 0, },
11622 { offsetof(tDot11fAddTSResponse, WMMTCLAS), offsetof(tDot11fIEWMMTCLAS,
11623 present), offsetof(tDot11fAddTSResponse, num_WMMTCLAS), "WMMTCLAS",
11624 2, 13, 51, SigIeWMMTCLAS, {0, 80, 242, 2, 6},
11625 5, DOT11F_EID_WMMTCLAS, 0, 0, },
11626 { offsetof(tDot11fAddTSResponse, WMMTCLASPROC),
11627 offsetof(tDot11fIEWMMTCLASPROC, present), 0, "WMMTCLASPROC",
11628 0, 9, 9, SigIeWMMTCLASPROC, {0, 80, 242, 2, 7},
11629 5, DOT11F_EID_WMMTCLASPROC, 0, 0, },
11630 { offsetof(tDot11fAddTSResponse, ESETrafStrmMet),
11631 offsetof(tDot11fIEESETrafStrmMet, present), 0, "ESETrafStrmMet",
11632 0, 10, 10, SigIeESETrafStrmMet, {0, 64, 150, 7, 0},
11633 4, DOT11F_EID_ESETRAFSTRMMET, 0, 0, },
11634 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
11635
dot11f_unpack_add_ts_response(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fAddTSResponse * pFrm,bool append_ie)11636 uint32_t dot11f_unpack_add_ts_response(tpAniSirGlobal pCtx,
11637 uint8_t *pBuf, uint32_t nBuf,
11638 tDot11fAddTSResponse *pFrm, bool append_ie)
11639 {
11640 uint32_t i = 0;
11641 uint32_t status = 0;
11642 status = unpack_core(pCtx, pBuf, nBuf,
11643 FFS_AddTSResponse, IES_AddTSResponse,
11644 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
11645
11646 (void)i;
11647 return status;
11648
11649 } /* End dot11f_unpack_add_ts_response. */
11650
11651 static const tFFDefn FFS_AssocRequest[] = {
11652 { "Capabilities", offsetof(tDot11fAssocRequest, Capabilities),
11653 SigFfCapabilities, DOT11F_FF_CAPABILITIES_LEN, },
11654 { "ListenInterval", offsetof(tDot11fAssocRequest, ListenInterval),
11655 SigFfListenInterval, DOT11F_FF_LISTENINTERVAL_LEN, },
11656 { NULL, 0, 0, 0,},
11657 };
11658
11659 static const tIEDefn IES_AssocRequest[] = {
11660 { offsetof(tDot11fAssocRequest, SSID), offsetof(tDot11fIESSID, present), 0,
11661 "SSID", 0, 2, 34, SigIeSSID, {0, 0, 0, 0, 0}, 0, DOT11F_EID_SSID, 0, 1, },
11662 { offsetof(tDot11fAssocRequest, SuppRates), offsetof(tDot11fIESuppRates,
11663 present), 0, "SuppRates", 0, 2, 14, SigIeSuppRates, {0, 0, 0, 0, 0},
11664 0, DOT11F_EID_SUPPRATES, 0, 1, },
11665 { offsetof(tDot11fAssocRequest, ExtSuppRates),
11666 offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates",
11667 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0},
11668 0, DOT11F_EID_EXTSUPPRATES, 0, 0, },
11669 { offsetof(tDot11fAssocRequest, PowerCaps), offsetof(tDot11fIEPowerCaps,
11670 present), 0, "PowerCaps", 0, 4, 4, SigIePowerCaps, {0, 0, 0, 0, 0},
11671 0, DOT11F_EID_POWERCAPS, 0, 0, },
11672 { offsetof(tDot11fAssocRequest, SuppChannels),
11673 offsetof(tDot11fIESuppChannels, present), 0, "SuppChannels",
11674 0, 2, 98, SigIeSuppChannels, {0, 0, 0, 0, 0},
11675 0, DOT11F_EID_SUPPCHANNELS, 0, 0, },
11676 { offsetof(tDot11fAssocRequest, RSNOpaque), offsetof(tDot11fIERSNOpaque,
11677 present), 0, "RSNOpaque", 0, 2, 255, SigIeRSNOpaque, {0, 0, 0, 0, 0},
11678 0, DOT11F_EID_RSNOPAQUE, 0, 0, },
11679 { offsetof(tDot11fAssocRequest, QOSCapsStation),
11680 offsetof(tDot11fIEQOSCapsStation, present), 0, "QOSCapsStation",
11681 0, 3, 3, SigIeQOSCapsStation, {0, 0, 0, 0, 0},
11682 0, DOT11F_EID_QOSCAPSSTATION, 0, 0, },
11683 { offsetof(tDot11fAssocRequest, RRMEnabledCap),
11684 offsetof(tDot11fIERRMEnabledCap, present), 0, "RRMEnabledCap",
11685 0, 7, 7, SigIeRRMEnabledCap, {0, 0, 0, 0, 0},
11686 0, DOT11F_EID_RRMENABLEDCAP, 0, 0, },
11687 { offsetof(tDot11fAssocRequest, MobilityDomain),
11688 offsetof(tDot11fIEMobilityDomain, present), 0, "MobilityDomain",
11689 0, 5, 5, SigIeMobilityDomain, {0, 0, 0, 0, 0},
11690 0, DOT11F_EID_MOBILITYDOMAIN, 0, 0, },
11691 { offsetof(tDot11fAssocRequest, SuppOperatingClasses),
11692 offsetof(tDot11fIESuppOperatingClasses, present), 0,
11693 "SuppOperatingClasses", 0, 3, 34, SigIeSuppOperatingClasses,
11694 {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPOPERATINGCLASSES, 0, 0, },
11695 { offsetof(tDot11fAssocRequest, HTCaps), offsetof(tDot11fIEHTCaps,
11696 present), 0, "HTCaps", 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0},
11697 0, DOT11F_EID_HTCAPS, 0, 0, },
11698 { offsetof(tDot11fAssocRequest, ExtCap), offsetof(tDot11fIEExtCap,
11699 present), 0, "ExtCap", 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0},
11700 0, DOT11F_EID_EXTCAP, 0, 0, },
11701 { offsetof(tDot11fAssocRequest, VHTCaps), offsetof(tDot11fIEVHTCaps,
11702 present), 0, "VHTCaps", 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0},
11703 0, DOT11F_EID_VHTCAPS, 0, 0, },
11704 { offsetof(tDot11fAssocRequest, OperatingMode),
11705 offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode",
11706 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0},
11707 0, DOT11F_EID_OPERATINGMODE, 0, 0, },
11708 { offsetof(tDot11fAssocRequest, fils_session),
11709 offsetof(tDot11fIEfils_session, present), 0, "fils_session",
11710 0, 10, 10, SigIefils_session, {0, 0, 0, 0, 0},
11711 0, DOT11F_EID_FILS_SESSION, 4, 0, },
11712 { offsetof(tDot11fAssocRequest, fils_public_key),
11713 offsetof(tDot11fIEfils_public_key, present), 0, "fils_public_key",
11714 0, 3, 258, SigIefils_public_key, {0, 0, 0, 0, 0},
11715 0, DOT11F_EID_FILS_PUBLIC_KEY, 12, 0, },
11716 { offsetof(tDot11fAssocRequest, fils_key_confirmation),
11717 offsetof(tDot11fIEfils_key_confirmation, present), 0,
11718 "fils_key_confirmation", 0, 2, 257, SigIefils_key_confirmation,
11719 {0, 0, 0, 0, 0}, 0, DOT11F_EID_FILS_KEY_CONFIRMATION, 3, 0, },
11720 { offsetof(tDot11fAssocRequest, fils_hlp_container),
11721 offsetof(tDot11fIEfils_hlp_container, present), 0, "fils_hlp_container",
11722 0, 14, 269, SigIefils_hlp_container, {0, 0, 0, 0, 0},
11723 0, DOT11F_EID_FILS_HLP_CONTAINER, 5, 0, },
11724 { offsetof(tDot11fAssocRequest, bss_max_idle_period),
11725 offsetof(tDot11fIEbss_max_idle_period, present), 0, "bss_max_idle_period",
11726 0, 5, 5, SigIebss_max_idle_period, {0, 0, 0, 0, 0},
11727 0, DOT11F_EID_BSS_MAX_IDLE_PERIOD, 0, 0, },
11728 { offsetof(tDot11fAssocRequest, FTInfo), offsetof(tDot11fIEFTInfo,
11729 present), 0, "FTInfo", 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0},
11730 0, DOT11F_EID_FTINFO, 0, 0, },
11731 { offsetof(tDot11fAssocRequest, he_cap), offsetof(tDot11fIEhe_cap,
11732 present), 0, "he_cap", 0, 23, 56, SigIehe_cap, {0, 0, 0, 0, 0},
11733 0, DOT11F_EID_HE_CAP, 35, 0, },
11734 { offsetof(tDot11fAssocRequest, he_6ghz_band_cap),
11735 offsetof(tDot11fIEhe_6ghz_band_cap, present), 0, "he_6ghz_band_cap",
11736 0, 4, 4, SigIehe_6ghz_band_cap, {0, 0, 0, 0, 0},
11737 0, DOT11F_EID_HE_6GHZ_BAND_CAP, 59, 0, },
11738 { offsetof(tDot11fAssocRequest, WAPIOpaque),
11739 offsetof(tDot11fIEWAPIOpaque, present), 0, "WAPIOpaque",
11740 0, 8, 255, SigIeWAPIOpaque, {0, 0, 0, 0, 0},
11741 0, DOT11F_EID_WAPIOPAQUE, 0, 0, },
11742 { offsetof(tDot11fAssocRequest, WAPI), offsetof(tDot11fIEWAPI, present), 0,
11743 "WAPI", 0, 14, 112, SigIeWAPI, {0, 0, 0, 0, 0},
11744 0, DOT11F_EID_WAPI, 0, 0, },
11745 { offsetof(tDot11fAssocRequest, QosMapSet), offsetof(tDot11fIEQosMapSet,
11746 present), 0, "QosMapSet", 0, 18, 60, SigIeQosMapSet, {0, 0, 0, 0, 0},
11747 0, DOT11F_EID_QOSMAPSET, 0, 0, },
11748 { offsetof(tDot11fAssocRequest, fragment_ie),
11749 offsetof(tDot11fIEfragment_ie, present), 0, "fragment_ie",
11750 0, 2, 257, SigIefragment_ie, {0, 0, 0, 0, 0},
11751 0, DOT11F_EID_FRAGMENT_IE, 0, 0, },
11752 { offsetof(tDot11fAssocRequest, dh_parameter_element),
11753 offsetof(tDot11fIEdh_parameter_element, present), 0,
11754 "dh_parameter_element", 0, 4, 259, SigIedh_parameter_element,
11755 {0, 0, 0, 0, 0}, 0, DOT11F_EID_DH_PARAMETER_ELEMENT, 32, 0, },
11756 { offsetof(tDot11fAssocRequest, eht_cap), offsetof(tDot11fIEeht_cap,
11757 present), 0, "eht_cap", 0, 26, 88, SigIeeht_cap, {0, 0, 0, 0, 0},
11758 0, DOT11F_EID_EHT_CAP, 108, 0, },
11759 { offsetof(tDot11fAssocRequest, mlo_ie), offsetof(tDot11fIEmlo_ie,
11760 present), 0, "mlo_ie", 0, 11, 257, SigIemlo_ie, {0, 0, 0, 0, 0},
11761 0, DOT11F_EID_MLO_IE, 107, 0, },
11762 { offsetof(tDot11fAssocRequest, t2lm_ie), offsetof(tDot11fIEt2lm_ie,
11763 present), offsetof(tDot11fAssocRequest, num_t2lm_ie), "t2lm_ie",
11764 2, 5, 257, SigIet2lm_ie, {0, 0, 0, 0, 0},
11765 0, DOT11F_EID_T2LM_IE, 109, 0, },
11766 { offsetof(tDot11fAssocRequest, WPAOpaque), offsetof(tDot11fIEWPAOpaque,
11767 present), 0, "WPAOpaque", 0, 8, 255, SigIeWPAOpaque, {0, 80, 242, 1, 0},
11768 4, DOT11F_EID_WPAOPAQUE, 0, 0, },
11769 { offsetof(tDot11fAssocRequest, WMMCaps), offsetof(tDot11fIEWMMCaps,
11770 present), 0, "WMMCaps", 0, 9, 9, SigIeWMMCaps, {0, 80, 242, 2, 5},
11771 5, DOT11F_EID_WMMCAPS, 0, 0, },
11772 { offsetof(tDot11fAssocRequest, WMMInfoStation),
11773 offsetof(tDot11fIEWMMInfoStation, present), 0, "WMMInfoStation",
11774 0, 9, 9, SigIeWMMInfoStation, {0, 80, 242, 2, 0},
11775 5, DOT11F_EID_WMMINFOSTATION, 0, 0, },
11776 { offsetof(tDot11fAssocRequest, WscIEOpaque),
11777 offsetof(tDot11fIEWscIEOpaque, present), 0, "WscIEOpaque",
11778 0, 8, 255, SigIeWscIEOpaque, {0, 80, 242, 4, 0},
11779 4, DOT11F_EID_WSCIEOPAQUE, 0, 0, },
11780 { offsetof(tDot11fAssocRequest, ESERadMgmtCap),
11781 offsetof(tDot11fIEESERadMgmtCap, present), 0, "ESERadMgmtCap",
11782 0, 8, 8, SigIeESERadMgmtCap, {0, 64, 150, 1, 0},
11783 4, DOT11F_EID_ESERADMGMTCAP, 0, 0, },
11784 { offsetof(tDot11fAssocRequest, ESEVersion),
11785 offsetof(tDot11fIEESEVersion, present), 0, "ESEVersion",
11786 0, 7, 7, SigIeESEVersion, {0, 64, 150, 3, 0},
11787 4, DOT11F_EID_ESEVERSION, 0, 0, },
11788 { offsetof(tDot11fAssocRequest, P2PIEOpaque),
11789 offsetof(tDot11fIEP2PIEOpaque, present), 0, "P2PIEOpaque",
11790 0, 8, 255, SigIeP2PIEOpaque, {80, 111, 154, 9, 0},
11791 4, DOT11F_EID_P2PIEOPAQUE, 0, 0, },
11792 { offsetof(tDot11fAssocRequest, WFDIEOpaque),
11793 offsetof(tDot11fIEWFDIEOpaque, present), 0, "WFDIEOpaque",
11794 0, 8, 255, SigIeWFDIEOpaque, {80, 111, 154, 10, 0},
11795 4, DOT11F_EID_WFDIEOPAQUE, 0, 0, },
11796 { offsetof(tDot11fAssocRequest, vendor_vht_ie),
11797 offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie",
11798 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 4, 0},
11799 4, DOT11F_EID_VENDOR_VHT_IE, 0, 0, },
11800 { offsetof(tDot11fAssocRequest, hs20vendor_ie),
11801 offsetof(tDot11fIEhs20vendor_ie, present), 0, "hs20vendor_ie",
11802 0, 7, 9, SigIehs20vendor_ie, {80, 111, 154, 16, 0},
11803 4, DOT11F_EID_HS20VENDOR_IE, 0, 0, },
11804 { offsetof(tDot11fAssocRequest, qcn_ie), offsetof(tDot11fIEqcn_ie,
11805 present), 0, "qcn_ie", 0, 6, 55, SigIeqcn_ie, {140, 253, 240, 1, 0},
11806 4, DOT11F_EID_QCN_IE, 0, 0, },
11807 { offsetof(tDot11fAssocRequest, osen_ie), offsetof(tDot11fIEosen_ie,
11808 present), 0, "osen_ie", 0, 6, 261, SigIeosen_ie, {80, 111, 154, 18, 0},
11809 4, DOT11F_EID_OSEN_IE, 0, 0, },
11810 { offsetof(tDot11fAssocRequest, roaming_consortium_sel),
11811 offsetof(tDot11fIEroaming_consortium_sel, present), 0,
11812 "roaming_consortium_sel", 0, 6, 261, SigIeroaming_consortium_sel,
11813 {80, 111, 154, 29, 0}, 4, DOT11F_EID_ROAMING_CONSORTIUM_SEL, 0, 0, },
11814 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
11815
dot11f_unpack_assoc_request(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fAssocRequest * pFrm,bool append_ie)11816 uint32_t dot11f_unpack_assoc_request(tpAniSirGlobal pCtx,
11817 uint8_t *pBuf, uint32_t nBuf,
11818 tDot11fAssocRequest *pFrm, bool append_ie)
11819 {
11820 uint32_t i = 0;
11821 uint32_t status = 0;
11822 status = unpack_core(pCtx, pBuf, nBuf,
11823 FFS_AssocRequest, IES_AssocRequest,
11824 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
11825
11826 (void)i;
11827 return status;
11828
11829 } /* End dot11f_unpack_assoc_request. */
11830
11831 static const tFFDefn FFS_AssocResponse[] = {
11832 { "Capabilities", offsetof(tDot11fAssocResponse, Capabilities),
11833 SigFfCapabilities, DOT11F_FF_CAPABILITIES_LEN, },
11834 { "Status", offsetof(tDot11fAssocResponse, Status), SigFfStatus,
11835 DOT11F_FF_STATUS_LEN, },
11836 { "AID", offsetof(tDot11fAssocResponse, AID), SigFfAID,
11837 DOT11F_FF_AID_LEN, },
11838 { NULL, 0, 0, 0,},
11839 };
11840
11841 static const tIEDefn IES_AssocResponse[] = {
11842 { offsetof(tDot11fAssocResponse, SuppRates), offsetof(tDot11fIESuppRates,
11843 present), 0, "SuppRates", 0, 2, 14, SigIeSuppRates, {0, 0, 0, 0, 0},
11844 0, DOT11F_EID_SUPPRATES, 0, 1, },
11845 { offsetof(tDot11fAssocResponse, ExtSuppRates),
11846 offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates",
11847 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0},
11848 0, DOT11F_EID_EXTSUPPRATES, 0, 0, },
11849 { offsetof(tDot11fAssocResponse, EDCAParamSet),
11850 offsetof(tDot11fIEEDCAParamSet, present), 0, "EDCAParamSet",
11851 0, 20, 20, SigIeEDCAParamSet, {0, 0, 0, 0, 0},
11852 0, DOT11F_EID_EDCAPARAMSET, 0, 0, },
11853 { offsetof(tDot11fAssocResponse, RCPIIE), offsetof(tDot11fIERCPIIE,
11854 present), 0, "RCPIIE", 0, 3, 3, SigIeRCPIIE, {0, 0, 0, 0, 0},
11855 0, DOT11F_EID_RCPIIE, 0, 0, },
11856 { offsetof(tDot11fAssocResponse, RSNIIE), offsetof(tDot11fIERSNIIE,
11857 present), 0, "RSNIIE", 0, 3, 3, SigIeRSNIIE, {0, 0, 0, 0, 0},
11858 0, DOT11F_EID_RSNIIE, 0, 0, },
11859 { offsetof(tDot11fAssocResponse, RRMEnabledCap),
11860 offsetof(tDot11fIERRMEnabledCap, present), 0, "RRMEnabledCap",
11861 0, 7, 7, SigIeRRMEnabledCap, {0, 0, 0, 0, 0},
11862 0, DOT11F_EID_RRMENABLEDCAP, 0, 0, },
11863 { offsetof(tDot11fAssocResponse, MobilityDomain),
11864 offsetof(tDot11fIEMobilityDomain, present), 0, "MobilityDomain",
11865 0, 5, 5, SigIeMobilityDomain, {0, 0, 0, 0, 0},
11866 0, DOT11F_EID_MOBILITYDOMAIN, 0, 0, },
11867 { offsetof(tDot11fAssocResponse, FTInfo), offsetof(tDot11fIEFTInfo,
11868 present), 0, "FTInfo", 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0},
11869 0, DOT11F_EID_FTINFO, 0, 0, },
11870 { offsetof(tDot11fAssocResponse, TimeoutInterval),
11871 offsetof(tDot11fIETimeoutInterval, present), 0, "TimeoutInterval",
11872 0, 7, 7, SigIeTimeoutInterval, {0, 0, 0, 0, 0},
11873 0, DOT11F_EID_TIMEOUTINTERVAL, 0, 0, },
11874 { offsetof(tDot11fAssocResponse, HTCaps), offsetof(tDot11fIEHTCaps,
11875 present), 0, "HTCaps", 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0},
11876 0, DOT11F_EID_HTCAPS, 0, 0, },
11877 { offsetof(tDot11fAssocResponse, HTInfo), offsetof(tDot11fIEHTInfo,
11878 present), 0, "HTInfo", 0, 24, 56, SigIeHTInfo, {0, 0, 0, 0, 0},
11879 0, DOT11F_EID_HTINFO, 0, 0, },
11880 { offsetof(tDot11fAssocResponse, OBSSScanParameters),
11881 offsetof(tDot11fIEOBSSScanParameters, present), 0, "OBSSScanParameters",
11882 0, 16, 16, SigIeOBSSScanParameters, {0, 0, 0, 0, 0},
11883 0, DOT11F_EID_OBSSSCANPARAMETERS, 0, 0, },
11884 { offsetof(tDot11fAssocResponse, ExtCap), offsetof(tDot11fIEExtCap,
11885 present), 0, "ExtCap", 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0},
11886 0, DOT11F_EID_EXTCAP, 0, 0, },
11887 { offsetof(tDot11fAssocResponse, bss_max_idle_period),
11888 offsetof(tDot11fIEbss_max_idle_period, present), 0, "bss_max_idle_period",
11889 0, 5, 5, SigIebss_max_idle_period, {0, 0, 0, 0, 0},
11890 0, DOT11F_EID_BSS_MAX_IDLE_PERIOD, 0, 0, },
11891 { offsetof(tDot11fAssocResponse, QosMapSet), offsetof(tDot11fIEQosMapSet,
11892 present), 0, "QosMapSet", 0, 18, 60, SigIeQosMapSet, {0, 0, 0, 0, 0},
11893 0, DOT11F_EID_QOSMAPSET, 0, 0, },
11894 { offsetof(tDot11fAssocResponse, VHTCaps), offsetof(tDot11fIEVHTCaps,
11895 present), 0, "VHTCaps", 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0},
11896 0, DOT11F_EID_VHTCAPS, 0, 0, },
11897 { offsetof(tDot11fAssocResponse, VHTOperation),
11898 offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation",
11899 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0},
11900 0, DOT11F_EID_VHTOPERATION, 0, 0, },
11901 { offsetof(tDot11fAssocResponse, OperatingMode),
11902 offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode",
11903 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0},
11904 0, DOT11F_EID_OPERATINGMODE, 0, 0, },
11905 { offsetof(tDot11fAssocResponse, fils_session),
11906 offsetof(tDot11fIEfils_session, present), 0, "fils_session",
11907 0, 10, 10, SigIefils_session, {0, 0, 0, 0, 0},
11908 0, DOT11F_EID_FILS_SESSION, 4, 0, },
11909 { offsetof(tDot11fAssocResponse, fils_public_key),
11910 offsetof(tDot11fIEfils_public_key, present), 0, "fils_public_key",
11911 0, 3, 258, SigIefils_public_key, {0, 0, 0, 0, 0},
11912 0, DOT11F_EID_FILS_PUBLIC_KEY, 12, 0, },
11913 { offsetof(tDot11fAssocResponse, fils_key_confirmation),
11914 offsetof(tDot11fIEfils_key_confirmation, present), 0,
11915 "fils_key_confirmation", 0, 2, 257, SigIefils_key_confirmation,
11916 {0, 0, 0, 0, 0}, 0, DOT11F_EID_FILS_KEY_CONFIRMATION, 3, 0, },
11917 { offsetof(tDot11fAssocResponse, fils_hlp_container),
11918 offsetof(tDot11fIEfils_hlp_container, present), 0, "fils_hlp_container",
11919 0, 14, 269, SigIefils_hlp_container, {0, 0, 0, 0, 0},
11920 0, DOT11F_EID_FILS_HLP_CONTAINER, 5, 0, },
11921 { offsetof(tDot11fAssocResponse, he_cap), offsetof(tDot11fIEhe_cap,
11922 present), 0, "he_cap", 0, 23, 56, SigIehe_cap, {0, 0, 0, 0, 0},
11923 0, DOT11F_EID_HE_CAP, 35, 0, },
11924 { offsetof(tDot11fAssocResponse, he_op), offsetof(tDot11fIEhe_op,
11925 present), 0, "he_op", 0, 8, 17, SigIehe_op, {0, 0, 0, 0, 0},
11926 0, DOT11F_EID_HE_OP, 36, 0, },
11927 { offsetof(tDot11fAssocResponse, spatial_reuse),
11928 offsetof(tDot11fIEspatial_reuse, present), 0, "spatial_reuse",
11929 0, 3, 22, SigIespatial_reuse, {0, 0, 0, 0, 0},
11930 0, DOT11F_EID_SPATIAL_REUSE, 39, 0, },
11931 { offsetof(tDot11fAssocResponse, bss_color_change),
11932 offsetof(tDot11fIEbss_color_change, present), 0, "bss_color_change",
11933 0, 4, 4, SigIebss_color_change, {0, 0, 0, 0, 0},
11934 0, DOT11F_EID_BSS_COLOR_CHANGE, 42, 0, },
11935 { offsetof(tDot11fAssocResponse, mu_edca_param_set),
11936 offsetof(tDot11fIEmu_edca_param_set, present), 0, "mu_edca_param_set",
11937 0, 15, 15, SigIemu_edca_param_set, {0, 0, 0, 0, 0},
11938 0, DOT11F_EID_MU_EDCA_PARAM_SET, 38, 0, },
11939 { offsetof(tDot11fAssocResponse, he_6ghz_band_cap),
11940 offsetof(tDot11fIEhe_6ghz_band_cap, present), 0, "he_6ghz_band_cap",
11941 0, 4, 4, SigIehe_6ghz_band_cap, {0, 0, 0, 0, 0},
11942 0, DOT11F_EID_HE_6GHZ_BAND_CAP, 59, 0, },
11943 { offsetof(tDot11fAssocResponse, RICDataDesc),
11944 offsetof(tDot11fIERICDataDesc, present),
11945 offsetof(tDot11fAssocResponse, num_RICDataDesc), "RICDataDesc",
11946 2, 2, 550, SigIeRICDataDesc, {0, 0, 0, 0, 0},
11947 0, DOT11F_EID_RICDATADESC, 0, 0, },
11948 { offsetof(tDot11fAssocResponse, ESETxmitPower),
11949 offsetof(tDot11fIEESETxmitPower, present), 0, "ESETxmitPower",
11950 0, 8, 8, SigIeESETxmitPower, {0, 64, 150, 0, 0},
11951 4, DOT11F_EID_ESETXMITPOWER, 0, 0, },
11952 { offsetof(tDot11fAssocResponse, fragment_ie),
11953 offsetof(tDot11fIEfragment_ie, present), 0, "fragment_ie",
11954 0, 2, 257, SigIefragment_ie, {0, 0, 0, 0, 0},
11955 0, DOT11F_EID_FRAGMENT_IE, 0, 0, },
11956 { offsetof(tDot11fAssocResponse, fils_kde), offsetof(tDot11fIEfils_kde,
11957 present), 0, "fils_kde", 0, 10, 265, SigIefils_kde, {0, 0, 0, 0, 0},
11958 0, DOT11F_EID_FILS_KDE, 7, 0, },
11959 { offsetof(tDot11fAssocResponse, eht_cap), offsetof(tDot11fIEeht_cap,
11960 present), 0, "eht_cap", 0, 26, 88, SigIeeht_cap, {0, 0, 0, 0, 0},
11961 0, DOT11F_EID_EHT_CAP, 108, 0, },
11962 { offsetof(tDot11fAssocResponse, eht_op), offsetof(tDot11fIEeht_op,
11963 present), 0, "eht_op", 0, 10, 12, SigIeeht_op, {0, 0, 0, 0, 0},
11964 0, DOT11F_EID_EHT_OP, 106, 0, },
11965 { offsetof(tDot11fAssocResponse, mlo_ie), offsetof(tDot11fIEmlo_ie,
11966 present), 0, "mlo_ie", 0, 11, 257, SigIemlo_ie, {0, 0, 0, 0, 0},
11967 0, DOT11F_EID_MLO_IE, 107, 0, },
11968 { offsetof(tDot11fAssocResponse, t2lm_ie), offsetof(tDot11fIEt2lm_ie,
11969 present), offsetof(tDot11fAssocResponse, num_t2lm_ie), "t2lm_ie",
11970 2, 5, 257, SigIet2lm_ie, {0, 0, 0, 0, 0},
11971 0, DOT11F_EID_T2LM_IE, 109, 0, },
11972 { offsetof(tDot11fAssocResponse, WPA), offsetof(tDot11fIEWPA, present), 0,
11973 "WPA", 0, 8, 50, SigIeWPA, {0, 80, 242, 1, 0}, 4, DOT11F_EID_WPA, 0, 0, },
11974 { offsetof(tDot11fAssocResponse, WMMParams), offsetof(tDot11fIEWMMParams,
11975 present), 0, "WMMParams", 0, 26, 26, SigIeWMMParams, {0, 80, 242, 2, 1},
11976 5, DOT11F_EID_WMMPARAMS, 0, 0, },
11977 { offsetof(tDot11fAssocResponse, WMMCaps), offsetof(tDot11fIEWMMCaps,
11978 present), 0, "WMMCaps", 0, 9, 9, SigIeWMMCaps, {0, 80, 242, 2, 5},
11979 5, DOT11F_EID_WMMCAPS, 0, 0, },
11980 { offsetof(tDot11fAssocResponse, ESERadMgmtCap),
11981 offsetof(tDot11fIEESERadMgmtCap, present), 0, "ESERadMgmtCap",
11982 0, 8, 8, SigIeESERadMgmtCap, {0, 64, 150, 1, 0},
11983 4, DOT11F_EID_ESERADMGMTCAP, 0, 0, },
11984 { offsetof(tDot11fAssocResponse, ESETrafStrmMet),
11985 offsetof(tDot11fIEESETrafStrmMet, present), 0, "ESETrafStrmMet",
11986 0, 10, 10, SigIeESETrafStrmMet, {0, 64, 150, 7, 0},
11987 4, DOT11F_EID_ESETRAFSTRMMET, 0, 0, },
11988 { offsetof(tDot11fAssocResponse, WMMTSPEC), offsetof(tDot11fIEWMMTSPEC,
11989 present), offsetof(tDot11fAssocResponse, num_WMMTSPEC), "WMMTSPEC",
11990 4, 63, 63, SigIeWMMTSPEC, {0, 80, 242, 2, 2},
11991 5, DOT11F_EID_WMMTSPEC, 0, 0, },
11992 { offsetof(tDot11fAssocResponse, WscAssocRes),
11993 offsetof(tDot11fIEWscAssocRes, present), 0, "WscAssocRes",
11994 0, 6, 37, SigIeWscAssocRes, {0, 80, 242, 4, 0},
11995 4, DOT11F_EID_WSCASSOCRES, 0, 0, },
11996 { offsetof(tDot11fAssocResponse, P2PAssocRes),
11997 offsetof(tDot11fIEP2PAssocRes, present), 0, "P2PAssocRes",
11998 0, 6, 17, SigIeP2PAssocRes, {80, 111, 154, 9, 0},
11999 4, DOT11F_EID_P2PASSOCRES, 0, 0, },
12000 { offsetof(tDot11fAssocResponse, vendor_vht_ie),
12001 offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie",
12002 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 4, 0},
12003 4, DOT11F_EID_VENDOR_VHT_IE, 0, 0, },
12004 { offsetof(tDot11fAssocResponse, qcn_ie), offsetof(tDot11fIEqcn_ie,
12005 present), 0, "qcn_ie", 0, 6, 55, SigIeqcn_ie, {140, 253, 240, 1, 0},
12006 4, DOT11F_EID_QCN_IE, 0, 0, },
12007 { offsetof(tDot11fAssocResponse, MBO_IE), offsetof(tDot11fIEMBO_IE,
12008 present), 0, "MBO_IE", 0, 6, 295, SigIeMBO_IE, {80, 111, 154, 22, 0},
12009 4, DOT11F_EID_MBO_IE, 0, 0, },
12010 { offsetof(tDot11fAssocResponse, reduced_neighbor_report),
12011 offsetof(tDot11fIEreduced_neighbor_report, present), 0,
12012 "reduced_neighbor_report", 0, 7, 22, SigIereduced_neighbor_report,
12013 {0, 0, 0, 0, 0}, 0, DOT11F_EID_REDUCED_NEIGHBOR_REPORT, 0, 0, },
12014 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
12015
dot11f_unpack_assoc_response(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fAssocResponse * pFrm,bool append_ie)12016 uint32_t dot11f_unpack_assoc_response(tpAniSirGlobal pCtx,
12017 uint8_t *pBuf, uint32_t nBuf,
12018 tDot11fAssocResponse *pFrm, bool append_ie)
12019 {
12020 uint32_t i = 0;
12021 uint32_t status = 0;
12022 status = unpack_core(pCtx, pBuf, nBuf,
12023 FFS_AssocResponse, IES_AssocResponse,
12024 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
12025
12026 (void)i;
12027 return status;
12028
12029 } /* End dot11f_unpack_assoc_response. */
12030
12031 static const tFFDefn FFS_Authentication[] = {
12032 { "AuthAlgo", offsetof(tDot11fAuthentication, AuthAlgo), SigFfAuthAlgo,
12033 DOT11F_FF_AUTHALGO_LEN, },
12034 { "AuthSeqNo", offsetof(tDot11fAuthentication, AuthSeqNo), SigFfAuthSeqNo,
12035 DOT11F_FF_AUTHSEQNO_LEN, },
12036 { "Status", offsetof(tDot11fAuthentication, Status), SigFfStatus,
12037 DOT11F_FF_STATUS_LEN, },
12038 { NULL, 0, 0, 0,},
12039 };
12040
12041 static const tIEDefn IES_Authentication[] = {
12042 { offsetof(tDot11fAuthentication, ChallengeText),
12043 offsetof(tDot11fIEChallengeText, present), 0, "ChallengeText",
12044 0, 3, 255, SigIeChallengeText, {0, 0, 0, 0, 0},
12045 0, DOT11F_EID_CHALLENGETEXT, 0, 0, },
12046 { offsetof(tDot11fAuthentication, RSNOpaque),
12047 offsetof(tDot11fIERSNOpaque, present), 0, "RSNOpaque",
12048 0, 2, 255, SigIeRSNOpaque, {0, 0, 0, 0, 0},
12049 0, DOT11F_EID_RSNOPAQUE, 0, 0, },
12050 { offsetof(tDot11fAuthentication, MobilityDomain),
12051 offsetof(tDot11fIEMobilityDomain, present), 0, "MobilityDomain",
12052 0, 5, 5, SigIeMobilityDomain, {0, 0, 0, 0, 0},
12053 0, DOT11F_EID_MOBILITYDOMAIN, 0, 0, },
12054 { offsetof(tDot11fAuthentication, FTInfo), offsetof(tDot11fIEFTInfo,
12055 present), 0, "FTInfo", 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0},
12056 0, DOT11F_EID_FTINFO, 0, 0, },
12057 { offsetof(tDot11fAuthentication, TimeoutInterval),
12058 offsetof(tDot11fIETimeoutInterval, present), 0, "TimeoutInterval",
12059 0, 7, 7, SigIeTimeoutInterval, {0, 0, 0, 0, 0},
12060 0, DOT11F_EID_TIMEOUTINTERVAL, 0, 0, },
12061 { offsetof(tDot11fAuthentication, RICDataDesc),
12062 offsetof(tDot11fIERICDataDesc, present),
12063 offsetof(tDot11fAuthentication, num_RICDataDesc), "RICDataDesc",
12064 2, 2, 550, SigIeRICDataDesc, {0, 0, 0, 0, 0},
12065 0, DOT11F_EID_RICDATADESC, 0, 0, },
12066 { offsetof(tDot11fAuthentication, fils_nonce),
12067 offsetof(tDot11fIEfils_nonce, present), 0, "fils_nonce",
12068 0, 18, 18, SigIefils_nonce, {0, 0, 0, 0, 0},
12069 0, DOT11F_EID_FILS_NONCE, 13, 0, },
12070 { offsetof(tDot11fAuthentication, fils_session),
12071 offsetof(tDot11fIEfils_session, present), 0, "fils_session",
12072 0, 10, 10, SigIefils_session, {0, 0, 0, 0, 0},
12073 0, DOT11F_EID_FILS_SESSION, 4, 0, },
12074 { offsetof(tDot11fAuthentication, fils_wrapped_data),
12075 offsetof(tDot11fIEfils_wrapped_data, present), 0, "fils_wrapped_data",
12076 0, 2, 257, SigIefils_wrapped_data, {0, 0, 0, 0, 0},
12077 0, DOT11F_EID_FILS_WRAPPED_DATA, 8, 0, },
12078 { offsetof(tDot11fAuthentication, fils_assoc_delay_info),
12079 offsetof(tDot11fIEfils_assoc_delay_info, present), 0,
12080 "fils_assoc_delay_info", 0, 3, 3, SigIefils_assoc_delay_info,
12081 {0, 0, 0, 0, 0}, 0, DOT11F_EID_FILS_ASSOC_DELAY_INFO, 1, 0, },
12082 { offsetof(tDot11fAuthentication, mlo_ie), offsetof(tDot11fIEmlo_ie,
12083 present), 0, "mlo_ie", 0, 11, 257, SigIemlo_ie, {0, 0, 0, 0, 0},
12084 0, DOT11F_EID_MLO_IE, 107, 0, },
12085 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
12086
dot11f_unpack_authentication(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fAuthentication * pFrm,bool append_ie)12087 uint32_t dot11f_unpack_authentication(tpAniSirGlobal pCtx,
12088 uint8_t *pBuf, uint32_t nBuf,
12089 tDot11fAuthentication *pFrm, bool append_ie)
12090 {
12091 uint32_t i = 0;
12092 uint32_t status = 0;
12093 status = unpack_core(pCtx, pBuf, nBuf,
12094 FFS_Authentication, IES_Authentication,
12095 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
12096
12097 (void)i;
12098 return status;
12099
12100 } /* End dot11f_unpack_authentication. */
12101
12102 static const tFFDefn FFS_Beacon[] = {
12103 { "TimeStamp", offsetof(tDot11fBeacon, TimeStamp), SigFfTimeStamp,
12104 DOT11F_FF_TIMESTAMP_LEN, },
12105 { "BeaconInterval", offsetof(tDot11fBeacon, BeaconInterval),
12106 SigFfBeaconInterval, DOT11F_FF_BEACONINTERVAL_LEN, },
12107 { "Capabilities", offsetof(tDot11fBeacon, Capabilities),
12108 SigFfCapabilities, DOT11F_FF_CAPABILITIES_LEN, },
12109 { NULL, 0, 0, 0,},
12110 };
12111
12112 static const tIEDefn IES_Beacon[] = {
12113 { offsetof(tDot11fBeacon, SSID), offsetof(tDot11fIESSID, present), 0,
12114 "SSID", 0, 2, 34, SigIeSSID, {0, 0, 0, 0, 0}, 0, DOT11F_EID_SSID, 0, 1, },
12115 { offsetof(tDot11fBeacon, SuppRates), offsetof(tDot11fIESuppRates,
12116 present), 0, "SuppRates", 0, 2, 14, SigIeSuppRates, {0, 0, 0, 0, 0},
12117 0, DOT11F_EID_SUPPRATES, 0, 1, },
12118 { offsetof(tDot11fBeacon, FHParamSet), offsetof(tDot11fIEFHParamSet,
12119 present), 0, "FHParamSet", 0, 7, 7, SigIeFHParamSet, {0, 0, 0, 0, 0},
12120 0, DOT11F_EID_FHPARAMSET, 0, 0, },
12121 { offsetof(tDot11fBeacon, DSParams), offsetof(tDot11fIEDSParams, present),
12122 0, "DSParams", 0, 3, 3, SigIeDSParams, {0, 0, 0, 0, 0},
12123 0, DOT11F_EID_DSPARAMS, 0, 0, },
12124 { offsetof(tDot11fBeacon, CFParams), offsetof(tDot11fIECFParams, present),
12125 0, "CFParams", 0, 8, 8, SigIeCFParams, {0, 0, 0, 0, 0},
12126 0, DOT11F_EID_CFPARAMS, 0, 0, },
12127 { offsetof(tDot11fBeacon, TIM), offsetof(tDot11fIETIM, present), 0, "TIM",
12128 0, 6, 256, SigIeTIM, {0, 0, 0, 0, 0}, 0, DOT11F_EID_TIM, 0, 0, },
12129 { offsetof(tDot11fBeacon, Country), offsetof(tDot11fIECountry, present), 0,
12130 "Country", 0, 8, 248, SigIeCountry, {0, 0, 0, 0, 0},
12131 0, DOT11F_EID_COUNTRY, 0, 0, },
12132 { offsetof(tDot11fBeacon, FHParams), offsetof(tDot11fIEFHParams, present),
12133 0, "FHParams", 0, 4, 4, SigIeFHParams, {0, 0, 0, 0, 0},
12134 0, DOT11F_EID_FHPARAMS, 0, 0, },
12135 { offsetof(tDot11fBeacon, FHPattTable), offsetof(tDot11fIEFHPattTable,
12136 present), 0, "FHPattTable", 0, 6, 257, SigIeFHPattTable, {0, 0, 0, 0, 0},
12137 0, DOT11F_EID_FHPATTTABLE, 0, 0, },
12138 { offsetof(tDot11fBeacon, PowerConstraints),
12139 offsetof(tDot11fIEPowerConstraints, present), 0, "PowerConstraints",
12140 0, 3, 3, SigIePowerConstraints, {0, 0, 0, 0, 0},
12141 0, DOT11F_EID_POWERCONSTRAINTS, 0, 0, },
12142 { offsetof(tDot11fBeacon, ChanSwitchAnn),
12143 offsetof(tDot11fIEChanSwitchAnn, present), 0, "ChanSwitchAnn",
12144 0, 5, 5, SigIeChanSwitchAnn, {0, 0, 0, 0, 0},
12145 0, DOT11F_EID_CHANSWITCHANN, 0, 0, },
12146 { offsetof(tDot11fBeacon, Quiet), offsetof(tDot11fIEQuiet, present), 0,
12147 "Quiet", 0, 8, 8, SigIeQuiet, {0, 0, 0, 0, 0},
12148 0, DOT11F_EID_QUIET, 0, 0, },
12149 { offsetof(tDot11fBeacon, TPCReport), offsetof(tDot11fIETPCReport,
12150 present), 0, "TPCReport", 0, 4, 4, SigIeTPCReport, {0, 0, 0, 0, 0},
12151 0, DOT11F_EID_TPCREPORT, 0, 0, },
12152 { offsetof(tDot11fBeacon, ERPInfo), offsetof(tDot11fIEERPInfo, present), 0,
12153 "ERPInfo", 0, 3, 3, SigIeERPInfo, {0, 0, 0, 0, 0},
12154 0, DOT11F_EID_ERPINFO, 0, 0, },
12155 { offsetof(tDot11fBeacon, ExtSuppRates), offsetof(tDot11fIEExtSuppRates,
12156 present), 0, "ExtSuppRates", 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0},
12157 0, DOT11F_EID_EXTSUPPRATES, 0, 0, },
12158 { offsetof(tDot11fBeacon, RSN), offsetof(tDot11fIERSN, present), 0, "RSN",
12159 0, 4, 132, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, 0, },
12160 { offsetof(tDot11fBeacon, QBSSLoad), offsetof(tDot11fIEQBSSLoad, present),
12161 0, "QBSSLoad", 0, 7, 7, SigIeQBSSLoad, {0, 0, 0, 0, 0},
12162 0, DOT11F_EID_QBSSLOAD, 0, 0, },
12163 { offsetof(tDot11fBeacon, EDCAParamSet), offsetof(tDot11fIEEDCAParamSet,
12164 present), 0, "EDCAParamSet", 0, 20, 20, SigIeEDCAParamSet, {0, 0, 0, 0, 0},
12165 0, DOT11F_EID_EDCAPARAMSET, 0, 0, },
12166 { offsetof(tDot11fBeacon, QOSCapsAp), offsetof(tDot11fIEQOSCapsAp,
12167 present), 0, "QOSCapsAp", 0, 3, 3, SigIeQOSCapsAp, {0, 0, 0, 0, 0},
12168 0, DOT11F_EID_QOSCAPSAP, 0, 0, },
12169 { offsetof(tDot11fBeacon, APChannelReport),
12170 offsetof(tDot11fIEAPChannelReport, present), 0, "APChannelReport",
12171 0, 3, 53, SigIeAPChannelReport, {0, 0, 0, 0, 0},
12172 0, DOT11F_EID_APCHANNELREPORT, 0, 0, },
12173 { offsetof(tDot11fBeacon, RRMEnabledCap),
12174 offsetof(tDot11fIERRMEnabledCap, present), 0, "RRMEnabledCap",
12175 0, 7, 7, SigIeRRMEnabledCap, {0, 0, 0, 0, 0},
12176 0, DOT11F_EID_RRMENABLEDCAP, 0, 0, },
12177 { offsetof(tDot11fBeacon, MobilityDomain),
12178 offsetof(tDot11fIEMobilityDomain, present), 0, "MobilityDomain",
12179 0, 5, 5, SigIeMobilityDomain, {0, 0, 0, 0, 0},
12180 0, DOT11F_EID_MOBILITYDOMAIN, 0, 0, },
12181 { offsetof(tDot11fBeacon, ext_chan_switch_ann),
12182 offsetof(tDot11fIEext_chan_switch_ann, present), 0, "ext_chan_switch_ann",
12183 0, 6, 6, SigIeext_chan_switch_ann, {0, 0, 0, 0, 0},
12184 0, DOT11F_EID_EXT_CHAN_SWITCH_ANN, 0, 0, },
12185 { offsetof(tDot11fBeacon, SuppOperatingClasses),
12186 offsetof(tDot11fIESuppOperatingClasses, present), 0,
12187 "SuppOperatingClasses", 0, 3, 34, SigIeSuppOperatingClasses,
12188 {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPOPERATINGCLASSES, 0, 0, },
12189 { offsetof(tDot11fBeacon, HTCaps), offsetof(tDot11fIEHTCaps, present), 0,
12190 "HTCaps", 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0},
12191 0, DOT11F_EID_HTCAPS, 0, 0, },
12192 { offsetof(tDot11fBeacon, HTInfo), offsetof(tDot11fIEHTInfo, present), 0,
12193 "HTInfo", 0, 24, 56, SigIeHTInfo, {0, 0, 0, 0, 0},
12194 0, DOT11F_EID_HTINFO, 0, 0, },
12195 { offsetof(tDot11fBeacon, OBSSScanParameters),
12196 offsetof(tDot11fIEOBSSScanParameters, present), 0, "OBSSScanParameters",
12197 0, 16, 16, SigIeOBSSScanParameters, {0, 0, 0, 0, 0},
12198 0, DOT11F_EID_OBSSSCANPARAMETERS, 0, 0, },
12199 { offsetof(tDot11fBeacon, ExtCap), offsetof(tDot11fIEExtCap, present), 0,
12200 "ExtCap", 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0},
12201 0, DOT11F_EID_EXTCAP, 0, 0, },
12202 { offsetof(tDot11fBeacon, VHTCaps), offsetof(tDot11fIEVHTCaps, present), 0,
12203 "VHTCaps", 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0},
12204 0, DOT11F_EID_VHTCAPS, 0, 0, },
12205 { offsetof(tDot11fBeacon, VHTOperation), offsetof(tDot11fIEVHTOperation,
12206 present), 0, "VHTOperation", 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0},
12207 0, DOT11F_EID_VHTOPERATION, 0, 0, },
12208 { offsetof(tDot11fBeacon, transmit_power_env),
12209 offsetof(tDot11fIEtransmit_power_env, present),
12210 offsetof(tDot11fBeacon, num_transmit_power_env), "transmit_power_env",
12211 8, 4, 20, SigIetransmit_power_env, {0, 0, 0, 0, 0},
12212 0, DOT11F_EID_TRANSMIT_POWER_ENV, 0, 0, },
12213 { offsetof(tDot11fBeacon, ChannelSwitchWrapper),
12214 offsetof(tDot11fIEChannelSwitchWrapper, present), 0,
12215 "ChannelSwitchWrapper", 0, 2, 35, SigIeChannelSwitchWrapper,
12216 {0, 0, 0, 0, 0}, 0, DOT11F_EID_CHANNELSWITCHWRAPPER, 0, 0, },
12217 { offsetof(tDot11fBeacon, VHTExtBssLoad),
12218 offsetof(tDot11fIEVHTExtBssLoad, present), 0, "VHTExtBssLoad",
12219 0, 7, 7, SigIeVHTExtBssLoad, {0, 0, 0, 0, 0},
12220 0, DOT11F_EID_VHTEXTBSSLOAD, 0, 0, },
12221 { offsetof(tDot11fBeacon, OperatingMode),
12222 offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode",
12223 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0},
12224 0, DOT11F_EID_OPERATINGMODE, 0, 0, },
12225 { offsetof(tDot11fBeacon, fils_indication),
12226 offsetof(tDot11fIEfils_indication, present), 0, "fils_indication",
12227 0, 6, 259, SigIefils_indication, {0, 0, 0, 0, 0},
12228 0, DOT11F_EID_FILS_INDICATION, 0, 0, },
12229 { offsetof(tDot11fBeacon, max_chan_switch_time),
12230 offsetof(tDot11fIEmax_chan_switch_time, present), 0,
12231 "max_chan_switch_time", 0, 5, 5, SigIemax_chan_switch_time,
12232 {0, 0, 0, 0, 0}, 0, DOT11F_EID_MAX_CHAN_SWITCH_TIME, 52, 0, },
12233 { offsetof(tDot11fBeacon, esp_information),
12234 offsetof(tDot11fIEesp_information, present), 0, "esp_information",
12235 0, 2, 98, SigIeesp_information, {0, 0, 0, 0, 0},
12236 0, DOT11F_EID_ESP_INFORMATION, 11, 0, },
12237 { offsetof(tDot11fBeacon, he_cap), offsetof(tDot11fIEhe_cap, present), 0,
12238 "he_cap", 0, 23, 56, SigIehe_cap, {0, 0, 0, 0, 0},
12239 0, DOT11F_EID_HE_CAP, 35, 0, },
12240 { offsetof(tDot11fBeacon, he_op), offsetof(tDot11fIEhe_op, present), 0,
12241 "he_op", 0, 8, 17, SigIehe_op, {0, 0, 0, 0, 0},
12242 0, DOT11F_EID_HE_OP, 36, 0, },
12243 { offsetof(tDot11fBeacon, spatial_reuse),
12244 offsetof(tDot11fIEspatial_reuse, present), 0, "spatial_reuse",
12245 0, 3, 22, SigIespatial_reuse, {0, 0, 0, 0, 0},
12246 0, DOT11F_EID_SPATIAL_REUSE, 39, 0, },
12247 { offsetof(tDot11fBeacon, bss_color_change),
12248 offsetof(tDot11fIEbss_color_change, present), 0, "bss_color_change",
12249 0, 4, 4, SigIebss_color_change, {0, 0, 0, 0, 0},
12250 0, DOT11F_EID_BSS_COLOR_CHANGE, 42, 0, },
12251 { offsetof(tDot11fBeacon, mu_edca_param_set),
12252 offsetof(tDot11fIEmu_edca_param_set, present), 0, "mu_edca_param_set",
12253 0, 15, 15, SigIemu_edca_param_set, {0, 0, 0, 0, 0},
12254 0, DOT11F_EID_MU_EDCA_PARAM_SET, 38, 0, },
12255 { offsetof(tDot11fBeacon, he_6ghz_band_cap),
12256 offsetof(tDot11fIEhe_6ghz_band_cap, present), 0, "he_6ghz_band_cap",
12257 0, 4, 4, SigIehe_6ghz_band_cap, {0, 0, 0, 0, 0},
12258 0, DOT11F_EID_HE_6GHZ_BAND_CAP, 59, 0, },
12259 { offsetof(tDot11fBeacon, sec_chan_offset_ele),
12260 offsetof(tDot11fIEsec_chan_offset_ele, present), 0, "sec_chan_offset_ele",
12261 0, 3, 3, SigIesec_chan_offset_ele, {0, 0, 0, 0, 0},
12262 0, DOT11F_EID_SEC_CHAN_OFFSET_ELE, 0, 0, },
12263 { offsetof(tDot11fBeacon, WAPI), offsetof(tDot11fIEWAPI, present), 0,
12264 "WAPI", 0, 14, 112, SigIeWAPI, {0, 0, 0, 0, 0},
12265 0, DOT11F_EID_WAPI, 0, 0, },
12266 { offsetof(tDot11fBeacon, ESETxmitPower),
12267 offsetof(tDot11fIEESETxmitPower, present), 0, "ESETxmitPower",
12268 0, 8, 8, SigIeESETxmitPower, {0, 64, 150, 0, 0},
12269 4, DOT11F_EID_ESETXMITPOWER, 0, 0, },
12270 { offsetof(tDot11fBeacon, WiderBWChanSwitchAnn),
12271 offsetof(tDot11fIEWiderBWChanSwitchAnn, present), 0,
12272 "WiderBWChanSwitchAnn", 0, 5, 5, SigIeWiderBWChanSwitchAnn,
12273 {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, 0, },
12274 { offsetof(tDot11fBeacon, eht_cap), offsetof(tDot11fIEeht_cap, present), 0,
12275 "eht_cap", 0, 26, 88, SigIeeht_cap, {0, 0, 0, 0, 0},
12276 0, DOT11F_EID_EHT_CAP, 108, 0, },
12277 { offsetof(tDot11fBeacon, eht_op), offsetof(tDot11fIEeht_op, present), 0,
12278 "eht_op", 0, 10, 12, SigIeeht_op, {0, 0, 0, 0, 0},
12279 0, DOT11F_EID_EHT_OP, 106, 0, },
12280 { offsetof(tDot11fBeacon, mlo_ie), offsetof(tDot11fIEmlo_ie, present), 0,
12281 "mlo_ie", 0, 11, 257, SigIemlo_ie, {0, 0, 0, 0, 0},
12282 0, DOT11F_EID_MLO_IE, 107, 0, },
12283 { offsetof(tDot11fBeacon, t2lm_ie), offsetof(tDot11fIEt2lm_ie, present),
12284 offsetof(tDot11fBeacon, num_t2lm_ie), "t2lm_ie", 2, 5, 257, SigIet2lm_ie,
12285 {0, 0, 0, 0, 0}, 0, DOT11F_EID_T2LM_IE, 109, 0, },
12286 { offsetof(tDot11fBeacon, WPA), offsetof(tDot11fIEWPA, present), 0, "WPA",
12287 0, 8, 50, SigIeWPA, {0, 80, 242, 1, 0}, 4, DOT11F_EID_WPA, 0, 0, },
12288 { offsetof(tDot11fBeacon, WMMInfoAp), offsetof(tDot11fIEWMMInfoAp,
12289 present), 0, "WMMInfoAp", 0, 9, 9, SigIeWMMInfoAp, {0, 80, 242, 2, 0},
12290 5, DOT11F_EID_WMMINFOAP, 0, 0, },
12291 { offsetof(tDot11fBeacon, WMMParams), offsetof(tDot11fIEWMMParams,
12292 present), 0, "WMMParams", 0, 26, 26, SigIeWMMParams, {0, 80, 242, 2, 1},
12293 5, DOT11F_EID_WMMPARAMS, 0, 0, },
12294 { offsetof(tDot11fBeacon, WMMCaps), offsetof(tDot11fIEWMMCaps, present), 0,
12295 "WMMCaps", 0, 9, 9, SigIeWMMCaps, {0, 80, 242, 2, 5},
12296 5, DOT11F_EID_WMMCAPS, 0, 0, },
12297 { offsetof(tDot11fBeacon, ESEVersion), offsetof(tDot11fIEESEVersion,
12298 present), 0, "ESEVersion", 0, 7, 7, SigIeESEVersion, {0, 64, 150, 3, 0},
12299 4, DOT11F_EID_ESEVERSION, 0, 0, },
12300 { offsetof(tDot11fBeacon, ESERadMgmtCap),
12301 offsetof(tDot11fIEESERadMgmtCap, present), 0, "ESERadMgmtCap",
12302 0, 8, 8, SigIeESERadMgmtCap, {0, 64, 150, 1, 0},
12303 4, DOT11F_EID_ESERADMGMTCAP, 0, 0, },
12304 { offsetof(tDot11fBeacon, ESETrafStrmMet),
12305 offsetof(tDot11fIEESETrafStrmMet, present), 0, "ESETrafStrmMet",
12306 0, 10, 10, SigIeESETrafStrmMet, {0, 64, 150, 7, 0},
12307 4, DOT11F_EID_ESETRAFSTRMMET, 0, 0, },
12308 { offsetof(tDot11fBeacon, WscBeacon), offsetof(tDot11fIEWscBeacon,
12309 present), 0, "WscBeacon", 0, 6, 84, SigIeWscBeacon, {0, 80, 242, 4, 0},
12310 4, DOT11F_EID_WSCBEACON, 0, 0, },
12311 { offsetof(tDot11fBeacon, P2PBeacon), offsetof(tDot11fIEP2PBeacon,
12312 present), 0, "P2PBeacon", 0, 6, 61, SigIeP2PBeacon, {80, 111, 154, 9, 0},
12313 4, DOT11F_EID_P2PBEACON, 0, 0, },
12314 { offsetof(tDot11fBeacon, Vendor1IE), offsetof(tDot11fIEVendor1IE,
12315 present), 0, "Vendor1IE", 0, 5, 5, SigIeVendor1IE, {0, 16, 24, 0, 0},
12316 3, DOT11F_EID_VENDOR1IE, 0, 0, },
12317 { offsetof(tDot11fBeacon, vendor_vht_ie),
12318 offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie",
12319 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 4, 0},
12320 4, DOT11F_EID_VENDOR_VHT_IE, 0, 0, },
12321 { offsetof(tDot11fBeacon, Vendor3IE), offsetof(tDot11fIEVendor3IE,
12322 present), 0, "Vendor3IE", 0, 5, 5, SigIeVendor3IE, {0, 22, 50, 0, 0},
12323 3, DOT11F_EID_VENDOR3IE, 0, 0, },
12324 { offsetof(tDot11fBeacon, hs20vendor_ie),
12325 offsetof(tDot11fIEhs20vendor_ie, present), 0, "hs20vendor_ie",
12326 0, 7, 9, SigIehs20vendor_ie, {80, 111, 154, 16, 0},
12327 4, DOT11F_EID_HS20VENDOR_IE, 0, 0, },
12328 { offsetof(tDot11fBeacon, QComVendorIE), offsetof(tDot11fIEQComVendorIE,
12329 present), 0, "QComVendorIE", 0, 7, 7, SigIeQComVendorIE,
12330 {0, 160, 198, 0, 0}, 3, DOT11F_EID_QCOMVENDORIE, 0, 0, },
12331 { offsetof(tDot11fBeacon, MBO_IE), offsetof(tDot11fIEMBO_IE, present), 0,
12332 "MBO_IE", 0, 6, 295, SigIeMBO_IE, {80, 111, 154, 22, 0},
12333 4, DOT11F_EID_MBO_IE, 0, 0, },
12334 { offsetof(tDot11fBeacon, qcn_ie), offsetof(tDot11fIEqcn_ie, present), 0,
12335 "qcn_ie", 0, 6, 55, SigIeqcn_ie, {140, 253, 240, 1, 0},
12336 4, DOT11F_EID_QCN_IE, 0, 0, },
12337 { offsetof(tDot11fBeacon, reduced_neighbor_report),
12338 offsetof(tDot11fIEreduced_neighbor_report, present), 0,
12339 "reduced_neighbor_report", 0, 7, 22, SigIereduced_neighbor_report,
12340 {0, 0, 0, 0, 0}, 0, DOT11F_EID_REDUCED_NEIGHBOR_REPORT, 0, 0, },
12341 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
12342
dot11f_unpack_beacon(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fBeacon * pFrm,bool append_ie)12343 uint32_t dot11f_unpack_beacon(tpAniSirGlobal pCtx,
12344 uint8_t *pBuf, uint32_t nBuf,
12345 tDot11fBeacon *pFrm, bool append_ie)
12346 {
12347 uint32_t i = 0;
12348 uint32_t status = 0;
12349 status = unpack_core(pCtx, pBuf, nBuf,
12350 FFS_Beacon, IES_Beacon,
12351 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
12352
12353 (void)i;
12354 return status;
12355
12356 } /* End dot11f_unpack_beacon. */
12357
12358 static const tFFDefn FFS_Beacon1[] = {
12359 { "TimeStamp", offsetof(tDot11fBeacon1, TimeStamp), SigFfTimeStamp,
12360 DOT11F_FF_TIMESTAMP_LEN, },
12361 { "BeaconInterval", offsetof(tDot11fBeacon1, BeaconInterval),
12362 SigFfBeaconInterval, DOT11F_FF_BEACONINTERVAL_LEN, },
12363 { "Capabilities", offsetof(tDot11fBeacon1, Capabilities),
12364 SigFfCapabilities, DOT11F_FF_CAPABILITIES_LEN, },
12365 { NULL, 0, 0, 0,},
12366 };
12367
12368 static const tIEDefn IES_Beacon1[] = {
12369 { offsetof(tDot11fBeacon1, SSID), offsetof(tDot11fIESSID, present), 0,
12370 "SSID", 0, 2, 34, SigIeSSID, {0, 0, 0, 0, 0}, 0, DOT11F_EID_SSID, 0, 1, },
12371 { offsetof(tDot11fBeacon1, SuppRates), offsetof(tDot11fIESuppRates,
12372 present), 0, "SuppRates", 0, 2, 14, SigIeSuppRates, {0, 0, 0, 0, 0},
12373 0, DOT11F_EID_SUPPRATES, 0, 1, },
12374 { offsetof(tDot11fBeacon1, DSParams), offsetof(tDot11fIEDSParams,
12375 present), 0, "DSParams", 0, 3, 3, SigIeDSParams, {0, 0, 0, 0, 0},
12376 0, DOT11F_EID_DSPARAMS, 0, 0, },
12377 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
12378
dot11f_unpack_beacon1(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fBeacon1 * pFrm,bool append_ie)12379 uint32_t dot11f_unpack_beacon1(tpAniSirGlobal pCtx,
12380 uint8_t *pBuf, uint32_t nBuf,
12381 tDot11fBeacon1 *pFrm, bool append_ie)
12382 {
12383 uint32_t i = 0;
12384 uint32_t status = 0;
12385 status = unpack_core(pCtx, pBuf, nBuf,
12386 FFS_Beacon1, IES_Beacon1,
12387 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
12388
12389 (void)i;
12390 return status;
12391
12392 } /* End dot11f_unpack_beacon1. */
12393
12394 static const tFFDefn FFS_Beacon2[] = {
12395 { NULL, 0, 0, 0,},
12396 };
12397
12398 static const tIEDefn IES_Beacon2[] = {
12399 { offsetof(tDot11fBeacon2, Country), offsetof(tDot11fIECountry, present),
12400 0, "Country", 0, 8, 248, SigIeCountry, {0, 0, 0, 0, 0},
12401 0, DOT11F_EID_COUNTRY, 0, 0, },
12402 { offsetof(tDot11fBeacon2, PowerConstraints),
12403 offsetof(tDot11fIEPowerConstraints, present), 0, "PowerConstraints",
12404 0, 3, 3, SigIePowerConstraints, {0, 0, 0, 0, 0},
12405 0, DOT11F_EID_POWERCONSTRAINTS, 0, 0, },
12406 { offsetof(tDot11fBeacon2, ChanSwitchAnn),
12407 offsetof(tDot11fIEChanSwitchAnn, present), 0, "ChanSwitchAnn",
12408 0, 5, 5, SigIeChanSwitchAnn, {0, 0, 0, 0, 0},
12409 0, DOT11F_EID_CHANSWITCHANN, 0, 0, },
12410 { offsetof(tDot11fBeacon2, Quiet), offsetof(tDot11fIEQuiet, present), 0,
12411 "Quiet", 0, 8, 8, SigIeQuiet, {0, 0, 0, 0, 0},
12412 0, DOT11F_EID_QUIET, 0, 0, },
12413 { offsetof(tDot11fBeacon2, TPCReport), offsetof(tDot11fIETPCReport,
12414 present), 0, "TPCReport", 0, 4, 4, SigIeTPCReport, {0, 0, 0, 0, 0},
12415 0, DOT11F_EID_TPCREPORT, 0, 0, },
12416 { offsetof(tDot11fBeacon2, ERPInfo), offsetof(tDot11fIEERPInfo, present),
12417 0, "ERPInfo", 0, 3, 3, SigIeERPInfo, {0, 0, 0, 0, 0},
12418 0, DOT11F_EID_ERPINFO, 0, 0, },
12419 { offsetof(tDot11fBeacon2, ExtSuppRates), offsetof(tDot11fIEExtSuppRates,
12420 present), 0, "ExtSuppRates", 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0},
12421 0, DOT11F_EID_EXTSUPPRATES, 0, 0, },
12422 { offsetof(tDot11fBeacon2, RSNOpaque), offsetof(tDot11fIERSNOpaque,
12423 present), 0, "RSNOpaque", 0, 2, 255, SigIeRSNOpaque, {0, 0, 0, 0, 0},
12424 0, DOT11F_EID_RSNOPAQUE, 0, 0, },
12425 { offsetof(tDot11fBeacon2, EDCAParamSet), offsetof(tDot11fIEEDCAParamSet,
12426 present), 0, "EDCAParamSet", 0, 20, 20, SigIeEDCAParamSet, {0, 0, 0, 0, 0},
12427 0, DOT11F_EID_EDCAPARAMSET, 0, 0, },
12428 { offsetof(tDot11fBeacon2, APChannelReport),
12429 offsetof(tDot11fIEAPChannelReport, present), 0, "APChannelReport",
12430 0, 3, 53, SigIeAPChannelReport, {0, 0, 0, 0, 0},
12431 0, DOT11F_EID_APCHANNELREPORT, 0, 0, },
12432 { offsetof(tDot11fBeacon2, RRMEnabledCap),
12433 offsetof(tDot11fIERRMEnabledCap, present), 0, "RRMEnabledCap",
12434 0, 7, 7, SigIeRRMEnabledCap, {0, 0, 0, 0, 0},
12435 0, DOT11F_EID_RRMENABLEDCAP, 0, 0, },
12436 { offsetof(tDot11fBeacon2, MobilityDomain),
12437 offsetof(tDot11fIEMobilityDomain, present), 0, "MobilityDomain",
12438 0, 5, 5, SigIeMobilityDomain, {0, 0, 0, 0, 0},
12439 0, DOT11F_EID_MOBILITYDOMAIN, 0, 0, },
12440 { offsetof(tDot11fBeacon2, ext_chan_switch_ann),
12441 offsetof(tDot11fIEext_chan_switch_ann, present), 0, "ext_chan_switch_ann",
12442 0, 6, 6, SigIeext_chan_switch_ann, {0, 0, 0, 0, 0},
12443 0, DOT11F_EID_EXT_CHAN_SWITCH_ANN, 0, 0, },
12444 { offsetof(tDot11fBeacon2, SuppOperatingClasses),
12445 offsetof(tDot11fIESuppOperatingClasses, present), 0,
12446 "SuppOperatingClasses", 0, 3, 34, SigIeSuppOperatingClasses,
12447 {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPOPERATINGCLASSES, 0, 0, },
12448 { offsetof(tDot11fBeacon2, HTCaps), offsetof(tDot11fIEHTCaps, present), 0,
12449 "HTCaps", 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0},
12450 0, DOT11F_EID_HTCAPS, 0, 0, },
12451 { offsetof(tDot11fBeacon2, HTInfo), offsetof(tDot11fIEHTInfo, present), 0,
12452 "HTInfo", 0, 24, 56, SigIeHTInfo, {0, 0, 0, 0, 0},
12453 0, DOT11F_EID_HTINFO, 0, 0, },
12454 { offsetof(tDot11fBeacon2, OBSSScanParameters),
12455 offsetof(tDot11fIEOBSSScanParameters, present), 0, "OBSSScanParameters",
12456 0, 16, 16, SigIeOBSSScanParameters, {0, 0, 0, 0, 0},
12457 0, DOT11F_EID_OBSSSCANPARAMETERS, 0, 0, },
12458 { offsetof(tDot11fBeacon2, ExtCap), offsetof(tDot11fIEExtCap, present), 0,
12459 "ExtCap", 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0},
12460 0, DOT11F_EID_EXTCAP, 0, 0, },
12461 { offsetof(tDot11fBeacon2, VHTCaps), offsetof(tDot11fIEVHTCaps, present),
12462 0, "VHTCaps", 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0},
12463 0, DOT11F_EID_VHTCAPS, 0, 0, },
12464 { offsetof(tDot11fBeacon2, VHTOperation), offsetof(tDot11fIEVHTOperation,
12465 present), 0, "VHTOperation", 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0},
12466 0, DOT11F_EID_VHTOPERATION, 0, 0, },
12467 { offsetof(tDot11fBeacon2, transmit_power_env),
12468 offsetof(tDot11fIEtransmit_power_env, present),
12469 offsetof(tDot11fBeacon2, num_transmit_power_env), "transmit_power_env",
12470 8, 4, 20, SigIetransmit_power_env, {0, 0, 0, 0, 0},
12471 0, DOT11F_EID_TRANSMIT_POWER_ENV, 0, 0, },
12472 { offsetof(tDot11fBeacon2, ChannelSwitchWrapper),
12473 offsetof(tDot11fIEChannelSwitchWrapper, present), 0,
12474 "ChannelSwitchWrapper", 0, 2, 35, SigIeChannelSwitchWrapper,
12475 {0, 0, 0, 0, 0}, 0, DOT11F_EID_CHANNELSWITCHWRAPPER, 0, 0, },
12476 { offsetof(tDot11fBeacon2, VHTExtBssLoad),
12477 offsetof(tDot11fIEVHTExtBssLoad, present), 0, "VHTExtBssLoad",
12478 0, 7, 7, SigIeVHTExtBssLoad, {0, 0, 0, 0, 0},
12479 0, DOT11F_EID_VHTEXTBSSLOAD, 0, 0, },
12480 { offsetof(tDot11fBeacon2, OperatingMode),
12481 offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode",
12482 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0},
12483 0, DOT11F_EID_OPERATINGMODE, 0, 0, },
12484 { offsetof(tDot11fBeacon2, fils_indication),
12485 offsetof(tDot11fIEfils_indication, present), 0, "fils_indication",
12486 0, 6, 259, SigIefils_indication, {0, 0, 0, 0, 0},
12487 0, DOT11F_EID_FILS_INDICATION, 0, 0, },
12488 { offsetof(tDot11fBeacon2, max_chan_switch_time),
12489 offsetof(tDot11fIEmax_chan_switch_time, present), 0,
12490 "max_chan_switch_time", 0, 5, 5, SigIemax_chan_switch_time,
12491 {0, 0, 0, 0, 0}, 0, DOT11F_EID_MAX_CHAN_SWITCH_TIME, 52, 0, },
12492 { offsetof(tDot11fBeacon2, esp_information),
12493 offsetof(tDot11fIEesp_information, present), 0, "esp_information",
12494 0, 2, 98, SigIeesp_information, {0, 0, 0, 0, 0},
12495 0, DOT11F_EID_ESP_INFORMATION, 11, 0, },
12496 { offsetof(tDot11fBeacon2, he_cap), offsetof(tDot11fIEhe_cap, present), 0,
12497 "he_cap", 0, 23, 56, SigIehe_cap, {0, 0, 0, 0, 0},
12498 0, DOT11F_EID_HE_CAP, 35, 0, },
12499 { offsetof(tDot11fBeacon2, he_op), offsetof(tDot11fIEhe_op, present), 0,
12500 "he_op", 0, 8, 17, SigIehe_op, {0, 0, 0, 0, 0},
12501 0, DOT11F_EID_HE_OP, 36, 0, },
12502 { offsetof(tDot11fBeacon2, spatial_reuse),
12503 offsetof(tDot11fIEspatial_reuse, present), 0, "spatial_reuse",
12504 0, 3, 22, SigIespatial_reuse, {0, 0, 0, 0, 0},
12505 0, DOT11F_EID_SPATIAL_REUSE, 39, 0, },
12506 { offsetof(tDot11fBeacon2, bss_color_change),
12507 offsetof(tDot11fIEbss_color_change, present), 0, "bss_color_change",
12508 0, 4, 4, SigIebss_color_change, {0, 0, 0, 0, 0},
12509 0, DOT11F_EID_BSS_COLOR_CHANGE, 42, 0, },
12510 { offsetof(tDot11fBeacon2, mu_edca_param_set),
12511 offsetof(tDot11fIEmu_edca_param_set, present), 0, "mu_edca_param_set",
12512 0, 15, 15, SigIemu_edca_param_set, {0, 0, 0, 0, 0},
12513 0, DOT11F_EID_MU_EDCA_PARAM_SET, 38, 0, },
12514 { offsetof(tDot11fBeacon2, he_6ghz_band_cap),
12515 offsetof(tDot11fIEhe_6ghz_band_cap, present), 0, "he_6ghz_band_cap",
12516 0, 4, 4, SigIehe_6ghz_band_cap, {0, 0, 0, 0, 0},
12517 0, DOT11F_EID_HE_6GHZ_BAND_CAP, 59, 0, },
12518 { offsetof(tDot11fBeacon2, sec_chan_offset_ele),
12519 offsetof(tDot11fIEsec_chan_offset_ele, present), 0, "sec_chan_offset_ele",
12520 0, 3, 3, SigIesec_chan_offset_ele, {0, 0, 0, 0, 0},
12521 0, DOT11F_EID_SEC_CHAN_OFFSET_ELE, 0, 0, },
12522 { offsetof(tDot11fBeacon2, WAPI), offsetof(tDot11fIEWAPI, present), 0,
12523 "WAPI", 0, 14, 112, SigIeWAPI, {0, 0, 0, 0, 0},
12524 0, DOT11F_EID_WAPI, 0, 0, },
12525 { offsetof(tDot11fBeacon2, ESETxmitPower),
12526 offsetof(tDot11fIEESETxmitPower, present), 0, "ESETxmitPower",
12527 0, 8, 8, SigIeESETxmitPower, {0, 64, 150, 0, 0},
12528 4, DOT11F_EID_ESETXMITPOWER, 0, 0, },
12529 { offsetof(tDot11fBeacon2, WiderBWChanSwitchAnn),
12530 offsetof(tDot11fIEWiderBWChanSwitchAnn, present), 0,
12531 "WiderBWChanSwitchAnn", 0, 5, 5, SigIeWiderBWChanSwitchAnn,
12532 {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, 0, },
12533 { offsetof(tDot11fBeacon2, eht_cap), offsetof(tDot11fIEeht_cap, present),
12534 0, "eht_cap", 0, 26, 88, SigIeeht_cap, {0, 0, 0, 0, 0},
12535 0, DOT11F_EID_EHT_CAP, 108, 0, },
12536 { offsetof(tDot11fBeacon2, eht_op), offsetof(tDot11fIEeht_op, present), 0,
12537 "eht_op", 0, 10, 12, SigIeeht_op, {0, 0, 0, 0, 0},
12538 0, DOT11F_EID_EHT_OP, 106, 0, },
12539 { offsetof(tDot11fBeacon2, mlo_ie), offsetof(tDot11fIEmlo_ie, present), 0,
12540 "mlo_ie", 0, 11, 257, SigIemlo_ie, {0, 0, 0, 0, 0},
12541 0, DOT11F_EID_MLO_IE, 107, 0, },
12542 { offsetof(tDot11fBeacon2, t2lm_ie), offsetof(tDot11fIEt2lm_ie, present),
12543 offsetof(tDot11fBeacon2, num_t2lm_ie), "t2lm_ie",
12544 2, 5, 257, SigIet2lm_ie, {0, 0, 0, 0, 0},
12545 0, DOT11F_EID_T2LM_IE, 109, 0, },
12546 { offsetof(tDot11fBeacon2, WPA), offsetof(tDot11fIEWPA, present), 0, "WPA",
12547 0, 8, 50, SigIeWPA, {0, 80, 242, 1, 0}, 4, DOT11F_EID_WPA, 0, 0, },
12548 { offsetof(tDot11fBeacon2, WMMInfoAp), offsetof(tDot11fIEWMMInfoAp,
12549 present), 0, "WMMInfoAp", 0, 9, 9, SigIeWMMInfoAp, {0, 80, 242, 2, 0},
12550 5, DOT11F_EID_WMMINFOAP, 0, 0, },
12551 { offsetof(tDot11fBeacon2, WMMParams), offsetof(tDot11fIEWMMParams,
12552 present), 0, "WMMParams", 0, 26, 26, SigIeWMMParams, {0, 80, 242, 2, 1},
12553 5, DOT11F_EID_WMMPARAMS, 0, 0, },
12554 { offsetof(tDot11fBeacon2, WMMCaps), offsetof(tDot11fIEWMMCaps, present),
12555 0, "WMMCaps", 0, 9, 9, SigIeWMMCaps, {0, 80, 242, 2, 5},
12556 5, DOT11F_EID_WMMCAPS, 0, 0, },
12557 { offsetof(tDot11fBeacon2, ESERadMgmtCap),
12558 offsetof(tDot11fIEESERadMgmtCap, present), 0, "ESERadMgmtCap",
12559 0, 8, 8, SigIeESERadMgmtCap, {0, 64, 150, 1, 0},
12560 4, DOT11F_EID_ESERADMGMTCAP, 0, 0, },
12561 { offsetof(tDot11fBeacon2, ESETrafStrmMet),
12562 offsetof(tDot11fIEESETrafStrmMet, present), 0, "ESETrafStrmMet",
12563 0, 10, 10, SigIeESETrafStrmMet, {0, 64, 150, 7, 0},
12564 4, DOT11F_EID_ESETRAFSTRMMET, 0, 0, },
12565 { offsetof(tDot11fBeacon2, WscBeacon), offsetof(tDot11fIEWscBeacon,
12566 present), 0, "WscBeacon", 0, 6, 84, SigIeWscBeacon, {0, 80, 242, 4, 0},
12567 4, DOT11F_EID_WSCBEACON, 0, 0, },
12568 { offsetof(tDot11fBeacon2, P2PBeacon), offsetof(tDot11fIEP2PBeacon,
12569 present), 0, "P2PBeacon", 0, 6, 61, SigIeP2PBeacon, {80, 111, 154, 9, 0},
12570 4, DOT11F_EID_P2PBEACON, 0, 0, },
12571 { offsetof(tDot11fBeacon2, Vendor1IE), offsetof(tDot11fIEVendor1IE,
12572 present), 0, "Vendor1IE", 0, 5, 5, SigIeVendor1IE, {0, 16, 24, 0, 0},
12573 3, DOT11F_EID_VENDOR1IE, 0, 0, },
12574 { offsetof(tDot11fBeacon2, vendor_vht_ie),
12575 offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie",
12576 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 4, 0},
12577 4, DOT11F_EID_VENDOR_VHT_IE, 0, 0, },
12578 { offsetof(tDot11fBeacon2, Vendor3IE), offsetof(tDot11fIEVendor3IE,
12579 present), 0, "Vendor3IE", 0, 5, 5, SigIeVendor3IE, {0, 22, 50, 0, 0},
12580 3, DOT11F_EID_VENDOR3IE, 0, 0, },
12581 { offsetof(tDot11fBeacon2, hs20vendor_ie),
12582 offsetof(tDot11fIEhs20vendor_ie, present), 0, "hs20vendor_ie",
12583 0, 7, 9, SigIehs20vendor_ie, {80, 111, 154, 16, 0},
12584 4, DOT11F_EID_HS20VENDOR_IE, 0, 0, },
12585 { offsetof(tDot11fBeacon2, QComVendorIE), offsetof(tDot11fIEQComVendorIE,
12586 present), 0, "QComVendorIE", 0, 7, 7, SigIeQComVendorIE,
12587 {0, 160, 198, 0, 0}, 3, DOT11F_EID_QCOMVENDORIE, 0, 0, },
12588 { offsetof(tDot11fBeacon2, ESEVersion), offsetof(tDot11fIEESEVersion,
12589 present), 0, "ESEVersion", 0, 7, 7, SigIeESEVersion, {0, 64, 150, 3, 0},
12590 4, DOT11F_EID_ESEVERSION, 0, 0, },
12591 { offsetof(tDot11fBeacon2, qcn_ie), offsetof(tDot11fIEqcn_ie, present), 0,
12592 "qcn_ie", 0, 6, 55, SigIeqcn_ie, {140, 253, 240, 1, 0},
12593 4, DOT11F_EID_QCN_IE, 0, 0, },
12594 { offsetof(tDot11fBeacon2, reduced_neighbor_report),
12595 offsetof(tDot11fIEreduced_neighbor_report, present), 0,
12596 "reduced_neighbor_report", 0, 7, 22, SigIereduced_neighbor_report,
12597 {0, 0, 0, 0, 0}, 0, DOT11F_EID_REDUCED_NEIGHBOR_REPORT, 0, 0, },
12598 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
12599
dot11f_unpack_beacon2(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fBeacon2 * pFrm,bool append_ie)12600 uint32_t dot11f_unpack_beacon2(tpAniSirGlobal pCtx,
12601 uint8_t *pBuf, uint32_t nBuf,
12602 tDot11fBeacon2 *pFrm, bool append_ie)
12603 {
12604 uint32_t i = 0;
12605 uint32_t status = 0;
12606 status = unpack_core(pCtx, pBuf, nBuf,
12607 FFS_Beacon2, IES_Beacon2,
12608 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
12609
12610 (void)i;
12611 return status;
12612
12613 } /* End dot11f_unpack_beacon2. */
12614
12615 static const tFFDefn FFS_BeaconIEs[] = {
12616 { NULL, 0, 0, 0,},
12617 };
12618
12619 static const tIEDefn IES_BeaconIEs[] = {
12620 { offsetof(tDot11fBeaconIEs, SSID), offsetof(tDot11fIESSID, present), 0,
12621 "SSID", 0, 2, 34, SigIeSSID, {0, 0, 0, 0, 0}, 0, DOT11F_EID_SSID, 0, 1, },
12622 { offsetof(tDot11fBeaconIEs, SuppRates), offsetof(tDot11fIESuppRates,
12623 present), 0, "SuppRates", 0, 2, 14, SigIeSuppRates, {0, 0, 0, 0, 0},
12624 0, DOT11F_EID_SUPPRATES, 0, 1, },
12625 { offsetof(tDot11fBeaconIEs, FHParamSet), offsetof(tDot11fIEFHParamSet,
12626 present), 0, "FHParamSet", 0, 7, 7, SigIeFHParamSet, {0, 0, 0, 0, 0},
12627 0, DOT11F_EID_FHPARAMSET, 0, 0, },
12628 { offsetof(tDot11fBeaconIEs, DSParams), offsetof(tDot11fIEDSParams,
12629 present), 0, "DSParams", 0, 3, 3, SigIeDSParams, {0, 0, 0, 0, 0},
12630 0, DOT11F_EID_DSPARAMS, 0, 0, },
12631 { offsetof(tDot11fBeaconIEs, CFParams), offsetof(tDot11fIECFParams,
12632 present), 0, "CFParams", 0, 8, 8, SigIeCFParams, {0, 0, 0, 0, 0},
12633 0, DOT11F_EID_CFPARAMS, 0, 0, },
12634 { offsetof(tDot11fBeaconIEs, TIM), offsetof(tDot11fIETIM, present), 0,
12635 "TIM", 0, 6, 256, SigIeTIM, {0, 0, 0, 0, 0}, 0, DOT11F_EID_TIM, 0, 0, },
12636 { offsetof(tDot11fBeaconIEs, Country), offsetof(tDot11fIECountry,
12637 present), 0, "Country", 0, 8, 248, SigIeCountry, {0, 0, 0, 0, 0},
12638 0, DOT11F_EID_COUNTRY, 0, 0, },
12639 { offsetof(tDot11fBeaconIEs, FHParams), offsetof(tDot11fIEFHParams,
12640 present), 0, "FHParams", 0, 4, 4, SigIeFHParams, {0, 0, 0, 0, 0},
12641 0, DOT11F_EID_FHPARAMS, 0, 0, },
12642 { offsetof(tDot11fBeaconIEs, FHPattTable), offsetof(tDot11fIEFHPattTable,
12643 present), 0, "FHPattTable", 0, 6, 257, SigIeFHPattTable, {0, 0, 0, 0, 0},
12644 0, DOT11F_EID_FHPATTTABLE, 0, 0, },
12645 { offsetof(tDot11fBeaconIEs, PowerConstraints),
12646 offsetof(tDot11fIEPowerConstraints, present), 0, "PowerConstraints",
12647 0, 3, 3, SigIePowerConstraints, {0, 0, 0, 0, 0},
12648 0, DOT11F_EID_POWERCONSTRAINTS, 0, 0, },
12649 { offsetof(tDot11fBeaconIEs, ChanSwitchAnn),
12650 offsetof(tDot11fIEChanSwitchAnn, present), 0, "ChanSwitchAnn",
12651 0, 5, 5, SigIeChanSwitchAnn, {0, 0, 0, 0, 0},
12652 0, DOT11F_EID_CHANSWITCHANN, 0, 0, },
12653 { offsetof(tDot11fBeaconIEs, Quiet), offsetof(tDot11fIEQuiet, present), 0,
12654 "Quiet", 0, 8, 8, SigIeQuiet, {0, 0, 0, 0, 0},
12655 0, DOT11F_EID_QUIET, 0, 0, },
12656 { offsetof(tDot11fBeaconIEs, TPCReport), offsetof(tDot11fIETPCReport,
12657 present), 0, "TPCReport", 0, 4, 4, SigIeTPCReport, {0, 0, 0, 0, 0},
12658 0, DOT11F_EID_TPCREPORT, 0, 0, },
12659 { offsetof(tDot11fBeaconIEs, ERPInfo), offsetof(tDot11fIEERPInfo,
12660 present), 0, "ERPInfo", 0, 3, 3, SigIeERPInfo, {0, 0, 0, 0, 0},
12661 0, DOT11F_EID_ERPINFO, 0, 0, },
12662 { offsetof(tDot11fBeaconIEs, ExtSuppRates),
12663 offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates",
12664 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0},
12665 0, DOT11F_EID_EXTSUPPRATES, 0, 0, },
12666 { offsetof(tDot11fBeaconIEs, RSN), offsetof(tDot11fIERSN, present), 0,
12667 "RSN", 0, 4, 132, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, 0, },
12668 { offsetof(tDot11fBeaconIEs, QBSSLoad), offsetof(tDot11fIEQBSSLoad,
12669 present), 0, "QBSSLoad", 0, 7, 7, SigIeQBSSLoad, {0, 0, 0, 0, 0},
12670 0, DOT11F_EID_QBSSLOAD, 0, 0, },
12671 { offsetof(tDot11fBeaconIEs, EDCAParamSet),
12672 offsetof(tDot11fIEEDCAParamSet, present), 0, "EDCAParamSet",
12673 0, 20, 20, SigIeEDCAParamSet, {0, 0, 0, 0, 0},
12674 0, DOT11F_EID_EDCAPARAMSET, 0, 0, },
12675 { offsetof(tDot11fBeaconIEs, QOSCapsAp), offsetof(tDot11fIEQOSCapsAp,
12676 present), 0, "QOSCapsAp", 0, 3, 3, SigIeQOSCapsAp, {0, 0, 0, 0, 0},
12677 0, DOT11F_EID_QOSCAPSAP, 0, 0, },
12678 { offsetof(tDot11fBeaconIEs, APChannelReport),
12679 offsetof(tDot11fIEAPChannelReport, present), 0, "APChannelReport",
12680 0, 3, 53, SigIeAPChannelReport, {0, 0, 0, 0, 0},
12681 0, DOT11F_EID_APCHANNELREPORT, 0, 0, },
12682 { offsetof(tDot11fBeaconIEs, RRMEnabledCap),
12683 offsetof(tDot11fIERRMEnabledCap, present), 0, "RRMEnabledCap",
12684 0, 7, 7, SigIeRRMEnabledCap, {0, 0, 0, 0, 0},
12685 0, DOT11F_EID_RRMENABLEDCAP, 0, 0, },
12686 { offsetof(tDot11fBeaconIEs, MobilityDomain),
12687 offsetof(tDot11fIEMobilityDomain, present), 0, "MobilityDomain",
12688 0, 5, 5, SigIeMobilityDomain, {0, 0, 0, 0, 0},
12689 0, DOT11F_EID_MOBILITYDOMAIN, 0, 0, },
12690 { offsetof(tDot11fBeaconIEs, ext_chan_switch_ann),
12691 offsetof(tDot11fIEext_chan_switch_ann, present), 0, "ext_chan_switch_ann",
12692 0, 6, 6, SigIeext_chan_switch_ann, {0, 0, 0, 0, 0},
12693 0, DOT11F_EID_EXT_CHAN_SWITCH_ANN, 0, 0, },
12694 { offsetof(tDot11fBeaconIEs, SuppOperatingClasses),
12695 offsetof(tDot11fIESuppOperatingClasses, present), 0,
12696 "SuppOperatingClasses", 0, 3, 34, SigIeSuppOperatingClasses,
12697 {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPOPERATINGCLASSES, 0, 0, },
12698 { offsetof(tDot11fBeaconIEs, HTCaps), offsetof(tDot11fIEHTCaps, present),
12699 0, "HTCaps", 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0},
12700 0, DOT11F_EID_HTCAPS, 0, 0, },
12701 { offsetof(tDot11fBeaconIEs, HTInfo), offsetof(tDot11fIEHTInfo, present),
12702 0, "HTInfo", 0, 24, 56, SigIeHTInfo, {0, 0, 0, 0, 0},
12703 0, DOT11F_EID_HTINFO, 0, 0, },
12704 { offsetof(tDot11fBeaconIEs, OBSSScanParameters),
12705 offsetof(tDot11fIEOBSSScanParameters, present), 0, "OBSSScanParameters",
12706 0, 16, 16, SigIeOBSSScanParameters, {0, 0, 0, 0, 0},
12707 0, DOT11F_EID_OBSSSCANPARAMETERS, 0, 0, },
12708 { offsetof(tDot11fBeaconIEs, ExtCap), offsetof(tDot11fIEExtCap, present),
12709 0, "ExtCap", 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0},
12710 0, DOT11F_EID_EXTCAP, 0, 0, },
12711 { offsetof(tDot11fBeaconIEs, VHTCaps), offsetof(tDot11fIEVHTCaps,
12712 present), 0, "VHTCaps", 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0},
12713 0, DOT11F_EID_VHTCAPS, 0, 0, },
12714 { offsetof(tDot11fBeaconIEs, VHTOperation),
12715 offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation",
12716 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0},
12717 0, DOT11F_EID_VHTOPERATION, 0, 0, },
12718 { offsetof(tDot11fBeaconIEs, transmit_power_env),
12719 offsetof(tDot11fIEtransmit_power_env, present),
12720 offsetof(tDot11fBeaconIEs, num_transmit_power_env),
12721 "transmit_power_env", 8, 4, 20, SigIetransmit_power_env, {0, 0, 0, 0, 0},
12722 0, DOT11F_EID_TRANSMIT_POWER_ENV, 0, 0, },
12723 { offsetof(tDot11fBeaconIEs, ChannelSwitchWrapper),
12724 offsetof(tDot11fIEChannelSwitchWrapper, present), 0,
12725 "ChannelSwitchWrapper", 0, 2, 35, SigIeChannelSwitchWrapper,
12726 {0, 0, 0, 0, 0}, 0, DOT11F_EID_CHANNELSWITCHWRAPPER, 0, 0, },
12727 { offsetof(tDot11fBeaconIEs, VHTExtBssLoad),
12728 offsetof(tDot11fIEVHTExtBssLoad, present), 0, "VHTExtBssLoad",
12729 0, 7, 7, SigIeVHTExtBssLoad, {0, 0, 0, 0, 0},
12730 0, DOT11F_EID_VHTEXTBSSLOAD, 0, 0, },
12731 { offsetof(tDot11fBeaconIEs, OperatingMode),
12732 offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode",
12733 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0},
12734 0, DOT11F_EID_OPERATINGMODE, 0, 0, },
12735 { offsetof(tDot11fBeaconIEs, fils_indication),
12736 offsetof(tDot11fIEfils_indication, present), 0, "fils_indication",
12737 0, 6, 259, SigIefils_indication, {0, 0, 0, 0, 0},
12738 0, DOT11F_EID_FILS_INDICATION, 0, 0, },
12739 { offsetof(tDot11fBeaconIEs, max_chan_switch_time),
12740 offsetof(tDot11fIEmax_chan_switch_time, present), 0,
12741 "max_chan_switch_time", 0, 5, 5, SigIemax_chan_switch_time,
12742 {0, 0, 0, 0, 0}, 0, DOT11F_EID_MAX_CHAN_SWITCH_TIME, 52, 0, },
12743 { offsetof(tDot11fBeaconIEs, esp_information),
12744 offsetof(tDot11fIEesp_information, present), 0, "esp_information",
12745 0, 2, 98, SigIeesp_information, {0, 0, 0, 0, 0},
12746 0, DOT11F_EID_ESP_INFORMATION, 11, 0, },
12747 { offsetof(tDot11fBeaconIEs, he_cap), offsetof(tDot11fIEhe_cap, present),
12748 0, "he_cap", 0, 23, 56, SigIehe_cap, {0, 0, 0, 0, 0},
12749 0, DOT11F_EID_HE_CAP, 35, 0, },
12750 { offsetof(tDot11fBeaconIEs, he_op), offsetof(tDot11fIEhe_op, present), 0,
12751 "he_op", 0, 8, 17, SigIehe_op, {0, 0, 0, 0, 0},
12752 0, DOT11F_EID_HE_OP, 36, 0, },
12753 { offsetof(tDot11fBeaconIEs, spatial_reuse),
12754 offsetof(tDot11fIEspatial_reuse, present), 0, "spatial_reuse",
12755 0, 3, 22, SigIespatial_reuse, {0, 0, 0, 0, 0},
12756 0, DOT11F_EID_SPATIAL_REUSE, 39, 0, },
12757 { offsetof(tDot11fBeaconIEs, bss_color_change),
12758 offsetof(tDot11fIEbss_color_change, present), 0, "bss_color_change",
12759 0, 4, 4, SigIebss_color_change, {0, 0, 0, 0, 0},
12760 0, DOT11F_EID_BSS_COLOR_CHANGE, 42, 0, },
12761 { offsetof(tDot11fBeaconIEs, mu_edca_param_set),
12762 offsetof(tDot11fIEmu_edca_param_set, present), 0, "mu_edca_param_set",
12763 0, 15, 15, SigIemu_edca_param_set, {0, 0, 0, 0, 0},
12764 0, DOT11F_EID_MU_EDCA_PARAM_SET, 38, 0, },
12765 { offsetof(tDot11fBeaconIEs, he_6ghz_band_cap),
12766 offsetof(tDot11fIEhe_6ghz_band_cap, present), 0, "he_6ghz_band_cap",
12767 0, 4, 4, SigIehe_6ghz_band_cap, {0, 0, 0, 0, 0},
12768 0, DOT11F_EID_HE_6GHZ_BAND_CAP, 59, 0, },
12769 { offsetof(tDot11fBeaconIEs, sec_chan_offset_ele),
12770 offsetof(tDot11fIEsec_chan_offset_ele, present), 0, "sec_chan_offset_ele",
12771 0, 3, 3, SigIesec_chan_offset_ele, {0, 0, 0, 0, 0},
12772 0, DOT11F_EID_SEC_CHAN_OFFSET_ELE, 0, 0, },
12773 { offsetof(tDot11fBeaconIEs, WAPI), offsetof(tDot11fIEWAPI, present), 0,
12774 "WAPI", 0, 14, 112, SigIeWAPI, {0, 0, 0, 0, 0},
12775 0, DOT11F_EID_WAPI, 0, 0, },
12776 { offsetof(tDot11fBeaconIEs, ESETxmitPower),
12777 offsetof(tDot11fIEESETxmitPower, present), 0, "ESETxmitPower",
12778 0, 8, 8, SigIeESETxmitPower, {0, 64, 150, 0, 0},
12779 4, DOT11F_EID_ESETXMITPOWER, 0, 0, },
12780 { offsetof(tDot11fBeaconIEs, WiderBWChanSwitchAnn),
12781 offsetof(tDot11fIEWiderBWChanSwitchAnn, present), 0,
12782 "WiderBWChanSwitchAnn", 0, 5, 5, SigIeWiderBWChanSwitchAnn,
12783 {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, 0, },
12784 { offsetof(tDot11fBeaconIEs, eht_cap), offsetof(tDot11fIEeht_cap,
12785 present), 0, "eht_cap", 0, 26, 88, SigIeeht_cap, {0, 0, 0, 0, 0},
12786 0, DOT11F_EID_EHT_CAP, 108, 0, },
12787 { offsetof(tDot11fBeaconIEs, eht_op), offsetof(tDot11fIEeht_op, present),
12788 0, "eht_op", 0, 10, 12, SigIeeht_op, {0, 0, 0, 0, 0},
12789 0, DOT11F_EID_EHT_OP, 106, 0, },
12790 { offsetof(tDot11fBeaconIEs, mlo_ie), offsetof(tDot11fIEmlo_ie, present),
12791 0, "mlo_ie", 0, 11, 257, SigIemlo_ie, {0, 0, 0, 0, 0},
12792 0, DOT11F_EID_MLO_IE, 107, 0, },
12793 { offsetof(tDot11fBeaconIEs, t2lm_ie), offsetof(tDot11fIEt2lm_ie,
12794 present), offsetof(tDot11fBeaconIEs, num_t2lm_ie), "t2lm_ie",
12795 2, 5, 257, SigIet2lm_ie, {0, 0, 0, 0, 0},
12796 0, DOT11F_EID_T2LM_IE, 109, 0, },
12797 { offsetof(tDot11fBeaconIEs, WPA), offsetof(tDot11fIEWPA, present), 0,
12798 "WPA", 0, 8, 50, SigIeWPA, {0, 80, 242, 1, 0}, 4, DOT11F_EID_WPA, 0, 0, },
12799 { offsetof(tDot11fBeaconIEs, WMMInfoAp), offsetof(tDot11fIEWMMInfoAp,
12800 present), 0, "WMMInfoAp", 0, 9, 9, SigIeWMMInfoAp, {0, 80, 242, 2, 0},
12801 5, DOT11F_EID_WMMINFOAP, 0, 0, },
12802 { offsetof(tDot11fBeaconIEs, WMMParams), offsetof(tDot11fIEWMMParams,
12803 present), 0, "WMMParams", 0, 26, 26, SigIeWMMParams, {0, 80, 242, 2, 1},
12804 5, DOT11F_EID_WMMPARAMS, 0, 0, },
12805 { offsetof(tDot11fBeaconIEs, WMMCaps), offsetof(tDot11fIEWMMCaps,
12806 present), 0, "WMMCaps", 0, 9, 9, SigIeWMMCaps, {0, 80, 242, 2, 5},
12807 5, DOT11F_EID_WMMCAPS, 0, 0, },
12808 { offsetof(tDot11fBeaconIEs, ESEVersion), offsetof(tDot11fIEESEVersion,
12809 present), 0, "ESEVersion", 0, 7, 7, SigIeESEVersion, {0, 64, 150, 3, 0},
12810 4, DOT11F_EID_ESEVERSION, 0, 0, },
12811 { offsetof(tDot11fBeaconIEs, ESERadMgmtCap),
12812 offsetof(tDot11fIEESERadMgmtCap, present), 0, "ESERadMgmtCap",
12813 0, 8, 8, SigIeESERadMgmtCap, {0, 64, 150, 1, 0},
12814 4, DOT11F_EID_ESERADMGMTCAP, 0, 0, },
12815 { offsetof(tDot11fBeaconIEs, ESETrafStrmMet),
12816 offsetof(tDot11fIEESETrafStrmMet, present), 0, "ESETrafStrmMet",
12817 0, 10, 10, SigIeESETrafStrmMet, {0, 64, 150, 7, 0},
12818 4, DOT11F_EID_ESETRAFSTRMMET, 0, 0, },
12819 { offsetof(tDot11fBeaconIEs, WscBeaconProbeRes),
12820 offsetof(tDot11fIEWscBeaconProbeRes, present), 0, "WscBeaconProbeRes",
12821 0, 6, 319, SigIeWscBeaconProbeRes, {0, 80, 242, 4, 0},
12822 4, DOT11F_EID_WSCBEACONPROBERES, 0, 0, },
12823 { offsetof(tDot11fBeaconIEs, P2PBeaconProbeRes),
12824 offsetof(tDot11fIEP2PBeaconProbeRes, present), 0, "P2PBeaconProbeRes",
12825 0, 6, 1150, SigIeP2PBeaconProbeRes, {80, 111, 154, 9, 0},
12826 4, DOT11F_EID_P2PBEACONPROBERES, 0, 0, },
12827 { offsetof(tDot11fBeaconIEs, Vendor1IE), offsetof(tDot11fIEVendor1IE,
12828 present), 0, "Vendor1IE", 0, 5, 5, SigIeVendor1IE, {0, 16, 24, 0, 0},
12829 3, DOT11F_EID_VENDOR1IE, 0, 0, },
12830 { offsetof(tDot11fBeaconIEs, vendor_vht_ie),
12831 offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie",
12832 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 4, 0},
12833 4, DOT11F_EID_VENDOR_VHT_IE, 0, 0, },
12834 { offsetof(tDot11fBeaconIEs, Vendor3IE), offsetof(tDot11fIEVendor3IE,
12835 present), 0, "Vendor3IE", 0, 5, 5, SigIeVendor3IE, {0, 22, 50, 0, 0},
12836 3, DOT11F_EID_VENDOR3IE, 0, 0, },
12837 { offsetof(tDot11fBeaconIEs, hs20vendor_ie),
12838 offsetof(tDot11fIEhs20vendor_ie, present), 0, "hs20vendor_ie",
12839 0, 7, 9, SigIehs20vendor_ie, {80, 111, 154, 16, 0},
12840 4, DOT11F_EID_HS20VENDOR_IE, 0, 0, },
12841 { offsetof(tDot11fBeaconIEs, QComVendorIE),
12842 offsetof(tDot11fIEQComVendorIE, present), 0, "QComVendorIE",
12843 0, 7, 7, SigIeQComVendorIE, {0, 160, 198, 0, 0},
12844 3, DOT11F_EID_QCOMVENDORIE, 0, 0, },
12845 { offsetof(tDot11fBeaconIEs, MBO_IE), offsetof(tDot11fIEMBO_IE, present),
12846 0, "MBO_IE", 0, 6, 295, SigIeMBO_IE, {80, 111, 154, 22, 0},
12847 4, DOT11F_EID_MBO_IE, 0, 0, },
12848 { offsetof(tDot11fBeaconIEs, qcn_ie), offsetof(tDot11fIEqcn_ie, present),
12849 0, "qcn_ie", 0, 6, 55, SigIeqcn_ie, {140, 253, 240, 1, 0},
12850 4, DOT11F_EID_QCN_IE, 0, 0, },
12851 { offsetof(tDot11fBeaconIEs, reduced_neighbor_report),
12852 offsetof(tDot11fIEreduced_neighbor_report, present), 0,
12853 "reduced_neighbor_report", 0, 7, 22, SigIereduced_neighbor_report,
12854 {0, 0, 0, 0, 0}, 0, DOT11F_EID_REDUCED_NEIGHBOR_REPORT, 0, 0, },
12855 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
12856
dot11f_unpack_beacon_i_es(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fBeaconIEs * pFrm,bool append_ie)12857 uint32_t dot11f_unpack_beacon_i_es(tpAniSirGlobal pCtx,
12858 uint8_t *pBuf, uint32_t nBuf,
12859 tDot11fBeaconIEs *pFrm, bool append_ie)
12860 {
12861 uint32_t i = 0;
12862 uint32_t status = 0;
12863 status = unpack_core(pCtx, pBuf, nBuf,
12864 FFS_BeaconIEs, IES_BeaconIEs,
12865 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
12866
12867 (void)i;
12868 return status;
12869
12870 } /* End dot11f_unpack_beacon_i_es. */
12871
12872 static const tFFDefn FFS_ChannelSwitch[] = {
12873 { "Category", offsetof(tDot11fChannelSwitch, Category), SigFfCategory,
12874 DOT11F_FF_CATEGORY_LEN, },
12875 { "Action", offsetof(tDot11fChannelSwitch, Action), SigFfAction,
12876 DOT11F_FF_ACTION_LEN, },
12877 { NULL, 0, 0, 0,},
12878 };
12879
12880 static const tIEDefn IES_ChannelSwitch[] = {
12881 { offsetof(tDot11fChannelSwitch, ChanSwitchAnn),
12882 offsetof(tDot11fIEChanSwitchAnn, present), 0, "ChanSwitchAnn",
12883 0, 5, 5, SigIeChanSwitchAnn, {0, 0, 0, 0, 0},
12884 0, DOT11F_EID_CHANSWITCHANN, 0, 1, },
12885 { offsetof(tDot11fChannelSwitch, sec_chan_offset_ele),
12886 offsetof(tDot11fIEsec_chan_offset_ele, present), 0, "sec_chan_offset_ele",
12887 0, 3, 3, SigIesec_chan_offset_ele, {0, 0, 0, 0, 0},
12888 0, DOT11F_EID_SEC_CHAN_OFFSET_ELE, 0, 0, },
12889 { offsetof(tDot11fChannelSwitch, WiderBWChanSwitchAnn),
12890 offsetof(tDot11fIEWiderBWChanSwitchAnn, present), 0,
12891 "WiderBWChanSwitchAnn", 0, 5, 5, SigIeWiderBWChanSwitchAnn,
12892 {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, 0, },
12893 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
12894
dot11f_unpack_channel_switch(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fChannelSwitch * pFrm,bool append_ie)12895 uint32_t dot11f_unpack_channel_switch(tpAniSirGlobal pCtx,
12896 uint8_t *pBuf, uint32_t nBuf,
12897 tDot11fChannelSwitch *pFrm, bool append_ie)
12898 {
12899 uint32_t i = 0;
12900 uint32_t status = 0;
12901 status = unpack_core(pCtx, pBuf, nBuf,
12902 FFS_ChannelSwitch, IES_ChannelSwitch,
12903 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
12904
12905 (void)i;
12906 return status;
12907
12908 } /* End dot11f_unpack_channel_switch. */
12909
12910 static const tFFDefn FFS_DeAuth[] = {
12911 { "Reason", offsetof(tDot11fDeAuth, Reason), SigFfReason,
12912 DOT11F_FF_REASON_LEN, },
12913 { NULL, 0, 0, 0,},
12914 };
12915
12916 static const tIEDefn IES_DeAuth[] = {
12917 { offsetof(tDot11fDeAuth, P2PDeAuth), offsetof(tDot11fIEP2PDeAuth,
12918 present), 0, "P2PDeAuth", 0, 6, 10, SigIeP2PDeAuth, {80, 111, 154, 9, 0},
12919 4, DOT11F_EID_P2PDEAUTH, 0, 0, },
12920 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
12921
dot11f_unpack_de_auth(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fDeAuth * pFrm,bool append_ie)12922 uint32_t dot11f_unpack_de_auth(tpAniSirGlobal pCtx,
12923 uint8_t *pBuf, uint32_t nBuf,
12924 tDot11fDeAuth *pFrm, bool append_ie)
12925 {
12926 uint32_t i = 0;
12927 uint32_t status = 0;
12928 status = unpack_core(pCtx, pBuf, nBuf,
12929 FFS_DeAuth, IES_DeAuth,
12930 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
12931
12932 (void)i;
12933 return status;
12934
12935 } /* End dot11f_unpack_de_auth. */
12936
12937 static const tFFDefn FFS_DelTS[] = {
12938 { "Category", offsetof(tDot11fDelTS, Category), SigFfCategory,
12939 DOT11F_FF_CATEGORY_LEN, },
12940 { "Action", offsetof(tDot11fDelTS, Action), SigFfAction,
12941 DOT11F_FF_ACTION_LEN, },
12942 { "TSInfo", offsetof(tDot11fDelTS, TSInfo), SigFfTSInfo,
12943 DOT11F_FF_TSINFO_LEN, },
12944 { "Reason", offsetof(tDot11fDelTS, Reason), SigFfReason,
12945 DOT11F_FF_REASON_LEN, },
12946 { NULL, 0, 0, 0,},
12947 };
12948
12949 static const tIEDefn IES_DelTS[] = {
12950 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
12951
dot11f_unpack_del_ts(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fDelTS * pFrm,bool append_ie)12952 uint32_t dot11f_unpack_del_ts(tpAniSirGlobal pCtx,
12953 uint8_t *pBuf, uint32_t nBuf,
12954 tDot11fDelTS *pFrm, bool append_ie)
12955 {
12956 uint32_t i = 0;
12957 uint32_t status = 0;
12958 status = unpack_core(pCtx, pBuf, nBuf,
12959 FFS_DelTS, IES_DelTS,
12960 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
12961
12962 (void)i;
12963 return status;
12964
12965 } /* End dot11f_unpack_del_ts. */
12966
12967 static const tFFDefn FFS_Disassociation[] = {
12968 { "Reason", offsetof(tDot11fDisassociation, Reason), SigFfReason,
12969 DOT11F_FF_REASON_LEN, },
12970 { NULL, 0, 0, 0,},
12971 };
12972
12973 static const tIEDefn IES_Disassociation[] = {
12974 { offsetof(tDot11fDisassociation, P2PDisAssoc),
12975 offsetof(tDot11fIEP2PDisAssoc, present), 0, "P2PDisAssoc",
12976 0, 6, 10, SigIeP2PDisAssoc, {80, 111, 154, 9, 0},
12977 4, DOT11F_EID_P2PDISASSOC, 0, 0, },
12978 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
12979
dot11f_unpack_disassociation(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fDisassociation * pFrm,bool append_ie)12980 uint32_t dot11f_unpack_disassociation(tpAniSirGlobal pCtx,
12981 uint8_t *pBuf, uint32_t nBuf,
12982 tDot11fDisassociation *pFrm, bool append_ie)
12983 {
12984 uint32_t i = 0;
12985 uint32_t status = 0;
12986 status = unpack_core(pCtx, pBuf, nBuf,
12987 FFS_Disassociation, IES_Disassociation,
12988 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
12989
12990 (void)i;
12991 return status;
12992
12993 } /* End dot11f_unpack_disassociation. */
12994
12995 static const tFFDefn FFS_LinkMeasurementReport[] = {
12996 { "Category", offsetof(tDot11fLinkMeasurementReport, Category),
12997 SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
12998 { "Action", offsetof(tDot11fLinkMeasurementReport, Action), SigFfAction,
12999 DOT11F_FF_ACTION_LEN, },
13000 { "DialogToken", offsetof(tDot11fLinkMeasurementReport, DialogToken),
13001 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
13002 { "TPCEleID", offsetof(tDot11fLinkMeasurementReport, TPCEleID),
13003 SigFfTPCEleID, DOT11F_FF_TPCELEID_LEN, },
13004 { "TPCEleLen", offsetof(tDot11fLinkMeasurementReport, TPCEleLen),
13005 SigFfTPCEleLen, DOT11F_FF_TPCELELEN_LEN, },
13006 { "TxPower", offsetof(tDot11fLinkMeasurementReport, TxPower),
13007 SigFfTxPower, DOT11F_FF_TXPOWER_LEN, },
13008 { "LinkMargin", offsetof(tDot11fLinkMeasurementReport, LinkMargin),
13009 SigFfLinkMargin, DOT11F_FF_LINKMARGIN_LEN, },
13010 { "RxAntennaId", offsetof(tDot11fLinkMeasurementReport, RxAntennaId),
13011 SigFfRxAntennaId, DOT11F_FF_RXANTENNAID_LEN, },
13012 { "TxAntennaId", offsetof(tDot11fLinkMeasurementReport, TxAntennaId),
13013 SigFfTxAntennaId, DOT11F_FF_TXANTENNAID_LEN, },
13014 { "RCPI", offsetof(tDot11fLinkMeasurementReport, RCPI), SigFfRCPI,
13015 DOT11F_FF_RCPI_LEN, },
13016 { "RSNI", offsetof(tDot11fLinkMeasurementReport, RSNI), SigFfRSNI,
13017 DOT11F_FF_RSNI_LEN, },
13018 { NULL, 0, 0, 0,},
13019 };
13020
13021 static const tIEDefn IES_LinkMeasurementReport[] = {
13022 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
13023
dot11f_unpack_link_measurement_report(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fLinkMeasurementReport * pFrm,bool append_ie)13024 uint32_t dot11f_unpack_link_measurement_report(tpAniSirGlobal pCtx,
13025 uint8_t *pBuf, uint32_t nBuf,
13026 tDot11fLinkMeasurementReport *pFrm, bool append_ie)
13027 {
13028 uint32_t i = 0;
13029 uint32_t status = 0;
13030 status = unpack_core(pCtx, pBuf, nBuf,
13031 FFS_LinkMeasurementReport, IES_LinkMeasurementReport,
13032 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
13033
13034 (void)i;
13035 return status;
13036
13037 } /* End dot11f_unpack_link_measurement_report. */
13038
13039 static const tFFDefn FFS_LinkMeasurementRequest[] = {
13040 { "Category", offsetof(tDot11fLinkMeasurementRequest, Category),
13041 SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
13042 { "Action", offsetof(tDot11fLinkMeasurementRequest, Action), SigFfAction,
13043 DOT11F_FF_ACTION_LEN, },
13044 { "DialogToken", offsetof(tDot11fLinkMeasurementRequest, DialogToken),
13045 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
13046 { "TxPower", offsetof(tDot11fLinkMeasurementRequest, TxPower),
13047 SigFfTxPower, DOT11F_FF_TXPOWER_LEN, },
13048 { "MaxTxPower", offsetof(tDot11fLinkMeasurementRequest, MaxTxPower),
13049 SigFfMaxTxPower, DOT11F_FF_MAXTXPOWER_LEN, },
13050 { NULL, 0, 0, 0,},
13051 };
13052
13053 static const tIEDefn IES_LinkMeasurementRequest[] = {
13054 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
13055
dot11f_unpack_link_measurement_request(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fLinkMeasurementRequest * pFrm,bool append_ie)13056 uint32_t dot11f_unpack_link_measurement_request(tpAniSirGlobal pCtx,
13057 uint8_t *pBuf, uint32_t nBuf,
13058 tDot11fLinkMeasurementRequest *pFrm, bool append_ie)
13059 {
13060 uint32_t i = 0;
13061 uint32_t status = 0;
13062 status = unpack_core(pCtx, pBuf, nBuf,
13063 FFS_LinkMeasurementRequest, IES_LinkMeasurementRequest,
13064 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
13065
13066 (void)i;
13067 return status;
13068
13069 } /* End dot11f_unpack_link_measurement_request. */
13070
13071 static const tFFDefn FFS_MeasurementReport[] = {
13072 { "Category", offsetof(tDot11fMeasurementReport, Category), SigFfCategory,
13073 DOT11F_FF_CATEGORY_LEN, },
13074 { "Action", offsetof(tDot11fMeasurementReport, Action), SigFfAction,
13075 DOT11F_FF_ACTION_LEN, },
13076 { "DialogToken", offsetof(tDot11fMeasurementReport, DialogToken),
13077 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
13078 { NULL, 0, 0, 0,},
13079 };
13080
13081 static const tIEDefn IES_MeasurementReport[] = {
13082 { offsetof(tDot11fMeasurementReport, MeasurementReport),
13083 offsetof(tDot11fIEMeasurementReport, present), 0, "MeasurementReport",
13084 0, 5, 60, SigIeMeasurementReport, {0, 0, 0, 0, 0},
13085 0, DOT11F_EID_MEASUREMENTREPORT, 0, 1, },
13086 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
13087
dot11f_unpack_measurement_report(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fMeasurementReport * pFrm,bool append_ie)13088 uint32_t dot11f_unpack_measurement_report(tpAniSirGlobal pCtx,
13089 uint8_t *pBuf, uint32_t nBuf,
13090 tDot11fMeasurementReport *pFrm, bool append_ie)
13091 {
13092 uint32_t i = 0;
13093 uint32_t status = 0;
13094 status = unpack_core(pCtx, pBuf, nBuf,
13095 FFS_MeasurementReport, IES_MeasurementReport,
13096 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
13097
13098 (void)i;
13099 return status;
13100
13101 } /* End dot11f_unpack_measurement_report. */
13102
13103 static const tFFDefn FFS_MeasurementRequest[] = {
13104 { "Category", offsetof(tDot11fMeasurementRequest, Category),
13105 SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
13106 { "Action", offsetof(tDot11fMeasurementRequest, Action), SigFfAction,
13107 DOT11F_FF_ACTION_LEN, },
13108 { "DialogToken", offsetof(tDot11fMeasurementRequest, DialogToken),
13109 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
13110 { NULL, 0, 0, 0,},
13111 };
13112
13113 static const tIEDefn IES_MeasurementRequest[] = {
13114 { offsetof(tDot11fMeasurementRequest, MeasurementRequest),
13115 offsetof(tDot11fIEMeasurementRequest, present),
13116 offsetof(tDot11fMeasurementRequest, num_MeasurementRequest),
13117 "MeasurementRequest", 4, 6, 18, SigIeMeasurementRequest, {0, 0, 0, 0, 0},
13118 0, DOT11F_EID_MEASUREMENTREQUEST, 0, 1, },
13119 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
13120
dot11f_unpack_measurement_request(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fMeasurementRequest * pFrm,bool append_ie)13121 uint32_t dot11f_unpack_measurement_request(tpAniSirGlobal pCtx,
13122 uint8_t *pBuf, uint32_t nBuf,
13123 tDot11fMeasurementRequest *pFrm, bool append_ie)
13124 {
13125 uint32_t i = 0;
13126 uint32_t status = 0;
13127 status = unpack_core(pCtx, pBuf, nBuf,
13128 FFS_MeasurementRequest, IES_MeasurementRequest,
13129 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
13130
13131 (void)i;
13132 return status;
13133
13134 } /* End dot11f_unpack_measurement_request. */
13135
13136 static const tFFDefn FFS_NeighborReportRequest[] = {
13137 { "Category", offsetof(tDot11fNeighborReportRequest, Category),
13138 SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
13139 { "Action", offsetof(tDot11fNeighborReportRequest, Action), SigFfAction,
13140 DOT11F_FF_ACTION_LEN, },
13141 { "DialogToken", offsetof(tDot11fNeighborReportRequest, DialogToken),
13142 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
13143 { NULL, 0, 0, 0,},
13144 };
13145
13146 static const tIEDefn IES_NeighborReportRequest[] = {
13147 { offsetof(tDot11fNeighborReportRequest, SSID), offsetof(tDot11fIESSID,
13148 present), 0, "SSID", 0, 2, 34, SigIeSSID, {0, 0, 0, 0, 0},
13149 0, DOT11F_EID_SSID, 0, 0, },
13150 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
13151
dot11f_unpack_neighbor_report_request(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fNeighborReportRequest * pFrm,bool append_ie)13152 uint32_t dot11f_unpack_neighbor_report_request(tpAniSirGlobal pCtx,
13153 uint8_t *pBuf, uint32_t nBuf,
13154 tDot11fNeighborReportRequest *pFrm, bool append_ie)
13155 {
13156 uint32_t i = 0;
13157 uint32_t status = 0;
13158 status = unpack_core(pCtx, pBuf, nBuf,
13159 FFS_NeighborReportRequest, IES_NeighborReportRequest,
13160 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
13161
13162 (void)i;
13163 return status;
13164
13165 } /* End dot11f_unpack_neighbor_report_request. */
13166
13167 static const tFFDefn FFS_NeighborReportResponse[] = {
13168 { "Category", offsetof(tDot11fNeighborReportResponse, Category),
13169 SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
13170 { "Action", offsetof(tDot11fNeighborReportResponse, Action), SigFfAction,
13171 DOT11F_FF_ACTION_LEN, },
13172 { "DialogToken", offsetof(tDot11fNeighborReportResponse, DialogToken),
13173 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
13174 { NULL, 0, 0, 0,},
13175 };
13176
13177 static const tIEDefn IES_NeighborReportResponse[] = {
13178 { offsetof(tDot11fNeighborReportResponse, NeighborReport),
13179 offsetof(tDot11fIENeighborReport, present),
13180 offsetof(tDot11fNeighborReportResponse, num_NeighborReport),
13181 "NeighborReport", 15, 15, 548, SigIeNeighborReport, {0, 0, 0, 0, 0},
13182 0, DOT11F_EID_NEIGHBORREPORT, 0, 0, },
13183 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
13184
dot11f_unpack_neighbor_report_response(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fNeighborReportResponse * pFrm,bool append_ie)13185 uint32_t dot11f_unpack_neighbor_report_response(tpAniSirGlobal pCtx,
13186 uint8_t *pBuf, uint32_t nBuf,
13187 tDot11fNeighborReportResponse *pFrm, bool append_ie)
13188 {
13189 uint32_t i = 0;
13190 uint32_t status = 0;
13191 status = unpack_core(pCtx, pBuf, nBuf,
13192 FFS_NeighborReportResponse, IES_NeighborReportResponse,
13193 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
13194
13195 (void)i;
13196 return status;
13197
13198 } /* End dot11f_unpack_neighbor_report_response. */
13199
13200 static const tFFDefn FFS_OperatingMode[] = {
13201 { "Category", offsetof(tDot11fOperatingMode, Category), SigFfCategory,
13202 DOT11F_FF_CATEGORY_LEN, },
13203 { "Action", offsetof(tDot11fOperatingMode, Action), SigFfAction,
13204 DOT11F_FF_ACTION_LEN, },
13205 { "OperatingMode", offsetof(tDot11fOperatingMode, OperatingMode),
13206 SigFfOperatingMode, DOT11F_FF_OPERATINGMODE_LEN, },
13207 { NULL, 0, 0, 0,},
13208 };
13209
13210 static const tIEDefn IES_OperatingMode[] = {
13211 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
13212
dot11f_unpack_operating_mode(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fOperatingMode * pFrm,bool append_ie)13213 uint32_t dot11f_unpack_operating_mode(tpAniSirGlobal pCtx,
13214 uint8_t *pBuf, uint32_t nBuf,
13215 tDot11fOperatingMode *pFrm, bool append_ie)
13216 {
13217 uint32_t i = 0;
13218 uint32_t status = 0;
13219 status = unpack_core(pCtx, pBuf, nBuf,
13220 FFS_OperatingMode, IES_OperatingMode,
13221 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
13222
13223 (void)i;
13224 return status;
13225
13226 } /* End dot11f_unpack_operating_mode. */
13227
13228 static const tFFDefn FFS_ProbeRequest[] = {
13229 { NULL, 0, 0, 0,},
13230 };
13231
13232 static const tIEDefn IES_ProbeRequest[] = {
13233 { offsetof(tDot11fProbeRequest, SSID), offsetof(tDot11fIESSID, present), 0,
13234 "SSID", 0, 2, 34, SigIeSSID, {0, 0, 0, 0, 0}, 0, DOT11F_EID_SSID, 0, 1, },
13235 { offsetof(tDot11fProbeRequest, SuppRates), offsetof(tDot11fIESuppRates,
13236 present), 0, "SuppRates", 0, 2, 14, SigIeSuppRates, {0, 0, 0, 0, 0},
13237 0, DOT11F_EID_SUPPRATES, 0, 1, },
13238 { offsetof(tDot11fProbeRequest, RequestedInfo),
13239 offsetof(tDot11fIERequestedInfo, present), 0, "RequestedInfo",
13240 0, 2, 257, SigIeRequestedInfo, {0, 0, 0, 0, 0},
13241 0, DOT11F_EID_REQUESTEDINFO, 0, 0, },
13242 { offsetof(tDot11fProbeRequest, ExtSuppRates),
13243 offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates",
13244 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0},
13245 0, DOT11F_EID_EXTSUPPRATES, 0, 0, },
13246 { offsetof(tDot11fProbeRequest, DSParams), offsetof(tDot11fIEDSParams,
13247 present), 0, "DSParams", 0, 3, 3, SigIeDSParams, {0, 0, 0, 0, 0},
13248 0, DOT11F_EID_DSPARAMS, 0, 0, },
13249 { offsetof(tDot11fProbeRequest, HTCaps), offsetof(tDot11fIEHTCaps,
13250 present), 0, "HTCaps", 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0},
13251 0, DOT11F_EID_HTCAPS, 0, 0, },
13252 { offsetof(tDot11fProbeRequest, ExtCap), offsetof(tDot11fIEExtCap,
13253 present), 0, "ExtCap", 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0},
13254 0, DOT11F_EID_EXTCAP, 0, 0, },
13255 { offsetof(tDot11fProbeRequest, VHTCaps), offsetof(tDot11fIEVHTCaps,
13256 present), 0, "VHTCaps", 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0},
13257 0, DOT11F_EID_VHTCAPS, 0, 0, },
13258 { offsetof(tDot11fProbeRequest, he_cap), offsetof(tDot11fIEhe_cap,
13259 present), 0, "he_cap", 0, 23, 56, SigIehe_cap, {0, 0, 0, 0, 0},
13260 0, DOT11F_EID_HE_CAP, 35, 0, },
13261 { offsetof(tDot11fProbeRequest, he_6ghz_band_cap),
13262 offsetof(tDot11fIEhe_6ghz_band_cap, present), 0, "he_6ghz_band_cap",
13263 0, 4, 4, SigIehe_6ghz_band_cap, {0, 0, 0, 0, 0},
13264 0, DOT11F_EID_HE_6GHZ_BAND_CAP, 59, 0, },
13265 { offsetof(tDot11fProbeRequest, eht_cap), offsetof(tDot11fIEeht_cap,
13266 present), 0, "eht_cap", 0, 26, 88, SigIeeht_cap, {0, 0, 0, 0, 0},
13267 0, DOT11F_EID_EHT_CAP, 108, 0, },
13268 { offsetof(tDot11fProbeRequest, mlo_ie), offsetof(tDot11fIEmlo_ie,
13269 present), 0, "mlo_ie", 0, 11, 257, SigIemlo_ie, {0, 0, 0, 0, 0},
13270 0, DOT11F_EID_MLO_IE, 107, 0, },
13271 { offsetof(tDot11fProbeRequest, WscProbeReq),
13272 offsetof(tDot11fIEWscProbeReq, present), 0, "WscProbeReq",
13273 0, 6, 286, SigIeWscProbeReq, {0, 80, 242, 4, 0},
13274 4, DOT11F_EID_WSCPROBEREQ, 0, 0, },
13275 { offsetof(tDot11fProbeRequest, WFATPC), offsetof(tDot11fIEWFATPC,
13276 present), 0, "WFATPC", 0, 9, 9, SigIeWFATPC, {0, 80, 242, 8, 0},
13277 5, DOT11F_EID_WFATPC, 0, 0, },
13278 { offsetof(tDot11fProbeRequest, P2PProbeReq),
13279 offsetof(tDot11fIEP2PProbeReq, present), 0, "P2PProbeReq",
13280 0, 6, 43, SigIeP2PProbeReq, {80, 111, 154, 9, 0},
13281 4, DOT11F_EID_P2PPROBEREQ, 0, 0, },
13282 { offsetof(tDot11fProbeRequest, qcn_ie), offsetof(tDot11fIEqcn_ie,
13283 present), 0, "qcn_ie", 0, 6, 55, SigIeqcn_ie, {140, 253, 240, 1, 0},
13284 4, DOT11F_EID_QCN_IE, 0, 0, },
13285 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
13286
dot11f_unpack_probe_request(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fProbeRequest * pFrm,bool append_ie)13287 uint32_t dot11f_unpack_probe_request(tpAniSirGlobal pCtx,
13288 uint8_t *pBuf, uint32_t nBuf,
13289 tDot11fProbeRequest *pFrm, bool append_ie)
13290 {
13291 uint32_t i = 0;
13292 uint32_t status = 0;
13293 status = unpack_core(pCtx, pBuf, nBuf,
13294 FFS_ProbeRequest, IES_ProbeRequest,
13295 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
13296
13297 (void)i;
13298 return status;
13299
13300 } /* End dot11f_unpack_probe_request. */
13301
13302 static const tFFDefn FFS_ProbeResponse[] = {
13303 { "TimeStamp", offsetof(tDot11fProbeResponse, TimeStamp), SigFfTimeStamp,
13304 DOT11F_FF_TIMESTAMP_LEN, },
13305 { "BeaconInterval", offsetof(tDot11fProbeResponse, BeaconInterval),
13306 SigFfBeaconInterval, DOT11F_FF_BEACONINTERVAL_LEN, },
13307 { "Capabilities", offsetof(tDot11fProbeResponse, Capabilities),
13308 SigFfCapabilities, DOT11F_FF_CAPABILITIES_LEN, },
13309 { NULL, 0, 0, 0,},
13310 };
13311
13312 static const tIEDefn IES_ProbeResponse[] = {
13313 { offsetof(tDot11fProbeResponse, SSID), offsetof(tDot11fIESSID, present),
13314 0, "SSID", 0, 2, 34, SigIeSSID, {0, 0, 0, 0, 0},
13315 0, DOT11F_EID_SSID, 0, 1, },
13316 { offsetof(tDot11fProbeResponse, SuppRates), offsetof(tDot11fIESuppRates,
13317 present), 0, "SuppRates", 0, 2, 14, SigIeSuppRates, {0, 0, 0, 0, 0},
13318 0, DOT11F_EID_SUPPRATES, 0, 1, },
13319 { offsetof(tDot11fProbeResponse, FHParamSet),
13320 offsetof(tDot11fIEFHParamSet, present), 0, "FHParamSet",
13321 0, 7, 7, SigIeFHParamSet, {0, 0, 0, 0, 0},
13322 0, DOT11F_EID_FHPARAMSET, 0, 0, },
13323 { offsetof(tDot11fProbeResponse, DSParams), offsetof(tDot11fIEDSParams,
13324 present), 0, "DSParams", 0, 3, 3, SigIeDSParams, {0, 0, 0, 0, 0},
13325 0, DOT11F_EID_DSPARAMS, 0, 0, },
13326 { offsetof(tDot11fProbeResponse, CFParams), offsetof(tDot11fIECFParams,
13327 present), 0, "CFParams", 0, 8, 8, SigIeCFParams, {0, 0, 0, 0, 0},
13328 0, DOT11F_EID_CFPARAMS, 0, 0, },
13329 { offsetof(tDot11fProbeResponse, Country), offsetof(tDot11fIECountry,
13330 present), 0, "Country", 0, 8, 248, SigIeCountry, {0, 0, 0, 0, 0},
13331 0, DOT11F_EID_COUNTRY, 0, 0, },
13332 { offsetof(tDot11fProbeResponse, FHParams), offsetof(tDot11fIEFHParams,
13333 present), 0, "FHParams", 0, 4, 4, SigIeFHParams, {0, 0, 0, 0, 0},
13334 0, DOT11F_EID_FHPARAMS, 0, 0, },
13335 { offsetof(tDot11fProbeResponse, FHPattTable),
13336 offsetof(tDot11fIEFHPattTable, present), 0, "FHPattTable",
13337 0, 6, 257, SigIeFHPattTable, {0, 0, 0, 0, 0},
13338 0, DOT11F_EID_FHPATTTABLE, 0, 0, },
13339 { offsetof(tDot11fProbeResponse, PowerConstraints),
13340 offsetof(tDot11fIEPowerConstraints, present), 0, "PowerConstraints",
13341 0, 3, 3, SigIePowerConstraints, {0, 0, 0, 0, 0},
13342 0, DOT11F_EID_POWERCONSTRAINTS, 0, 0, },
13343 { offsetof(tDot11fProbeResponse, ChanSwitchAnn),
13344 offsetof(tDot11fIEChanSwitchAnn, present), 0, "ChanSwitchAnn",
13345 0, 5, 5, SigIeChanSwitchAnn, {0, 0, 0, 0, 0},
13346 0, DOT11F_EID_CHANSWITCHANN, 0, 0, },
13347 { offsetof(tDot11fProbeResponse, Quiet), offsetof(tDot11fIEQuiet,
13348 present), 0, "Quiet", 0, 8, 8, SigIeQuiet, {0, 0, 0, 0, 0},
13349 0, DOT11F_EID_QUIET, 0, 0, },
13350 { offsetof(tDot11fProbeResponse, TPCReport), offsetof(tDot11fIETPCReport,
13351 present), 0, "TPCReport", 0, 4, 4, SigIeTPCReport, {0, 0, 0, 0, 0},
13352 0, DOT11F_EID_TPCREPORT, 0, 0, },
13353 { offsetof(tDot11fProbeResponse, ERPInfo), offsetof(tDot11fIEERPInfo,
13354 present), 0, "ERPInfo", 0, 3, 3, SigIeERPInfo, {0, 0, 0, 0, 0},
13355 0, DOT11F_EID_ERPINFO, 0, 0, },
13356 { offsetof(tDot11fProbeResponse, ExtSuppRates),
13357 offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates",
13358 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0},
13359 0, DOT11F_EID_EXTSUPPRATES, 0, 0, },
13360 { offsetof(tDot11fProbeResponse, RSNOpaque), offsetof(tDot11fIERSNOpaque,
13361 present), 0, "RSNOpaque", 0, 2, 255, SigIeRSNOpaque, {0, 0, 0, 0, 0},
13362 0, DOT11F_EID_RSNOPAQUE, 0, 0, },
13363 { offsetof(tDot11fProbeResponse, QBSSLoad), offsetof(tDot11fIEQBSSLoad,
13364 present), 0, "QBSSLoad", 0, 7, 7, SigIeQBSSLoad, {0, 0, 0, 0, 0},
13365 0, DOT11F_EID_QBSSLOAD, 0, 0, },
13366 { offsetof(tDot11fProbeResponse, EDCAParamSet),
13367 offsetof(tDot11fIEEDCAParamSet, present), 0, "EDCAParamSet",
13368 0, 20, 20, SigIeEDCAParamSet, {0, 0, 0, 0, 0},
13369 0, DOT11F_EID_EDCAPARAMSET, 0, 0, },
13370 { offsetof(tDot11fProbeResponse, RRMEnabledCap),
13371 offsetof(tDot11fIERRMEnabledCap, present), 0, "RRMEnabledCap",
13372 0, 7, 7, SigIeRRMEnabledCap, {0, 0, 0, 0, 0},
13373 0, DOT11F_EID_RRMENABLEDCAP, 0, 0, },
13374 { offsetof(tDot11fProbeResponse, APChannelReport),
13375 offsetof(tDot11fIEAPChannelReport, present), 0, "APChannelReport",
13376 0, 3, 53, SigIeAPChannelReport, {0, 0, 0, 0, 0},
13377 0, DOT11F_EID_APCHANNELREPORT, 0, 0, },
13378 { offsetof(tDot11fProbeResponse, MobilityDomain),
13379 offsetof(tDot11fIEMobilityDomain, present), 0, "MobilityDomain",
13380 0, 5, 5, SigIeMobilityDomain, {0, 0, 0, 0, 0},
13381 0, DOT11F_EID_MOBILITYDOMAIN, 0, 0, },
13382 { offsetof(tDot11fProbeResponse, ext_chan_switch_ann),
13383 offsetof(tDot11fIEext_chan_switch_ann, present), 0, "ext_chan_switch_ann",
13384 0, 6, 6, SigIeext_chan_switch_ann, {0, 0, 0, 0, 0},
13385 0, DOT11F_EID_EXT_CHAN_SWITCH_ANN, 0, 0, },
13386 { offsetof(tDot11fProbeResponse, SuppOperatingClasses),
13387 offsetof(tDot11fIESuppOperatingClasses, present), 0,
13388 "SuppOperatingClasses", 0, 3, 34, SigIeSuppOperatingClasses,
13389 {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPOPERATINGCLASSES, 0, 0, },
13390 { offsetof(tDot11fProbeResponse, HTCaps), offsetof(tDot11fIEHTCaps,
13391 present), 0, "HTCaps", 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0},
13392 0, DOT11F_EID_HTCAPS, 0, 0, },
13393 { offsetof(tDot11fProbeResponse, HTInfo), offsetof(tDot11fIEHTInfo,
13394 present), 0, "HTInfo", 0, 24, 56, SigIeHTInfo, {0, 0, 0, 0, 0},
13395 0, DOT11F_EID_HTINFO, 0, 0, },
13396 { offsetof(tDot11fProbeResponse, OBSSScanParameters),
13397 offsetof(tDot11fIEOBSSScanParameters, present), 0, "OBSSScanParameters",
13398 0, 16, 16, SigIeOBSSScanParameters, {0, 0, 0, 0, 0},
13399 0, DOT11F_EID_OBSSSCANPARAMETERS, 0, 0, },
13400 { offsetof(tDot11fProbeResponse, ExtCap), offsetof(tDot11fIEExtCap,
13401 present), 0, "ExtCap", 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0},
13402 0, DOT11F_EID_EXTCAP, 0, 0, },
13403 { offsetof(tDot11fProbeResponse, VHTCaps), offsetof(tDot11fIEVHTCaps,
13404 present), 0, "VHTCaps", 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0},
13405 0, DOT11F_EID_VHTCAPS, 0, 0, },
13406 { offsetof(tDot11fProbeResponse, VHTOperation),
13407 offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation",
13408 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0},
13409 0, DOT11F_EID_VHTOPERATION, 0, 0, },
13410 { offsetof(tDot11fProbeResponse, transmit_power_env),
13411 offsetof(tDot11fIEtransmit_power_env, present),
13412 offsetof(tDot11fProbeResponse, num_transmit_power_env),
13413 "transmit_power_env", 8, 4, 20, SigIetransmit_power_env, {0, 0, 0, 0, 0},
13414 0, DOT11F_EID_TRANSMIT_POWER_ENV, 0, 0, },
13415 { offsetof(tDot11fProbeResponse, ChannelSwitchWrapper),
13416 offsetof(tDot11fIEChannelSwitchWrapper, present), 0,
13417 "ChannelSwitchWrapper", 0, 2, 35, SigIeChannelSwitchWrapper,
13418 {0, 0, 0, 0, 0}, 0, DOT11F_EID_CHANNELSWITCHWRAPPER, 0, 0, },
13419 { offsetof(tDot11fProbeResponse, VHTExtBssLoad),
13420 offsetof(tDot11fIEVHTExtBssLoad, present), 0, "VHTExtBssLoad",
13421 0, 7, 7, SigIeVHTExtBssLoad, {0, 0, 0, 0, 0},
13422 0, DOT11F_EID_VHTEXTBSSLOAD, 0, 0, },
13423 { offsetof(tDot11fProbeResponse, fils_indication),
13424 offsetof(tDot11fIEfils_indication, present), 0, "fils_indication",
13425 0, 6, 259, SigIefils_indication, {0, 0, 0, 0, 0},
13426 0, DOT11F_EID_FILS_INDICATION, 0, 0, },
13427 { offsetof(tDot11fProbeResponse, max_chan_switch_time),
13428 offsetof(tDot11fIEmax_chan_switch_time, present), 0,
13429 "max_chan_switch_time", 0, 5, 5, SigIemax_chan_switch_time,
13430 {0, 0, 0, 0, 0}, 0, DOT11F_EID_MAX_CHAN_SWITCH_TIME, 52, 0, },
13431 { offsetof(tDot11fProbeResponse, esp_information),
13432 offsetof(tDot11fIEesp_information, present), 0, "esp_information",
13433 0, 2, 98, SigIeesp_information, {0, 0, 0, 0, 0},
13434 0, DOT11F_EID_ESP_INFORMATION, 11, 0, },
13435 { offsetof(tDot11fProbeResponse, he_cap), offsetof(tDot11fIEhe_cap,
13436 present), 0, "he_cap", 0, 23, 56, SigIehe_cap, {0, 0, 0, 0, 0},
13437 0, DOT11F_EID_HE_CAP, 35, 0, },
13438 { offsetof(tDot11fProbeResponse, he_op), offsetof(tDot11fIEhe_op,
13439 present), 0, "he_op", 0, 8, 17, SigIehe_op, {0, 0, 0, 0, 0},
13440 0, DOT11F_EID_HE_OP, 36, 0, },
13441 { offsetof(tDot11fProbeResponse, spatial_reuse),
13442 offsetof(tDot11fIEspatial_reuse, present), 0, "spatial_reuse",
13443 0, 3, 22, SigIespatial_reuse, {0, 0, 0, 0, 0},
13444 0, DOT11F_EID_SPATIAL_REUSE, 39, 0, },
13445 { offsetof(tDot11fProbeResponse, bss_color_change),
13446 offsetof(tDot11fIEbss_color_change, present), 0, "bss_color_change",
13447 0, 4, 4, SigIebss_color_change, {0, 0, 0, 0, 0},
13448 0, DOT11F_EID_BSS_COLOR_CHANGE, 42, 0, },
13449 { offsetof(tDot11fProbeResponse, mu_edca_param_set),
13450 offsetof(tDot11fIEmu_edca_param_set, present), 0, "mu_edca_param_set",
13451 0, 15, 15, SigIemu_edca_param_set, {0, 0, 0, 0, 0},
13452 0, DOT11F_EID_MU_EDCA_PARAM_SET, 38, 0, },
13453 { offsetof(tDot11fProbeResponse, he_6ghz_band_cap),
13454 offsetof(tDot11fIEhe_6ghz_band_cap, present), 0, "he_6ghz_band_cap",
13455 0, 4, 4, SigIehe_6ghz_band_cap, {0, 0, 0, 0, 0},
13456 0, DOT11F_EID_HE_6GHZ_BAND_CAP, 59, 0, },
13457 { offsetof(tDot11fProbeResponse, sec_chan_offset_ele),
13458 offsetof(tDot11fIEsec_chan_offset_ele, present), 0, "sec_chan_offset_ele",
13459 0, 3, 3, SigIesec_chan_offset_ele, {0, 0, 0, 0, 0},
13460 0, DOT11F_EID_SEC_CHAN_OFFSET_ELE, 0, 0, },
13461 { offsetof(tDot11fProbeResponse, WAPI), offsetof(tDot11fIEWAPI, present),
13462 0, "WAPI", 0, 14, 112, SigIeWAPI, {0, 0, 0, 0, 0},
13463 0, DOT11F_EID_WAPI, 0, 0, },
13464 { offsetof(tDot11fProbeResponse, ESETxmitPower),
13465 offsetof(tDot11fIEESETxmitPower, present), 0, "ESETxmitPower",
13466 0, 8, 8, SigIeESETxmitPower, {0, 64, 150, 0, 0},
13467 4, DOT11F_EID_ESETXMITPOWER, 0, 0, },
13468 { offsetof(tDot11fProbeResponse, eht_cap), offsetof(tDot11fIEeht_cap,
13469 present), 0, "eht_cap", 0, 26, 88, SigIeeht_cap, {0, 0, 0, 0, 0},
13470 0, DOT11F_EID_EHT_CAP, 108, 0, },
13471 { offsetof(tDot11fProbeResponse, eht_op), offsetof(tDot11fIEeht_op,
13472 present), 0, "eht_op", 0, 10, 12, SigIeeht_op, {0, 0, 0, 0, 0},
13473 0, DOT11F_EID_EHT_OP, 106, 0, },
13474 { offsetof(tDot11fProbeResponse, mlo_ie), offsetof(tDot11fIEmlo_ie,
13475 present), 0, "mlo_ie", 0, 11, 257, SigIemlo_ie, {0, 0, 0, 0, 0},
13476 0, DOT11F_EID_MLO_IE, 107, 0, },
13477 { offsetof(tDot11fProbeResponse, t2lm_ie), offsetof(tDot11fIEt2lm_ie,
13478 present), offsetof(tDot11fProbeResponse, num_t2lm_ie), "t2lm_ie",
13479 2, 5, 257, SigIet2lm_ie, {0, 0, 0, 0, 0},
13480 0, DOT11F_EID_T2LM_IE, 109, 0, },
13481 { offsetof(tDot11fProbeResponse, WPA), offsetof(tDot11fIEWPA, present), 0,
13482 "WPA", 0, 8, 50, SigIeWPA, {0, 80, 242, 1, 0}, 4, DOT11F_EID_WPA, 0, 0, },
13483 { offsetof(tDot11fProbeResponse, WMMInfoAp), offsetof(tDot11fIEWMMInfoAp,
13484 present), 0, "WMMInfoAp", 0, 9, 9, SigIeWMMInfoAp, {0, 80, 242, 2, 0},
13485 5, DOT11F_EID_WMMINFOAP, 0, 0, },
13486 { offsetof(tDot11fProbeResponse, WMMParams), offsetof(tDot11fIEWMMParams,
13487 present), 0, "WMMParams", 0, 26, 26, SigIeWMMParams, {0, 80, 242, 2, 1},
13488 5, DOT11F_EID_WMMPARAMS, 0, 0, },
13489 { offsetof(tDot11fProbeResponse, WMMCaps), offsetof(tDot11fIEWMMCaps,
13490 present), 0, "WMMCaps", 0, 9, 9, SigIeWMMCaps, {0, 80, 242, 2, 5},
13491 5, DOT11F_EID_WMMCAPS, 0, 0, },
13492 { offsetof(tDot11fProbeResponse, ESEVersion),
13493 offsetof(tDot11fIEESEVersion, present), 0, "ESEVersion",
13494 0, 7, 7, SigIeESEVersion, {0, 64, 150, 3, 0},
13495 4, DOT11F_EID_ESEVERSION, 0, 0, },
13496 { offsetof(tDot11fProbeResponse, ESERadMgmtCap),
13497 offsetof(tDot11fIEESERadMgmtCap, present), 0, "ESERadMgmtCap",
13498 0, 8, 8, SigIeESERadMgmtCap, {0, 64, 150, 1, 0},
13499 4, DOT11F_EID_ESERADMGMTCAP, 0, 0, },
13500 { offsetof(tDot11fProbeResponse, ESETrafStrmMet),
13501 offsetof(tDot11fIEESETrafStrmMet, present), 0, "ESETrafStrmMet",
13502 0, 10, 10, SigIeESETrafStrmMet, {0, 64, 150, 7, 0},
13503 4, DOT11F_EID_ESETRAFSTRMMET, 0, 0, },
13504 { offsetof(tDot11fProbeResponse, WscProbeRes),
13505 offsetof(tDot11fIEWscProbeRes, present), 0, "WscProbeRes",
13506 0, 6, 319, SigIeWscProbeRes, {0, 80, 242, 4, 0},
13507 4, DOT11F_EID_WSCPROBERES, 0, 0, },
13508 { offsetof(tDot11fProbeResponse, P2PProbeRes),
13509 offsetof(tDot11fIEP2PProbeRes, present), 0, "P2PProbeRes",
13510 0, 6, 1141, SigIeP2PProbeRes, {80, 111, 154, 9, 0},
13511 4, DOT11F_EID_P2PPROBERES, 0, 0, },
13512 { offsetof(tDot11fProbeResponse, Vendor1IE), offsetof(tDot11fIEVendor1IE,
13513 present), 0, "Vendor1IE", 0, 5, 5, SigIeVendor1IE, {0, 16, 24, 0, 0},
13514 3, DOT11F_EID_VENDOR1IE, 0, 0, },
13515 { offsetof(tDot11fProbeResponse, vendor_vht_ie),
13516 offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie",
13517 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 4, 0},
13518 4, DOT11F_EID_VENDOR_VHT_IE, 0, 0, },
13519 { offsetof(tDot11fProbeResponse, Vendor3IE), offsetof(tDot11fIEVendor3IE,
13520 present), 0, "Vendor3IE", 0, 5, 5, SigIeVendor3IE, {0, 22, 50, 0, 0},
13521 3, DOT11F_EID_VENDOR3IE, 0, 0, },
13522 { offsetof(tDot11fProbeResponse, hs20vendor_ie),
13523 offsetof(tDot11fIEhs20vendor_ie, present), 0, "hs20vendor_ie",
13524 0, 7, 9, SigIehs20vendor_ie, {80, 111, 154, 16, 0},
13525 4, DOT11F_EID_HS20VENDOR_IE, 0, 0, },
13526 { offsetof(tDot11fProbeResponse, QComVendorIE),
13527 offsetof(tDot11fIEQComVendorIE, present), 0, "QComVendorIE",
13528 0, 7, 7, SigIeQComVendorIE, {0, 160, 198, 0, 0},
13529 3, DOT11F_EID_QCOMVENDORIE, 0, 0, },
13530 { offsetof(tDot11fProbeResponse, MBO_IE), offsetof(tDot11fIEMBO_IE,
13531 present), 0, "MBO_IE", 0, 6, 295, SigIeMBO_IE, {80, 111, 154, 22, 0},
13532 4, DOT11F_EID_MBO_IE, 0, 0, },
13533 { offsetof(tDot11fProbeResponse, qcn_ie), offsetof(tDot11fIEqcn_ie,
13534 present), 0, "qcn_ie", 0, 6, 55, SigIeqcn_ie, {140, 253, 240, 1, 0},
13535 4, DOT11F_EID_QCN_IE, 0, 0, },
13536 { offsetof(tDot11fProbeResponse, reduced_neighbor_report),
13537 offsetof(tDot11fIEreduced_neighbor_report, present), 0,
13538 "reduced_neighbor_report", 0, 7, 22, SigIereduced_neighbor_report,
13539 {0, 0, 0, 0, 0}, 0, DOT11F_EID_REDUCED_NEIGHBOR_REPORT, 0, 0, },
13540 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
13541
dot11f_unpack_probe_response(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fProbeResponse * pFrm,bool append_ie)13542 uint32_t dot11f_unpack_probe_response(tpAniSirGlobal pCtx,
13543 uint8_t *pBuf, uint32_t nBuf,
13544 tDot11fProbeResponse *pFrm, bool append_ie)
13545 {
13546 uint32_t i = 0;
13547 uint32_t status = 0;
13548 status = unpack_core(pCtx, pBuf, nBuf,
13549 FFS_ProbeResponse, IES_ProbeResponse,
13550 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
13551
13552 (void)i;
13553 return status;
13554
13555 } /* End dot11f_unpack_probe_response. */
13556
13557 static const tFFDefn FFS_QosMapConfigure[] = {
13558 { "Category", offsetof(tDot11fQosMapConfigure, Category), SigFfCategory,
13559 DOT11F_FF_CATEGORY_LEN, },
13560 { "Action", offsetof(tDot11fQosMapConfigure, Action), SigFfAction,
13561 DOT11F_FF_ACTION_LEN, },
13562 { NULL, 0, 0, 0,},
13563 };
13564
13565 static const tIEDefn IES_QosMapConfigure[] = {
13566 { offsetof(tDot11fQosMapConfigure, QosMapSet),
13567 offsetof(tDot11fIEQosMapSet, present), 0, "QosMapSet",
13568 0, 18, 60, SigIeQosMapSet, {0, 0, 0, 0, 0},
13569 0, DOT11F_EID_QOSMAPSET, 0, 1, },
13570 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
13571
dot11f_unpack_qos_map_configure(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fQosMapConfigure * pFrm,bool append_ie)13572 uint32_t dot11f_unpack_qos_map_configure(tpAniSirGlobal pCtx,
13573 uint8_t *pBuf, uint32_t nBuf,
13574 tDot11fQosMapConfigure *pFrm, bool append_ie)
13575 {
13576 uint32_t i = 0;
13577 uint32_t status = 0;
13578 status = unpack_core(pCtx, pBuf, nBuf,
13579 FFS_QosMapConfigure, IES_QosMapConfigure,
13580 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
13581
13582 (void)i;
13583 return status;
13584
13585 } /* End dot11f_unpack_qos_map_configure. */
13586
13587 static const tFFDefn FFS_RadioMeasurementReport[] = {
13588 { "Category", offsetof(tDot11fRadioMeasurementReport, Category),
13589 SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
13590 { "Action", offsetof(tDot11fRadioMeasurementReport, Action), SigFfAction,
13591 DOT11F_FF_ACTION_LEN, },
13592 { "DialogToken", offsetof(tDot11fRadioMeasurementReport, DialogToken),
13593 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
13594 { NULL, 0, 0, 0,},
13595 };
13596
13597 static const tIEDefn IES_RadioMeasurementReport[] = {
13598 { offsetof(tDot11fRadioMeasurementReport, MeasurementReport),
13599 offsetof(tDot11fIEMeasurementReport, present),
13600 offsetof(tDot11fRadioMeasurementReport, num_MeasurementReport),
13601 "MeasurementReport", 1, 5, 60, SigIeMeasurementReport, {0, 0, 0, 0, 0},
13602 0, DOT11F_EID_MEASUREMENTREPORT, 0, 1, },
13603 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
13604
dot11f_unpack_radio_measurement_report(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fRadioMeasurementReport * pFrm,bool append_ie)13605 uint32_t dot11f_unpack_radio_measurement_report(tpAniSirGlobal pCtx,
13606 uint8_t *pBuf, uint32_t nBuf,
13607 tDot11fRadioMeasurementReport *pFrm, bool append_ie)
13608 {
13609 uint32_t i = 0;
13610 uint32_t status = 0;
13611 status = unpack_core(pCtx, pBuf, nBuf,
13612 FFS_RadioMeasurementReport, IES_RadioMeasurementReport,
13613 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
13614
13615 (void)i;
13616 return status;
13617
13618 } /* End dot11f_unpack_radio_measurement_report. */
13619
13620 static const tFFDefn FFS_RadioMeasurementRequest[] = {
13621 { "Category", offsetof(tDot11fRadioMeasurementRequest, Category),
13622 SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
13623 { "Action", offsetof(tDot11fRadioMeasurementRequest, Action), SigFfAction,
13624 DOT11F_FF_ACTION_LEN, },
13625 { "DialogToken", offsetof(tDot11fRadioMeasurementRequest, DialogToken),
13626 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
13627 { "NumOfRepetitions", offsetof(tDot11fRadioMeasurementRequest,
13628 NumOfRepetitions), SigFfNumOfRepetitions,
13629 DOT11F_FF_NUMOFREPETITIONS_LEN, },
13630 { NULL, 0, 0, 0,},
13631 };
13632
13633 static const tIEDefn IES_RadioMeasurementRequest[] = {
13634 { offsetof(tDot11fRadioMeasurementRequest, MeasurementRequest),
13635 offsetof(tDot11fIEMeasurementRequest, present),
13636 offsetof(tDot11fRadioMeasurementRequest, num_MeasurementRequest),
13637 "MeasurementRequest", 5, 6, 18, SigIeMeasurementRequest, {0, 0, 0, 0, 0},
13638 0, DOT11F_EID_MEASUREMENTREQUEST, 0, 1, },
13639 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
13640
dot11f_unpack_radio_measurement_request(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fRadioMeasurementRequest * pFrm,bool append_ie)13641 uint32_t dot11f_unpack_radio_measurement_request(tpAniSirGlobal pCtx,
13642 uint8_t *pBuf, uint32_t nBuf,
13643 tDot11fRadioMeasurementRequest *pFrm, bool append_ie)
13644 {
13645 uint32_t i = 0;
13646 uint32_t status = 0;
13647 status = unpack_core(pCtx, pBuf, nBuf,
13648 FFS_RadioMeasurementRequest, IES_RadioMeasurementRequest,
13649 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
13650
13651 (void)i;
13652 return status;
13653
13654 } /* End dot11f_unpack_radio_measurement_request. */
13655
13656 static const tFFDefn FFS_ReAssocRequest[] = {
13657 { "Capabilities", offsetof(tDot11fReAssocRequest, Capabilities),
13658 SigFfCapabilities, DOT11F_FF_CAPABILITIES_LEN, },
13659 { "ListenInterval", offsetof(tDot11fReAssocRequest, ListenInterval),
13660 SigFfListenInterval, DOT11F_FF_LISTENINTERVAL_LEN, },
13661 { "CurrentAPAddress", offsetof(tDot11fReAssocRequest, CurrentAPAddress),
13662 SigFfCurrentAPAddress, DOT11F_FF_CURRENTAPADDRESS_LEN, },
13663 { NULL, 0, 0, 0,},
13664 };
13665
13666 static const tIEDefn IES_ReAssocRequest[] = {
13667 { offsetof(tDot11fReAssocRequest, SSID), offsetof(tDot11fIESSID, present),
13668 0, "SSID", 0, 2, 34, SigIeSSID, {0, 0, 0, 0, 0},
13669 0, DOT11F_EID_SSID, 0, 1, },
13670 { offsetof(tDot11fReAssocRequest, SuppRates),
13671 offsetof(tDot11fIESuppRates, present), 0, "SuppRates",
13672 0, 2, 14, SigIeSuppRates, {0, 0, 0, 0, 0},
13673 0, DOT11F_EID_SUPPRATES, 0, 1, },
13674 { offsetof(tDot11fReAssocRequest, ExtSuppRates),
13675 offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates",
13676 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0},
13677 0, DOT11F_EID_EXTSUPPRATES, 0, 0, },
13678 { offsetof(tDot11fReAssocRequest, PowerCaps),
13679 offsetof(tDot11fIEPowerCaps, present), 0, "PowerCaps",
13680 0, 4, 4, SigIePowerCaps, {0, 0, 0, 0, 0},
13681 0, DOT11F_EID_POWERCAPS, 0, 0, },
13682 { offsetof(tDot11fReAssocRequest, SuppChannels),
13683 offsetof(tDot11fIESuppChannels, present), 0, "SuppChannels",
13684 0, 2, 98, SigIeSuppChannels, {0, 0, 0, 0, 0},
13685 0, DOT11F_EID_SUPPCHANNELS, 0, 0, },
13686 { offsetof(tDot11fReAssocRequest, RSNOpaque),
13687 offsetof(tDot11fIERSNOpaque, present), 0, "RSNOpaque",
13688 0, 2, 255, SigIeRSNOpaque, {0, 0, 0, 0, 0},
13689 0, DOT11F_EID_RSNOPAQUE, 0, 0, },
13690 { offsetof(tDot11fReAssocRequest, QOSCapsStation),
13691 offsetof(tDot11fIEQOSCapsStation, present), 0, "QOSCapsStation",
13692 0, 3, 3, SigIeQOSCapsStation, {0, 0, 0, 0, 0},
13693 0, DOT11F_EID_QOSCAPSSTATION, 0, 0, },
13694 { offsetof(tDot11fReAssocRequest, RRMEnabledCap),
13695 offsetof(tDot11fIERRMEnabledCap, present), 0, "RRMEnabledCap",
13696 0, 7, 7, SigIeRRMEnabledCap, {0, 0, 0, 0, 0},
13697 0, DOT11F_EID_RRMENABLEDCAP, 0, 0, },
13698 { offsetof(tDot11fReAssocRequest, MobilityDomain),
13699 offsetof(tDot11fIEMobilityDomain, present), 0, "MobilityDomain",
13700 0, 5, 5, SigIeMobilityDomain, {0, 0, 0, 0, 0},
13701 0, DOT11F_EID_MOBILITYDOMAIN, 0, 0, },
13702 { offsetof(tDot11fReAssocRequest, FTInfo), offsetof(tDot11fIEFTInfo,
13703 present), 0, "FTInfo", 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0},
13704 0, DOT11F_EID_FTINFO, 0, 0, },
13705 { offsetof(tDot11fReAssocRequest, RICDataDesc),
13706 offsetof(tDot11fIERICDataDesc, present),
13707 offsetof(tDot11fReAssocRequest, num_RICDataDesc), "RICDataDesc",
13708 2, 2, 550, SigIeRICDataDesc, {0, 0, 0, 0, 0},
13709 0, DOT11F_EID_RICDATADESC, 0, 0, },
13710 { offsetof(tDot11fReAssocRequest, SuppOperatingClasses),
13711 offsetof(tDot11fIESuppOperatingClasses, present), 0,
13712 "SuppOperatingClasses", 0, 3, 34, SigIeSuppOperatingClasses,
13713 {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPOPERATINGCLASSES, 0, 0, },
13714 { offsetof(tDot11fReAssocRequest, HTCaps), offsetof(tDot11fIEHTCaps,
13715 present), 0, "HTCaps", 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0},
13716 0, DOT11F_EID_HTCAPS, 0, 0, },
13717 { offsetof(tDot11fReAssocRequest, ExtCap), offsetof(tDot11fIEExtCap,
13718 present), 0, "ExtCap", 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0},
13719 0, DOT11F_EID_EXTCAP, 0, 0, },
13720 { offsetof(tDot11fReAssocRequest, VHTCaps), offsetof(tDot11fIEVHTCaps,
13721 present), 0, "VHTCaps", 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0},
13722 0, DOT11F_EID_VHTCAPS, 0, 0, },
13723 { offsetof(tDot11fReAssocRequest, OperatingMode),
13724 offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode",
13725 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0},
13726 0, DOT11F_EID_OPERATINGMODE, 0, 0, },
13727 { offsetof(tDot11fReAssocRequest, bss_max_idle_period),
13728 offsetof(tDot11fIEbss_max_idle_period, present), 0, "bss_max_idle_period",
13729 0, 5, 5, SigIebss_max_idle_period, {0, 0, 0, 0, 0},
13730 0, DOT11F_EID_BSS_MAX_IDLE_PERIOD, 0, 0, },
13731 { offsetof(tDot11fReAssocRequest, he_cap), offsetof(tDot11fIEhe_cap,
13732 present), 0, "he_cap", 0, 23, 56, SigIehe_cap, {0, 0, 0, 0, 0},
13733 0, DOT11F_EID_HE_CAP, 35, 0, },
13734 { offsetof(tDot11fReAssocRequest, he_6ghz_band_cap),
13735 offsetof(tDot11fIEhe_6ghz_band_cap, present), 0, "he_6ghz_band_cap",
13736 0, 4, 4, SigIehe_6ghz_band_cap, {0, 0, 0, 0, 0},
13737 0, DOT11F_EID_HE_6GHZ_BAND_CAP, 59, 0, },
13738 { offsetof(tDot11fReAssocRequest, WAPIOpaque),
13739 offsetof(tDot11fIEWAPIOpaque, present), 0, "WAPIOpaque",
13740 0, 8, 255, SigIeWAPIOpaque, {0, 0, 0, 0, 0},
13741 0, DOT11F_EID_WAPIOPAQUE, 0, 0, },
13742 { offsetof(tDot11fReAssocRequest, WAPI), offsetof(tDot11fIEWAPI, present),
13743 0, "WAPI", 0, 14, 112, SigIeWAPI, {0, 0, 0, 0, 0},
13744 0, DOT11F_EID_WAPI, 0, 0, },
13745 { offsetof(tDot11fReAssocRequest, QosMapSet),
13746 offsetof(tDot11fIEQosMapSet, present), 0, "QosMapSet",
13747 0, 18, 60, SigIeQosMapSet, {0, 0, 0, 0, 0},
13748 0, DOT11F_EID_QOSMAPSET, 0, 0, },
13749 { offsetof(tDot11fReAssocRequest, ESECckmOpaque),
13750 offsetof(tDot11fIEESECckmOpaque, present), 0, "ESECckmOpaque",
13751 0, 12, 26, SigIeESECckmOpaque, {0, 64, 150, 0, 0},
13752 4, DOT11F_EID_ESECCKMOPAQUE, 0, 0, },
13753 { offsetof(tDot11fReAssocRequest, eht_cap), offsetof(tDot11fIEeht_cap,
13754 present), 0, "eht_cap", 0, 26, 88, SigIeeht_cap, {0, 0, 0, 0, 0},
13755 0, DOT11F_EID_EHT_CAP, 108, 0, },
13756 { offsetof(tDot11fReAssocRequest, mlo_ie), offsetof(tDot11fIEmlo_ie,
13757 present), 0, "mlo_ie", 0, 11, 257, SigIemlo_ie, {0, 0, 0, 0, 0},
13758 0, DOT11F_EID_MLO_IE, 107, 0, },
13759 { offsetof(tDot11fReAssocRequest, t2lm_ie), offsetof(tDot11fIEt2lm_ie,
13760 present), offsetof(tDot11fReAssocRequest, num_t2lm_ie), "t2lm_ie",
13761 2, 5, 257, SigIet2lm_ie, {0, 0, 0, 0, 0},
13762 0, DOT11F_EID_T2LM_IE, 109, 0, },
13763 { offsetof(tDot11fReAssocRequest, WPAOpaque),
13764 offsetof(tDot11fIEWPAOpaque, present), 0, "WPAOpaque",
13765 0, 8, 255, SigIeWPAOpaque, {0, 80, 242, 1, 0},
13766 4, DOT11F_EID_WPAOPAQUE, 0, 0, },
13767 { offsetof(tDot11fReAssocRequest, WMMCaps), offsetof(tDot11fIEWMMCaps,
13768 present), 0, "WMMCaps", 0, 9, 9, SigIeWMMCaps, {0, 80, 242, 2, 5},
13769 5, DOT11F_EID_WMMCAPS, 0, 0, },
13770 { offsetof(tDot11fReAssocRequest, WMMInfoStation),
13771 offsetof(tDot11fIEWMMInfoStation, present), 0, "WMMInfoStation",
13772 0, 9, 9, SigIeWMMInfoStation, {0, 80, 242, 2, 0},
13773 5, DOT11F_EID_WMMINFOSTATION, 0, 0, },
13774 { offsetof(tDot11fReAssocRequest, WscIEOpaque),
13775 offsetof(tDot11fIEWscIEOpaque, present), 0, "WscIEOpaque",
13776 0, 8, 255, SigIeWscIEOpaque, {0, 80, 242, 4, 0},
13777 4, DOT11F_EID_WSCIEOPAQUE, 0, 0, },
13778 { offsetof(tDot11fReAssocRequest, ESERadMgmtCap),
13779 offsetof(tDot11fIEESERadMgmtCap, present), 0, "ESERadMgmtCap",
13780 0, 8, 8, SigIeESERadMgmtCap, {0, 64, 150, 1, 0},
13781 4, DOT11F_EID_ESERADMGMTCAP, 0, 0, },
13782 { offsetof(tDot11fReAssocRequest, ESEVersion),
13783 offsetof(tDot11fIEESEVersion, present), 0, "ESEVersion",
13784 0, 7, 7, SigIeESEVersion, {0, 64, 150, 3, 0},
13785 4, DOT11F_EID_ESEVERSION, 0, 0, },
13786 { offsetof(tDot11fReAssocRequest, WMMTSPEC), offsetof(tDot11fIEWMMTSPEC,
13787 present), offsetof(tDot11fReAssocRequest, num_WMMTSPEC), "WMMTSPEC",
13788 4, 63, 63, SigIeWMMTSPEC, {0, 80, 242, 2, 2},
13789 5, DOT11F_EID_WMMTSPEC, 0, 0, },
13790 { offsetof(tDot11fReAssocRequest, ESETrafStrmRateSet),
13791 offsetof(tDot11fIEESETrafStrmRateSet, present), 0, "ESETrafStrmRateSet",
13792 0, 7, 15, SigIeESETrafStrmRateSet, {0, 64, 150, 8, 0},
13793 4, DOT11F_EID_ESETRAFSTRMRATESET, 0, 0, },
13794 { offsetof(tDot11fReAssocRequest, P2PIEOpaque),
13795 offsetof(tDot11fIEP2PIEOpaque, present), 0, "P2PIEOpaque",
13796 0, 8, 255, SigIeP2PIEOpaque, {80, 111, 154, 9, 0},
13797 4, DOT11F_EID_P2PIEOPAQUE, 0, 0, },
13798 { offsetof(tDot11fReAssocRequest, WFDIEOpaque),
13799 offsetof(tDot11fIEWFDIEOpaque, present), 0, "WFDIEOpaque",
13800 0, 8, 255, SigIeWFDIEOpaque, {80, 111, 154, 10, 0},
13801 4, DOT11F_EID_WFDIEOPAQUE, 0, 0, },
13802 { offsetof(tDot11fReAssocRequest, vendor_vht_ie),
13803 offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie",
13804 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 4, 0},
13805 4, DOT11F_EID_VENDOR_VHT_IE, 0, 0, },
13806 { offsetof(tDot11fReAssocRequest, hs20vendor_ie),
13807 offsetof(tDot11fIEhs20vendor_ie, present), 0, "hs20vendor_ie",
13808 0, 7, 9, SigIehs20vendor_ie, {80, 111, 154, 16, 0},
13809 4, DOT11F_EID_HS20VENDOR_IE, 0, 0, },
13810 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
13811
dot11f_unpack_re_assoc_request(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fReAssocRequest * pFrm,bool append_ie)13812 uint32_t dot11f_unpack_re_assoc_request(tpAniSirGlobal pCtx,
13813 uint8_t *pBuf, uint32_t nBuf,
13814 tDot11fReAssocRequest *pFrm, bool append_ie)
13815 {
13816 uint32_t i = 0;
13817 uint32_t status = 0;
13818 status = unpack_core(pCtx, pBuf, nBuf,
13819 FFS_ReAssocRequest, IES_ReAssocRequest,
13820 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
13821
13822 (void)i;
13823 return status;
13824
13825 } /* End dot11f_unpack_re_assoc_request. */
13826
13827 static const tFFDefn FFS_ReAssocResponse[] = {
13828 { "Capabilities", offsetof(tDot11fReAssocResponse, Capabilities),
13829 SigFfCapabilities, DOT11F_FF_CAPABILITIES_LEN, },
13830 { "Status", offsetof(tDot11fReAssocResponse, Status), SigFfStatus,
13831 DOT11F_FF_STATUS_LEN, },
13832 { "AID", offsetof(tDot11fReAssocResponse, AID), SigFfAID,
13833 DOT11F_FF_AID_LEN, },
13834 { NULL, 0, 0, 0,},
13835 };
13836
13837 static const tIEDefn IES_ReAssocResponse[] = {
13838 { offsetof(tDot11fReAssocResponse, SuppRates),
13839 offsetof(tDot11fIESuppRates, present), 0, "SuppRates",
13840 0, 2, 14, SigIeSuppRates, {0, 0, 0, 0, 0},
13841 0, DOT11F_EID_SUPPRATES, 0, 1, },
13842 { offsetof(tDot11fReAssocResponse, ExtSuppRates),
13843 offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates",
13844 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0},
13845 0, DOT11F_EID_EXTSUPPRATES, 0, 0, },
13846 { offsetof(tDot11fReAssocResponse, EDCAParamSet),
13847 offsetof(tDot11fIEEDCAParamSet, present), 0, "EDCAParamSet",
13848 0, 20, 20, SigIeEDCAParamSet, {0, 0, 0, 0, 0},
13849 0, DOT11F_EID_EDCAPARAMSET, 0, 0, },
13850 { offsetof(tDot11fReAssocResponse, RCPIIE), offsetof(tDot11fIERCPIIE,
13851 present), 0, "RCPIIE", 0, 3, 3, SigIeRCPIIE, {0, 0, 0, 0, 0},
13852 0, DOT11F_EID_RCPIIE, 0, 0, },
13853 { offsetof(tDot11fReAssocResponse, RSNIIE), offsetof(tDot11fIERSNIIE,
13854 present), 0, "RSNIIE", 0, 3, 3, SigIeRSNIIE, {0, 0, 0, 0, 0},
13855 0, DOT11F_EID_RSNIIE, 0, 0, },
13856 { offsetof(tDot11fReAssocResponse, RRMEnabledCap),
13857 offsetof(tDot11fIERRMEnabledCap, present), 0, "RRMEnabledCap",
13858 0, 7, 7, SigIeRRMEnabledCap, {0, 0, 0, 0, 0},
13859 0, DOT11F_EID_RRMENABLEDCAP, 0, 0, },
13860 { offsetof(tDot11fReAssocResponse, RSNOpaque),
13861 offsetof(tDot11fIERSNOpaque, present), 0, "RSNOpaque",
13862 0, 2, 255, SigIeRSNOpaque, {0, 0, 0, 0, 0},
13863 0, DOT11F_EID_RSNOPAQUE, 0, 0, },
13864 { offsetof(tDot11fReAssocResponse, MobilityDomain),
13865 offsetof(tDot11fIEMobilityDomain, present), 0, "MobilityDomain",
13866 0, 5, 5, SigIeMobilityDomain, {0, 0, 0, 0, 0},
13867 0, DOT11F_EID_MOBILITYDOMAIN, 0, 0, },
13868 { offsetof(tDot11fReAssocResponse, FTInfo), offsetof(tDot11fIEFTInfo,
13869 present), 0, "FTInfo", 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0},
13870 0, DOT11F_EID_FTINFO, 0, 0, },
13871 { offsetof(tDot11fReAssocResponse, RICDataDesc),
13872 offsetof(tDot11fIERICDataDesc, present),
13873 offsetof(tDot11fReAssocResponse, num_RICDataDesc), "RICDataDesc",
13874 2, 2, 550, SigIeRICDataDesc, {0, 0, 0, 0, 0},
13875 0, DOT11F_EID_RICDATADESC, 0, 0, },
13876 { offsetof(tDot11fReAssocResponse, TimeoutInterval),
13877 offsetof(tDot11fIETimeoutInterval, present), 0, "TimeoutInterval",
13878 0, 7, 7, SigIeTimeoutInterval, {0, 0, 0, 0, 0},
13879 0, DOT11F_EID_TIMEOUTINTERVAL, 0, 0, },
13880 { offsetof(tDot11fReAssocResponse, HTCaps), offsetof(tDot11fIEHTCaps,
13881 present), 0, "HTCaps", 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0},
13882 0, DOT11F_EID_HTCAPS, 0, 0, },
13883 { offsetof(tDot11fReAssocResponse, HTInfo), offsetof(tDot11fIEHTInfo,
13884 present), 0, "HTInfo", 0, 24, 56, SigIeHTInfo, {0, 0, 0, 0, 0},
13885 0, DOT11F_EID_HTINFO, 0, 0, },
13886 { offsetof(tDot11fReAssocResponse, OBSSScanParameters),
13887 offsetof(tDot11fIEOBSSScanParameters, present), 0, "OBSSScanParameters",
13888 0, 16, 16, SigIeOBSSScanParameters, {0, 0, 0, 0, 0},
13889 0, DOT11F_EID_OBSSSCANPARAMETERS, 0, 0, },
13890 { offsetof(tDot11fReAssocResponse, ExtCap), offsetof(tDot11fIEExtCap,
13891 present), 0, "ExtCap", 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0},
13892 0, DOT11F_EID_EXTCAP, 0, 0, },
13893 { offsetof(tDot11fReAssocResponse, bss_max_idle_period),
13894 offsetof(tDot11fIEbss_max_idle_period, present), 0, "bss_max_idle_period",
13895 0, 5, 5, SigIebss_max_idle_period, {0, 0, 0, 0, 0},
13896 0, DOT11F_EID_BSS_MAX_IDLE_PERIOD, 0, 0, },
13897 { offsetof(tDot11fReAssocResponse, VHTCaps), offsetof(tDot11fIEVHTCaps,
13898 present), 0, "VHTCaps", 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0},
13899 0, DOT11F_EID_VHTCAPS, 0, 0, },
13900 { offsetof(tDot11fReAssocResponse, VHTOperation),
13901 offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation",
13902 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0},
13903 0, DOT11F_EID_VHTOPERATION, 0, 0, },
13904 { offsetof(tDot11fReAssocResponse, OperatingMode),
13905 offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode",
13906 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0},
13907 0, DOT11F_EID_OPERATINGMODE, 0, 0, },
13908 { offsetof(tDot11fReAssocResponse, he_cap), offsetof(tDot11fIEhe_cap,
13909 present), 0, "he_cap", 0, 23, 56, SigIehe_cap, {0, 0, 0, 0, 0},
13910 0, DOT11F_EID_HE_CAP, 35, 0, },
13911 { offsetof(tDot11fReAssocResponse, he_op), offsetof(tDot11fIEhe_op,
13912 present), 0, "he_op", 0, 8, 17, SigIehe_op, {0, 0, 0, 0, 0},
13913 0, DOT11F_EID_HE_OP, 36, 0, },
13914 { offsetof(tDot11fReAssocResponse, spatial_reuse),
13915 offsetof(tDot11fIEspatial_reuse, present), 0, "spatial_reuse",
13916 0, 3, 22, SigIespatial_reuse, {0, 0, 0, 0, 0},
13917 0, DOT11F_EID_SPATIAL_REUSE, 39, 0, },
13918 { offsetof(tDot11fReAssocResponse, bss_color_change),
13919 offsetof(tDot11fIEbss_color_change, present), 0, "bss_color_change",
13920 0, 4, 4, SigIebss_color_change, {0, 0, 0, 0, 0},
13921 0, DOT11F_EID_BSS_COLOR_CHANGE, 42, 0, },
13922 { offsetof(tDot11fReAssocResponse, mu_edca_param_set),
13923 offsetof(tDot11fIEmu_edca_param_set, present), 0, "mu_edca_param_set",
13924 0, 15, 15, SigIemu_edca_param_set, {0, 0, 0, 0, 0},
13925 0, DOT11F_EID_MU_EDCA_PARAM_SET, 38, 0, },
13926 { offsetof(tDot11fReAssocResponse, he_6ghz_band_cap),
13927 offsetof(tDot11fIEhe_6ghz_band_cap, present), 0, "he_6ghz_band_cap",
13928 0, 4, 4, SigIehe_6ghz_band_cap, {0, 0, 0, 0, 0},
13929 0, DOT11F_EID_HE_6GHZ_BAND_CAP, 59, 0, },
13930 { offsetof(tDot11fReAssocResponse, QosMapSet),
13931 offsetof(tDot11fIEQosMapSet, present), 0, "QosMapSet",
13932 0, 18, 60, SigIeQosMapSet, {0, 0, 0, 0, 0},
13933 0, DOT11F_EID_QOSMAPSET, 0, 0, },
13934 { offsetof(tDot11fReAssocResponse, ESETxmitPower),
13935 offsetof(tDot11fIEESETxmitPower, present), 0, "ESETxmitPower",
13936 0, 8, 8, SigIeESETxmitPower, {0, 64, 150, 0, 0},
13937 4, DOT11F_EID_ESETXMITPOWER, 0, 0, },
13938 { offsetof(tDot11fReAssocResponse, eht_cap), offsetof(tDot11fIEeht_cap,
13939 present), 0, "eht_cap", 0, 26, 88, SigIeeht_cap, {0, 0, 0, 0, 0},
13940 0, DOT11F_EID_EHT_CAP, 108, 0, },
13941 { offsetof(tDot11fReAssocResponse, eht_op), offsetof(tDot11fIEeht_op,
13942 present), 0, "eht_op", 0, 10, 12, SigIeeht_op, {0, 0, 0, 0, 0},
13943 0, DOT11F_EID_EHT_OP, 106, 0, },
13944 { offsetof(tDot11fReAssocResponse, mlo_ie), offsetof(tDot11fIEmlo_ie,
13945 present), 0, "mlo_ie", 0, 11, 257, SigIemlo_ie, {0, 0, 0, 0, 0},
13946 0, DOT11F_EID_MLO_IE, 107, 0, },
13947 { offsetof(tDot11fReAssocResponse, t2lm_ie), offsetof(tDot11fIEt2lm_ie,
13948 present), offsetof(tDot11fReAssocResponse, num_t2lm_ie), "t2lm_ie",
13949 2, 5, 257, SigIet2lm_ie, {0, 0, 0, 0, 0},
13950 0, DOT11F_EID_T2LM_IE, 109, 0, },
13951 { offsetof(tDot11fReAssocResponse, WPA), offsetof(tDot11fIEWPA, present),
13952 0, "WPA", 0, 8, 50, SigIeWPA, {0, 80, 242, 1, 0},
13953 4, DOT11F_EID_WPA, 0, 0, },
13954 { offsetof(tDot11fReAssocResponse, WMMParams),
13955 offsetof(tDot11fIEWMMParams, present), 0, "WMMParams",
13956 0, 26, 26, SigIeWMMParams, {0, 80, 242, 2, 1},
13957 5, DOT11F_EID_WMMPARAMS, 0, 0, },
13958 { offsetof(tDot11fReAssocResponse, ESERadMgmtCap),
13959 offsetof(tDot11fIEESERadMgmtCap, present), 0, "ESERadMgmtCap",
13960 0, 8, 8, SigIeESERadMgmtCap, {0, 64, 150, 1, 0},
13961 4, DOT11F_EID_ESERADMGMTCAP, 0, 0, },
13962 { offsetof(tDot11fReAssocResponse, ESETrafStrmMet),
13963 offsetof(tDot11fIEESETrafStrmMet, present), 0, "ESETrafStrmMet",
13964 0, 10, 10, SigIeESETrafStrmMet, {0, 64, 150, 7, 0},
13965 4, DOT11F_EID_ESETRAFSTRMMET, 0, 0, },
13966 { offsetof(tDot11fReAssocResponse, WMMTSPEC), offsetof(tDot11fIEWMMTSPEC,
13967 present), offsetof(tDot11fReAssocResponse, num_WMMTSPEC), "WMMTSPEC",
13968 4, 63, 63, SigIeWMMTSPEC, {0, 80, 242, 2, 2},
13969 5, DOT11F_EID_WMMTSPEC, 0, 0, },
13970 { offsetof(tDot11fReAssocResponse, ESETrafStrmRateSet),
13971 offsetof(tDot11fIEESETrafStrmRateSet, present), 0, "ESETrafStrmRateSet",
13972 0, 7, 15, SigIeESETrafStrmRateSet, {0, 64, 150, 8, 0},
13973 4, DOT11F_EID_ESETRAFSTRMRATESET, 0, 0, },
13974 { offsetof(tDot11fReAssocResponse, WscReassocRes),
13975 offsetof(tDot11fIEWscReassocRes, present), 0, "WscReassocRes",
13976 0, 6, 37, SigIeWscReassocRes, {0, 80, 242, 4, 0},
13977 4, DOT11F_EID_WSCREASSOCRES, 0, 0, },
13978 { offsetof(tDot11fReAssocResponse, P2PAssocRes),
13979 offsetof(tDot11fIEP2PAssocRes, present), 0, "P2PAssocRes",
13980 0, 6, 17, SigIeP2PAssocRes, {80, 111, 154, 9, 0},
13981 4, DOT11F_EID_P2PASSOCRES, 0, 0, },
13982 { offsetof(tDot11fReAssocResponse, vendor_vht_ie),
13983 offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie",
13984 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 4, 0},
13985 4, DOT11F_EID_VENDOR_VHT_IE, 0, 0, },
13986 { offsetof(tDot11fReAssocResponse, MBO_IE), offsetof(tDot11fIEMBO_IE,
13987 present), 0, "MBO_IE", 0, 6, 295, SigIeMBO_IE, {80, 111, 154, 22, 0},
13988 4, DOT11F_EID_MBO_IE, 0, 0, },
13989 { offsetof(tDot11fReAssocResponse, reduced_neighbor_report),
13990 offsetof(tDot11fIEreduced_neighbor_report, present), 0,
13991 "reduced_neighbor_report", 0, 7, 22, SigIereduced_neighbor_report,
13992 {0, 0, 0, 0, 0}, 0, DOT11F_EID_REDUCED_NEIGHBOR_REPORT, 0, 0, },
13993 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
13994
dot11f_unpack_re_assoc_response(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fReAssocResponse * pFrm,bool append_ie)13995 uint32_t dot11f_unpack_re_assoc_response(tpAniSirGlobal pCtx,
13996 uint8_t *pBuf, uint32_t nBuf,
13997 tDot11fReAssocResponse *pFrm, bool append_ie)
13998 {
13999 uint32_t i = 0;
14000 uint32_t status = 0;
14001 status = unpack_core(pCtx, pBuf, nBuf,
14002 FFS_ReAssocResponse, IES_ReAssocResponse,
14003 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
14004
14005 (void)i;
14006 return status;
14007
14008 } /* End dot11f_unpack_re_assoc_response. */
14009
14010 static const tFFDefn FFS_SMPowerSave[] = {
14011 { "Category", offsetof(tDot11fSMPowerSave, Category), SigFfCategory,
14012 DOT11F_FF_CATEGORY_LEN, },
14013 { "Action", offsetof(tDot11fSMPowerSave, Action), SigFfAction,
14014 DOT11F_FF_ACTION_LEN, },
14015 { "SMPowerModeSet", offsetof(tDot11fSMPowerSave, SMPowerModeSet),
14016 SigFfSMPowerModeSet, DOT11F_FF_SMPOWERMODESET_LEN, },
14017 { NULL, 0, 0, 0,},
14018 };
14019
14020 static const tIEDefn IES_SMPowerSave[] = {
14021 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
14022
dot11f_unpack_sm_power_save(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fSMPowerSave * pFrm,bool append_ie)14023 uint32_t dot11f_unpack_sm_power_save(tpAniSirGlobal pCtx,
14024 uint8_t *pBuf, uint32_t nBuf,
14025 tDot11fSMPowerSave *pFrm, bool append_ie)
14026 {
14027 uint32_t i = 0;
14028 uint32_t status = 0;
14029 status = unpack_core(pCtx, pBuf, nBuf,
14030 FFS_SMPowerSave, IES_SMPowerSave,
14031 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
14032
14033 (void)i;
14034 return status;
14035
14036 } /* End dot11f_unpack_sm_power_save. */
14037
14038 static const tFFDefn FFS_SaQueryReq[] = {
14039 { "Category", offsetof(tDot11fSaQueryReq, Category), SigFfCategory,
14040 DOT11F_FF_CATEGORY_LEN, },
14041 { "Action", offsetof(tDot11fSaQueryReq, Action), SigFfAction,
14042 DOT11F_FF_ACTION_LEN, },
14043 { "TransactionId", offsetof(tDot11fSaQueryReq, TransactionId),
14044 SigFfTransactionId, DOT11F_FF_TRANSACTIONID_LEN, },
14045 { NULL, 0, 0, 0,},
14046 };
14047
14048 static const tIEDefn IES_SaQueryReq[] = {
14049 { offsetof(tDot11fSaQueryReq, oci), offsetof(tDot11fIEoci, present), 0,
14050 "oci", 0, 5, 5, SigIeoci, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OCI, 54, 0, },
14051 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
14052
dot11f_unpack_sa_query_req(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fSaQueryReq * pFrm,bool append_ie)14053 uint32_t dot11f_unpack_sa_query_req(tpAniSirGlobal pCtx,
14054 uint8_t *pBuf, uint32_t nBuf,
14055 tDot11fSaQueryReq *pFrm, bool append_ie)
14056 {
14057 uint32_t i = 0;
14058 uint32_t status = 0;
14059 status = unpack_core(pCtx, pBuf, nBuf,
14060 FFS_SaQueryReq, IES_SaQueryReq,
14061 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
14062
14063 (void)i;
14064 return status;
14065
14066 } /* End dot11f_unpack_sa_query_req. */
14067
14068 static const tFFDefn FFS_SaQueryRsp[] = {
14069 { "Category", offsetof(tDot11fSaQueryRsp, Category), SigFfCategory,
14070 DOT11F_FF_CATEGORY_LEN, },
14071 { "Action", offsetof(tDot11fSaQueryRsp, Action), SigFfAction,
14072 DOT11F_FF_ACTION_LEN, },
14073 { "TransactionId", offsetof(tDot11fSaQueryRsp, TransactionId),
14074 SigFfTransactionId, DOT11F_FF_TRANSACTIONID_LEN, },
14075 { NULL, 0, 0, 0,},
14076 };
14077
14078 static const tIEDefn IES_SaQueryRsp[] = {
14079 { offsetof(tDot11fSaQueryRsp, oci), offsetof(tDot11fIEoci, present), 0,
14080 "oci", 0, 5, 5, SigIeoci, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OCI, 54, 0, },
14081 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
14082
dot11f_unpack_sa_query_rsp(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fSaQueryRsp * pFrm,bool append_ie)14083 uint32_t dot11f_unpack_sa_query_rsp(tpAniSirGlobal pCtx,
14084 uint8_t *pBuf, uint32_t nBuf,
14085 tDot11fSaQueryRsp *pFrm, bool append_ie)
14086 {
14087 uint32_t i = 0;
14088 uint32_t status = 0;
14089 status = unpack_core(pCtx, pBuf, nBuf,
14090 FFS_SaQueryRsp, IES_SaQueryRsp,
14091 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
14092
14093 (void)i;
14094 return status;
14095
14096 } /* End dot11f_unpack_sa_query_rsp. */
14097
14098 static const tFFDefn FFS_TDLSDisReq[] = {
14099 { "Category", offsetof(tDot11fTDLSDisReq, Category), SigFfCategory,
14100 DOT11F_FF_CATEGORY_LEN, },
14101 { "Action", offsetof(tDot11fTDLSDisReq, Action), SigFfAction,
14102 DOT11F_FF_ACTION_LEN, },
14103 { "DialogToken", offsetof(tDot11fTDLSDisReq, DialogToken),
14104 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
14105 { NULL, 0, 0, 0,},
14106 };
14107
14108 static const tIEDefn IES_TDLSDisReq[] = {
14109 { offsetof(tDot11fTDLSDisReq, LinkIdentifier),
14110 offsetof(tDot11fIELinkIdentifier, present), 0, "LinkIdentifier",
14111 0, 20, 20, SigIeLinkIdentifier, {0, 0, 0, 0, 0},
14112 0, DOT11F_EID_LINKIDENTIFIER, 0, 1, },
14113 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
14114
dot11f_unpack_tdls_dis_req(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fTDLSDisReq * pFrm,bool append_ie)14115 uint32_t dot11f_unpack_tdls_dis_req(tpAniSirGlobal pCtx,
14116 uint8_t *pBuf, uint32_t nBuf,
14117 tDot11fTDLSDisReq *pFrm, bool append_ie)
14118 {
14119 uint32_t i = 0;
14120 uint32_t status = 0;
14121 status = unpack_core(pCtx, pBuf, nBuf,
14122 FFS_TDLSDisReq, IES_TDLSDisReq,
14123 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
14124
14125 (void)i;
14126 return status;
14127
14128 } /* End dot11f_unpack_tdls_dis_req. */
14129
14130 static const tFFDefn FFS_TDLSDisRsp[] = {
14131 { "Category", offsetof(tDot11fTDLSDisRsp, Category), SigFfCategory,
14132 DOT11F_FF_CATEGORY_LEN, },
14133 { "Action", offsetof(tDot11fTDLSDisRsp, Action), SigFfAction,
14134 DOT11F_FF_ACTION_LEN, },
14135 { "DialogToken", offsetof(tDot11fTDLSDisRsp, DialogToken),
14136 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
14137 { "Capabilities", offsetof(tDot11fTDLSDisRsp, Capabilities),
14138 SigFfCapabilities, DOT11F_FF_CAPABILITIES_LEN, },
14139 { NULL, 0, 0, 0,},
14140 };
14141
14142 static const tIEDefn IES_TDLSDisRsp[] = {
14143 { offsetof(tDot11fTDLSDisRsp, SuppRates), offsetof(tDot11fIESuppRates,
14144 present), 0, "SuppRates", 0, 2, 14, SigIeSuppRates, {0, 0, 0, 0, 0},
14145 0, DOT11F_EID_SUPPRATES, 0, 1, },
14146 { offsetof(tDot11fTDLSDisRsp, ExtSuppRates),
14147 offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates",
14148 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0},
14149 0, DOT11F_EID_EXTSUPPRATES, 0, 0, },
14150 { offsetof(tDot11fTDLSDisRsp, SuppChannels),
14151 offsetof(tDot11fIESuppChannels, present), 0, "SuppChannels",
14152 0, 2, 98, SigIeSuppChannels, {0, 0, 0, 0, 0},
14153 0, DOT11F_EID_SUPPCHANNELS, 0, 0, },
14154 { offsetof(tDot11fTDLSDisRsp, SuppOperatingClasses),
14155 offsetof(tDot11fIESuppOperatingClasses, present), 0,
14156 "SuppOperatingClasses", 0, 3, 34, SigIeSuppOperatingClasses,
14157 {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPOPERATINGCLASSES, 0, 0, },
14158 { offsetof(tDot11fTDLSDisRsp, RSN), offsetof(tDot11fIERSN, present), 0,
14159 "RSN", 0, 4, 132, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, 0, },
14160 { offsetof(tDot11fTDLSDisRsp, ExtCap), offsetof(tDot11fIEExtCap, present),
14161 0, "ExtCap", 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0},
14162 0, DOT11F_EID_EXTCAP, 0, 0, },
14163 { offsetof(tDot11fTDLSDisRsp, FTInfo), offsetof(tDot11fIEFTInfo, present),
14164 0, "FTInfo", 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0},
14165 0, DOT11F_EID_FTINFO, 0, 0, },
14166 { offsetof(tDot11fTDLSDisRsp, TimeoutInterval),
14167 offsetof(tDot11fIETimeoutInterval, present), 0, "TimeoutInterval",
14168 0, 7, 7, SigIeTimeoutInterval, {0, 0, 0, 0, 0},
14169 0, DOT11F_EID_TIMEOUTINTERVAL, 0, 0, },
14170 { offsetof(tDot11fTDLSDisRsp, RICData), offsetof(tDot11fIERICData,
14171 present), 0, "RICData", 0, 6, 6, SigIeRICData, {0, 0, 0, 0, 0},
14172 0, DOT11F_EID_RICDATA, 0, 0, },
14173 { offsetof(tDot11fTDLSDisRsp, HTCaps), offsetof(tDot11fIEHTCaps, present),
14174 0, "HTCaps", 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0},
14175 0, DOT11F_EID_HTCAPS, 0, 0, },
14176 { offsetof(tDot11fTDLSDisRsp, ht2040_bss_coexistence),
14177 offsetof(tDot11fIEht2040_bss_coexistence, present), 0,
14178 "ht2040_bss_coexistence", 0, 3, 3, SigIeht2040_bss_coexistence,
14179 {0, 0, 0, 0, 0}, 0, DOT11F_EID_HT2040_BSS_COEXISTENCE, 0, 0, },
14180 { offsetof(tDot11fTDLSDisRsp, LinkIdentifier),
14181 offsetof(tDot11fIELinkIdentifier, present), 0, "LinkIdentifier",
14182 0, 20, 20, SigIeLinkIdentifier, {0, 0, 0, 0, 0},
14183 0, DOT11F_EID_LINKIDENTIFIER, 0, 1, },
14184 { offsetof(tDot11fTDLSDisRsp, VHTCaps), offsetof(tDot11fIEVHTCaps,
14185 present), 0, "VHTCaps", 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0},
14186 0, DOT11F_EID_VHTCAPS, 0, 0, },
14187 { offsetof(tDot11fTDLSDisRsp, he_cap), offsetof(tDot11fIEhe_cap, present),
14188 0, "he_cap", 0, 23, 56, SigIehe_cap, {0, 0, 0, 0, 0},
14189 0, DOT11F_EID_HE_CAP, 35, 0, },
14190 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
14191
dot11f_unpack_tdls_dis_rsp(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fTDLSDisRsp * pFrm,bool append_ie)14192 uint32_t dot11f_unpack_tdls_dis_rsp(tpAniSirGlobal pCtx,
14193 uint8_t *pBuf, uint32_t nBuf,
14194 tDot11fTDLSDisRsp *pFrm, bool append_ie)
14195 {
14196 uint32_t i = 0;
14197 uint32_t status = 0;
14198 status = unpack_core(pCtx, pBuf, nBuf,
14199 FFS_TDLSDisRsp, IES_TDLSDisRsp,
14200 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
14201
14202 (void)i;
14203 return status;
14204
14205 } /* End dot11f_unpack_tdls_dis_rsp. */
14206
14207 static const tFFDefn FFS_TDLSPeerTrafficInd[] = {
14208 { "Category", offsetof(tDot11fTDLSPeerTrafficInd, Category),
14209 SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
14210 { "Action", offsetof(tDot11fTDLSPeerTrafficInd, Action), SigFfAction,
14211 DOT11F_FF_ACTION_LEN, },
14212 { "DialogToken", offsetof(tDot11fTDLSPeerTrafficInd, DialogToken),
14213 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
14214 { NULL, 0, 0, 0,},
14215 };
14216
14217 static const tIEDefn IES_TDLSPeerTrafficInd[] = {
14218 { offsetof(tDot11fTDLSPeerTrafficInd, LinkIdentifier),
14219 offsetof(tDot11fIELinkIdentifier, present), 0, "LinkIdentifier",
14220 0, 20, 20, SigIeLinkIdentifier, {0, 0, 0, 0, 0},
14221 0, DOT11F_EID_LINKIDENTIFIER, 0, 1, },
14222 { offsetof(tDot11fTDLSPeerTrafficInd, PTIControl),
14223 offsetof(tDot11fIEPTIControl, present), 0, "PTIControl",
14224 0, 5, 5, SigIePTIControl, {0, 0, 0, 0, 0},
14225 0, DOT11F_EID_PTICONTROL, 0, 0, },
14226 { offsetof(tDot11fTDLSPeerTrafficInd, PUBufferStatus),
14227 offsetof(tDot11fIEPUBufferStatus, present), 0, "PUBufferStatus",
14228 0, 3, 3, SigIePUBufferStatus, {0, 0, 0, 0, 0},
14229 0, DOT11F_EID_PUBUFFERSTATUS, 0, 1, },
14230 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
14231
dot11f_unpack_tdls_peer_traffic_ind(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fTDLSPeerTrafficInd * pFrm,bool append_ie)14232 uint32_t dot11f_unpack_tdls_peer_traffic_ind(tpAniSirGlobal pCtx,
14233 uint8_t *pBuf, uint32_t nBuf,
14234 tDot11fTDLSPeerTrafficInd *pFrm, bool append_ie)
14235 {
14236 uint32_t i = 0;
14237 uint32_t status = 0;
14238 status = unpack_core(pCtx, pBuf, nBuf,
14239 FFS_TDLSPeerTrafficInd, IES_TDLSPeerTrafficInd,
14240 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
14241
14242 (void)i;
14243 return status;
14244
14245 } /* End dot11f_unpack_tdls_peer_traffic_ind. */
14246
14247 static const tFFDefn FFS_TDLSPeerTrafficRsp[] = {
14248 { "Category", offsetof(tDot11fTDLSPeerTrafficRsp, Category),
14249 SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
14250 { "Action", offsetof(tDot11fTDLSPeerTrafficRsp, Action), SigFfAction,
14251 DOT11F_FF_ACTION_LEN, },
14252 { "DialogToken", offsetof(tDot11fTDLSPeerTrafficRsp, DialogToken),
14253 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
14254 { NULL, 0, 0, 0,},
14255 };
14256
14257 static const tIEDefn IES_TDLSPeerTrafficRsp[] = {
14258 { offsetof(tDot11fTDLSPeerTrafficRsp, LinkIdentifier),
14259 offsetof(tDot11fIELinkIdentifier, present), 0, "LinkIdentifier",
14260 0, 20, 20, SigIeLinkIdentifier, {0, 0, 0, 0, 0},
14261 0, DOT11F_EID_LINKIDENTIFIER, 0, 1, },
14262 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
14263
dot11f_unpack_tdls_peer_traffic_rsp(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fTDLSPeerTrafficRsp * pFrm,bool append_ie)14264 uint32_t dot11f_unpack_tdls_peer_traffic_rsp(tpAniSirGlobal pCtx,
14265 uint8_t *pBuf, uint32_t nBuf,
14266 tDot11fTDLSPeerTrafficRsp *pFrm, bool append_ie)
14267 {
14268 uint32_t i = 0;
14269 uint32_t status = 0;
14270 status = unpack_core(pCtx, pBuf, nBuf,
14271 FFS_TDLSPeerTrafficRsp, IES_TDLSPeerTrafficRsp,
14272 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
14273
14274 (void)i;
14275 return status;
14276
14277 } /* End dot11f_unpack_tdls_peer_traffic_rsp. */
14278
14279 static const tFFDefn FFS_TDLSSetupCnf[] = {
14280 { "Category", offsetof(tDot11fTDLSSetupCnf, Category), SigFfCategory,
14281 DOT11F_FF_CATEGORY_LEN, },
14282 { "Action", offsetof(tDot11fTDLSSetupCnf, Action), SigFfAction,
14283 DOT11F_FF_ACTION_LEN, },
14284 { "Status", offsetof(tDot11fTDLSSetupCnf, Status), SigFfStatus,
14285 DOT11F_FF_STATUS_LEN, },
14286 { "DialogToken", offsetof(tDot11fTDLSSetupCnf, DialogToken),
14287 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
14288 { NULL, 0, 0, 0,},
14289 };
14290
14291 static const tIEDefn IES_TDLSSetupCnf[] = {
14292 { offsetof(tDot11fTDLSSetupCnf, RSN), offsetof(tDot11fIERSN, present), 0,
14293 "RSN", 0, 4, 132, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, 0, },
14294 { offsetof(tDot11fTDLSSetupCnf, EDCAParamSet),
14295 offsetof(tDot11fIEEDCAParamSet, present), 0, "EDCAParamSet",
14296 0, 20, 20, SigIeEDCAParamSet, {0, 0, 0, 0, 0},
14297 0, DOT11F_EID_EDCAPARAMSET, 0, 0, },
14298 { offsetof(tDot11fTDLSSetupCnf, FTInfo), offsetof(tDot11fIEFTInfo,
14299 present), 0, "FTInfo", 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0},
14300 0, DOT11F_EID_FTINFO, 0, 0, },
14301 { offsetof(tDot11fTDLSSetupCnf, TimeoutInterval),
14302 offsetof(tDot11fIETimeoutInterval, present), 0, "TimeoutInterval",
14303 0, 7, 7, SigIeTimeoutInterval, {0, 0, 0, 0, 0},
14304 0, DOT11F_EID_TIMEOUTINTERVAL, 0, 0, },
14305 { offsetof(tDot11fTDLSSetupCnf, HTInfo), offsetof(tDot11fIEHTInfo,
14306 present), 0, "HTInfo", 0, 24, 56, SigIeHTInfo, {0, 0, 0, 0, 0},
14307 0, DOT11F_EID_HTINFO, 0, 0, },
14308 { offsetof(tDot11fTDLSSetupCnf, LinkIdentifier),
14309 offsetof(tDot11fIELinkIdentifier, present), 0, "LinkIdentifier",
14310 0, 20, 20, SigIeLinkIdentifier, {0, 0, 0, 0, 0},
14311 0, DOT11F_EID_LINKIDENTIFIER, 0, 0, },
14312 { offsetof(tDot11fTDLSSetupCnf, WMMParams), offsetof(tDot11fIEWMMParams,
14313 present), 0, "WMMParams", 0, 26, 26, SigIeWMMParams, {0, 80, 242, 2, 1},
14314 5, DOT11F_EID_WMMPARAMS, 0, 0, },
14315 { offsetof(tDot11fTDLSSetupCnf, VHTOperation),
14316 offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation",
14317 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0},
14318 0, DOT11F_EID_VHTOPERATION, 0, 0, },
14319 { offsetof(tDot11fTDLSSetupCnf, OperatingMode),
14320 offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode",
14321 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0},
14322 0, DOT11F_EID_OPERATINGMODE, 0, 0, },
14323 { offsetof(tDot11fTDLSSetupCnf, he_op), offsetof(tDot11fIEhe_op, present),
14324 0, "he_op", 0, 8, 17, SigIehe_op, {0, 0, 0, 0, 0},
14325 0, DOT11F_EID_HE_OP, 36, 0, },
14326 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
14327
dot11f_unpack_tdls_setup_cnf(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fTDLSSetupCnf * pFrm,bool append_ie)14328 uint32_t dot11f_unpack_tdls_setup_cnf(tpAniSirGlobal pCtx,
14329 uint8_t *pBuf, uint32_t nBuf,
14330 tDot11fTDLSSetupCnf *pFrm, bool append_ie)
14331 {
14332 uint32_t i = 0;
14333 uint32_t status = 0;
14334 status = unpack_core(pCtx, pBuf, nBuf,
14335 FFS_TDLSSetupCnf, IES_TDLSSetupCnf,
14336 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
14337
14338 (void)i;
14339 return status;
14340
14341 } /* End dot11f_unpack_tdls_setup_cnf. */
14342
14343 static const tFFDefn FFS_TDLSSetupReq[] = {
14344 { "Category", offsetof(tDot11fTDLSSetupReq, Category), SigFfCategory,
14345 DOT11F_FF_CATEGORY_LEN, },
14346 { "Action", offsetof(tDot11fTDLSSetupReq, Action), SigFfAction,
14347 DOT11F_FF_ACTION_LEN, },
14348 { "DialogToken", offsetof(tDot11fTDLSSetupReq, DialogToken),
14349 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
14350 { "Capabilities", offsetof(tDot11fTDLSSetupReq, Capabilities),
14351 SigFfCapabilities, DOT11F_FF_CAPABILITIES_LEN, },
14352 { NULL, 0, 0, 0,},
14353 };
14354
14355 static const tIEDefn IES_TDLSSetupReq[] = {
14356 { offsetof(tDot11fTDLSSetupReq, SuppRates), offsetof(tDot11fIESuppRates,
14357 present), 0, "SuppRates", 0, 2, 14, SigIeSuppRates, {0, 0, 0, 0, 0},
14358 0, DOT11F_EID_SUPPRATES, 0, 1, },
14359 { offsetof(tDot11fTDLSSetupReq, Country), offsetof(tDot11fIECountry,
14360 present), 0, "Country", 0, 8, 248, SigIeCountry, {0, 0, 0, 0, 0},
14361 0, DOT11F_EID_COUNTRY, 0, 0, },
14362 { offsetof(tDot11fTDLSSetupReq, ExtSuppRates),
14363 offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates",
14364 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0},
14365 0, DOT11F_EID_EXTSUPPRATES, 0, 0, },
14366 { offsetof(tDot11fTDLSSetupReq, SuppChannels),
14367 offsetof(tDot11fIESuppChannels, present), 0, "SuppChannels",
14368 0, 2, 98, SigIeSuppChannels, {0, 0, 0, 0, 0},
14369 0, DOT11F_EID_SUPPCHANNELS, 0, 0, },
14370 { offsetof(tDot11fTDLSSetupReq, RSN), offsetof(tDot11fIERSN, present), 0,
14371 "RSN", 0, 4, 132, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, 0, },
14372 { offsetof(tDot11fTDLSSetupReq, ExtCap), offsetof(tDot11fIEExtCap,
14373 present), 0, "ExtCap", 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0},
14374 0, DOT11F_EID_EXTCAP, 0, 0, },
14375 { offsetof(tDot11fTDLSSetupReq, SuppOperatingClasses),
14376 offsetof(tDot11fIESuppOperatingClasses, present), 0,
14377 "SuppOperatingClasses", 0, 3, 34, SigIeSuppOperatingClasses,
14378 {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPOPERATINGCLASSES, 0, 0, },
14379 { offsetof(tDot11fTDLSSetupReq, QOSCapsStation),
14380 offsetof(tDot11fIEQOSCapsStation, present), 0, "QOSCapsStation",
14381 0, 3, 3, SigIeQOSCapsStation, {0, 0, 0, 0, 0},
14382 0, DOT11F_EID_QOSCAPSSTATION, 0, 0, },
14383 { offsetof(tDot11fTDLSSetupReq, FTInfo), offsetof(tDot11fIEFTInfo,
14384 present), 0, "FTInfo", 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0},
14385 0, DOT11F_EID_FTINFO, 0, 0, },
14386 { offsetof(tDot11fTDLSSetupReq, TimeoutInterval),
14387 offsetof(tDot11fIETimeoutInterval, present), 0, "TimeoutInterval",
14388 0, 7, 7, SigIeTimeoutInterval, {0, 0, 0, 0, 0},
14389 0, DOT11F_EID_TIMEOUTINTERVAL, 0, 0, },
14390 { offsetof(tDot11fTDLSSetupReq, RICData), offsetof(tDot11fIERICData,
14391 present), 0, "RICData", 0, 6, 6, SigIeRICData, {0, 0, 0, 0, 0},
14392 0, DOT11F_EID_RICDATA, 0, 0, },
14393 { offsetof(tDot11fTDLSSetupReq, HTCaps), offsetof(tDot11fIEHTCaps,
14394 present), 0, "HTCaps", 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0},
14395 0, DOT11F_EID_HTCAPS, 0, 0, },
14396 { offsetof(tDot11fTDLSSetupReq, ht2040_bss_coexistence),
14397 offsetof(tDot11fIEht2040_bss_coexistence, present), 0,
14398 "ht2040_bss_coexistence", 0, 3, 3, SigIeht2040_bss_coexistence,
14399 {0, 0, 0, 0, 0}, 0, DOT11F_EID_HT2040_BSS_COEXISTENCE, 0, 0, },
14400 { offsetof(tDot11fTDLSSetupReq, LinkIdentifier),
14401 offsetof(tDot11fIELinkIdentifier, present), 0, "LinkIdentifier",
14402 0, 20, 20, SigIeLinkIdentifier, {0, 0, 0, 0, 0},
14403 0, DOT11F_EID_LINKIDENTIFIER, 0, 1, },
14404 { offsetof(tDot11fTDLSSetupReq, WMMInfoStation),
14405 offsetof(tDot11fIEWMMInfoStation, present), 0, "WMMInfoStation",
14406 0, 9, 9, SigIeWMMInfoStation, {0, 80, 242, 2, 0},
14407 5, DOT11F_EID_WMMINFOSTATION, 0, 0, },
14408 { offsetof(tDot11fTDLSSetupReq, AID), offsetof(tDot11fIEAID, present), 0,
14409 "AID", 0, 4, 4, SigIeAID, {0, 0, 0, 0, 0}, 0, DOT11F_EID_AID, 0, 0, },
14410 { offsetof(tDot11fTDLSSetupReq, VHTCaps), offsetof(tDot11fIEVHTCaps,
14411 present), 0, "VHTCaps", 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0},
14412 0, DOT11F_EID_VHTCAPS, 0, 0, },
14413 { offsetof(tDot11fTDLSSetupReq, he_cap), offsetof(tDot11fIEhe_cap,
14414 present), 0, "he_cap", 0, 23, 56, SigIehe_cap, {0, 0, 0, 0, 0},
14415 0, DOT11F_EID_HE_CAP, 35, 0, },
14416 { offsetof(tDot11fTDLSSetupReq, he_6ghz_band_cap),
14417 offsetof(tDot11fIEhe_6ghz_band_cap, present), 0, "he_6ghz_band_cap",
14418 0, 4, 4, SigIehe_6ghz_band_cap, {0, 0, 0, 0, 0},
14419 0, DOT11F_EID_HE_6GHZ_BAND_CAP, 59, 0, },
14420 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
14421
dot11f_unpack_tdls_setup_req(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fTDLSSetupReq * pFrm,bool append_ie)14422 uint32_t dot11f_unpack_tdls_setup_req(tpAniSirGlobal pCtx,
14423 uint8_t *pBuf, uint32_t nBuf,
14424 tDot11fTDLSSetupReq *pFrm, bool append_ie)
14425 {
14426 uint32_t i = 0;
14427 uint32_t status = 0;
14428 status = unpack_core(pCtx, pBuf, nBuf,
14429 FFS_TDLSSetupReq, IES_TDLSSetupReq,
14430 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
14431
14432 (void)i;
14433 return status;
14434
14435 } /* End dot11f_unpack_tdls_setup_req. */
14436
14437 static const tFFDefn FFS_TDLSSetupRsp[] = {
14438 { "Category", offsetof(tDot11fTDLSSetupRsp, Category), SigFfCategory,
14439 DOT11F_FF_CATEGORY_LEN, },
14440 { "Action", offsetof(tDot11fTDLSSetupRsp, Action), SigFfAction,
14441 DOT11F_FF_ACTION_LEN, },
14442 { "Status", offsetof(tDot11fTDLSSetupRsp, Status), SigFfStatus,
14443 DOT11F_FF_STATUS_LEN, },
14444 { "DialogToken", offsetof(tDot11fTDLSSetupRsp, DialogToken),
14445 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
14446 { "Capabilities", offsetof(tDot11fTDLSSetupRsp, Capabilities),
14447 SigFfCapabilities, DOT11F_FF_CAPABILITIES_LEN, },
14448 { NULL, 0, 0, 0,},
14449 };
14450
14451 static const tIEDefn IES_TDLSSetupRsp[] = {
14452 { offsetof(tDot11fTDLSSetupRsp, SuppRates), offsetof(tDot11fIESuppRates,
14453 present), 0, "SuppRates", 0, 2, 14, SigIeSuppRates, {0, 0, 0, 0, 0},
14454 0, DOT11F_EID_SUPPRATES, 0, 0, },
14455 { offsetof(tDot11fTDLSSetupRsp, Country), offsetof(tDot11fIECountry,
14456 present), 0, "Country", 0, 8, 248, SigIeCountry, {0, 0, 0, 0, 0},
14457 0, DOT11F_EID_COUNTRY, 0, 0, },
14458 { offsetof(tDot11fTDLSSetupRsp, ExtSuppRates),
14459 offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates",
14460 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0},
14461 0, DOT11F_EID_EXTSUPPRATES, 0, 0, },
14462 { offsetof(tDot11fTDLSSetupRsp, SuppChannels),
14463 offsetof(tDot11fIESuppChannels, present), 0, "SuppChannels",
14464 0, 2, 98, SigIeSuppChannels, {0, 0, 0, 0, 0},
14465 0, DOT11F_EID_SUPPCHANNELS, 0, 0, },
14466 { offsetof(tDot11fTDLSSetupRsp, RSN), offsetof(tDot11fIERSN, present), 0,
14467 "RSN", 0, 4, 132, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, 0, },
14468 { offsetof(tDot11fTDLSSetupRsp, ExtCap), offsetof(tDot11fIEExtCap,
14469 present), 0, "ExtCap", 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0},
14470 0, DOT11F_EID_EXTCAP, 0, 0, },
14471 { offsetof(tDot11fTDLSSetupRsp, SuppOperatingClasses),
14472 offsetof(tDot11fIESuppOperatingClasses, present), 0,
14473 "SuppOperatingClasses", 0, 3, 34, SigIeSuppOperatingClasses,
14474 {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPOPERATINGCLASSES, 0, 0, },
14475 { offsetof(tDot11fTDLSSetupRsp, QOSCapsStation),
14476 offsetof(tDot11fIEQOSCapsStation, present), 0, "QOSCapsStation",
14477 0, 3, 3, SigIeQOSCapsStation, {0, 0, 0, 0, 0},
14478 0, DOT11F_EID_QOSCAPSSTATION, 0, 0, },
14479 { offsetof(tDot11fTDLSSetupRsp, FTInfo), offsetof(tDot11fIEFTInfo,
14480 present), 0, "FTInfo", 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0},
14481 0, DOT11F_EID_FTINFO, 0, 0, },
14482 { offsetof(tDot11fTDLSSetupRsp, TimeoutInterval),
14483 offsetof(tDot11fIETimeoutInterval, present), 0, "TimeoutInterval",
14484 0, 7, 7, SigIeTimeoutInterval, {0, 0, 0, 0, 0},
14485 0, DOT11F_EID_TIMEOUTINTERVAL, 0, 0, },
14486 { offsetof(tDot11fTDLSSetupRsp, RICData), offsetof(tDot11fIERICData,
14487 present), 0, "RICData", 0, 6, 6, SigIeRICData, {0, 0, 0, 0, 0},
14488 0, DOT11F_EID_RICDATA, 0, 0, },
14489 { offsetof(tDot11fTDLSSetupRsp, HTCaps), offsetof(tDot11fIEHTCaps,
14490 present), 0, "HTCaps", 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0},
14491 0, DOT11F_EID_HTCAPS, 0, 0, },
14492 { offsetof(tDot11fTDLSSetupRsp, ht2040_bss_coexistence),
14493 offsetof(tDot11fIEht2040_bss_coexistence, present), 0,
14494 "ht2040_bss_coexistence", 0, 3, 3, SigIeht2040_bss_coexistence,
14495 {0, 0, 0, 0, 0}, 0, DOT11F_EID_HT2040_BSS_COEXISTENCE, 0, 0, },
14496 { offsetof(tDot11fTDLSSetupRsp, LinkIdentifier),
14497 offsetof(tDot11fIELinkIdentifier, present), 0, "LinkIdentifier",
14498 0, 20, 20, SigIeLinkIdentifier, {0, 0, 0, 0, 0},
14499 0, DOT11F_EID_LINKIDENTIFIER, 0, 0, },
14500 { offsetof(tDot11fTDLSSetupRsp, WMMInfoStation),
14501 offsetof(tDot11fIEWMMInfoStation, present), 0, "WMMInfoStation",
14502 0, 9, 9, SigIeWMMInfoStation, {0, 80, 242, 2, 0},
14503 5, DOT11F_EID_WMMINFOSTATION, 0, 0, },
14504 { offsetof(tDot11fTDLSSetupRsp, AID), offsetof(tDot11fIEAID, present), 0,
14505 "AID", 0, 4, 4, SigIeAID, {0, 0, 0, 0, 0}, 0, DOT11F_EID_AID, 0, 0, },
14506 { offsetof(tDot11fTDLSSetupRsp, VHTCaps), offsetof(tDot11fIEVHTCaps,
14507 present), 0, "VHTCaps", 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0},
14508 0, DOT11F_EID_VHTCAPS, 0, 0, },
14509 { offsetof(tDot11fTDLSSetupRsp, OperatingMode),
14510 offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode",
14511 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0},
14512 0, DOT11F_EID_OPERATINGMODE, 0, 0, },
14513 { offsetof(tDot11fTDLSSetupRsp, he_cap), offsetof(tDot11fIEhe_cap,
14514 present), 0, "he_cap", 0, 23, 56, SigIehe_cap, {0, 0, 0, 0, 0},
14515 0, DOT11F_EID_HE_CAP, 35, 0, },
14516 { offsetof(tDot11fTDLSSetupRsp, he_6ghz_band_cap),
14517 offsetof(tDot11fIEhe_6ghz_band_cap, present), 0, "he_6ghz_band_cap",
14518 0, 4, 4, SigIehe_6ghz_band_cap, {0, 0, 0, 0, 0},
14519 0, DOT11F_EID_HE_6GHZ_BAND_CAP, 59, 0, },
14520 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
14521
dot11f_unpack_tdls_setup_rsp(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fTDLSSetupRsp * pFrm,bool append_ie)14522 uint32_t dot11f_unpack_tdls_setup_rsp(tpAniSirGlobal pCtx,
14523 uint8_t *pBuf, uint32_t nBuf,
14524 tDot11fTDLSSetupRsp *pFrm, bool append_ie)
14525 {
14526 uint32_t i = 0;
14527 uint32_t status = 0;
14528 status = unpack_core(pCtx, pBuf, nBuf,
14529 FFS_TDLSSetupRsp, IES_TDLSSetupRsp,
14530 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
14531
14532 (void)i;
14533 return status;
14534
14535 } /* End dot11f_unpack_tdls_setup_rsp. */
14536
14537 static const tFFDefn FFS_TDLSTeardown[] = {
14538 { "Category", offsetof(tDot11fTDLSTeardown, Category), SigFfCategory,
14539 DOT11F_FF_CATEGORY_LEN, },
14540 { "Action", offsetof(tDot11fTDLSTeardown, Action), SigFfAction,
14541 DOT11F_FF_ACTION_LEN, },
14542 { "Reason", offsetof(tDot11fTDLSTeardown, Reason), SigFfReason,
14543 DOT11F_FF_REASON_LEN, },
14544 { NULL, 0, 0, 0,},
14545 };
14546
14547 static const tIEDefn IES_TDLSTeardown[] = {
14548 { offsetof(tDot11fTDLSTeardown, FTInfo), offsetof(tDot11fIEFTInfo,
14549 present), 0, "FTInfo", 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0},
14550 0, DOT11F_EID_FTINFO, 0, 0, },
14551 { offsetof(tDot11fTDLSTeardown, LinkIdentifier),
14552 offsetof(tDot11fIELinkIdentifier, present), 0, "LinkIdentifier",
14553 0, 20, 20, SigIeLinkIdentifier, {0, 0, 0, 0, 0},
14554 0, DOT11F_EID_LINKIDENTIFIER, 0, 1, },
14555 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
14556
dot11f_unpack_tdls_teardown(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fTDLSTeardown * pFrm,bool append_ie)14557 uint32_t dot11f_unpack_tdls_teardown(tpAniSirGlobal pCtx,
14558 uint8_t *pBuf, uint32_t nBuf,
14559 tDot11fTDLSTeardown *pFrm, bool append_ie)
14560 {
14561 uint32_t i = 0;
14562 uint32_t status = 0;
14563 status = unpack_core(pCtx, pBuf, nBuf,
14564 FFS_TDLSTeardown, IES_TDLSTeardown,
14565 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
14566
14567 (void)i;
14568 return status;
14569
14570 } /* End dot11f_unpack_tdls_teardown. */
14571
14572 static const tFFDefn FFS_TPCReport[] = {
14573 { "Category", offsetof(tDot11fTPCReport, Category), SigFfCategory,
14574 DOT11F_FF_CATEGORY_LEN, },
14575 { "Action", offsetof(tDot11fTPCReport, Action), SigFfAction,
14576 DOT11F_FF_ACTION_LEN, },
14577 { "DialogToken", offsetof(tDot11fTPCReport, DialogToken),
14578 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
14579 { NULL, 0, 0, 0,},
14580 };
14581
14582 static const tIEDefn IES_TPCReport[] = {
14583 { offsetof(tDot11fTPCReport, TPCReport), offsetof(tDot11fIETPCReport,
14584 present), 0, "TPCReport", 0, 4, 4, SigIeTPCReport, {0, 0, 0, 0, 0},
14585 0, DOT11F_EID_TPCREPORT, 0, 1, },
14586 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
14587
dot11f_unpack_tpc_report(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fTPCReport * pFrm,bool append_ie)14588 uint32_t dot11f_unpack_tpc_report(tpAniSirGlobal pCtx,
14589 uint8_t *pBuf, uint32_t nBuf,
14590 tDot11fTPCReport *pFrm, bool append_ie)
14591 {
14592 uint32_t i = 0;
14593 uint32_t status = 0;
14594 status = unpack_core(pCtx, pBuf, nBuf,
14595 FFS_TPCReport, IES_TPCReport,
14596 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
14597
14598 (void)i;
14599 return status;
14600
14601 } /* End dot11f_unpack_tpc_report. */
14602
14603 static const tFFDefn FFS_TPCRequest[] = {
14604 { "Category", offsetof(tDot11fTPCRequest, Category), SigFfCategory,
14605 DOT11F_FF_CATEGORY_LEN, },
14606 { "Action", offsetof(tDot11fTPCRequest, Action), SigFfAction,
14607 DOT11F_FF_ACTION_LEN, },
14608 { "DialogToken", offsetof(tDot11fTPCRequest, DialogToken),
14609 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
14610 { NULL, 0, 0, 0,},
14611 };
14612
14613 static const tIEDefn IES_TPCRequest[] = {
14614 { offsetof(tDot11fTPCRequest, TPCRequest), offsetof(tDot11fIETPCRequest,
14615 present), 0, "TPCRequest", 0, 2, 2, SigIeTPCRequest, {0, 0, 0, 0, 0},
14616 0, DOT11F_EID_TPCREQUEST, 0, 1, },
14617 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
14618
dot11f_unpack_tpc_request(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fTPCRequest * pFrm,bool append_ie)14619 uint32_t dot11f_unpack_tpc_request(tpAniSirGlobal pCtx,
14620 uint8_t *pBuf, uint32_t nBuf,
14621 tDot11fTPCRequest *pFrm, bool append_ie)
14622 {
14623 uint32_t i = 0;
14624 uint32_t status = 0;
14625 status = unpack_core(pCtx, pBuf, nBuf,
14626 FFS_TPCRequest, IES_TPCRequest,
14627 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
14628
14629 (void)i;
14630 return status;
14631
14632 } /* End dot11f_unpack_tpc_request. */
14633
14634 static const tFFDefn FFS_TimingAdvertisementFrame[] = {
14635 { "TimeStamp", offsetof(tDot11fTimingAdvertisementFrame, TimeStamp),
14636 SigFfTimeStamp, DOT11F_FF_TIMESTAMP_LEN, },
14637 { "Capabilities", offsetof(tDot11fTimingAdvertisementFrame,
14638 Capabilities), SigFfCapabilities, DOT11F_FF_CAPABILITIES_LEN, },
14639 { NULL, 0, 0, 0,},
14640 };
14641
14642 static const tIEDefn IES_TimingAdvertisementFrame[] = {
14643 { offsetof(tDot11fTimingAdvertisementFrame, Country),
14644 offsetof(tDot11fIECountry, present), 0, "Country", 0, 8, 248, SigIeCountry,
14645 {0, 0, 0, 0, 0}, 0, DOT11F_EID_COUNTRY, 0, 0, },
14646 { offsetof(tDot11fTimingAdvertisementFrame, PowerConstraints),
14647 offsetof(tDot11fIEPowerConstraints, present), 0, "PowerConstraints",
14648 0, 3, 3, SigIePowerConstraints, {0, 0, 0, 0, 0},
14649 0, DOT11F_EID_POWERCONSTRAINTS, 0, 0, },
14650 { offsetof(tDot11fTimingAdvertisementFrame, TimeAdvertisement),
14651 offsetof(tDot11fIETimeAdvertisement, present), 0, "TimeAdvertisement",
14652 0, 18, 18, SigIeTimeAdvertisement, {0, 0, 0, 0, 0},
14653 0, DOT11F_EID_TIMEADVERTISEMENT, 0, 0, },
14654 { offsetof(tDot11fTimingAdvertisementFrame, ExtCap),
14655 offsetof(tDot11fIEExtCap, present), 0, "ExtCap", 0, 3, 17, SigIeExtCap,
14656 {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, 0, },
14657 { offsetof(tDot11fTimingAdvertisementFrame, Vendor1IE),
14658 offsetof(tDot11fIEVendor1IE, present), 0, "Vendor1IE",
14659 0, 5, 5, SigIeVendor1IE, {0, 16, 24, 0, 0},
14660 3, DOT11F_EID_VENDOR1IE, 0, 0, },
14661 { offsetof(tDot11fTimingAdvertisementFrame, Vendor3IE),
14662 offsetof(tDot11fIEVendor3IE, present), 0, "Vendor3IE",
14663 0, 5, 5, SigIeVendor3IE, {0, 22, 50, 0, 0},
14664 3, DOT11F_EID_VENDOR3IE, 0, 0, },
14665 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
14666
dot11f_unpack_timing_advertisement_frame(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fTimingAdvertisementFrame * pFrm,bool append_ie)14667 uint32_t dot11f_unpack_timing_advertisement_frame(tpAniSirGlobal pCtx,
14668 uint8_t *pBuf, uint32_t nBuf,
14669 tDot11fTimingAdvertisementFrame *pFrm, bool append_ie)
14670 {
14671 uint32_t i = 0;
14672 uint32_t status = 0;
14673 status = unpack_core(pCtx, pBuf, nBuf,
14674 FFS_TimingAdvertisementFrame, IES_TimingAdvertisementFrame,
14675 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
14676
14677 (void)i;
14678 return status;
14679
14680 } /* End dot11f_unpack_timing_advertisement_frame. */
14681
14682 static const tFFDefn FFS_VHTGidManagementActionFrame[] = {
14683 { "Category", offsetof(tDot11fVHTGidManagementActionFrame, Category),
14684 SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
14685 { "Action", offsetof(tDot11fVHTGidManagementActionFrame, Action),
14686 SigFfAction, DOT11F_FF_ACTION_LEN, },
14687 { "VhtMembershipStatusArray",
14688 offsetof(tDot11fVHTGidManagementActionFrame, VhtMembershipStatusArray),
14689 SigFfVhtMembershipStatusArray,
14690 DOT11F_FF_VHTMEMBERSHIPSTATUSARRAY_LEN, },
14691 { "VhtUserPositionArray", offsetof(tDot11fVHTGidManagementActionFrame,
14692 VhtUserPositionArray), SigFfVhtUserPositionArray,
14693 DOT11F_FF_VHTUSERPOSITIONARRAY_LEN, },
14694 { NULL, 0, 0, 0,},
14695 };
14696
14697 static const tIEDefn IES_VHTGidManagementActionFrame[] = {
14698 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
14699
dot11f_unpack_vht_gid_management_action_frame(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fVHTGidManagementActionFrame * pFrm,bool append_ie)14700 uint32_t dot11f_unpack_vht_gid_management_action_frame(tpAniSirGlobal pCtx,
14701 uint8_t *pBuf, uint32_t nBuf,
14702 tDot11fVHTGidManagementActionFrame *pFrm, bool append_ie)
14703 {
14704 uint32_t i = 0;
14705 uint32_t status = 0;
14706 status = unpack_core(pCtx, pBuf, nBuf,
14707 FFS_VHTGidManagementActionFrame, IES_VHTGidManagementActionFrame,
14708 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
14709
14710 (void)i;
14711 return status;
14712
14713 } /* End dot11f_unpack_vht_gid_management_action_frame. */
14714
14715 static const tFFDefn FFS_WMMAddTSRequest[] = {
14716 { "Category", offsetof(tDot11fWMMAddTSRequest, Category), SigFfCategory,
14717 DOT11F_FF_CATEGORY_LEN, },
14718 { "Action", offsetof(tDot11fWMMAddTSRequest, Action), SigFfAction,
14719 DOT11F_FF_ACTION_LEN, },
14720 { "DialogToken", offsetof(tDot11fWMMAddTSRequest, DialogToken),
14721 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
14722 { "StatusCode", offsetof(tDot11fWMMAddTSRequest, StatusCode),
14723 SigFfStatusCode, DOT11F_FF_STATUSCODE_LEN, },
14724 { NULL, 0, 0, 0,},
14725 };
14726
14727 static const tIEDefn IES_WMMAddTSRequest[] = {
14728 { offsetof(tDot11fWMMAddTSRequest, WMMTSPEC), offsetof(tDot11fIEWMMTSPEC,
14729 present), 0, "WMMTSPEC", 0, 63, 63, SigIeWMMTSPEC, {0, 80, 242, 2, 2},
14730 5, DOT11F_EID_WMMTSPEC, 0, 1, },
14731 { offsetof(tDot11fWMMAddTSRequest, ESETrafStrmRateSet),
14732 offsetof(tDot11fIEESETrafStrmRateSet, present), 0, "ESETrafStrmRateSet",
14733 0, 7, 15, SigIeESETrafStrmRateSet, {0, 64, 150, 8, 0},
14734 4, DOT11F_EID_ESETRAFSTRMRATESET, 0, 0, },
14735 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
14736
dot11f_unpack_wmm_add_ts_request(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fWMMAddTSRequest * pFrm,bool append_ie)14737 uint32_t dot11f_unpack_wmm_add_ts_request(tpAniSirGlobal pCtx,
14738 uint8_t *pBuf, uint32_t nBuf,
14739 tDot11fWMMAddTSRequest *pFrm, bool append_ie)
14740 {
14741 uint32_t i = 0;
14742 uint32_t status = 0;
14743 status = unpack_core(pCtx, pBuf, nBuf,
14744 FFS_WMMAddTSRequest, IES_WMMAddTSRequest,
14745 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
14746
14747 (void)i;
14748 return status;
14749
14750 } /* End dot11f_unpack_wmm_add_ts_request. */
14751
14752 static const tFFDefn FFS_WMMAddTSResponse[] = {
14753 { "Category", offsetof(tDot11fWMMAddTSResponse, Category), SigFfCategory,
14754 DOT11F_FF_CATEGORY_LEN, },
14755 { "Action", offsetof(tDot11fWMMAddTSResponse, Action), SigFfAction,
14756 DOT11F_FF_ACTION_LEN, },
14757 { "DialogToken", offsetof(tDot11fWMMAddTSResponse, DialogToken),
14758 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
14759 { "StatusCode", offsetof(tDot11fWMMAddTSResponse, StatusCode),
14760 SigFfStatusCode, DOT11F_FF_STATUSCODE_LEN, },
14761 { NULL, 0, 0, 0,},
14762 };
14763
14764 static const tIEDefn IES_WMMAddTSResponse[] = {
14765 { offsetof(tDot11fWMMAddTSResponse, WMMTSPEC),
14766 offsetof(tDot11fIEWMMTSPEC, present), 0, "WMMTSPEC",
14767 0, 63, 63, SigIeWMMTSPEC, {0, 80, 242, 2, 2},
14768 5, DOT11F_EID_WMMTSPEC, 0, 0, },
14769 { offsetof(tDot11fWMMAddTSResponse, ESETrafStrmMet),
14770 offsetof(tDot11fIEESETrafStrmMet, present), 0, "ESETrafStrmMet",
14771 0, 10, 10, SigIeESETrafStrmMet, {0, 64, 150, 7, 0},
14772 4, DOT11F_EID_ESETRAFSTRMMET, 0, 0, },
14773 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
14774
dot11f_unpack_wmm_add_ts_response(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fWMMAddTSResponse * pFrm,bool append_ie)14775 uint32_t dot11f_unpack_wmm_add_ts_response(tpAniSirGlobal pCtx,
14776 uint8_t *pBuf, uint32_t nBuf,
14777 tDot11fWMMAddTSResponse *pFrm, bool append_ie)
14778 {
14779 uint32_t i = 0;
14780 uint32_t status = 0;
14781 status = unpack_core(pCtx, pBuf, nBuf,
14782 FFS_WMMAddTSResponse, IES_WMMAddTSResponse,
14783 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
14784
14785 (void)i;
14786 return status;
14787
14788 } /* End dot11f_unpack_wmm_add_ts_response. */
14789
14790 static const tFFDefn FFS_WMMDelTS[] = {
14791 { "Category", offsetof(tDot11fWMMDelTS, Category), SigFfCategory,
14792 DOT11F_FF_CATEGORY_LEN, },
14793 { "Action", offsetof(tDot11fWMMDelTS, Action), SigFfAction,
14794 DOT11F_FF_ACTION_LEN, },
14795 { "DialogToken", offsetof(tDot11fWMMDelTS, DialogToken), SigFfDialogToken,
14796 DOT11F_FF_DIALOGTOKEN_LEN, },
14797 { "StatusCode", offsetof(tDot11fWMMDelTS, StatusCode), SigFfStatusCode,
14798 DOT11F_FF_STATUSCODE_LEN, },
14799 { NULL, 0, 0, 0,},
14800 };
14801
14802 static const tIEDefn IES_WMMDelTS[] = {
14803 { offsetof(tDot11fWMMDelTS, WMMTSPEC), offsetof(tDot11fIEWMMTSPEC,
14804 present), 0, "WMMTSPEC", 0, 63, 63, SigIeWMMTSPEC, {0, 80, 242, 2, 2},
14805 5, DOT11F_EID_WMMTSPEC, 0, 1, },
14806 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
14807
dot11f_unpack_wmm_del_ts(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fWMMDelTS * pFrm,bool append_ie)14808 uint32_t dot11f_unpack_wmm_del_ts(tpAniSirGlobal pCtx,
14809 uint8_t *pBuf, uint32_t nBuf,
14810 tDot11fWMMDelTS *pFrm, bool append_ie)
14811 {
14812 uint32_t i = 0;
14813 uint32_t status = 0;
14814 status = unpack_core(pCtx, pBuf, nBuf,
14815 FFS_WMMDelTS, IES_WMMDelTS,
14816 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
14817
14818 (void)i;
14819 return status;
14820
14821 } /* End dot11f_unpack_wmm_del_ts. */
14822
14823 static const tFFDefn FFS_addba_req[] = {
14824 { "Category", offsetof(tDot11faddba_req, Category), SigFfCategory,
14825 DOT11F_FF_CATEGORY_LEN, },
14826 { "Action", offsetof(tDot11faddba_req, Action), SigFfAction,
14827 DOT11F_FF_ACTION_LEN, },
14828 { "DialogToken", offsetof(tDot11faddba_req, DialogToken),
14829 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
14830 { "addba_param_set", offsetof(tDot11faddba_req, addba_param_set),
14831 SigFfaddba_param_set, DOT11F_FF_ADDBA_PARAM_SET_LEN, },
14832 { "ba_timeout", offsetof(tDot11faddba_req, ba_timeout), SigFfba_timeout,
14833 DOT11F_FF_BA_TIMEOUT_LEN, },
14834 { "ba_start_seq_ctrl", offsetof(tDot11faddba_req, ba_start_seq_ctrl),
14835 SigFfba_start_seq_ctrl, DOT11F_FF_BA_START_SEQ_CTRL_LEN, },
14836 { NULL, 0, 0, 0,},
14837 };
14838
14839 static const tIEDefn IES_addba_req[] = {
14840 { offsetof(tDot11faddba_req, addba_extn_element),
14841 offsetof(tDot11fIEaddba_extn_element, present), 0, "addba_extn_element",
14842 0, 3, 3, SigIeaddba_extn_element, {0, 0, 0, 0, 0},
14843 0, DOT11F_EID_ADDBA_EXTN_ELEMENT, 0, 0, },
14844 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
14845
dot11f_unpack_addba_req(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11faddba_req * pFrm,bool append_ie)14846 uint32_t dot11f_unpack_addba_req(tpAniSirGlobal pCtx,
14847 uint8_t *pBuf, uint32_t nBuf,
14848 tDot11faddba_req *pFrm, bool append_ie)
14849 {
14850 uint32_t i = 0;
14851 uint32_t status = 0;
14852 status = unpack_core(pCtx, pBuf, nBuf,
14853 FFS_addba_req, IES_addba_req,
14854 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
14855
14856 (void)i;
14857 return status;
14858
14859 } /* End dot11f_unpack_addba_req. */
14860
14861 static const tFFDefn FFS_addba_rsp[] = {
14862 { "Category", offsetof(tDot11faddba_rsp, Category), SigFfCategory,
14863 DOT11F_FF_CATEGORY_LEN, },
14864 { "Action", offsetof(tDot11faddba_rsp, Action), SigFfAction,
14865 DOT11F_FF_ACTION_LEN, },
14866 { "DialogToken", offsetof(tDot11faddba_rsp, DialogToken),
14867 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
14868 { "Status", offsetof(tDot11faddba_rsp, Status), SigFfStatus,
14869 DOT11F_FF_STATUS_LEN, },
14870 { "addba_param_set", offsetof(tDot11faddba_rsp, addba_param_set),
14871 SigFfaddba_param_set, DOT11F_FF_ADDBA_PARAM_SET_LEN, },
14872 { "ba_timeout", offsetof(tDot11faddba_rsp, ba_timeout), SigFfba_timeout,
14873 DOT11F_FF_BA_TIMEOUT_LEN, },
14874 { NULL, 0, 0, 0,},
14875 };
14876
14877 static const tIEDefn IES_addba_rsp[] = {
14878 { offsetof(tDot11faddba_rsp, addba_extn_element),
14879 offsetof(tDot11fIEaddba_extn_element, present), 0, "addba_extn_element",
14880 0, 3, 3, SigIeaddba_extn_element, {0, 0, 0, 0, 0},
14881 0, DOT11F_EID_ADDBA_EXTN_ELEMENT, 0, 0, },
14882 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
14883
dot11f_unpack_addba_rsp(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11faddba_rsp * pFrm,bool append_ie)14884 uint32_t dot11f_unpack_addba_rsp(tpAniSirGlobal pCtx,
14885 uint8_t *pBuf, uint32_t nBuf,
14886 tDot11faddba_rsp *pFrm, bool append_ie)
14887 {
14888 uint32_t i = 0;
14889 uint32_t status = 0;
14890 status = unpack_core(pCtx, pBuf, nBuf,
14891 FFS_addba_rsp, IES_addba_rsp,
14892 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
14893
14894 (void)i;
14895 return status;
14896
14897 } /* End dot11f_unpack_addba_rsp. */
14898
14899 static const tFFDefn FFS_delba_req[] = {
14900 { "Category", offsetof(tDot11fdelba_req, Category), SigFfCategory,
14901 DOT11F_FF_CATEGORY_LEN, },
14902 { "Action", offsetof(tDot11fdelba_req, Action), SigFfAction,
14903 DOT11F_FF_ACTION_LEN, },
14904 { "delba_param_set", offsetof(tDot11fdelba_req, delba_param_set),
14905 SigFfdelba_param_set, DOT11F_FF_DELBA_PARAM_SET_LEN, },
14906 { "Reason", offsetof(tDot11fdelba_req, Reason), SigFfReason,
14907 DOT11F_FF_REASON_LEN, },
14908 { NULL, 0, 0, 0,},
14909 };
14910
14911 static const tIEDefn IES_delba_req[] = {
14912 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
14913
dot11f_unpack_delba_req(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fdelba_req * pFrm,bool append_ie)14914 uint32_t dot11f_unpack_delba_req(tpAniSirGlobal pCtx,
14915 uint8_t *pBuf, uint32_t nBuf,
14916 tDot11fdelba_req *pFrm, bool append_ie)
14917 {
14918 uint32_t i = 0;
14919 uint32_t status = 0;
14920 status = unpack_core(pCtx, pBuf, nBuf,
14921 FFS_delba_req, IES_delba_req,
14922 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
14923
14924 (void)i;
14925 return status;
14926
14927 } /* End dot11f_unpack_delba_req. */
14928
14929 static const tFFDefn FFS_epcs_neg_req[] = {
14930 { "Category", offsetof(tDot11fepcs_neg_req, Category), SigFfCategory,
14931 DOT11F_FF_CATEGORY_LEN, },
14932 { "Action", offsetof(tDot11fepcs_neg_req, Action), SigFfAction,
14933 DOT11F_FF_ACTION_LEN, },
14934 { "DialogToken", offsetof(tDot11fepcs_neg_req, DialogToken),
14935 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
14936 { NULL, 0, 0, 0,},
14937 };
14938
14939 static const tIEDefn IES_epcs_neg_req[] = {
14940 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
14941
dot11f_unpack_epcs_neg_req(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fepcs_neg_req * pFrm,bool append_ie)14942 uint32_t dot11f_unpack_epcs_neg_req(tpAniSirGlobal pCtx,
14943 uint8_t *pBuf, uint32_t nBuf,
14944 tDot11fepcs_neg_req *pFrm, bool append_ie)
14945 {
14946 uint32_t i = 0;
14947 uint32_t status = 0;
14948 status = unpack_core(pCtx, pBuf, nBuf,
14949 FFS_epcs_neg_req, IES_epcs_neg_req,
14950 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
14951
14952 (void)i;
14953 return status;
14954
14955 } /* End dot11f_unpack_epcs_neg_req. */
14956
14957 static const tFFDefn FFS_epcs_neg_rsp[] = {
14958 { "Category", offsetof(tDot11fepcs_neg_rsp, Category), SigFfCategory,
14959 DOT11F_FF_CATEGORY_LEN, },
14960 { "Action", offsetof(tDot11fepcs_neg_rsp, Action), SigFfAction,
14961 DOT11F_FF_ACTION_LEN, },
14962 { "DialogToken", offsetof(tDot11fepcs_neg_rsp, DialogToken),
14963 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
14964 { "Status", offsetof(tDot11fepcs_neg_rsp, Status), SigFfStatus,
14965 DOT11F_FF_STATUS_LEN, },
14966 { NULL, 0, 0, 0,},
14967 };
14968
14969 static const tIEDefn IES_epcs_neg_rsp[] = {
14970 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
14971
dot11f_unpack_epcs_neg_rsp(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fepcs_neg_rsp * pFrm,bool append_ie)14972 uint32_t dot11f_unpack_epcs_neg_rsp(tpAniSirGlobal pCtx,
14973 uint8_t *pBuf, uint32_t nBuf,
14974 tDot11fepcs_neg_rsp *pFrm, bool append_ie)
14975 {
14976 uint32_t i = 0;
14977 uint32_t status = 0;
14978 status = unpack_core(pCtx, pBuf, nBuf,
14979 FFS_epcs_neg_rsp, IES_epcs_neg_rsp,
14980 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
14981
14982 (void)i;
14983 return status;
14984
14985 } /* End dot11f_unpack_epcs_neg_rsp. */
14986
14987 static const tFFDefn FFS_epcs_teardown[] = {
14988 { "Category", offsetof(tDot11fepcs_teardown, Category), SigFfCategory,
14989 DOT11F_FF_CATEGORY_LEN, },
14990 { "Action", offsetof(tDot11fepcs_teardown, Action), SigFfAction,
14991 DOT11F_FF_ACTION_LEN, },
14992 { NULL, 0, 0, 0,},
14993 };
14994
14995 static const tIEDefn IES_epcs_teardown[] = {
14996 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
14997
dot11f_unpack_epcs_teardown(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fepcs_teardown * pFrm,bool append_ie)14998 uint32_t dot11f_unpack_epcs_teardown(tpAniSirGlobal pCtx,
14999 uint8_t *pBuf, uint32_t nBuf,
15000 tDot11fepcs_teardown *pFrm, bool append_ie)
15001 {
15002 uint32_t i = 0;
15003 uint32_t status = 0;
15004 status = unpack_core(pCtx, pBuf, nBuf,
15005 FFS_epcs_teardown, IES_epcs_teardown,
15006 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
15007
15008 (void)i;
15009 return status;
15010
15011 } /* End dot11f_unpack_epcs_teardown. */
15012
15013 static const tFFDefn FFS_ext_channel_switch_action_frame[] = {
15014 { "Category", offsetof(tDot11fext_channel_switch_action_frame, Category),
15015 SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
15016 { "Action", offsetof(tDot11fext_channel_switch_action_frame, Action),
15017 SigFfAction, DOT11F_FF_ACTION_LEN, },
15018 { "ext_chan_switch_ann_action",
15019 offsetof(tDot11fext_channel_switch_action_frame,
15020 ext_chan_switch_ann_action), SigFfext_chan_switch_ann_action,
15021 DOT11F_FF_EXT_CHAN_SWITCH_ANN_ACTION_LEN, },
15022 { NULL, 0, 0, 0,},
15023 };
15024
15025 static const tIEDefn IES_ext_channel_switch_action_frame[] = {
15026 { offsetof(tDot11fext_channel_switch_action_frame,
15027 WiderBWChanSwitchAnn), offsetof(tDot11fIEWiderBWChanSwitchAnn, present),
15028 0, "WiderBWChanSwitchAnn", 0, 5, 5, SigIeWiderBWChanSwitchAnn,
15029 {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, 0, },
15030 { offsetof(tDot11fext_channel_switch_action_frame, qcn_ie),
15031 offsetof(tDot11fIEqcn_ie, present), 0, "qcn_ie", 0, 6, 55, SigIeqcn_ie,
15032 {140, 253, 240, 1, 0}, 4, DOT11F_EID_QCN_IE, 0, 0, },
15033 { offsetof(tDot11fext_channel_switch_action_frame, bw_ind_element),
15034 offsetof(tDot11fIEbw_ind_element, present), 0, "bw_ind_element",
15035 0, 6, 8, SigIebw_ind_element, {0, 0, 0, 0, 0},
15036 0, DOT11F_EID_BW_IND_ELEMENT, 135, 0, },
15037 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
15038
dot11f_unpack_ext_channel_switch_action_frame(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fext_channel_switch_action_frame * pFrm,bool append_ie)15039 uint32_t dot11f_unpack_ext_channel_switch_action_frame(tpAniSirGlobal pCtx,
15040 uint8_t *pBuf, uint32_t nBuf,
15041 tDot11fext_channel_switch_action_frame *pFrm, bool append_ie)
15042 {
15043 uint32_t i = 0;
15044 uint32_t status = 0;
15045 status = unpack_core(pCtx, pBuf, nBuf,
15046 FFS_ext_channel_switch_action_frame, IES_ext_channel_switch_action_frame,
15047 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
15048
15049 (void)i;
15050 return status;
15051
15052 } /* End dot11f_unpack_ext_channel_switch_action_frame. */
15053
15054 static const tFFDefn FFS_ht2040_bss_coexistence_mgmt_action_frame[] = {
15055 { "Category", offsetof(tDot11fht2040_bss_coexistence_mgmt_action_frame,
15056 Category), SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
15057 { "Action", offsetof(tDot11fht2040_bss_coexistence_mgmt_action_frame,
15058 Action), SigFfAction, DOT11F_FF_ACTION_LEN, },
15059 { NULL, 0, 0, 0,},
15060 };
15061
15062 static const tIEDefn IES_ht2040_bss_coexistence_mgmt_action_frame[] = {
15063 { offsetof(tDot11fht2040_bss_coexistence_mgmt_action_frame,
15064 ht2040_bss_coexistence), offsetof(tDot11fIEht2040_bss_coexistence,
15065 present), 0, "ht2040_bss_coexistence",
15066 0, 3, 3, SigIeht2040_bss_coexistence, {0, 0, 0, 0, 0},
15067 0, DOT11F_EID_HT2040_BSS_COEXISTENCE, 0, 1, },
15068 { offsetof(tDot11fht2040_bss_coexistence_mgmt_action_frame,
15069 ht2040_bss_intolerant_report),
15070 offsetof(tDot11fIEht2040_bss_intolerant_report, present), 0,
15071 "ht2040_bss_intolerant_report",
15072 0, 3, 53, SigIeht2040_bss_intolerant_report, {0, 0, 0, 0, 0},
15073 0, DOT11F_EID_HT2040_BSS_INTOLERANT_REPORT, 0, 1, },
15074 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
15075
dot11f_unpack_ht2040_bss_coexistence_mgmt_action_frame(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fht2040_bss_coexistence_mgmt_action_frame * pFrm,bool append_ie)15076 uint32_t dot11f_unpack_ht2040_bss_coexistence_mgmt_action_frame(tpAniSirGlobal pCtx,
15077 uint8_t *pBuf, uint32_t nBuf,
15078 tDot11fht2040_bss_coexistence_mgmt_action_frame *pFrm, bool append_ie)
15079 {
15080 uint32_t i = 0;
15081 uint32_t status = 0;
15082 status = unpack_core(pCtx, pBuf, nBuf,
15083 FFS_ht2040_bss_coexistence_mgmt_action_frame, IES_ht2040_bss_coexistence_mgmt_action_frame,
15084 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
15085
15086 (void)i;
15087 return status;
15088
15089 } /* End dot11f_unpack_ht2040_bss_coexistence_mgmt_action_frame. */
15090
15091 static const tFFDefn FFS_mscs_request_action_frame[] = {
15092 { "Category", offsetof(tDot11fmscs_request_action_frame, Category),
15093 SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
15094 { "Action", offsetof(tDot11fmscs_request_action_frame, Action),
15095 SigFfAction, DOT11F_FF_ACTION_LEN, },
15096 { "DialogToken", offsetof(tDot11fmscs_request_action_frame, DialogToken),
15097 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
15098 { NULL, 0, 0, 0,},
15099 };
15100
15101 static const tIEDefn IES_mscs_request_action_frame[] = {
15102 { offsetof(tDot11fmscs_request_action_frame, descriptor_element),
15103 offsetof(tDot11fIEdescriptor_element, present), 0, "descriptor_element",
15104 0, 9, 32, SigIedescriptor_element, {0, 0, 0, 0, 0},
15105 0, DOT11F_EID_DESCRIPTOR_ELEMENT, 88, 1, },
15106 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
15107
dot11f_unpack_mscs_request_action_frame(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fmscs_request_action_frame * pFrm,bool append_ie)15108 uint32_t dot11f_unpack_mscs_request_action_frame(tpAniSirGlobal pCtx,
15109 uint8_t *pBuf, uint32_t nBuf,
15110 tDot11fmscs_request_action_frame *pFrm, bool append_ie)
15111 {
15112 uint32_t i = 0;
15113 uint32_t status = 0;
15114 status = unpack_core(pCtx, pBuf, nBuf,
15115 FFS_mscs_request_action_frame, IES_mscs_request_action_frame,
15116 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
15117
15118 (void)i;
15119 return status;
15120
15121 } /* End dot11f_unpack_mscs_request_action_frame. */
15122
15123 static const tFFDefn FFS_p2p_oper_chan_change_confirm[] = {
15124 { "Category", offsetof(tDot11fp2p_oper_chan_change_confirm, Category),
15125 SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
15126 { "p2p_action_oui", offsetof(tDot11fp2p_oper_chan_change_confirm,
15127 p2p_action_oui), SigFfp2p_action_oui, DOT11F_FF_P2P_ACTION_OUI_LEN, },
15128 { "p2p_action_subtype", offsetof(tDot11fp2p_oper_chan_change_confirm,
15129 p2p_action_subtype), SigFfp2p_action_subtype,
15130 DOT11F_FF_P2P_ACTION_SUBTYPE_LEN, },
15131 { "DialogToken", offsetof(tDot11fp2p_oper_chan_change_confirm,
15132 DialogToken), SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
15133 { NULL, 0, 0, 0,},
15134 };
15135
15136 static const tIEDefn IES_p2p_oper_chan_change_confirm[] = {
15137 { offsetof(tDot11fp2p_oper_chan_change_confirm, HTCaps),
15138 offsetof(tDot11fIEHTCaps, present), 0, "HTCaps", 0, 28, 60, SigIeHTCaps,
15139 {0, 0, 0, 0, 0}, 0, DOT11F_EID_HTCAPS, 0, 0, },
15140 { offsetof(tDot11fp2p_oper_chan_change_confirm, VHTCaps),
15141 offsetof(tDot11fIEVHTCaps, present), 0, "VHTCaps", 0, 14, 14, SigIeVHTCaps,
15142 {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTCAPS, 0, 0, },
15143 { offsetof(tDot11fp2p_oper_chan_change_confirm, OperatingMode),
15144 offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode",
15145 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0},
15146 0, DOT11F_EID_OPERATINGMODE, 0, 0, },
15147 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
15148
dot11f_unpack_p2p_oper_chan_change_confirm(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fp2p_oper_chan_change_confirm * pFrm,bool append_ie)15149 uint32_t dot11f_unpack_p2p_oper_chan_change_confirm(tpAniSirGlobal pCtx,
15150 uint8_t *pBuf, uint32_t nBuf,
15151 tDot11fp2p_oper_chan_change_confirm *pFrm, bool append_ie)
15152 {
15153 uint32_t i = 0;
15154 uint32_t status = 0;
15155 status = unpack_core(pCtx, pBuf, nBuf,
15156 FFS_p2p_oper_chan_change_confirm, IES_p2p_oper_chan_change_confirm,
15157 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
15158
15159 (void)i;
15160 return status;
15161
15162 } /* End dot11f_unpack_p2p_oper_chan_change_confirm. */
15163
15164 static const tFFDefn FFS_t2lm_neg_req[] = {
15165 { "Category", offsetof(tDot11ft2lm_neg_req, Category), SigFfCategory,
15166 DOT11F_FF_CATEGORY_LEN, },
15167 { "Action", offsetof(tDot11ft2lm_neg_req, Action), SigFfAction,
15168 DOT11F_FF_ACTION_LEN, },
15169 { "DialogToken", offsetof(tDot11ft2lm_neg_req, DialogToken),
15170 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
15171 { NULL, 0, 0, 0,},
15172 };
15173
15174 static const tIEDefn IES_t2lm_neg_req[] = {
15175 { offsetof(tDot11ft2lm_neg_req, t2lm_ie), offsetof(tDot11fIEt2lm_ie,
15176 present), offsetof(tDot11ft2lm_neg_req, num_t2lm_ie), "t2lm_ie",
15177 2, 5, 257, SigIet2lm_ie, {0, 0, 0, 0, 0},
15178 0, DOT11F_EID_T2LM_IE, 109, 0, },
15179 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
15180
dot11f_unpack_t2lm_neg_req(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11ft2lm_neg_req * pFrm,bool append_ie)15181 uint32_t dot11f_unpack_t2lm_neg_req(tpAniSirGlobal pCtx,
15182 uint8_t *pBuf, uint32_t nBuf,
15183 tDot11ft2lm_neg_req *pFrm, bool append_ie)
15184 {
15185 uint32_t i = 0;
15186 uint32_t status = 0;
15187 status = unpack_core(pCtx, pBuf, nBuf,
15188 FFS_t2lm_neg_req, IES_t2lm_neg_req,
15189 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
15190
15191 (void)i;
15192 return status;
15193
15194 } /* End dot11f_unpack_t2lm_neg_req. */
15195
15196 static const tFFDefn FFS_t2lm_neg_rsp[] = {
15197 { "Category", offsetof(tDot11ft2lm_neg_rsp, Category), SigFfCategory,
15198 DOT11F_FF_CATEGORY_LEN, },
15199 { "Action", offsetof(tDot11ft2lm_neg_rsp, Action), SigFfAction,
15200 DOT11F_FF_ACTION_LEN, },
15201 { "DialogToken", offsetof(tDot11ft2lm_neg_rsp, DialogToken),
15202 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
15203 { "Status", offsetof(tDot11ft2lm_neg_rsp, Status), SigFfStatus,
15204 DOT11F_FF_STATUS_LEN, },
15205 { NULL, 0, 0, 0,},
15206 };
15207
15208 static const tIEDefn IES_t2lm_neg_rsp[] = {
15209 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
15210
dot11f_unpack_t2lm_neg_rsp(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11ft2lm_neg_rsp * pFrm,bool append_ie)15211 uint32_t dot11f_unpack_t2lm_neg_rsp(tpAniSirGlobal pCtx,
15212 uint8_t *pBuf, uint32_t nBuf,
15213 tDot11ft2lm_neg_rsp *pFrm, bool append_ie)
15214 {
15215 uint32_t i = 0;
15216 uint32_t status = 0;
15217 status = unpack_core(pCtx, pBuf, nBuf,
15218 FFS_t2lm_neg_rsp, IES_t2lm_neg_rsp,
15219 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
15220
15221 (void)i;
15222 return status;
15223
15224 } /* End dot11f_unpack_t2lm_neg_rsp. */
15225
15226 static const tFFDefn FFS_t2lm_teardown[] = {
15227 { "Category", offsetof(tDot11ft2lm_teardown, Category), SigFfCategory,
15228 DOT11F_FF_CATEGORY_LEN, },
15229 { "Action", offsetof(tDot11ft2lm_teardown, Action), SigFfAction,
15230 DOT11F_FF_ACTION_LEN, },
15231 { NULL, 0, 0, 0,},
15232 };
15233
15234 static const tIEDefn IES_t2lm_teardown[] = {
15235 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
15236
dot11f_unpack_t2lm_teardown(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11ft2lm_teardown * pFrm,bool append_ie)15237 uint32_t dot11f_unpack_t2lm_teardown(tpAniSirGlobal pCtx,
15238 uint8_t *pBuf, uint32_t nBuf,
15239 tDot11ft2lm_teardown *pFrm, bool append_ie)
15240 {
15241 uint32_t i = 0;
15242 uint32_t status = 0;
15243 status = unpack_core(pCtx, pBuf, nBuf,
15244 FFS_t2lm_teardown, IES_t2lm_teardown,
15245 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
15246
15247 (void)i;
15248 return status;
15249
15250 } /* End dot11f_unpack_t2lm_teardown. */
15251
15252 static const tFFDefn FFS_vendor_action_frame[] = {
15253 { "Category", offsetof(tDot11fvendor_action_frame, Category),
15254 SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
15255 { "vendor_oui", offsetof(tDot11fvendor_action_frame, vendor_oui),
15256 SigFfvendor_oui, DOT11F_FF_VENDOR_OUI_LEN, },
15257 { "vendor_action_subtype", offsetof(tDot11fvendor_action_frame,
15258 vendor_action_subtype), SigFfvendor_action_subtype,
15259 DOT11F_FF_VENDOR_ACTION_SUBTYPE_LEN, },
15260 { NULL, 0, 0, 0,},
15261 };
15262
15263 static const tIEDefn IES_vendor_action_frame[] = {
15264 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
15265
dot11f_unpack_vendor_action_frame(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,tDot11fvendor_action_frame * pFrm,bool append_ie)15266 uint32_t dot11f_unpack_vendor_action_frame(tpAniSirGlobal pCtx,
15267 uint8_t *pBuf, uint32_t nBuf,
15268 tDot11fvendor_action_frame *pFrm, bool append_ie)
15269 {
15270 uint32_t i = 0;
15271 uint32_t status = 0;
15272 status = unpack_core(pCtx, pBuf, nBuf,
15273 FFS_vendor_action_frame, IES_vendor_action_frame,
15274 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
15275
15276 (void)i;
15277 return status;
15278
15279 } /* End dot11f_unpack_vendor_action_frame. */
15280
15281 /**
15282 * Note: If @append_ie is set TRUE, pFrm will not be reset to zero,
15283 * but parsed IE's would be populated to pFrm with already
15284 * populated IE's in pFrm
15285 */
unpack_core(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,const tFFDefn FFs[],const tIEDefn IEs[],uint8_t * pFrm,size_t nFrm,bool append_ie)15286 static uint32_t unpack_core(tpAniSirGlobal pCtx,
15287 uint8_t *pBuf,
15288 uint32_t nBuf,
15289 const tFFDefn FFs[],
15290 const tIEDefn IEs[],
15291 uint8_t *pFrm,
15292 size_t nFrm,
15293 bool append_ie)
15294 {
15295 const tFFDefn *pFf;
15296 const tIEDefn *pIe;
15297 uint8_t *pBufRemaining;
15298 uint32_t nBufRemaining, status;
15299 uint8_t eid, len, extn_eid;
15300 tFRAMES_BOOL *pfFound;
15301 uint32_t countOffset = 0;
15302
15303 DOT11F_PARAMETER_CHECK(pBuf, nBuf, pFrm, nFrm);
15304 (void)nFrm;
15305
15306 (void)pCtx;
15307 status = DOT11F_PARSE_SUCCESS;
15308 pBufRemaining = pBuf;
15309 nBufRemaining = nBuf;
15310
15311 pIe = &IEs[0];
15312 while (!append_ie && (0xff != pIe->eid || pIe->extn_eid)) {
15313 pfFound = (tFRAMES_BOOL *)(pFrm + pIe->offset +
15314 pIe->presenceOffset);
15315 *pfFound = 0U;
15316 if (pIe->countOffset)
15317 *(uint16_t *)(pFrm + pIe->countOffset) = 0U;
15318 ++pIe;
15319 }
15320
15321 pFf = &FFs[0];
15322 while (!append_ie && pFf->size) {
15323 if (pFf->size > nBufRemaining) {
15324 FRAMES_LOG3(pCtx, FRLOGE, FRFL("Fixed field %s is %d"
15325 "bytes in size, but there are only %d bytes left i"
15326 "n this frame.\n"), pFf->name, pFf->size,
15327 nBufRemaining);
15328 FRAMES_DBG_BREAK();
15329 return DOT11F_MISSING_FIXED_FIELD;
15330 }
15331
15332 switch (pFf->sig) {
15333
15334 case SigFfAID:
15335 dot11f_unpack_ff_common_func(pCtx,
15336 pBufRemaining, (uint16_t *)&(((tDot11fFfAID *)
15337 (pFrm + pFf->offset))->associd));
15338 break;
15339 case SigFfAction:
15340 dot11f_unpack_ff_action(pCtx,
15341 pBufRemaining, (tDot11fFfAction *)
15342 (pFrm + pFf->offset));
15343 break;
15344 case SigFfAuthAlgo:
15345 dot11f_unpack_ff_common_func(pCtx,
15346 pBufRemaining, (uint16_t *)&(((tDot11fFfAuthAlgo *)
15347 (pFrm + pFf->offset))->algo));
15348 break;
15349 case SigFfAuthSeqNo:
15350 dot11f_unpack_ff_common_func(pCtx,
15351 pBufRemaining, (uint16_t *)&(((tDot11fFfAuthSeqNo *)
15352 (pFrm + pFf->offset))->no));
15353 break;
15354 case SigFfBeaconInterval:
15355 dot11f_unpack_ff_common_func(pCtx,
15356 pBufRemaining, (uint16_t *)&(((tDot11fFfBeaconInterval *)
15357 (pFrm + pFf->offset))->interval));
15358 break;
15359 case SigFfCapabilities:
15360 dot11f_unpack_ff_capabilities(pCtx,
15361 pBufRemaining, (tDot11fFfCapabilities *)
15362 (pFrm + pFf->offset));
15363 break;
15364 case SigFfCategory:
15365 dot11f_unpack_ff_category(pCtx,
15366 pBufRemaining, (tDot11fFfCategory *)
15367 (pFrm + pFf->offset));
15368 break;
15369 case SigFfCurrentAPAddress:
15370 dot11f_unpack_ff_current_ap_address(pCtx,
15371 pBufRemaining, (tDot11fFfCurrentAPAddress *)
15372 (pFrm + pFf->offset));
15373 break;
15374 case SigFfDialogToken:
15375 dot11f_unpack_ff_dialog_token(pCtx,
15376 pBufRemaining, (tDot11fFfDialogToken *)
15377 (pFrm + pFf->offset));
15378 break;
15379 case SigFfLinkMargin:
15380 dot11f_unpack_ff_link_margin(pCtx,
15381 pBufRemaining, (tDot11fFfLinkMargin *)
15382 (pFrm + pFf->offset));
15383 break;
15384 case SigFfListenInterval:
15385 dot11f_unpack_ff_common_func(pCtx,
15386 pBufRemaining, (uint16_t *)&(((tDot11fFfListenInterval *)
15387 (pFrm + pFf->offset))->interval));
15388 break;
15389 case SigFfMaxTxPower:
15390 dot11f_unpack_ff_max_tx_power(pCtx,
15391 pBufRemaining, (tDot11fFfMaxTxPower *)
15392 (pFrm + pFf->offset));
15393 break;
15394 case SigFfNumOfRepetitions:
15395 dot11f_unpack_ff_num_of_repetitions(pCtx,
15396 pBufRemaining, (tDot11fFfNumOfRepetitions *)
15397 (pFrm + pFf->offset));
15398 break;
15399 case SigFfOperatingMode:
15400 dot11f_unpack_ff_operating_mode(pCtx,
15401 pBufRemaining, (tDot11fFfOperatingMode *)
15402 (pFrm + pFf->offset));
15403 break;
15404 case SigFfRCPI:
15405 dot11f_unpack_ff_rcpi(pCtx,
15406 pBufRemaining, (tDot11fFfRCPI *)
15407 (pFrm + pFf->offset));
15408 break;
15409 case SigFfRSNI:
15410 dot11f_unpack_ff_rsni(pCtx,
15411 pBufRemaining, (tDot11fFfRSNI *)
15412 (pFrm + pFf->offset));
15413 break;
15414 case SigFfReason:
15415 dot11f_unpack_ff_common_func(pCtx,
15416 pBufRemaining, (uint16_t *)&(((tDot11fFfReason *)
15417 (pFrm + pFf->offset))->code));
15418 break;
15419 case SigFfRxAntennaId:
15420 dot11f_unpack_ff_rx_antenna_id(pCtx,
15421 pBufRemaining, (tDot11fFfRxAntennaId *)
15422 (pFrm + pFf->offset));
15423 break;
15424 case SigFfSMPowerModeSet:
15425 dot11f_unpack_ff_sm_power_mode_set(pCtx,
15426 pBufRemaining, (tDot11fFfSMPowerModeSet *)
15427 (pFrm + pFf->offset));
15428 break;
15429 case SigFfStatus:
15430 dot11f_unpack_ff_common_func(pCtx,
15431 pBufRemaining, (uint16_t *)&(((tDot11fFfStatus *)
15432 (pFrm + pFf->offset))->status));
15433 break;
15434 case SigFfStatusCode:
15435 dot11f_unpack_ff_status_code(pCtx,
15436 pBufRemaining, (tDot11fFfStatusCode *)
15437 (pFrm + pFf->offset));
15438 break;
15439 case SigFfTPCEleID:
15440 dot11f_unpack_ff_tpc_ele_id(pCtx,
15441 pBufRemaining, (tDot11fFfTPCEleID *)
15442 (pFrm + pFf->offset));
15443 break;
15444 case SigFfTPCEleLen:
15445 dot11f_unpack_ff_tpc_ele_len(pCtx,
15446 pBufRemaining, (tDot11fFfTPCEleLen *)
15447 (pFrm + pFf->offset));
15448 break;
15449 case SigFfTSInfo:
15450 dot11f_unpack_ff_ts_info(pCtx,
15451 pBufRemaining, (tDot11fFfTSInfo *)
15452 (pFrm + pFf->offset));
15453 break;
15454 case SigFfTimeStamp:
15455 dot11f_unpack_ff_time_stamp(pCtx,
15456 pBufRemaining, (tDot11fFfTimeStamp *)
15457 (pFrm + pFf->offset));
15458 break;
15459 case SigFfTransactionId:
15460 dot11f_unpack_ff_transaction_id(pCtx,
15461 pBufRemaining, (tDot11fFfTransactionId *)
15462 (pFrm + pFf->offset));
15463 break;
15464 case SigFfTxAntennaId:
15465 dot11f_unpack_ff_tx_antenna_id(pCtx,
15466 pBufRemaining, (tDot11fFfTxAntennaId *)
15467 (pFrm + pFf->offset));
15468 break;
15469 case SigFfTxPower:
15470 dot11f_unpack_ff_tx_power(pCtx,
15471 pBufRemaining, (tDot11fFfTxPower *)
15472 (pFrm + pFf->offset));
15473 break;
15474 case SigFfVhtMembershipStatusArray:
15475 dot11f_unpack_ff_vht_membership_status_array(pCtx,
15476 pBufRemaining, (tDot11fFfVhtMembershipStatusArray *)
15477 (pFrm + pFf->offset));
15478 break;
15479 case SigFfVhtUserPositionArray:
15480 dot11f_unpack_ff_vht_user_position_array(pCtx,
15481 pBufRemaining, (tDot11fFfVhtUserPositionArray *)
15482 (pFrm + pFf->offset));
15483 break;
15484 case SigFfaddba_param_set:
15485 dot11f_unpack_ff_addba_param_set(pCtx,
15486 pBufRemaining, (tDot11fFfaddba_param_set *)
15487 (pFrm + pFf->offset));
15488 break;
15489 case SigFfba_start_seq_ctrl:
15490 dot11f_unpack_ff_ba_start_seq_ctrl(pCtx,
15491 pBufRemaining, (tDot11fFfba_start_seq_ctrl *)
15492 (pFrm + pFf->offset));
15493 break;
15494 case SigFfba_timeout:
15495 dot11f_unpack_ff_ba_timeout(pCtx,
15496 pBufRemaining, (tDot11fFfba_timeout *)
15497 (pFrm + pFf->offset));
15498 break;
15499 case SigFfdelba_param_set:
15500 dot11f_unpack_ff_delba_param_set(pCtx,
15501 pBufRemaining, (tDot11fFfdelba_param_set *)
15502 (pFrm + pFf->offset));
15503 break;
15504 case SigFfext_chan_switch_ann_action:
15505 dot11f_unpack_ff_ext_chan_switch_ann_action(pCtx,
15506 pBufRemaining, (tDot11fFfext_chan_switch_ann_action *)
15507 (pFrm + pFf->offset));
15508 break;
15509 case SigFfp2p_action_oui:
15510 dot11f_unpack_ff_p2p_action_oui(pCtx,
15511 pBufRemaining, (tDot11fFfp2p_action_oui *)
15512 (pFrm + pFf->offset));
15513 break;
15514 case SigFfp2p_action_subtype:
15515 dot11f_unpack_ff_p2p_action_subtype(pCtx,
15516 pBufRemaining, (tDot11fFfp2p_action_subtype *)
15517 (pFrm + pFf->offset));
15518 break;
15519 case SigFfvendor_action_subtype:
15520 dot11f_unpack_ff_vendor_action_subtype(pCtx,
15521 pBufRemaining, (tDot11fFfvendor_action_subtype *)
15522 (pFrm + pFf->offset));
15523 break;
15524 case SigFfvendor_oui:
15525 dot11f_unpack_ff_vendor_oui(pCtx,
15526 pBufRemaining, (tDot11fFfvendor_oui *)
15527 (pFrm + pFf->offset));
15528 break;
15529 default:
15530 FRAMES_LOG1(pCtx, FRLOGE, FRFL("INTERNAL ERROR: I don'"
15531 "t know about the FF signature %d-- this is most "
15532 "likely a 'framesc' bug.\n"), pFf->sig);
15533 return DOT11F_INTERNAL_ERROR;
15534 }
15535
15536 pBufRemaining += pFf->size;
15537 nBufRemaining -= pFf->size;
15538 ++pFf;
15539 }
15540
15541 while (nBufRemaining) {
15542 if (1 == nBufRemaining) {
15543 FRAMES_LOG0(pCtx, FRLOGE, FRFL("This frame reports "
15544 "only one byte remaining after it's fixed fields.\n"));
15545 status |= DOT11F_INCOMPLETE_IE;
15546 FRAMES_DBG_BREAK();
15547 goto MandatoryCheck;
15548 }
15549
15550 pIe = find_ie_defn(pCtx, pBufRemaining, nBufRemaining, IEs);
15551
15552 eid = *pBufRemaining++; --nBufRemaining;
15553 len = *pBufRemaining++; --nBufRemaining;
15554 if (pIe && pIe->extn_eid) {
15555 extn_eid = *pBufRemaining++; --nBufRemaining;
15556 len--;
15557 }
15558
15559 if (pIe && pIe->noui) {
15560 if (pIe->noui > nBufRemaining) {
15561 FRAMES_LOG4(pCtx, FRLOGW, FRFL("IE %d extn id %d reports "
15562 "length %d, but it has an OUI of %d bytes.\n"),
15563 eid, extn_eid, len, pIe->noui);
15564 FRAMES_DUMP(pCtx, FRLOG1, pBuf, nBuf);
15565 FRAMES_LOG2(pCtx, FRLOG1, FRFL("We've parsed %d by"
15566 "tes of this buffer, and show %d left.\n"),
15567 pBufRemaining - pBuf, nBufRemaining);
15568 status |= DOT11F_INCOMPLETE_IE;
15569 FRAMES_DBG_BREAK();
15570 goto MandatoryCheck;
15571 }
15572 pBufRemaining += pIe->noui;
15573 nBufRemaining -= pIe->noui;
15574 len -= pIe->noui;
15575 }
15576
15577 if (len > nBufRemaining) {
15578 FRAMES_LOG4(pCtx, FRLOGW, FRFL("IE %d extn id %d reports length %"
15579 "d, but there are only %d bytes remaining in this"
15580 " frame.\n"), eid, extn_eid, len, nBufRemaining);
15581 FRAMES_DUMP(pCtx, FRLOG1, pBuf, nBuf);
15582 FRAMES_LOG2(pCtx, FRLOG1, FRFL("We've parsed %d by"
15583 "tes of this buffer, and show %d left.\n"),
15584 pBufRemaining - pBuf, nBufRemaining);
15585 status |= DOT11F_INCOMPLETE_IE;
15586 FRAMES_DBG_BREAK();
15587 goto MandatoryCheck;
15588 }
15589
15590 if (pIe) {
15591 if ((nBufRemaining < pIe->minSize - pIe->noui - 2U)) {
15592 FRAMES_LOG3(pCtx, FRLOGW, FRFL("The IE %s must "
15593 "be at least %d bytes in size, but "
15594 "there are only %d bytes remaining in "
15595 "this frame\n"),
15596 pIe->name, pIe->minSize, nBufRemaining);
15597 FRAMES_DUMP(pCtx, FRLOG1, pBuf, nBuf);
15598 status |= DOT11F_INCOMPLETE_IE;
15599 FRAMES_DBG_BREAK();
15600 goto MandatoryCheck;
15601 } else {
15602 if (len < pIe->minSize - pIe->noui - 2U) {
15603 FRAMES_LOG3(pCtx, FRLOGW, FRFL("The IE %s must "
15604 "be at least %d bytes in size, but "
15605 "there are only %d bytes in the IE\n"),
15606 pIe->name, pIe->minSize, (len + pIe->noui + 2U));
15607 goto skip_ie;
15608 }
15609
15610 if (len > pIe->maxSize - pIe->noui - 2U) {
15611 FRAMES_LOG1(pCtx, FRLOGW, FRFL("The IE %s reports "
15612 "an unexpectedly large size; it is presumably "
15613 "more up-to-date than this parser, but this wa"
15614 "rning may also indicate a corrupt frame.\n"),
15615 pIe->name);
15616 FRAMES_DUMP(pCtx, FRLOG1, pBuf, nBuf);
15617 }
15618
15619 countOffset = ((0 != pIe->arraybound) *
15620 (*(uint16_t *)(pFrm + pIe->countOffset)));
15621 if (0 != pIe->arraybound && countOffset >= pIe->arraybound) {
15622 status |= DOT11F_DUPLICATE_IE;
15623 goto skip_ie;
15624 }
15625 switch (pIe->sig) {
15626 case SigIeGTK:
15627 status |=
15628 dot11f_unpack_ie_gtk(
15629 pCtx, pBufRemaining, len,
15630 (tDot11fIEGTK *)
15631 (pFrm + pIe->offset +
15632 sizeof(tDot11fIEGTK) *
15633 countOffset),
15634 append_ie);
15635 break;
15636 case SigIeIGTK:
15637 status |=
15638 dot11f_unpack_ie_igtk(
15639 pCtx, pBufRemaining, len,
15640 (tDot11fIEIGTK *)
15641 (pFrm + pIe->offset +
15642 sizeof(tDot11fIEIGTK) *
15643 countOffset),
15644 append_ie);
15645 break;
15646 case SigIeR0KH_ID:
15647 status |=
15648 dot11f_unpack_ie_r0_kh_id(
15649 pCtx, pBufRemaining, len,
15650 (tDot11fIER0KH_ID *)
15651 (pFrm + pIe->offset +
15652 sizeof(tDot11fIER0KH_ID) *
15653 countOffset),
15654 append_ie);
15655 break;
15656 case SigIeR1KH_ID:
15657 status |=
15658 dot11f_unpack_ie_r1_kh_id(
15659 pCtx, pBufRemaining, len,
15660 (tDot11fIER1KH_ID *)
15661 (pFrm + pIe->offset +
15662 sizeof(tDot11fIER1KH_ID) *
15663 countOffset),
15664 append_ie);
15665 break;
15666 case SigIeAPChannelReport:
15667 status |=
15668 dot11f_unpack_ie_ap_channel_report(
15669 pCtx, pBufRemaining, len,
15670 (tDot11fIEAPChannelReport *)
15671 (pFrm + pIe->offset +
15672 sizeof(tDot11fIEAPChannelReport) *
15673 countOffset),
15674 append_ie);
15675 break;
15676 case SigIeBcnReportingDetail:
15677 status |=
15678 dot11f_unpack_ie_bcn_reporting_detail(
15679 pCtx, pBufRemaining, len,
15680 (tDot11fIEBcnReportingDetail *)
15681 (pFrm + pIe->offset +
15682 sizeof(tDot11fIEBcnReportingDetail) *
15683 countOffset),
15684 append_ie);
15685 break;
15686 case SigIeBeaconReportFrmBody:
15687 status |=
15688 dot11f_unpack_ie_beacon_report_frm_body(
15689 pCtx, pBufRemaining, len,
15690 (tDot11fIEBeaconReportFrmBody *)
15691 (pFrm + pIe->offset +
15692 sizeof(tDot11fIEBeaconReportFrmBody) *
15693 countOffset),
15694 append_ie);
15695 break;
15696 case SigIeCondensedCountryStr:
15697 status |=
15698 dot11f_unpack_ie_condensed_country_str(
15699 pCtx, pBufRemaining, len,
15700 (tDot11fIECondensedCountryStr *)
15701 (pFrm + pIe->offset +
15702 sizeof(tDot11fIECondensedCountryStr) *
15703 countOffset),
15704 append_ie);
15705 break;
15706 case SigIeExtRequestedInfo:
15707 status |=
15708 dot11f_unpack_ie_ExtRequestedInfo(
15709 pCtx, pBufRemaining, len,
15710 (tDot11fIEExtRequestedInfo *)
15711 (pFrm + pIe->offset +
15712 sizeof(tDot11fIEExtRequestedInfo) *
15713 countOffset),
15714 append_ie);
15715 break;
15716 case SigIeMeasurementPilot:
15717 status |=
15718 dot11f_unpack_ie_measurement_pilot(
15719 pCtx, pBufRemaining, len,
15720 (tDot11fIEMeasurementPilot *)
15721 (pFrm + pIe->offset +
15722 sizeof(tDot11fIEMeasurementPilot) *
15723 countOffset),
15724 append_ie);
15725 break;
15726 case SigIeMultiBssid:
15727 status |=
15728 dot11f_unpack_ie_multi_bssid(
15729 pCtx, pBufRemaining, len,
15730 (tDot11fIEMultiBssid *)
15731 (pFrm + pIe->offset +
15732 sizeof(tDot11fIEMultiBssid) *
15733 countOffset),
15734 append_ie);
15735 break;
15736 case SigIeRICData:
15737 status |=
15738 dot11f_unpack_ie_ric_data(
15739 pCtx, pBufRemaining, len,
15740 (tDot11fIERICData *)
15741 (pFrm + pIe->offset +
15742 sizeof(tDot11fIERICData) *
15743 countOffset),
15744 append_ie);
15745 break;
15746 case SigIeRICDescriptor:
15747 status |=
15748 dot11f_unpack_ie_ric_descriptor(
15749 pCtx, pBufRemaining, len,
15750 (tDot11fIERICDescriptor *)
15751 (pFrm + pIe->offset +
15752 sizeof(tDot11fIERICDescriptor) *
15753 countOffset),
15754 append_ie);
15755 break;
15756 case SigIeRRMEnabledCap:
15757 status |=
15758 dot11f_unpack_ie_rrm_enabled_cap(
15759 pCtx, pBufRemaining, len,
15760 (tDot11fIERRMEnabledCap *)
15761 (pFrm + pIe->offset +
15762 sizeof(tDot11fIERRMEnabledCap) *
15763 countOffset),
15764 append_ie);
15765 break;
15766 case SigIeRequestedInfo:
15767 status |=
15768 dot11f_unpack_ie_requested_info(
15769 pCtx, pBufRemaining, len,
15770 (tDot11fIERequestedInfo *)
15771 (pFrm + pIe->offset +
15772 sizeof(tDot11fIERequestedInfo) *
15773 countOffset),
15774 append_ie);
15775 break;
15776 case SigIeSSID:
15777 status |=
15778 dot11f_unpack_ie_ssid(
15779 pCtx, pBufRemaining, len,
15780 (tDot11fIESSID *)
15781 (pFrm + pIe->offset +
15782 sizeof(tDot11fIESSID) *
15783 countOffset),
15784 append_ie);
15785 break;
15786 case SigIeSchedule:
15787 status |=
15788 dot11f_unpack_ie_schedule(
15789 pCtx, pBufRemaining, len,
15790 (tDot11fIESchedule *)
15791 (pFrm + pIe->offset +
15792 sizeof(tDot11fIESchedule) *
15793 countOffset),
15794 append_ie);
15795 break;
15796 case SigIeTCLAS:
15797 status |=
15798 dot11f_unpack_ie_tclas(
15799 pCtx, pBufRemaining, len,
15800 (tDot11fIETCLAS *)
15801 (pFrm + pIe->offset +
15802 sizeof(tDot11fIETCLAS) *
15803 countOffset),
15804 append_ie);
15805 break;
15806 case SigIeTCLASSPROC:
15807 status |= dot11f_unpack_ie_common_func(pCtx, pBufRemaining, len,
15808 (uint8_t *) &(((tDot11fIETCLASSPROC *)(pFrm + pIe->offset + sizeof(tDot11fIETCLASSPROC)*countOffset))->present),
15809 (uint8_t *) &(((tDot11fIETCLASSPROC *)(pFrm + pIe->offset + sizeof(tDot11fIETCLASSPROC)*countOffset))->processing));
15810 break;
15811 case SigIeTSDelay:
15812 status |=
15813 dot11f_unpack_ie_ts_delay(
15814 pCtx, pBufRemaining, len,
15815 (tDot11fIETSDelay *)
15816 (pFrm + pIe->offset +
15817 sizeof(tDot11fIETSDelay) *
15818 countOffset),
15819 append_ie);
15820 break;
15821 case SigIeTSFInfo:
15822 status |=
15823 dot11f_unpack_ie_tsf_info(
15824 pCtx, pBufRemaining, len,
15825 (tDot11fIETSFInfo *)
15826 (pFrm + pIe->offset +
15827 sizeof(tDot11fIETSFInfo) *
15828 countOffset),
15829 append_ie);
15830 break;
15831 case SigIeTSPEC:
15832 status |=
15833 dot11f_unpack_ie_tspec(
15834 pCtx, pBufRemaining, len,
15835 (tDot11fIETSPEC *)
15836 (pFrm + pIe->offset +
15837 sizeof(tDot11fIETSPEC) *
15838 countOffset),
15839 append_ie);
15840 break;
15841 case SigIeVHTCaps:
15842 status |=
15843 dot11f_unpack_ie_vht_caps(
15844 pCtx, pBufRemaining, len,
15845 (tDot11fIEVHTCaps *)
15846 (pFrm + pIe->offset +
15847 sizeof(tDot11fIEVHTCaps) *
15848 countOffset),
15849 append_ie);
15850 break;
15851 case SigIeVHTOperation:
15852 status |=
15853 dot11f_unpack_ie_vht_operation(
15854 pCtx, pBufRemaining, len,
15855 (tDot11fIEVHTOperation *)
15856 (pFrm + pIe->offset +
15857 sizeof(tDot11fIEVHTOperation) *
15858 countOffset),
15859 append_ie);
15860 break;
15861 case SigIeWMMSchedule:
15862 status |=
15863 dot11f_unpack_ie_wmm_schedule(
15864 pCtx, pBufRemaining, len,
15865 (tDot11fIEWMMSchedule *)
15866 (pFrm + pIe->offset +
15867 sizeof(tDot11fIEWMMSchedule) *
15868 countOffset),
15869 append_ie);
15870 break;
15871 case SigIeWMMTCLAS:
15872 status |=
15873 dot11f_unpack_ie_wmmtclas(
15874 pCtx, pBufRemaining, len,
15875 (tDot11fIEWMMTCLAS *)
15876 (pFrm + pIe->offset +
15877 sizeof(tDot11fIEWMMTCLAS) *
15878 countOffset),
15879 append_ie);
15880 break;
15881 case SigIeWMMTCLASPROC:
15882 status |=
15883 dot11f_unpack_ie_wmmtclasproc(
15884 pCtx, pBufRemaining, len,
15885 (tDot11fIEWMMTCLASPROC *)
15886 (pFrm + pIe->offset +
15887 sizeof(tDot11fIEWMMTCLASPROC) *
15888 countOffset),
15889 append_ie);
15890 break;
15891 case SigIeWMMTSDelay:
15892 status |=
15893 dot11f_unpack_ie_wmmts_delay(
15894 pCtx, pBufRemaining, len,
15895 (tDot11fIEWMMTSDelay *)
15896 (pFrm + pIe->offset +
15897 sizeof(tDot11fIEWMMTSDelay) *
15898 countOffset),
15899 append_ie);
15900 break;
15901 case SigIeWMMTSPEC:
15902 status |=
15903 dot11f_unpack_ie_wmmtspec(
15904 pCtx, pBufRemaining, len,
15905 (tDot11fIEWMMTSPEC *)
15906 (pFrm + pIe->offset +
15907 sizeof(tDot11fIEWMMTSPEC) *
15908 countOffset),
15909 append_ie);
15910 break;
15911 case SigIeWiderBWChanSwitchAnn:
15912 status |=
15913 dot11f_unpack_ie_wider_bw_chan_switch_ann(
15914 pCtx, pBufRemaining, len,
15915 (tDot11fIEWiderBWChanSwitchAnn *)
15916 (pFrm + pIe->offset +
15917 sizeof(tDot11fIEWiderBWChanSwitchAnn) *
15918 countOffset),
15919 append_ie);
15920 break;
15921 case SigIeazimuth_req:
15922 status |=
15923 dot11f_unpack_ie_azimuth_req(
15924 pCtx, pBufRemaining, len,
15925 (tDot11fIEazimuth_req *)
15926 (pFrm + pIe->offset +
15927 sizeof(tDot11fIEazimuth_req) *
15928 countOffset),
15929 append_ie);
15930 break;
15931 case SigIebeacon_report_frm_body_fragment_id:
15932 status |=
15933 dot11f_unpack_ie_beacon_report_frm_body_fragment_id(
15934 pCtx, pBufRemaining, len,
15935 (tDot11fIEbeacon_report_frm_body_fragment_id *)
15936 (pFrm + pIe->offset +
15937 sizeof(tDot11fIEbeacon_report_frm_body_fragment_id) *
15938 countOffset),
15939 append_ie);
15940 break;
15941 case SigIebw_ind_element:
15942 status |=
15943 dot11f_unpack_ie_bw_ind_element(
15944 pCtx, pBufRemaining, len,
15945 (tDot11fIEbw_ind_element *)
15946 (pFrm + pIe->offset +
15947 sizeof(tDot11fIEbw_ind_element) *
15948 countOffset),
15949 append_ie);
15950 break;
15951 case SigIebw_indication:
15952 status |=
15953 dot11f_unpack_ie_bw_indication(
15954 pCtx, pBufRemaining, len,
15955 (tDot11fIEbw_indication *)
15956 (pFrm + pIe->offset +
15957 sizeof(tDot11fIEbw_indication) *
15958 countOffset),
15959 append_ie);
15960 break;
15961 case SigIelast_beacon_report_indication:
15962 status |=
15963 dot11f_unpack_ie_last_beacon_report_indication(
15964 pCtx, pBufRemaining, len,
15965 (tDot11fIElast_beacon_report_indication *)
15966 (pFrm + pIe->offset +
15967 sizeof(tDot11fIElast_beacon_report_indication) *
15968 countOffset),
15969 append_ie);
15970 break;
15971 case SigIemax_age:
15972 status |=
15973 dot11f_unpack_ie_max_age(
15974 pCtx, pBufRemaining, len,
15975 (tDot11fIEmax_age *)
15976 (pFrm + pIe->offset +
15977 sizeof(tDot11fIEmax_age) *
15978 countOffset),
15979 append_ie);
15980 break;
15981 case SigIemscs_status:
15982 status |=
15983 dot11f_unpack_ie_mscs_status(
15984 pCtx, pBufRemaining, len,
15985 (tDot11fIEmscs_status *)
15986 (pFrm + pIe->offset +
15987 sizeof(tDot11fIEmscs_status) *
15988 countOffset),
15989 append_ie);
15990 break;
15991 case SigIeneighbor_rpt:
15992 status |=
15993 dot11f_unpack_ie_neighbor_rpt(
15994 pCtx, pBufRemaining, len,
15995 (tDot11fIEneighbor_rpt *)
15996 (pFrm + pIe->offset +
15997 sizeof(tDot11fIEneighbor_rpt) *
15998 countOffset),
15999 append_ie);
16000 break;
16001 case SigIereporting_reason:
16002 status |=
16003 dot11f_unpack_ie_reporting_reason(
16004 pCtx, pBufRemaining, len,
16005 (tDot11fIEreporting_reason *)
16006 (pFrm + pIe->offset +
16007 sizeof(tDot11fIEreporting_reason) *
16008 countOffset),
16009 append_ie);
16010 break;
16011 case SigIereq_mac_addr:
16012 status |=
16013 dot11f_unpack_ie_req_mac_addr(
16014 pCtx, pBufRemaining, len,
16015 (tDot11fIEreq_mac_addr *)
16016 (pFrm + pIe->offset +
16017 sizeof(tDot11fIEreq_mac_addr) *
16018 countOffset),
16019 append_ie);
16020 break;
16021 case SigIerrm_reporting:
16022 status |=
16023 dot11f_unpack_ie_rrm_reporting(
16024 pCtx, pBufRemaining, len,
16025 (tDot11fIErrm_reporting *)
16026 (pFrm + pIe->offset +
16027 sizeof(tDot11fIErrm_reporting) *
16028 countOffset),
16029 append_ie);
16030 break;
16031 case SigIetclas_mask:
16032 status |=
16033 dot11f_unpack_ie_tclas_mask(
16034 pCtx, pBufRemaining, len,
16035 (tDot11fIEtclas_mask *)
16036 (pFrm + pIe->offset +
16037 sizeof(tDot11fIEtclas_mask) *
16038 countOffset),
16039 append_ie);
16040 break;
16041 case SigIetgt_mac_addr:
16042 status |=
16043 dot11f_unpack_ie_tgt_mac_addr(
16044 pCtx, pBufRemaining, len,
16045 (tDot11fIEtgt_mac_addr *)
16046 (pFrm + pIe->offset +
16047 sizeof(tDot11fIEtgt_mac_addr) *
16048 countOffset),
16049 append_ie);
16050 break;
16051 case SigIetransmit_power_env:
16052 status |=
16053 dot11f_unpack_ie_transmit_power_env(
16054 pCtx, pBufRemaining, len,
16055 (tDot11fIEtransmit_power_env *)
16056 (pFrm + pIe->offset +
16057 sizeof(tDot11fIEtransmit_power_env) *
16058 countOffset),
16059 append_ie);
16060 break;
16061 case SigIewide_bw_chan_switch:
16062 status |=
16063 dot11f_unpack_ie_wide_bw_chan_switch(
16064 pCtx, pBufRemaining, len,
16065 (tDot11fIEwide_bw_chan_switch *)
16066 (pFrm + pIe->offset +
16067 sizeof(tDot11fIEwide_bw_chan_switch) *
16068 countOffset),
16069 append_ie);
16070 break;
16071 case SigIeAID:
16072 status |=
16073 dot11f_unpack_ie_aid(
16074 pCtx, pBufRemaining, len,
16075 (tDot11fIEAID *)
16076 (pFrm + pIe->offset +
16077 sizeof(tDot11fIEAID) *
16078 countOffset),
16079 append_ie);
16080 break;
16081 case SigIeCFParams:
16082 status |=
16083 dot11f_unpack_ie_cf_params(
16084 pCtx, pBufRemaining, len,
16085 (tDot11fIECFParams *)
16086 (pFrm + pIe->offset +
16087 sizeof(tDot11fIECFParams) *
16088 countOffset),
16089 append_ie);
16090 break;
16091 case SigIeChallengeText:
16092 status |=
16093 dot11f_unpack_ie_challenge_text(
16094 pCtx, pBufRemaining, len,
16095 (tDot11fIEChallengeText *)
16096 (pFrm + pIe->offset +
16097 sizeof(tDot11fIEChallengeText) *
16098 countOffset),
16099 append_ie);
16100 break;
16101 case SigIeChanSwitchAnn:
16102 status |=
16103 dot11f_unpack_ie_chan_switch_ann(
16104 pCtx, pBufRemaining, len,
16105 (tDot11fIEChanSwitchAnn *)
16106 (pFrm + pIe->offset +
16107 sizeof(tDot11fIEChanSwitchAnn) *
16108 countOffset),
16109 append_ie);
16110 break;
16111 case SigIeChannelSwitchWrapper:
16112 status |=
16113 dot11f_unpack_ie_channel_switch_wrapper(
16114 pCtx, pBufRemaining, len,
16115 (tDot11fIEChannelSwitchWrapper *)
16116 (pFrm + pIe->offset +
16117 sizeof(tDot11fIEChannelSwitchWrapper) *
16118 countOffset),
16119 append_ie);
16120 break;
16121 case SigIeCountry:
16122 status |=
16123 dot11f_unpack_ie_country(
16124 pCtx, pBufRemaining, len,
16125 (tDot11fIECountry *)
16126 (pFrm + pIe->offset +
16127 sizeof(tDot11fIECountry) *
16128 countOffset),
16129 append_ie);
16130 break;
16131 case SigIeDSParams:
16132 status |= dot11f_unpack_ie_common_func(pCtx, pBufRemaining, len,
16133 (uint8_t *) &(((tDot11fIEDSParams *)(pFrm + pIe->offset + sizeof(tDot11fIEDSParams)*countOffset))->present),
16134 (uint8_t *) &(((tDot11fIEDSParams *)(pFrm + pIe->offset + sizeof(tDot11fIEDSParams)*countOffset))->curr_channel));
16135 break;
16136 case SigIeEDCAParamSet:
16137 status |=
16138 dot11f_unpack_ie_edca_param_set(
16139 pCtx, pBufRemaining, len,
16140 (tDot11fIEEDCAParamSet *)
16141 (pFrm + pIe->offset +
16142 sizeof(tDot11fIEEDCAParamSet) *
16143 countOffset),
16144 append_ie);
16145 break;
16146 case SigIeERPInfo:
16147 status |=
16148 dot11f_unpack_ie_erp_info(
16149 pCtx, pBufRemaining, len,
16150 (tDot11fIEERPInfo *)
16151 (pFrm + pIe->offset +
16152 sizeof(tDot11fIEERPInfo) *
16153 countOffset),
16154 append_ie);
16155 break;
16156 case SigIeESECckmOpaque:
16157 status |=
16158 dot11f_unpack_ie_ese_cckm_opaque(
16159 pCtx, pBufRemaining, len,
16160 (tDot11fIEESECckmOpaque *)
16161 (pFrm + pIe->offset +
16162 sizeof(tDot11fIEESECckmOpaque) *
16163 countOffset),
16164 append_ie);
16165 break;
16166 case SigIeESERadMgmtCap:
16167 status |=
16168 dot11f_unpack_ie_ese_rad_mgmt_cap(
16169 pCtx, pBufRemaining, len,
16170 (tDot11fIEESERadMgmtCap *)
16171 (pFrm + pIe->offset +
16172 sizeof(tDot11fIEESERadMgmtCap) *
16173 countOffset),
16174 append_ie);
16175 break;
16176 case SigIeESETrafStrmMet:
16177 status |=
16178 dot11f_unpack_ie_ese_traf_strm_met(
16179 pCtx, pBufRemaining, len,
16180 (tDot11fIEESETrafStrmMet *)
16181 (pFrm + pIe->offset +
16182 sizeof(tDot11fIEESETrafStrmMet) *
16183 countOffset),
16184 append_ie);
16185 break;
16186 case SigIeESETrafStrmRateSet:
16187 status |=
16188 dot11f_unpack_ie_ese_traf_strm_rate_set(
16189 pCtx, pBufRemaining, len,
16190 (tDot11fIEESETrafStrmRateSet *)
16191 (pFrm + pIe->offset +
16192 sizeof(tDot11fIEESETrafStrmRateSet) *
16193 countOffset),
16194 append_ie);
16195 break;
16196 case SigIeESETxmitPower:
16197 status |=
16198 dot11f_unpack_ie_ese_txmit_power(
16199 pCtx, pBufRemaining, len,
16200 (tDot11fIEESETxmitPower *)
16201 (pFrm + pIe->offset +
16202 sizeof(tDot11fIEESETxmitPower) *
16203 countOffset),
16204 append_ie);
16205 break;
16206 case SigIeESEVersion:
16207 status |=
16208 dot11f_unpack_ie_ese_version(
16209 pCtx, pBufRemaining, len,
16210 (tDot11fIEESEVersion *)
16211 (pFrm + pIe->offset +
16212 sizeof(tDot11fIEESEVersion) *
16213 countOffset),
16214 append_ie);
16215 break;
16216 case SigIeExtCap:
16217 status |=
16218 dot11f_unpack_ie_ext_cap(
16219 pCtx, pBufRemaining, len,
16220 (tDot11fIEExtCap *)
16221 (pFrm + pIe->offset +
16222 sizeof(tDot11fIEExtCap) *
16223 countOffset),
16224 append_ie);
16225 break;
16226 case SigIeExtSuppRates:
16227 status |=
16228 dot11f_unpack_ie_ext_supp_rates(
16229 pCtx, pBufRemaining, len,
16230 (tDot11fIEExtSuppRates *)
16231 (pFrm + pIe->offset +
16232 sizeof(tDot11fIEExtSuppRates) *
16233 countOffset),
16234 append_ie);
16235 break;
16236 case SigIeFHParamSet:
16237 status |=
16238 dot11f_unpack_ie_fh_param_set(
16239 pCtx, pBufRemaining, len,
16240 (tDot11fIEFHParamSet *)
16241 (pFrm + pIe->offset +
16242 sizeof(tDot11fIEFHParamSet) *
16243 countOffset),
16244 append_ie);
16245 break;
16246 case SigIeFHParams:
16247 status |=
16248 dot11f_unpack_ie_fh_params(
16249 pCtx, pBufRemaining, len,
16250 (tDot11fIEFHParams *)
16251 (pFrm + pIe->offset +
16252 sizeof(tDot11fIEFHParams) *
16253 countOffset),
16254 append_ie);
16255 break;
16256 case SigIeFHPattTable:
16257 status |=
16258 dot11f_unpack_ie_fh_patt_table(
16259 pCtx, pBufRemaining, len,
16260 (tDot11fIEFHPattTable *)
16261 (pFrm + pIe->offset +
16262 sizeof(tDot11fIEFHPattTable) *
16263 countOffset),
16264 append_ie);
16265 break;
16266 case SigIeFTInfo:
16267 status |=
16268 dot11f_unpack_ie_ft_info(
16269 pCtx, pBufRemaining, len,
16270 (tDot11fIEFTInfo *)
16271 (pFrm + pIe->offset +
16272 sizeof(tDot11fIEFTInfo) *
16273 countOffset),
16274 append_ie);
16275 break;
16276 case SigIeHTCaps:
16277 status |=
16278 dot11f_unpack_ie_ht_caps(
16279 pCtx, pBufRemaining, len,
16280 (tDot11fIEHTCaps *)
16281 (pFrm + pIe->offset +
16282 sizeof(tDot11fIEHTCaps) *
16283 countOffset),
16284 append_ie);
16285 break;
16286 case SigIeHTInfo:
16287 status |=
16288 dot11f_unpack_ie_ht_info(
16289 pCtx, pBufRemaining, len,
16290 (tDot11fIEHTInfo *)
16291 (pFrm + pIe->offset +
16292 sizeof(tDot11fIEHTInfo) *
16293 countOffset),
16294 append_ie);
16295 break;
16296 case SigIeLinkIdentifier:
16297 status |=
16298 dot11f_unpack_ie_link_identifier(
16299 pCtx, pBufRemaining, len,
16300 (tDot11fIELinkIdentifier *)
16301 (pFrm + pIe->offset +
16302 sizeof(tDot11fIELinkIdentifier) *
16303 countOffset),
16304 append_ie);
16305 break;
16306 case SigIeMBO_IE:
16307 status |=
16308 dot11f_unpack_ie_MBO_IE(
16309 pCtx, pBufRemaining, len,
16310 (tDot11fIEMBO_IE *)
16311 (pFrm + pIe->offset +
16312 sizeof(tDot11fIEMBO_IE) *
16313 countOffset),
16314 append_ie);
16315 break;
16316 case SigIeMeasurementReport:
16317 status |=
16318 dot11f_unpack_ie_measurement_report(
16319 pCtx, pBufRemaining, len,
16320 (tDot11fIEMeasurementReport *)
16321 (pFrm + pIe->offset +
16322 sizeof(tDot11fIEMeasurementReport) *
16323 countOffset),
16324 append_ie);
16325 break;
16326 case SigIeMeasurementRequest:
16327 status |=
16328 dot11f_unpack_ie_measurement_request(
16329 pCtx, pBufRemaining, len,
16330 (tDot11fIEMeasurementRequest *)
16331 (pFrm + pIe->offset +
16332 sizeof(tDot11fIEMeasurementRequest) *
16333 countOffset),
16334 append_ie);
16335 break;
16336 case SigIeMobilityDomain:
16337 status |=
16338 dot11f_unpack_ie_mobility_domain(
16339 pCtx, pBufRemaining, len,
16340 (tDot11fIEMobilityDomain *)
16341 (pFrm + pIe->offset +
16342 sizeof(tDot11fIEMobilityDomain) *
16343 countOffset),
16344 append_ie);
16345 break;
16346 case SigIeNeighborReport:
16347 status |=
16348 dot11f_unpack_ie_neighbor_report(
16349 pCtx, pBufRemaining, len,
16350 (tDot11fIENeighborReport *)
16351 (pFrm + pIe->offset +
16352 sizeof(tDot11fIENeighborReport) *
16353 countOffset),
16354 append_ie);
16355 break;
16356 case SigIeOBSSScanParameters:
16357 status |=
16358 dot11f_unpack_ie_obss_scan_parameters(
16359 pCtx, pBufRemaining, len,
16360 (tDot11fIEOBSSScanParameters *)
16361 (pFrm + pIe->offset +
16362 sizeof(tDot11fIEOBSSScanParameters) *
16363 countOffset),
16364 append_ie);
16365 break;
16366 case SigIeOperatingMode:
16367 status |=
16368 dot11f_unpack_ie_operating_mode(
16369 pCtx, pBufRemaining, len,
16370 (tDot11fIEOperatingMode *)
16371 (pFrm + pIe->offset +
16372 sizeof(tDot11fIEOperatingMode) *
16373 countOffset),
16374 append_ie);
16375 break;
16376 case SigIeP2PAssocReq:
16377 status |=
16378 dot11f_unpack_ie_p2_p_assoc_req(
16379 pCtx, pBufRemaining, len,
16380 (tDot11fIEP2PAssocReq *)
16381 (pFrm + pIe->offset +
16382 sizeof(tDot11fIEP2PAssocReq) *
16383 countOffset),
16384 append_ie);
16385 break;
16386 case SigIeP2PAssocRes:
16387 status |=
16388 dot11f_unpack_ie_p2_p_assoc_res(
16389 pCtx, pBufRemaining, len,
16390 (tDot11fIEP2PAssocRes *)
16391 (pFrm + pIe->offset +
16392 sizeof(tDot11fIEP2PAssocRes) *
16393 countOffset),
16394 append_ie);
16395 break;
16396 case SigIeP2PBeacon:
16397 status |=
16398 dot11f_unpack_ie_p2_p_beacon(
16399 pCtx, pBufRemaining, len,
16400 (tDot11fIEP2PBeacon *)
16401 (pFrm + pIe->offset +
16402 sizeof(tDot11fIEP2PBeacon) *
16403 countOffset),
16404 append_ie);
16405 break;
16406 case SigIeP2PBeaconProbeRes:
16407 status |=
16408 dot11f_unpack_ie_p2_p_beacon_probe_res(
16409 pCtx, pBufRemaining, len,
16410 (tDot11fIEP2PBeaconProbeRes *)
16411 (pFrm + pIe->offset +
16412 sizeof(tDot11fIEP2PBeaconProbeRes) *
16413 countOffset),
16414 append_ie);
16415 break;
16416 case SigIeP2PDeAuth:
16417 status |=
16418 dot11f_unpack_ie_p2_p_de_auth(
16419 pCtx, pBufRemaining, len,
16420 (tDot11fIEP2PDeAuth *)
16421 (pFrm + pIe->offset +
16422 sizeof(tDot11fIEP2PDeAuth) *
16423 countOffset),
16424 append_ie);
16425 break;
16426 case SigIeP2PDisAssoc:
16427 status |=
16428 dot11f_unpack_ie_p2_p_dis_assoc(
16429 pCtx, pBufRemaining, len,
16430 (tDot11fIEP2PDisAssoc *)
16431 (pFrm + pIe->offset +
16432 sizeof(tDot11fIEP2PDisAssoc) *
16433 countOffset),
16434 append_ie);
16435 break;
16436 case SigIeP2PIEOpaque:
16437 status |=
16438 dot11f_unpack_ie_p2_pie_opaque(
16439 pCtx, pBufRemaining, len,
16440 (tDot11fIEP2PIEOpaque *)
16441 (pFrm + pIe->offset +
16442 sizeof(tDot11fIEP2PIEOpaque) *
16443 countOffset),
16444 append_ie);
16445 break;
16446 case SigIeP2PProbeReq:
16447 status |=
16448 dot11f_unpack_ie_p2_p_probe_req(
16449 pCtx, pBufRemaining, len,
16450 (tDot11fIEP2PProbeReq *)
16451 (pFrm + pIe->offset +
16452 sizeof(tDot11fIEP2PProbeReq) *
16453 countOffset),
16454 append_ie);
16455 break;
16456 case SigIeP2PProbeRes:
16457 status |=
16458 dot11f_unpack_ie_p2_p_probe_res(
16459 pCtx, pBufRemaining, len,
16460 (tDot11fIEP2PProbeRes *)
16461 (pFrm + pIe->offset +
16462 sizeof(tDot11fIEP2PProbeRes) *
16463 countOffset),
16464 append_ie);
16465 break;
16466 case SigIePTIControl:
16467 status |=
16468 dot11f_unpack_ie_pti_control(
16469 pCtx, pBufRemaining, len,
16470 (tDot11fIEPTIControl *)
16471 (pFrm + pIe->offset +
16472 sizeof(tDot11fIEPTIControl) *
16473 countOffset),
16474 append_ie);
16475 break;
16476 case SigIePUBufferStatus:
16477 status |=
16478 dot11f_unpack_ie_pu_buffer_status(
16479 pCtx, pBufRemaining, len,
16480 (tDot11fIEPUBufferStatus *)
16481 (pFrm + pIe->offset +
16482 sizeof(tDot11fIEPUBufferStatus) *
16483 countOffset),
16484 append_ie);
16485 break;
16486 case SigIePowerCaps:
16487 status |=
16488 dot11f_unpack_ie_power_caps(
16489 pCtx, pBufRemaining, len,
16490 (tDot11fIEPowerCaps *)
16491 (pFrm + pIe->offset +
16492 sizeof(tDot11fIEPowerCaps) *
16493 countOffset),
16494 append_ie);
16495 break;
16496 case SigIePowerConstraints:
16497 status |=
16498 dot11f_unpack_ie_power_constraints(
16499 pCtx, pBufRemaining, len,
16500 (tDot11fIEPowerConstraints *)
16501 (pFrm + pIe->offset +
16502 sizeof(tDot11fIEPowerConstraints) *
16503 countOffset),
16504 append_ie);
16505 break;
16506 case SigIeQBSSLoad:
16507 status |=
16508 dot11f_unpack_ie_qbss_load(
16509 pCtx, pBufRemaining, len,
16510 (tDot11fIEQBSSLoad *)
16511 (pFrm + pIe->offset +
16512 sizeof(tDot11fIEQBSSLoad) *
16513 countOffset),
16514 append_ie);
16515 break;
16516 case SigIeQComVendorIE:
16517 status |=
16518 dot11f_unpack_ie_QComVendorIE(
16519 pCtx, pBufRemaining, len,
16520 (tDot11fIEQComVendorIE *)
16521 (pFrm + pIe->offset +
16522 sizeof(tDot11fIEQComVendorIE) *
16523 countOffset),
16524 append_ie);
16525 break;
16526 case SigIeQOSCapsAp:
16527 status |=
16528 dot11f_unpack_ie_qos_caps_ap(
16529 pCtx, pBufRemaining, len,
16530 (tDot11fIEQOSCapsAp *)
16531 (pFrm + pIe->offset +
16532 sizeof(tDot11fIEQOSCapsAp) *
16533 countOffset),
16534 append_ie);
16535 break;
16536 case SigIeQOSCapsStation:
16537 status |=
16538 dot11f_unpack_ie_qos_caps_station(
16539 pCtx, pBufRemaining, len,
16540 (tDot11fIEQOSCapsStation *)
16541 (pFrm + pIe->offset +
16542 sizeof(tDot11fIEQOSCapsStation) *
16543 countOffset),
16544 append_ie);
16545 break;
16546 case SigIeQosMapSet:
16547 status |=
16548 dot11f_unpack_ie_qos_map_set(
16549 pCtx, pBufRemaining, len,
16550 (tDot11fIEQosMapSet *)
16551 (pFrm + pIe->offset +
16552 sizeof(tDot11fIEQosMapSet) *
16553 countOffset),
16554 append_ie);
16555 break;
16556 case SigIeQuiet:
16557 status |=
16558 dot11f_unpack_ie_quiet(
16559 pCtx, pBufRemaining, len,
16560 (tDot11fIEQuiet *)
16561 (pFrm + pIe->offset +
16562 sizeof(tDot11fIEQuiet) *
16563 countOffset),
16564 append_ie);
16565 break;
16566 case SigIeRCPIIE:
16567 status |=
16568 dot11f_unpack_ie_rcpiie(
16569 pCtx, pBufRemaining, len,
16570 (tDot11fIERCPIIE *)
16571 (pFrm + pIe->offset +
16572 sizeof(tDot11fIERCPIIE) *
16573 countOffset),
16574 append_ie);
16575 break;
16576 case SigIeRICDataDesc:
16577 /* reset the pointers back since this is a container IE and it doesn't have its own EID and Len. */
16578 pBufRemaining -= 2;
16579 nBufRemaining += 2;
16580 if (pIe && pIe->noui) {
16581 pBufRemaining -= pIe->noui;
16582 nBufRemaining += pIe->noui;
16583 len += pIe->noui;
16584 }
16585 status |= get_container_ies_len(pCtx, pBufRemaining, nBufRemaining, &len, IES_RICDataDesc);
16586 if (status != DOT11F_PARSE_SUCCESS && status != DOT11F_UNKNOWN_IES)
16587 break;
16588 status |=
16589 dot11f_unpack_ie_ric_data_desc(
16590 pCtx, pBufRemaining, len,
16591 (tDot11fIERICDataDesc *)
16592 (pFrm + pIe->offset +
16593 sizeof(tDot11fIERICDataDesc) *
16594 countOffset),
16595 append_ie);
16596 break;
16597 case SigIeRSN:
16598 status |=
16599 dot11f_unpack_ie_rsn(
16600 pCtx, pBufRemaining, len,
16601 (tDot11fIERSN *)
16602 (pFrm + pIe->offset +
16603 sizeof(tDot11fIERSN) *
16604 countOffset),
16605 append_ie);
16606 break;
16607 case SigIeRSNIIE:
16608 status |=
16609 dot11f_unpack_ie_rsniie(
16610 pCtx, pBufRemaining, len,
16611 (tDot11fIERSNIIE *)
16612 (pFrm + pIe->offset +
16613 sizeof(tDot11fIERSNIIE) *
16614 countOffset),
16615 append_ie);
16616 break;
16617 case SigIeRSNOpaque:
16618 status |=
16619 dot11f_unpack_ie_rsn_opaque(
16620 pCtx, pBufRemaining, len,
16621 (tDot11fIERSNOpaque *)
16622 (pFrm + pIe->offset +
16623 sizeof(tDot11fIERSNOpaque) *
16624 countOffset),
16625 append_ie);
16626 break;
16627 case SigIeSuppChannels:
16628 status |=
16629 dot11f_unpack_ie_supp_channels(
16630 pCtx, pBufRemaining, len,
16631 (tDot11fIESuppChannels *)
16632 (pFrm + pIe->offset +
16633 sizeof(tDot11fIESuppChannels) *
16634 countOffset),
16635 append_ie);
16636 break;
16637 case SigIeSuppOperatingClasses:
16638 status |=
16639 dot11f_unpack_ie_supp_operating_classes(
16640 pCtx, pBufRemaining, len,
16641 (tDot11fIESuppOperatingClasses *)
16642 (pFrm + pIe->offset +
16643 sizeof(tDot11fIESuppOperatingClasses) *
16644 countOffset),
16645 append_ie);
16646 break;
16647 case SigIeSuppRates:
16648 status |=
16649 dot11f_unpack_ie_supp_rates(
16650 pCtx, pBufRemaining, len,
16651 (tDot11fIESuppRates *)
16652 (pFrm + pIe->offset +
16653 sizeof(tDot11fIESuppRates) *
16654 countOffset),
16655 append_ie);
16656 break;
16657 case SigIeTIM:
16658 status |=
16659 dot11f_unpack_ie_tim(
16660 pCtx, pBufRemaining, len,
16661 (tDot11fIETIM *)
16662 (pFrm + pIe->offset +
16663 sizeof(tDot11fIETIM) *
16664 countOffset),
16665 append_ie);
16666 break;
16667 case SigIeTPCReport:
16668 status |=
16669 dot11f_unpack_ie_tpc_report(
16670 pCtx, pBufRemaining, len,
16671 (tDot11fIETPCReport *)
16672 (pFrm + pIe->offset +
16673 sizeof(tDot11fIETPCReport) *
16674 countOffset),
16675 append_ie);
16676 break;
16677 case SigIeTPCRequest:
16678 status |=
16679 dot11f_unpack_ie_tpc_request(
16680 pCtx, pBufRemaining, len,
16681 (tDot11fIETPCRequest *)
16682 (pFrm + pIe->offset +
16683 sizeof(tDot11fIETPCRequest) *
16684 countOffset),
16685 append_ie);
16686 break;
16687 case SigIeTimeAdvertisement:
16688 status |=
16689 dot11f_unpack_ie_time_advertisement(
16690 pCtx, pBufRemaining, len,
16691 (tDot11fIETimeAdvertisement *)
16692 (pFrm + pIe->offset +
16693 sizeof(tDot11fIETimeAdvertisement) *
16694 countOffset),
16695 append_ie);
16696 break;
16697 case SigIeTimeoutInterval:
16698 status |=
16699 dot11f_unpack_ie_timeout_interval(
16700 pCtx, pBufRemaining, len,
16701 (tDot11fIETimeoutInterval *)
16702 (pFrm + pIe->offset +
16703 sizeof(tDot11fIETimeoutInterval) *
16704 countOffset),
16705 append_ie);
16706 break;
16707 case SigIeVHTExtBssLoad:
16708 status |=
16709 dot11f_unpack_ie_vht_ext_bss_load(
16710 pCtx, pBufRemaining, len,
16711 (tDot11fIEVHTExtBssLoad *)
16712 (pFrm + pIe->offset +
16713 sizeof(tDot11fIEVHTExtBssLoad) *
16714 countOffset),
16715 append_ie);
16716 break;
16717 case SigIeVendor1IE:
16718 status |=
16719 dot11f_unpack_ie_vendor1_ie(
16720 pCtx, pBufRemaining, len,
16721 (tDot11fIEVendor1IE *)
16722 (pFrm + pIe->offset +
16723 sizeof(tDot11fIEVendor1IE) *
16724 countOffset),
16725 append_ie);
16726 break;
16727 case SigIeVendor3IE:
16728 status |=
16729 dot11f_unpack_ie_vendor3_ie(
16730 pCtx, pBufRemaining, len,
16731 (tDot11fIEVendor3IE *)
16732 (pFrm + pIe->offset +
16733 sizeof(tDot11fIEVendor3IE) *
16734 countOffset),
16735 append_ie);
16736 break;
16737 case SigIeWAPI:
16738 status |=
16739 dot11f_unpack_ie_wapi(
16740 pCtx, pBufRemaining, len,
16741 (tDot11fIEWAPI *)
16742 (pFrm + pIe->offset +
16743 sizeof(tDot11fIEWAPI) *
16744 countOffset),
16745 append_ie);
16746 break;
16747 case SigIeWAPIOpaque:
16748 status |=
16749 dot11f_unpack_ie_wapi_opaque(
16750 pCtx, pBufRemaining, len,
16751 (tDot11fIEWAPIOpaque *)
16752 (pFrm + pIe->offset +
16753 sizeof(tDot11fIEWAPIOpaque) *
16754 countOffset),
16755 append_ie);
16756 break;
16757 case SigIeWFATPC:
16758 status |=
16759 dot11f_unpack_ie_wfatpc(
16760 pCtx, pBufRemaining, len,
16761 (tDot11fIEWFATPC *)
16762 (pFrm + pIe->offset +
16763 sizeof(tDot11fIEWFATPC) *
16764 countOffset),
16765 append_ie);
16766 break;
16767 case SigIeWFDIEOpaque:
16768 status |=
16769 dot11f_unpack_ie_wfdie_opaque(
16770 pCtx, pBufRemaining, len,
16771 (tDot11fIEWFDIEOpaque *)
16772 (pFrm + pIe->offset +
16773 sizeof(tDot11fIEWFDIEOpaque) *
16774 countOffset),
16775 append_ie);
16776 break;
16777 case SigIeWMMCaps:
16778 status |=
16779 dot11f_unpack_ie_wmm_caps(
16780 pCtx, pBufRemaining, len,
16781 (tDot11fIEWMMCaps *)
16782 (pFrm + pIe->offset +
16783 sizeof(tDot11fIEWMMCaps) *
16784 countOffset),
16785 append_ie);
16786 break;
16787 case SigIeWMMInfoAp:
16788 status |=
16789 dot11f_unpack_ie_wmm_info_ap(
16790 pCtx, pBufRemaining, len,
16791 (tDot11fIEWMMInfoAp *)
16792 (pFrm + pIe->offset +
16793 sizeof(tDot11fIEWMMInfoAp) *
16794 countOffset),
16795 append_ie);
16796 break;
16797 case SigIeWMMInfoStation:
16798 status |=
16799 dot11f_unpack_ie_wmm_info_station(
16800 pCtx, pBufRemaining, len,
16801 (tDot11fIEWMMInfoStation *)
16802 (pFrm + pIe->offset +
16803 sizeof(tDot11fIEWMMInfoStation) *
16804 countOffset),
16805 append_ie);
16806 break;
16807 case SigIeWMMParams:
16808 status |=
16809 dot11f_unpack_ie_wmm_params(
16810 pCtx, pBufRemaining, len,
16811 (tDot11fIEWMMParams *)
16812 (pFrm + pIe->offset +
16813 sizeof(tDot11fIEWMMParams) *
16814 countOffset),
16815 append_ie);
16816 break;
16817 case SigIeWPA:
16818 status |=
16819 dot11f_unpack_ie_wpa(
16820 pCtx, pBufRemaining, len,
16821 (tDot11fIEWPA *)
16822 (pFrm + pIe->offset +
16823 sizeof(tDot11fIEWPA) *
16824 countOffset),
16825 append_ie);
16826 break;
16827 case SigIeWPAOpaque:
16828 status |=
16829 dot11f_unpack_ie_wpa_opaque(
16830 pCtx, pBufRemaining, len,
16831 (tDot11fIEWPAOpaque *)
16832 (pFrm + pIe->offset +
16833 sizeof(tDot11fIEWPAOpaque) *
16834 countOffset),
16835 append_ie);
16836 break;
16837 case SigIeWSC:
16838 status |=
16839 dot11f_unpack_ie_wsc(
16840 pCtx, pBufRemaining, len,
16841 (tDot11fIEWSC *)
16842 (pFrm + pIe->offset +
16843 sizeof(tDot11fIEWSC) *
16844 countOffset),
16845 append_ie);
16846 break;
16847 case SigIeWscAssocReq:
16848 status |=
16849 dot11f_unpack_ie_wsc_assoc_req(
16850 pCtx, pBufRemaining, len,
16851 (tDot11fIEWscAssocReq *)
16852 (pFrm + pIe->offset +
16853 sizeof(tDot11fIEWscAssocReq) *
16854 countOffset),
16855 append_ie);
16856 break;
16857 case SigIeWscAssocRes:
16858 status |=
16859 dot11f_unpack_ie_wsc_assoc_res(
16860 pCtx, pBufRemaining, len,
16861 (tDot11fIEWscAssocRes *)
16862 (pFrm + pIe->offset +
16863 sizeof(tDot11fIEWscAssocRes) *
16864 countOffset),
16865 append_ie);
16866 break;
16867 case SigIeWscBeacon:
16868 status |=
16869 dot11f_unpack_ie_wsc_beacon(
16870 pCtx, pBufRemaining, len,
16871 (tDot11fIEWscBeacon *)
16872 (pFrm + pIe->offset +
16873 sizeof(tDot11fIEWscBeacon) *
16874 countOffset),
16875 append_ie);
16876 break;
16877 case SigIeWscBeaconProbeRes:
16878 status |=
16879 dot11f_unpack_ie_wsc_beacon_probe_res(
16880 pCtx, pBufRemaining, len,
16881 (tDot11fIEWscBeaconProbeRes *)
16882 (pFrm + pIe->offset +
16883 sizeof(tDot11fIEWscBeaconProbeRes) *
16884 countOffset),
16885 append_ie);
16886 break;
16887 case SigIeWscIEOpaque:
16888 status |=
16889 dot11f_unpack_ie_wsc_ie_opaque(
16890 pCtx, pBufRemaining, len,
16891 (tDot11fIEWscIEOpaque *)
16892 (pFrm + pIe->offset +
16893 sizeof(tDot11fIEWscIEOpaque) *
16894 countOffset),
16895 append_ie);
16896 break;
16897 case SigIeWscProbeReq:
16898 status |=
16899 dot11f_unpack_ie_wsc_probe_req(
16900 pCtx, pBufRemaining, len,
16901 (tDot11fIEWscProbeReq *)
16902 (pFrm + pIe->offset +
16903 sizeof(tDot11fIEWscProbeReq) *
16904 countOffset),
16905 append_ie);
16906 break;
16907 case SigIeWscProbeRes:
16908 status |=
16909 dot11f_unpack_ie_wsc_probe_res(
16910 pCtx, pBufRemaining, len,
16911 (tDot11fIEWscProbeRes *)
16912 (pFrm + pIe->offset +
16913 sizeof(tDot11fIEWscProbeRes) *
16914 countOffset),
16915 append_ie);
16916 break;
16917 case SigIeWscReassocRes:
16918 status |=
16919 dot11f_unpack_ie_wsc_reassoc_res(
16920 pCtx, pBufRemaining, len,
16921 (tDot11fIEWscReassocRes *)
16922 (pFrm + pIe->offset +
16923 sizeof(tDot11fIEWscReassocRes) *
16924 countOffset),
16925 append_ie);
16926 break;
16927 case SigIeaddba_extn_element:
16928 status |=
16929 dot11f_unpack_ie_addba_extn_element(
16930 pCtx, pBufRemaining, len,
16931 (tDot11fIEaddba_extn_element *)
16932 (pFrm + pIe->offset +
16933 sizeof(tDot11fIEaddba_extn_element) *
16934 countOffset),
16935 append_ie);
16936 break;
16937 case SigIebss_color_change:
16938 status |=
16939 dot11f_unpack_ie_bss_color_change(
16940 pCtx, pBufRemaining, len,
16941 (tDot11fIEbss_color_change *)
16942 (pFrm + pIe->offset +
16943 sizeof(tDot11fIEbss_color_change) *
16944 countOffset),
16945 append_ie);
16946 break;
16947 case SigIebss_max_idle_period:
16948 status |=
16949 dot11f_unpack_ie_bss_max_idle_period(
16950 pCtx, pBufRemaining, len,
16951 (tDot11fIEbss_max_idle_period *)
16952 (pFrm + pIe->offset +
16953 sizeof(tDot11fIEbss_max_idle_period) *
16954 countOffset),
16955 append_ie);
16956 break;
16957 case SigIedescriptor_element:
16958 status |=
16959 dot11f_unpack_ie_descriptor_element(
16960 pCtx, pBufRemaining, len,
16961 (tDot11fIEdescriptor_element *)
16962 (pFrm + pIe->offset +
16963 sizeof(tDot11fIEdescriptor_element) *
16964 countOffset),
16965 append_ie);
16966 break;
16967 case SigIedh_parameter_element:
16968 status |=
16969 dot11f_unpack_ie_dh_parameter_element(
16970 pCtx, pBufRemaining, len,
16971 (tDot11fIEdh_parameter_element *)
16972 (pFrm + pIe->offset +
16973 sizeof(tDot11fIEdh_parameter_element) *
16974 countOffset),
16975 append_ie);
16976 break;
16977 case SigIeeht_cap:
16978 status |=
16979 dot11f_unpack_ie_eht_cap(
16980 pCtx, pBufRemaining, len,
16981 (tDot11fIEeht_cap *)
16982 (pFrm + pIe->offset +
16983 sizeof(tDot11fIEeht_cap) *
16984 countOffset),
16985 append_ie);
16986 break;
16987 case SigIeeht_op:
16988 status |=
16989 dot11f_unpack_ie_eht_op(
16990 pCtx, pBufRemaining, len,
16991 (tDot11fIEeht_op *)
16992 (pFrm + pIe->offset +
16993 sizeof(tDot11fIEeht_op) *
16994 countOffset),
16995 append_ie);
16996 break;
16997 case SigIeesp_information:
16998 status |=
16999 dot11f_unpack_ie_esp_information(
17000 pCtx, pBufRemaining, len,
17001 (tDot11fIEesp_information *)
17002 (pFrm + pIe->offset +
17003 sizeof(tDot11fIEesp_information) *
17004 countOffset),
17005 append_ie);
17006 break;
17007 case SigIeext_chan_switch_ann:
17008 status |=
17009 dot11f_unpack_ie_ext_chan_switch_ann(
17010 pCtx, pBufRemaining, len,
17011 (tDot11fIEext_chan_switch_ann *)
17012 (pFrm + pIe->offset +
17013 sizeof(tDot11fIEext_chan_switch_ann) *
17014 countOffset),
17015 append_ie);
17016 break;
17017 case SigIefils_assoc_delay_info:
17018 status |=
17019 dot11f_unpack_ie_fils_assoc_delay_info(
17020 pCtx, pBufRemaining, len,
17021 (tDot11fIEfils_assoc_delay_info *)
17022 (pFrm + pIe->offset +
17023 sizeof(tDot11fIEfils_assoc_delay_info) *
17024 countOffset),
17025 append_ie);
17026 break;
17027 case SigIefils_hlp_container:
17028 status |=
17029 dot11f_unpack_ie_fils_hlp_container(
17030 pCtx, pBufRemaining, len,
17031 (tDot11fIEfils_hlp_container *)
17032 (pFrm + pIe->offset +
17033 sizeof(tDot11fIEfils_hlp_container) *
17034 countOffset),
17035 append_ie);
17036 break;
17037 case SigIefils_indication:
17038 status |=
17039 dot11f_unpack_ie_fils_indication(
17040 pCtx, pBufRemaining, len,
17041 (tDot11fIEfils_indication *)
17042 (pFrm + pIe->offset +
17043 sizeof(tDot11fIEfils_indication) *
17044 countOffset),
17045 append_ie);
17046 break;
17047 case SigIefils_kde:
17048 status |=
17049 dot11f_unpack_ie_fils_kde(
17050 pCtx, pBufRemaining, len,
17051 (tDot11fIEfils_kde *)
17052 (pFrm + pIe->offset +
17053 sizeof(tDot11fIEfils_kde) *
17054 countOffset),
17055 append_ie);
17056 break;
17057 case SigIefils_key_confirmation:
17058 status |=
17059 dot11f_unpack_ie_fils_key_confirmation(
17060 pCtx, pBufRemaining, len,
17061 (tDot11fIEfils_key_confirmation *)
17062 (pFrm + pIe->offset +
17063 sizeof(tDot11fIEfils_key_confirmation) *
17064 countOffset),
17065 append_ie);
17066 break;
17067 case SigIefils_nonce:
17068 status |=
17069 dot11f_unpack_ie_fils_nonce(
17070 pCtx, pBufRemaining, len,
17071 (tDot11fIEfils_nonce *)
17072 (pFrm + pIe->offset +
17073 sizeof(tDot11fIEfils_nonce) *
17074 countOffset),
17075 append_ie);
17076 break;
17077 case SigIefils_public_key:
17078 status |=
17079 dot11f_unpack_ie_fils_public_key(
17080 pCtx, pBufRemaining, len,
17081 (tDot11fIEfils_public_key *)
17082 (pFrm + pIe->offset +
17083 sizeof(tDot11fIEfils_public_key) *
17084 countOffset),
17085 append_ie);
17086 break;
17087 case SigIefils_session:
17088 status |=
17089 dot11f_unpack_ie_fils_session(
17090 pCtx, pBufRemaining, len,
17091 (tDot11fIEfils_session *)
17092 (pFrm + pIe->offset +
17093 sizeof(tDot11fIEfils_session) *
17094 countOffset),
17095 append_ie);
17096 break;
17097 case SigIefils_wrapped_data:
17098 status |=
17099 dot11f_unpack_ie_fils_wrapped_data(
17100 pCtx, pBufRemaining, len,
17101 (tDot11fIEfils_wrapped_data *)
17102 (pFrm + pIe->offset +
17103 sizeof(tDot11fIEfils_wrapped_data) *
17104 countOffset),
17105 append_ie);
17106 break;
17107 case SigIefragment_ie:
17108 status |=
17109 dot11f_unpack_ie_fragment_ie(
17110 pCtx, pBufRemaining, len,
17111 (tDot11fIEfragment_ie *)
17112 (pFrm + pIe->offset +
17113 sizeof(tDot11fIEfragment_ie) *
17114 countOffset),
17115 append_ie);
17116 break;
17117 case SigIehe_6ghz_band_cap:
17118 status |=
17119 dot11f_unpack_ie_he_6ghz_band_cap(
17120 pCtx, pBufRemaining, len,
17121 (tDot11fIEhe_6ghz_band_cap *)
17122 (pFrm + pIe->offset +
17123 sizeof(tDot11fIEhe_6ghz_band_cap) *
17124 countOffset),
17125 append_ie);
17126 break;
17127 case SigIehe_cap:
17128 status |=
17129 dot11f_unpack_ie_he_cap(
17130 pCtx, pBufRemaining, len,
17131 (tDot11fIEhe_cap *)
17132 (pFrm + pIe->offset +
17133 sizeof(tDot11fIEhe_cap) *
17134 countOffset),
17135 append_ie);
17136 break;
17137 case SigIehe_op:
17138 status |=
17139 dot11f_unpack_ie_he_op(
17140 pCtx, pBufRemaining, len,
17141 (tDot11fIEhe_op *)
17142 (pFrm + pIe->offset +
17143 sizeof(tDot11fIEhe_op) *
17144 countOffset),
17145 append_ie);
17146 break;
17147 case SigIehs20vendor_ie:
17148 status |=
17149 dot11f_unpack_ie_hs20vendor_ie(
17150 pCtx, pBufRemaining, len,
17151 (tDot11fIEhs20vendor_ie *)
17152 (pFrm + pIe->offset +
17153 sizeof(tDot11fIEhs20vendor_ie) *
17154 countOffset),
17155 append_ie);
17156 break;
17157 case SigIeht2040_bss_coexistence:
17158 status |=
17159 dot11f_unpack_ie_ht2040_bss_coexistence(
17160 pCtx, pBufRemaining, len,
17161 (tDot11fIEht2040_bss_coexistence *)
17162 (pFrm + pIe->offset +
17163 sizeof(tDot11fIEht2040_bss_coexistence) *
17164 countOffset),
17165 append_ie);
17166 break;
17167 case SigIeht2040_bss_intolerant_report:
17168 status |=
17169 dot11f_unpack_ie_ht2040_bss_intolerant_report(
17170 pCtx, pBufRemaining, len,
17171 (tDot11fIEht2040_bss_intolerant_report *)
17172 (pFrm + pIe->offset +
17173 sizeof(tDot11fIEht2040_bss_intolerant_report) *
17174 countOffset),
17175 append_ie);
17176 break;
17177 case SigIemax_chan_switch_time:
17178 status |=
17179 dot11f_unpack_ie_max_chan_switch_time(
17180 pCtx, pBufRemaining, len,
17181 (tDot11fIEmax_chan_switch_time *)
17182 (pFrm + pIe->offset +
17183 sizeof(tDot11fIEmax_chan_switch_time) *
17184 countOffset),
17185 append_ie);
17186 break;
17187 case SigIemlo_ie:
17188 status |=
17189 dot11f_unpack_ie_mlo_ie(
17190 pCtx, pBufRemaining, len,
17191 (tDot11fIEmlo_ie *)
17192 (pFrm + pIe->offset +
17193 sizeof(tDot11fIEmlo_ie) *
17194 countOffset),
17195 append_ie);
17196 break;
17197 case SigIemu_edca_param_set:
17198 status |=
17199 dot11f_unpack_ie_mu_edca_param_set(
17200 pCtx, pBufRemaining, len,
17201 (tDot11fIEmu_edca_param_set *)
17202 (pFrm + pIe->offset +
17203 sizeof(tDot11fIEmu_edca_param_set) *
17204 countOffset),
17205 append_ie);
17206 break;
17207 case SigIenon_inheritance:
17208 status |=
17209 dot11f_unpack_ie_non_inheritance(
17210 pCtx, pBufRemaining, len,
17211 (tDot11fIEnon_inheritance *)
17212 (pFrm + pIe->offset +
17213 sizeof(tDot11fIEnon_inheritance) *
17214 countOffset),
17215 append_ie);
17216 break;
17217 case SigIeoci:
17218 status |=
17219 dot11f_unpack_ie_oci(
17220 pCtx, pBufRemaining, len,
17221 (tDot11fIEoci *)
17222 (pFrm + pIe->offset +
17223 sizeof(tDot11fIEoci) *
17224 countOffset),
17225 append_ie);
17226 break;
17227 case SigIeosen_ie:
17228 status |=
17229 dot11f_unpack_ie_osen_ie(
17230 pCtx, pBufRemaining, len,
17231 (tDot11fIEosen_ie *)
17232 (pFrm + pIe->offset +
17233 sizeof(tDot11fIEosen_ie) *
17234 countOffset),
17235 append_ie);
17236 break;
17237 case SigIeqcn_ie:
17238 status |=
17239 dot11f_unpack_ie_qcn_ie(
17240 pCtx, pBufRemaining, len,
17241 (tDot11fIEqcn_ie *)
17242 (pFrm + pIe->offset +
17243 sizeof(tDot11fIEqcn_ie) *
17244 countOffset),
17245 append_ie);
17246 break;
17247 case SigIereduced_neighbor_report:
17248 status |=
17249 dot11f_unpack_ie_reduced_neighbor_report(
17250 pCtx, pBufRemaining, len,
17251 (tDot11fIEreduced_neighbor_report *)
17252 (pFrm + pIe->offset +
17253 sizeof(tDot11fIEreduced_neighbor_report) *
17254 countOffset),
17255 append_ie);
17256 break;
17257 case SigIeroaming_consortium_sel:
17258 status |=
17259 dot11f_unpack_ie_roaming_consortium_sel(
17260 pCtx, pBufRemaining, len,
17261 (tDot11fIEroaming_consortium_sel *)
17262 (pFrm + pIe->offset +
17263 sizeof(tDot11fIEroaming_consortium_sel) *
17264 countOffset),
17265 append_ie);
17266 break;
17267 case SigIesec_chan_offset_ele:
17268 status |=
17269 dot11f_unpack_ie_sec_chan_offset_ele(
17270 pCtx, pBufRemaining, len,
17271 (tDot11fIEsec_chan_offset_ele *)
17272 (pFrm + pIe->offset +
17273 sizeof(tDot11fIEsec_chan_offset_ele) *
17274 countOffset),
17275 append_ie);
17276 break;
17277 case SigIespatial_reuse:
17278 status |=
17279 dot11f_unpack_ie_spatial_reuse(
17280 pCtx, pBufRemaining, len,
17281 (tDot11fIEspatial_reuse *)
17282 (pFrm + pIe->offset +
17283 sizeof(tDot11fIEspatial_reuse) *
17284 countOffset),
17285 append_ie);
17286 break;
17287 case SigIet2lm_ie:
17288 status |=
17289 dot11f_unpack_ie_t2lm_ie(
17290 pCtx, pBufRemaining, len,
17291 (tDot11fIEt2lm_ie *)
17292 (pFrm + pIe->offset +
17293 sizeof(tDot11fIEt2lm_ie) *
17294 countOffset),
17295 append_ie);
17296 break;
17297 case SigIevendor_vht_ie:
17298 status |=
17299 dot11f_unpack_ie_vendor_vht_ie(
17300 pCtx, pBufRemaining, len,
17301 (tDot11fIEvendor_vht_ie *)
17302 (pFrm + pIe->offset +
17303 sizeof(tDot11fIEvendor_vht_ie) *
17304 countOffset),
17305 append_ie);
17306 break;
17307 default:
17308 FRAMES_LOG1(pCtx, FRLOGE, FRFL("INTERNAL ERROR"
17309 ": I don't know about the IE signature %d"
17310 "-- this is most likely a 'framesc' bug.\n"),
17311 pIe->sig);
17312 FRAMES_DBG_BREAK();
17313 return DOT11F_INTERNAL_ERROR;
17314 }
17315 if (pIe->arraybound)
17316 (++(*(uint16_t *)(pFrm + pIe->countOffset)));
17317 }
17318 } else {
17319 FRAMES_LOG3(pCtx, FRLOG3, FRFL("Skipping unknown IE %d extn ID %d"
17320 " (length %d)\n"), eid, extn_eid, len);
17321 FRAMES_DUMP(pCtx, FRLOG3, pBufRemaining - 2, len);
17322 status |= DOT11F_UNKNOWN_IES;
17323 }
17324
17325 skip_ie:
17326 pBufRemaining += len;
17327
17328 if (len > nBufRemaining) {
17329 FRAMES_LOG0(pCtx, FRLOGW, FRFL("This IE extends past "
17330 "the buffer as it was defined to us. This could"
17331 "mean a corrupt frame, or just an incorrect leng"
17332 "th parameter.\n"));
17333 FRAMES_DBG_BREAK();
17334 status |= DOT11F_LAST_IE_TOO_LONG;
17335 goto MandatoryCheck;
17336 }
17337
17338 nBufRemaining -= len;
17339
17340 }
17341
17342 MandatoryCheck:
17343 pIe = &IEs[0];
17344 while (0xff != pIe->eid || pIe->extn_eid) {
17345 if (pIe->fMandatory) {
17346 pfFound = (tFRAMES_BOOL *)(pFrm + pIe->offset +
17347 pIe->presenceOffset);
17348 if (!*pfFound) {
17349 FRAMES_LOG1(pCtx, FRLOGW, FRFL("ERROR: The mandato"
17350 "ry IE %s wasn't seen.\n"),
17351 pIe->name);
17352 FRAMES_DBG_BREAK();
17353 status |= DOT11F_MANDATORY_IE_MISSING;
17354 }
17355 }
17356 ++pIe;
17357 }
17358
17359 return status;
17360 } /* End unpack_core. */
17361
unpack_tlv_core(tpAniSirGlobal pCtx,uint8_t * pBuf,uint32_t nBuf,const tTLVDefn TLVs[],uint8_t * pFrm,size_t nFrm)17362 static uint32_t unpack_tlv_core(tpAniSirGlobal pCtx,
17363 uint8_t *pBuf,
17364 uint32_t nBuf,
17365 const tTLVDefn TLVs[],
17366 uint8_t *pFrm,
17367 size_t nFrm)
17368 {
17369 const tTLVDefn *pTlv;
17370 uint32_t nBufRemaining, status, npec;
17371 uint16_t id, len;
17372 uint8_t *pBufRemaining, *pfFound;
17373
17374 (void)pCtx; /* Shutup the compiler */
17375 (void)nFrm;
17376 status = DOT11F_PARSE_SUCCESS;
17377 pBufRemaining = pBuf;
17378 nBufRemaining = nBuf;
17379
17380 /* While we have data... */
17381 while (nBufRemaining) {
17382 if (3 > nBufRemaining) {
17383 FRAMES_LOG0(pCtx, FRLOGE, FRFL("This frame reports "
17384 "fewer three byte(s) remaining.\n"));
17385 status |= DOT11F_INCOMPLETE_TLV;
17386 FRAMES_DBG_BREAK();
17387 goto MandatoryCheck;
17388 }
17389
17390 npec = 0U;
17391
17392 /* Look for a matching TLV definition, */
17393 pTlv = find_tlv_defn(pCtx, pBufRemaining, nBufRemaining, TLVs);
17394 /* consume the type, */
17395 if (pTlv) {
17396 if (pTlv->sType == 2) {
17397 framesntohs(pCtx, &id, pBufRemaining, pTlv->fMsb);
17398 pBufRemaining += 2;
17399 nBufRemaining -= 2;
17400 } else {
17401 id = *pBufRemaining;
17402 pBufRemaining += 1;
17403 nBufRemaining -= 1;
17404 }
17405 /* & length, */
17406 if (pTlv->sLen == 2) {
17407 if (2 > nBufRemaining) {
17408 FRAMES_LOG0(pCtx, FRLOGE, FRFL("This frame reports "
17409 "fewer two byte(s) remaining.\n"));
17410 status |= DOT11F_INCOMPLETE_TLV;
17411 FRAMES_DBG_BREAK();
17412 goto MandatoryCheck;
17413 }
17414 framesntohs(pCtx, &len, pBufRemaining, pTlv->fMsb);
17415 pBufRemaining += 2;
17416 nBufRemaining -= 2;
17417 } else {
17418 len = *pBufRemaining;
17419 pBufRemaining += 1;
17420 nBufRemaining -= 1;
17421 }
17422 } else {
17423 if (TLVs[0].sType > nBufRemaining) {
17424 FRAMES_LOG0(pCtx, FRLOGE, FRFL("This frame reports "
17425 "fewer LVs[0].sType byte(s) remaining.\n"));
17426 status |= DOT11F_INCOMPLETE_TLV;
17427 goto MandatoryCheck;
17428 }
17429 pBufRemaining += TLVs[0].sType;
17430 nBufRemaining -= TLVs[0].sType;
17431 if (2 > nBufRemaining) {
17432 FRAMES_LOG0(pCtx, FRLOGE, FRFL("This frame reports "
17433 "fewer two byte(s) remaining.\n"));
17434 status |= DOT11F_INCOMPLETE_TLV;
17435 FRAMES_DBG_BREAK();
17436 goto MandatoryCheck;
17437 }
17438 framesntohs(pCtx, &len, pBufRemaining, (TLVs[0].sType == 2));
17439 pBufRemaining += 2;
17440 nBufRemaining -= 2;
17441 }
17442
17443 if (pTlv && pTlv->pec) {
17444 npec = 3U;
17445 if (3 > nBufRemaining) {
17446 FRAMES_LOG2(pCtx, FRLOGW, FRFL("TLV %d reports length"
17447 "%d, but it has a Private Enterprise Code (3 byte"
17448 "s.\n"), id, len);
17449 FRAMES_DUMP(pCtx, FRLOG1, pBuf, nBuf);
17450 FRAMES_LOG2(pCtx, FRLOG1, FRFL("We've parsed %d bytes"
17451 "of this buffer, and show %d left.\n"),
17452 pBufRemaining - pBuf, nBufRemaining);
17453 status |= DOT11F_INCOMPLETE_TLV;
17454 FRAMES_DBG_BREAK();
17455 goto MandatoryCheck;
17456 }
17457 pBufRemaining += 3;
17458 nBufRemaining -= 3;
17459 len -= 3;
17460 }
17461
17462 /* Whether we found a hit or not, we can validate the reported */
17463 /* length of this TLV: */
17464 if (len > nBufRemaining) {
17465 FRAMES_LOG3(pCtx, FRLOGW, FRFL("TLV %d reports length %"
17466 "d, but there are only %d bytes remaining in this f"
17467 "rame.\n"), id, len, nBufRemaining);
17468 FRAMES_DUMP(pCtx, FRLOG1, pBuf, nBuf);
17469 FRAMES_LOG2(pCtx, FRLOG1, FRFL("We've parsed %d bytes"
17470 " of this buffer, and show %d left.\n"),
17471 pBufRemaining - pBuf, nBufRemaining);
17472 status |= DOT11F_INCOMPLETE_TLV;
17473 FRAMES_DBG_BREAK();
17474 goto MandatoryCheck;
17475 }
17476
17477 /* Now, *if* we found a hit... */
17478 if (pTlv) {
17479 if (len + (pTlv->sType + pTlv->sLen) < pTlv->minSize - npec) {
17480 FRAMES_LOG3(pCtx, FRLOGW, FRFL("The IE %s must be "
17481 "at least %d bytes in size, but the size is only "
17482 "%d bytes.\n"),
17483 pTlv->name, pTlv->minSize, len);
17484 FRAMES_DUMP(pCtx, FRLOG1, pBuf, nBuf);
17485 status |= DOT11F_INCOMPLETE_TLV;
17486 FRAMES_DBG_BREAK();
17487 goto MandatoryCheck;
17488 }
17489 if (nBufRemaining < pTlv->minSize - npec - (pTlv->sType + pTlv->sLen)) {
17490 FRAMES_LOG3(pCtx, FRLOGW, FRFL("The IE %s must be "
17491 "at least %d bytes in size, but there are only "
17492 "%d bytes remaining in this frame.\n"),
17493 pTlv->name, pTlv->minSize, nBufRemaining);
17494 FRAMES_DUMP(pCtx, FRLOG1, pBuf, nBuf);
17495 status |= DOT11F_INCOMPLETE_TLV;
17496 FRAMES_DBG_BREAK();
17497 goto MandatoryCheck;
17498 } else if (len > pTlv->maxSize - npec - (pTlv->sType + pTlv->sLen)) {
17499 FRAMES_LOG1(pCtx, FRLOGW, FRFL("The TLV %s reports "
17500 "an illegally large size; this TLV is presumably"
17501 "corrupt or otherwise invalid & will be skipped "
17502 "ipped.\n"), pTlv->name);
17503 FRAMES_DUMP(pCtx, FRLOG1, pBuf, nBuf);
17504 FRAMES_LOG2(pCtx, FRLOG1, FRFL("We've parsed %d by"
17505 "tes of this buffer, and show %d left.\n"),
17506 pBufRemaining - pBuf, nBufRemaining);
17507 FRAMES_DBG_BREAK();
17508 status |= DOT11F_SKIPPED_BAD_TLV;
17509 } else {
17510 switch (pTlv->sig) {
17511 case SigTlvAuthorizedMACs:
17512 status |=
17513 dot11f_unpack_tlv_authorized_ma_cs(pCtx,
17514 pBufRemaining, len,
17515 (tDot11fTLVAuthorizedMACs *)
17516 (pFrm + pTlv->offset));
17517 break;
17518 case SigTlvRequestToEnroll:
17519 status |=
17520 dot11f_unpack_tlv_common_func(pCtx,
17521 pBufRemaining, len,
17522 (uint8_t *)&(((tDot11fTLVRequestToEnroll *)
17523 (pFrm + pTlv->offset))->present),
17524 (uint8_t *)&(((tDot11fTLVRequestToEnroll *)
17525 (pFrm + pTlv->offset))->req));
17526 break;
17527 case SigTlvVersion2:
17528 status |=
17529 dot11f_unpack_tlv_version2(pCtx,
17530 pBufRemaining, len,
17531 (tDot11fTLVVersion2 *)
17532 (pFrm + pTlv->offset));
17533 break;
17534 case SigTlvAPSetupLocked:
17535 status |=
17536 dot11f_unpack_tlv_common_func(pCtx,
17537 pBufRemaining, len,
17538 (uint8_t *)&(((tDot11fTLVAPSetupLocked *)
17539 (pFrm + pTlv->offset))->present),
17540 (uint8_t *)&(((tDot11fTLVAPSetupLocked *)
17541 (pFrm + pTlv->offset))->fLocked));
17542 break;
17543 case SigTlvAssociationState:
17544 status |=
17545 dot11f_unpack_tlv_common_func2(pCtx,
17546 pBufRemaining, len,
17547 (uint8_t *)&(((tDot11fTLVAssociationState *)
17548 (pFrm + pTlv->offset))->present),
17549 (uint16_t *)&(((tDot11fTLVAssociationState *)
17550 (pFrm + pTlv->offset))->state));
17551 break;
17552 case SigTlvConfigMethods:
17553 status |=
17554 dot11f_unpack_tlv_common_func2(pCtx,
17555 pBufRemaining, len,
17556 (uint8_t *)&(((tDot11fTLVConfigMethods *)
17557 (pFrm + pTlv->offset))->present),
17558 (uint16_t *)&(((tDot11fTLVConfigMethods *)
17559 (pFrm + pTlv->offset))->methods));
17560 break;
17561 case SigTlvConfigurationError:
17562 status |=
17563 dot11f_unpack_tlv_common_func2(pCtx,
17564 pBufRemaining, len,
17565 (uint8_t *)&(((tDot11fTLVConfigurationError *)
17566 (pFrm + pTlv->offset))->present),
17567 (uint16_t *)&(((tDot11fTLVConfigurationError *)
17568 (pFrm + pTlv->offset))->error));
17569 break;
17570 case SigTlvDeviceName:
17571 status |=
17572 dot11f_unpack_tlv_device_name(pCtx,
17573 pBufRemaining, len,
17574 (tDot11fTLVDeviceName *)
17575 (pFrm + pTlv->offset));
17576 break;
17577 case SigTlvDevicePasswordID:
17578 status |=
17579 dot11f_unpack_tlv_common_func2(pCtx,
17580 pBufRemaining, len,
17581 (uint8_t *)&(((tDot11fTLVDevicePasswordID *)
17582 (pFrm + pTlv->offset))->present),
17583 (uint16_t *)&(((tDot11fTLVDevicePasswordID *)
17584 (pFrm + pTlv->offset))->id));
17585 break;
17586 case SigTlvExtendedListenTiming:
17587 status |=
17588 dot11f_unpack_tlv_extended_listen_timing(pCtx,
17589 pBufRemaining, len,
17590 (tDot11fTLVExtendedListenTiming *)
17591 (pFrm + pTlv->offset));
17592 break;
17593 case SigTlvListenChannel:
17594 status |=
17595 dot11f_unpack_tlv_listen_channel(pCtx,
17596 pBufRemaining, len,
17597 (tDot11fTLVListenChannel *)
17598 (pFrm + pTlv->offset));
17599 break;
17600 case SigTlvManufacturer:
17601 status |=
17602 dot11f_unpack_tlv_manufacturer(pCtx,
17603 pBufRemaining, len,
17604 (tDot11fTLVManufacturer *)
17605 (pFrm + pTlv->offset));
17606 break;
17607 case SigTlvMinorReasonCode:
17608 status |=
17609 dot11f_unpack_tlv_common_func(pCtx,
17610 pBufRemaining, len,
17611 (uint8_t *)&(((tDot11fTLVMinorReasonCode *)
17612 (pFrm + pTlv->offset))->present),
17613 (uint8_t *)&(((tDot11fTLVMinorReasonCode *)
17614 (pFrm + pTlv->offset))->minorReasonCode));
17615 break;
17616 case SigTlvModelName:
17617 status |=
17618 dot11f_unpack_tlv_model_name(pCtx,
17619 pBufRemaining, len,
17620 (tDot11fTLVModelName *)
17621 (pFrm + pTlv->offset));
17622 break;
17623 case SigTlvModelNumber:
17624 status |=
17625 dot11f_unpack_tlv_model_number(pCtx,
17626 pBufRemaining, len,
17627 (tDot11fTLVModelNumber *)
17628 (pFrm + pTlv->offset));
17629 break;
17630 case SigTlvNoticeOfAbsence:
17631 status |=
17632 dot11f_unpack_tlv_notice_of_absence(pCtx,
17633 pBufRemaining, len,
17634 (tDot11fTLVNoticeOfAbsence *)
17635 (pFrm + pTlv->offset));
17636 break;
17637 case SigTlvOperatingChannel:
17638 status |=
17639 dot11f_unpack_tlv_operating_channel(pCtx,
17640 pBufRemaining, len,
17641 (tDot11fTLVOperatingChannel *)
17642 (pFrm + pTlv->offset));
17643 break;
17644 case SigTlvP2PCapability:
17645 status |=
17646 dot11f_unpack_tlv_p2_p_capability(pCtx,
17647 pBufRemaining, len,
17648 (tDot11fTLVP2PCapability *)
17649 (pFrm + pTlv->offset));
17650 break;
17651 case SigTlvP2PDeviceId:
17652 status |=
17653 dot11f_unpack_tlv_p2_p_device_id(pCtx,
17654 pBufRemaining, len,
17655 (tDot11fTLVP2PDeviceId *)
17656 (pFrm + pTlv->offset));
17657 break;
17658 case SigTlvP2PDeviceInfo:
17659 status |=
17660 dot11f_unpack_tlv_p2_p_device_info(pCtx,
17661 pBufRemaining, len,
17662 (tDot11fTLVP2PDeviceInfo *)
17663 (pFrm + pTlv->offset));
17664 break;
17665 case SigTlvP2PGroupInfo:
17666 status |=
17667 dot11f_unpack_tlv_p2_p_group_info(pCtx,
17668 pBufRemaining, len,
17669 (tDot11fTLVP2PGroupInfo *)
17670 (pFrm + pTlv->offset));
17671 break;
17672 case SigTlvP2PStatus:
17673 status |=
17674 dot11f_unpack_tlv_common_func(pCtx,
17675 pBufRemaining, len,
17676 (uint8_t *)&(((tDot11fTLVP2PStatus *)
17677 (pFrm + pTlv->offset))->present),
17678 (uint8_t *)&(((tDot11fTLVP2PStatus *)
17679 (pFrm + pTlv->offset))->status));
17680 break;
17681 case SigTlvPrimaryDeviceType:
17682 status |=
17683 dot11f_unpack_tlv_primary_device_type(pCtx,
17684 pBufRemaining, len,
17685 (tDot11fTLVPrimaryDeviceType *)
17686 (pFrm + pTlv->offset));
17687 break;
17688 case SigTlvRFBands:
17689 status |=
17690 dot11f_unpack_tlv_common_func(pCtx,
17691 pBufRemaining, len,
17692 (uint8_t *)&(((tDot11fTLVRFBands *)
17693 (pFrm + pTlv->offset))->present),
17694 (uint8_t *)&(((tDot11fTLVRFBands *)
17695 (pFrm + pTlv->offset))->bands));
17696 break;
17697 case SigTlvRequestDeviceType:
17698 status |=
17699 dot11f_unpack_tlv_request_device_type(pCtx,
17700 pBufRemaining, len,
17701 (tDot11fTLVRequestDeviceType *)
17702 (pFrm + pTlv->offset));
17703 break;
17704 case SigTlvRequestType:
17705 status |=
17706 dot11f_unpack_tlv_common_func(pCtx,
17707 pBufRemaining, len,
17708 (uint8_t *)&(((tDot11fTLVRequestType *)
17709 (pFrm + pTlv->offset))->present),
17710 (uint8_t *)&(((tDot11fTLVRequestType *)
17711 (pFrm + pTlv->offset))->reqType));
17712 break;
17713 case SigTlvResponseType:
17714 status |=
17715 dot11f_unpack_tlv_common_func(pCtx,
17716 pBufRemaining, len,
17717 (uint8_t *)&(((tDot11fTLVResponseType *)
17718 (pFrm + pTlv->offset))->present),
17719 (uint8_t *)&(((tDot11fTLVResponseType *)
17720 (pFrm + pTlv->offset))->resType));
17721 break;
17722 case SigTlvSelectedRegistrar:
17723 status |=
17724 dot11f_unpack_tlv_common_func(pCtx,
17725 pBufRemaining, len,
17726 (uint8_t *)&(((tDot11fTLVSelectedRegistrar *)
17727 (pFrm + pTlv->offset))->present),
17728 (uint8_t *)&(((tDot11fTLVSelectedRegistrar *)
17729 (pFrm + pTlv->offset))->selected));
17730 break;
17731 case SigTlvSelectedRegistrarConfigMethods:
17732 status |=
17733 dot11f_unpack_tlv_common_func2(pCtx,
17734 pBufRemaining, len,
17735 (uint8_t *)&(((tDot11fTLVSelectedRegistrarConfigMethods *)
17736 (pFrm + pTlv->offset))->present),
17737 (uint16_t *)&(((tDot11fTLVSelectedRegistrarConfigMethods *)
17738 (pFrm + pTlv->offset))->methods));
17739 break;
17740 case SigTlvSerialNumber:
17741 status |=
17742 dot11f_unpack_tlv_serial_number(pCtx,
17743 pBufRemaining, len,
17744 (tDot11fTLVSerialNumber *)
17745 (pFrm + pTlv->offset));
17746 break;
17747 case SigTlvUUID_E:
17748 status |=
17749 dot11f_unpack_tlv_uuid_e(pCtx,
17750 pBufRemaining, len,
17751 (tDot11fTLVUUID_E *)
17752 (pFrm + pTlv->offset));
17753 break;
17754 case SigTlvUUID_R:
17755 status |=
17756 dot11f_unpack_tlv_uuid_r(pCtx,
17757 pBufRemaining, len,
17758 (tDot11fTLVUUID_R *)
17759 (pFrm + pTlv->offset));
17760 break;
17761 case SigTlvVendorExtension:
17762 status |=
17763 dot11f_unpack_tlv_vendor_extension(pCtx,
17764 pBufRemaining, len,
17765 (tDot11fTLVVendorExtension *)
17766 (pFrm + pTlv->offset));
17767 break;
17768 case SigTlvVersion:
17769 status |=
17770 dot11f_unpack_tlv_version(pCtx,
17771 pBufRemaining, len,
17772 (tDot11fTLVVersion *)
17773 (pFrm + pTlv->offset));
17774 break;
17775 case SigTlvWPSState:
17776 status |=
17777 dot11f_unpack_tlv_common_func(pCtx,
17778 pBufRemaining, len,
17779 (uint8_t *)&(((tDot11fTLVWPSState *)
17780 (pFrm + pTlv->offset))->present),
17781 (uint8_t *)&(((tDot11fTLVWPSState *)
17782 (pFrm + pTlv->offset))->state));
17783 break;
17784 case SigTlvassoc_disallowed:
17785 status |=
17786 dot11f_unpack_tlv_common_func(pCtx,
17787 pBufRemaining, len,
17788 (uint8_t *)&(((tDot11fTLVassoc_disallowed *)
17789 (pFrm + pTlv->offset))->present),
17790 (uint8_t *)&(((tDot11fTLVassoc_disallowed *)
17791 (pFrm + pTlv->offset))->reason_code));
17792 break;
17793 case SigTlvassoc_retry_delay:
17794 status |=
17795 dot11f_unpack_tlv_common_func2(pCtx,
17796 pBufRemaining, len,
17797 (uint8_t *)&(((tDot11fTLVassoc_retry_delay *)
17798 (pFrm + pTlv->offset))->present),
17799 (uint16_t *)&(((tDot11fTLVassoc_retry_delay *)
17800 (pFrm + pTlv->offset))->delay));
17801 break;
17802 case SigTlvcellular_data_cap:
17803 status |=
17804 dot11f_unpack_tlv_common_func(pCtx,
17805 pBufRemaining, len,
17806 (uint8_t *)&(((tDot11fTLVcellular_data_cap *)
17807 (pFrm + pTlv->offset))->present),
17808 (uint8_t *)&(((tDot11fTLVcellular_data_cap *)
17809 (pFrm + pTlv->offset))->cellular_connectivity));
17810 break;
17811 case SigTlvcellular_data_con_pref:
17812 status |=
17813 dot11f_unpack_tlv_common_func(pCtx,
17814 pBufRemaining, len,
17815 (uint8_t *)&(((tDot11fTLVcellular_data_con_pref *)
17816 (pFrm + pTlv->offset))->present),
17817 (uint8_t *)&(((tDot11fTLVcellular_data_con_pref *)
17818 (pFrm + pTlv->offset))->cellular_preference));
17819 break;
17820 case SigTlvecsa_target_tsf_info_attr:
17821 status |=
17822 dot11f_unpack_tlv_ecsa_target_tsf_info_attr(pCtx,
17823 pBufRemaining, len,
17824 (tDot11fTLVecsa_target_tsf_info_attr *)
17825 (pFrm + pTlv->offset));
17826 break;
17827 case SigTlvedca_pifs_param_attr:
17828 status |=
17829 dot11f_unpack_tlv_edca_pifs_param_attr(pCtx,
17830 pBufRemaining, len,
17831 (tDot11fTLVedca_pifs_param_attr *)
17832 (pFrm + pTlv->offset));
17833 break;
17834 case SigTlvhe_2xltf_160mhz_supp:
17835 status |=
17836 dot11f_unpack_tlv_common_func(pCtx,
17837 pBufRemaining, len,
17838 (uint8_t *)&(((tDot11fTLVhe_2xltf_160mhz_supp *)
17839 (pFrm + pTlv->offset))->present),
17840 (uint8_t *)&(((tDot11fTLVhe_2xltf_160mhz_supp *)
17841 (pFrm + pTlv->offset))->he_2xltf_160MHz_supp));
17842 break;
17843 case SigTlvhe_400ns_sgi_attr:
17844 status |=
17845 dot11f_unpack_tlv_he_400ns_sgi_attr(pCtx,
17846 pBufRemaining, len,
17847 (tDot11fTLVhe_400ns_sgi_attr *)
17848 (pFrm + pTlv->offset));
17849 break;
17850 case SigTlvhe_dl_mumimo_attr:
17851 status |=
17852 dot11f_unpack_tlv_common_func(pCtx,
17853 pBufRemaining, len,
17854 (uint8_t *)&(((tDot11fTLVhe_dl_mumimo_attr *)
17855 (pFrm + pTlv->offset))->present),
17856 (uint8_t *)&(((tDot11fTLVhe_dl_mumimo_attr *)
17857 (pFrm + pTlv->offset))->he_dl_mumimo_supp));
17858 break;
17859 case SigTlvhe_dl_ofdma_attr:
17860 status |=
17861 dot11f_unpack_tlv_common_func(pCtx,
17862 pBufRemaining, len,
17863 (uint8_t *)&(((tDot11fTLVhe_dl_ofdma_attr *)
17864 (pFrm + pTlv->offset))->present),
17865 (uint8_t *)&(((tDot11fTLVhe_dl_ofdma_attr *)
17866 (pFrm + pTlv->offset))->he_dl_ofdma_supp));
17867 break;
17868 case SigTlvhe_mcs13_attr:
17869 status |=
17870 dot11f_unpack_tlv_he_mcs13_attr(pCtx,
17871 pBufRemaining, len,
17872 (tDot11fTLVhe_mcs13_attr *)
17873 (pFrm + pTlv->offset));
17874 break;
17875 case SigTlvmbo_ap_cap:
17876 status |=
17877 dot11f_unpack_tlv_common_func(pCtx,
17878 pBufRemaining, len,
17879 (uint8_t *)&(((tDot11fTLVmbo_ap_cap *)
17880 (pFrm + pTlv->offset))->present),
17881 (uint8_t *)&(((tDot11fTLVmbo_ap_cap *)
17882 (pFrm + pTlv->offset))->mbo_cap_ind));
17883 break;
17884 case SigTlvnon_prefferd_chan_rep:
17885 status |=
17886 dot11f_unpack_tlv_non_prefferd_chan_rep(pCtx,
17887 pBufRemaining, len,
17888 (tDot11fTLVnon_prefferd_chan_rep *)
17889 (pFrm + pTlv->offset));
17890 break;
17891 case SigTlvoce_cap:
17892 status |=
17893 dot11f_unpack_tlv_oce_cap(pCtx,
17894 pBufRemaining, len,
17895 (tDot11fTLVoce_cap *)
17896 (pFrm + pTlv->offset));
17897 break;
17898 case SigTlvqcn_version:
17899 status |=
17900 dot11f_unpack_tlv_qcn_version(pCtx,
17901 pBufRemaining, len,
17902 (tDot11fTLVqcn_version *)
17903 (pFrm + pTlv->offset));
17904 break;
17905 case SigTlvreduced_wan_metrics:
17906 status |=
17907 dot11f_unpack_tlv_reduced_wan_metrics(pCtx,
17908 pBufRemaining, len,
17909 (tDot11fTLVreduced_wan_metrics *)
17910 (pFrm + pTlv->offset));
17911 break;
17912 case SigTlvrssi_assoc_rej:
17913 status |=
17914 dot11f_unpack_tlv_rssi_assoc_rej(pCtx,
17915 pBufRemaining, len,
17916 (tDot11fTLVrssi_assoc_rej *)
17917 (pFrm + pTlv->offset));
17918 break;
17919 case SigTlvtrans_reasonp_attr:
17920 status |=
17921 dot11f_unpack_tlv_common_func(pCtx,
17922 pBufRemaining, len,
17923 (uint8_t *)&(((tDot11fTLVtrans_reasonp_attr *)
17924 (pFrm + pTlv->offset))->present),
17925 (uint8_t *)&(((tDot11fTLVtrans_reasonp_attr *)
17926 (pFrm + pTlv->offset))->transition_reasonp));
17927 break;
17928 case SigTlvtrans_rejectp_attr:
17929 status |=
17930 dot11f_unpack_tlv_common_func(pCtx,
17931 pBufRemaining, len,
17932 (uint8_t *)&(((tDot11fTLVtrans_rejectp_attr *)
17933 (pFrm + pTlv->offset))->present),
17934 (uint8_t *)&(((tDot11fTLVtrans_rejectp_attr *)
17935 (pFrm + pTlv->offset))->transition_rejp));
17936 break;
17937 case SigTlvtransition_reason:
17938 status |=
17939 dot11f_unpack_tlv_common_func(pCtx,
17940 pBufRemaining, len,
17941 (uint8_t *)&(((tDot11fTLVtransition_reason *)
17942 (pFrm + pTlv->offset))->present),
17943 (uint8_t *)&(((tDot11fTLVtransition_reason *)
17944 (pFrm + pTlv->offset))->transition_reason_code));
17945 break;
17946 case SigTlvtransition_reject_reason:
17947 status |=
17948 dot11f_unpack_tlv_common_func(pCtx,
17949 pBufRemaining, len,
17950 (uint8_t *)&(((tDot11fTLVtransition_reject_reason *)
17951 (pFrm + pTlv->offset))->present),
17952 (uint8_t *)&(((tDot11fTLVtransition_reject_reason *)
17953 (pFrm + pTlv->offset))->transition_reject_code));
17954 break;
17955 case SigTlvvht_mcs11_attr:
17956 status |=
17957 dot11f_unpack_tlv_common_func(pCtx,
17958 pBufRemaining, len,
17959 (uint8_t *)&(((tDot11fTLVvht_mcs11_attr *)
17960 (pFrm + pTlv->offset))->present),
17961 (uint8_t *)&(((tDot11fTLVvht_mcs11_attr *)
17962 (pFrm + pTlv->offset))->vht_mcs_10_11_supp));
17963 break;
17964 case SigTlvP2PInterface:
17965 status |=
17966 dot11f_unpack_tlv_p2_p_interface(pCtx,
17967 pBufRemaining, len,
17968 (tDot11fTLVP2PInterface *)
17969 (pFrm + pTlv->offset));
17970 break;
17971 case SigTlvP2PManageability:
17972 status |=
17973 dot11f_unpack_tlv_common_func(pCtx,
17974 pBufRemaining, len,
17975 (uint8_t *)&(((tDot11fTLVP2PManageability *)
17976 (pFrm + pTlv->offset))->present),
17977 (uint8_t *)&(((tDot11fTLVP2PManageability *)
17978 (pFrm + pTlv->offset))->manageability));
17979 break;
17980 default:
17981 FRAMES_LOG1(pCtx, FRLOGE, FRFL("INTERNAL ERROR: I"
17982 " don't know about the TLV signature %d-- thi"
17983 "s is most likely a 'framesc' bug.\n"),
17984 pTlv->sig);
17985 FRAMES_DBG_BREAK();
17986 return DOT11F_INTERNAL_ERROR;
17987 } /* End switch on sig. */
17988 } /* End if on length check. */
17989
17990 } else {
17991 FRAMES_LOG2(pCtx, FRLOG3, FRFL("Skipping unknown TLV %d ("
17992 "length %d)\n"), id, len);
17993 FRAMES_DUMP(pCtx, FRLOG3, pBufRemaining - (pTlv->sType + pTlv->sLen), len);
17994 status |= DOT11F_UNKNOWN_TLVS;
17995 }
17996
17997 /* Advance to the next TLV */
17998 pBufRemaining += len;
17999
18000 if (len > nBufRemaining) {
18001 FRAMES_LOG0(pCtx, FRLOGW, FRFL("This TLV extends past th"
18002 "e buffer as it was defined to us. This could mean "
18003 "a corrupt frame, or just an incorrect length parame"
18004 "ter.\n"));
18005 FRAMES_DBG_BREAK();
18006 status |= DOT11F_LAST_TLV_TOO_LONG;
18007 goto MandatoryCheck;
18008 }
18009
18010 nBufRemaining -= len;
18011
18012 } /* End iteration over TLVs.*/
18013
18014 MandatoryCheck:
18015 pTlv = &TLVs[0];
18016 while (0xffff != pTlv->id) {
18017 if (pTlv->fMandatory) {
18018 pfFound = (uint8_t *)(pFrm + pTlv->offset +
18019 pTlv->presenceOffset);
18020 if (!*pfFound) {
18021 FRAMES_LOG1(pCtx, FRLOGW, FRFL("ERROR: The mandatory "
18022 "TLV %s wasn't seen.\n"),
18023 pTlv->name);
18024 FRAMES_DBG_BREAK();
18025 status |= DOT11F_MANDATORY_TLV_MISSING;
18026 }
18027
18028 }
18029 ++pTlv;
18030 }
18031
18032 return status;
18033 } /* End UnpacTlvkCore. */
dot11f_get_packed_ietclas(tpAniSirGlobal pCtx,tDot11fIETCLAS * pIe,uint32_t * pnNeeded)18034 uint32_t dot11f_get_packed_ietclas(tpAniSirGlobal pCtx,
18035 tDot11fIETCLAS *pIe, uint32_t *pnNeeded)
18036 {
18037 uint32_t status = DOT11F_PARSE_SUCCESS;
18038 (void)pCtx;
18039 while (pIe->present) {
18040 *pnNeeded += 1;
18041 *pnNeeded += 1;
18042 *pnNeeded += 1;
18043 switch (pIe->classifier_type) {
18044 case 0:
18045 *pnNeeded += 6;
18046 *pnNeeded += 6;
18047 *pnNeeded += 2;
18048 break;
18049 case 1:
18050 *pnNeeded += 1;
18051 switch (pIe->info.IpParams.version) {
18052 case 4:
18053 *pnNeeded += 4;
18054 *pnNeeded += 4;
18055 *pnNeeded += 2;
18056 *pnNeeded += 2;
18057 *pnNeeded += 1;
18058 *pnNeeded += 1;
18059 *pnNeeded += 1;
18060 break;
18061 case 6:
18062 *pnNeeded += 16;
18063 *pnNeeded += 16;
18064 *pnNeeded += 2;
18065 *pnNeeded += 2;
18066 *pnNeeded += 3;
18067 break;
18068 }
18069 break;
18070 case 2:
18071 *pnNeeded += 2;
18072 break;
18073 }
18074 break;
18075 }
18076 return status;
18077 } /* End dot11f_get_packed_ietclas. */
18078
dot11f_get_packed_iewmmtclas(tpAniSirGlobal pCtx,tDot11fIEWMMTCLAS * pIe,uint32_t * pnNeeded)18079 uint32_t dot11f_get_packed_iewmmtclas(tpAniSirGlobal pCtx,
18080 tDot11fIEWMMTCLAS *pIe, uint32_t *pnNeeded)
18081 {
18082 uint32_t status = DOT11F_PARSE_SUCCESS;
18083 (void)pCtx;
18084 while (pIe->present) {
18085 *pnNeeded += 1;
18086 *pnNeeded += 1;
18087 *pnNeeded += 1;
18088 *pnNeeded += 1;
18089 switch (pIe->classifier_type) {
18090 case 0:
18091 *pnNeeded += 6;
18092 *pnNeeded += 6;
18093 *pnNeeded += 2;
18094 break;
18095 case 1:
18096 *pnNeeded += 1;
18097 switch (pIe->info.IpParams.version) {
18098 case 4:
18099 *pnNeeded += 4;
18100 *pnNeeded += 4;
18101 *pnNeeded += 2;
18102 *pnNeeded += 2;
18103 *pnNeeded += 1;
18104 *pnNeeded += 1;
18105 *pnNeeded += 1;
18106 break;
18107 case 6:
18108 *pnNeeded += 16;
18109 *pnNeeded += 16;
18110 *pnNeeded += 2;
18111 *pnNeeded += 2;
18112 *pnNeeded += 3;
18113 break;
18114 }
18115 break;
18116 case 2:
18117 *pnNeeded += 2;
18118 break;
18119 }
18120 break;
18121 }
18122 return status;
18123 } /* End dot11f_get_packed_iewmmtclas. */
18124
dot11f_get_packed_ie_neighbor_rpt(tpAniSirGlobal pCtx,tDot11fIEneighbor_rpt * pIe,uint32_t * pnNeeded)18125 uint32_t dot11f_get_packed_ie_neighbor_rpt(tpAniSirGlobal pCtx,
18126 tDot11fIEneighbor_rpt *pIe, uint32_t *pnNeeded)
18127 {
18128 uint32_t status = DOT11F_PARSE_SUCCESS;
18129 (void)pCtx;
18130 while (pIe->present) {
18131 *pnNeeded += 6;
18132 *pnNeeded += 1;
18133 *pnNeeded += 1;
18134 *pnNeeded += 2;
18135 *pnNeeded += 1;
18136 *pnNeeded += 1;
18137 *pnNeeded += 1;
18138 status = get_packed_size_core(pCtx, (uint8_t *)pIe, pnNeeded,
18139 IES_neighbor_rpt);
18140 break;
18141 }
18142 return status;
18143 } /* End dot11f_get_packed_ie_neighbor_rpt. */
18144
dot11f_get_packed_ie_tclas_mask(tpAniSirGlobal pCtx,tDot11fIEtclas_mask * pIe,uint32_t * pnNeeded)18145 uint32_t dot11f_get_packed_ie_tclas_mask(tpAniSirGlobal pCtx,
18146 tDot11fIEtclas_mask *pIe, uint32_t *pnNeeded)
18147 {
18148 uint32_t status = DOT11F_PARSE_SUCCESS;
18149 (void)pCtx;
18150 while (pIe->present) {
18151 *pnNeeded += 1;
18152 *pnNeeded += 1;
18153 switch (pIe->classifier_type) {
18154 case 4:
18155 *pnNeeded += 16;
18156 break;
18157 }
18158 break;
18159 }
18160 return status;
18161 } /* End dot11f_get_packed_ie_tclas_mask. */
18162
dot11f_get_packed_ie_transmit_power_env(tpAniSirGlobal pCtx,tDot11fIEtransmit_power_env * pIe,uint32_t * pnNeeded)18163 uint32_t dot11f_get_packed_ie_transmit_power_env(tpAniSirGlobal pCtx,
18164 tDot11fIEtransmit_power_env *pIe, uint32_t *pnNeeded)
18165 {
18166 uint32_t status = DOT11F_PARSE_SUCCESS;
18167 (void)pCtx;
18168 while (pIe->present) {
18169 *pnNeeded += 1;
18170 *pnNeeded += pIe->num_tx_power;
18171 if (pIe->max_tx_pwr_interpret) {
18172 switch (pIe->max_tx_pwr_interpret) {
18173 case 0:
18174 *pnNeeded += 1;
18175 break;
18176 case 1:
18177 *pnNeeded += 1;
18178 *pnNeeded += 8;
18179 break;
18180 case 2:
18181 *pnNeeded += 1;
18182 break;
18183 case 3:
18184 *pnNeeded += 1;
18185 *pnNeeded += 8;
18186 break;
18187 }
18188 } else {
18189 break;
18190 }
18191 break;
18192 }
18193 return status;
18194 } /* End dot11f_get_packed_ie_transmit_power_env. */
18195
dot11f_get_packed_ie_channel_switch_wrapper(tpAniSirGlobal pCtx,tDot11fIEChannelSwitchWrapper * pIe,uint32_t * pnNeeded)18196 uint32_t dot11f_get_packed_ie_channel_switch_wrapper(tpAniSirGlobal pCtx,
18197 tDot11fIEChannelSwitchWrapper *pIe, uint32_t *pnNeeded)
18198 {
18199 uint32_t status = DOT11F_PARSE_SUCCESS;
18200 (void)pCtx;
18201 while (pIe->present) {
18202 status = get_packed_size_core(pCtx, (uint8_t *)pIe, pnNeeded,
18203 IES_ChannelSwitchWrapper);
18204 break;
18205 }
18206 return status;
18207 } /* End dot11f_get_packed_ie_channel_switch_wrapper. */
18208
dot11f_get_packed_ie_country(tpAniSirGlobal pCtx,tDot11fIECountry * pIe,uint32_t * pnNeeded)18209 uint32_t dot11f_get_packed_ie_country(tpAniSirGlobal pCtx,
18210 tDot11fIECountry *pIe, uint32_t *pnNeeded)
18211 {
18212 uint32_t status = DOT11F_PARSE_SUCCESS;
18213 (void)pCtx;
18214 while (pIe->present) {
18215 *pnNeeded += 3;
18216 *pnNeeded += 3;
18217 if (pIe->num_more_triplets) {
18218 *pnNeeded += (pIe->num_more_triplets * 3);
18219 } else {
18220 break;
18221 }
18222 break;
18223 }
18224 return status;
18225 } /* End dot11f_get_packed_ie_country. */
18226
dot11f_get_packed_ieft_info(tpAniSirGlobal pCtx,tDot11fIEFTInfo * pIe,uint32_t * pnNeeded)18227 uint32_t dot11f_get_packed_ieft_info(tpAniSirGlobal pCtx,
18228 tDot11fIEFTInfo *pIe, uint32_t *pnNeeded)
18229 {
18230 uint32_t status = DOT11F_PARSE_SUCCESS;
18231 (void)pCtx;
18232 while (pIe->present) {
18233 *pnNeeded += 2;
18234 *pnNeeded += 16;
18235 *pnNeeded += 32;
18236 *pnNeeded += 32;
18237 status = get_packed_size_core(pCtx, (uint8_t *)pIe, pnNeeded,
18238 IES_FTInfo);
18239 break;
18240 }
18241 return status;
18242 } /* End dot11f_get_packed_ieft_info. */
18243
dot11f_get_packed_ie_MBO_IE(tpAniSirGlobal pCtx,tDot11fIEMBO_IE * pIe,uint32_t * pnNeeded)18244 uint32_t dot11f_get_packed_ie_MBO_IE(tpAniSirGlobal pCtx,
18245 tDot11fIEMBO_IE *pIe, uint32_t *pnNeeded)
18246 {
18247 uint32_t status = DOT11F_PARSE_SUCCESS;
18248 (void)pCtx;
18249 while (pIe->present) {
18250 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
18251 TLVS_MBO_IE);
18252 break;
18253 }
18254 return status;
18255 } /* End dot11f_get_packed_ie_MBO_IE. */
18256
dot11f_get_packed_ie_measurement_report(tpAniSirGlobal pCtx,tDot11fIEMeasurementReport * pIe,uint32_t * pnNeeded)18257 uint32_t dot11f_get_packed_ie_measurement_report(tpAniSirGlobal pCtx,
18258 tDot11fIEMeasurementReport *pIe, uint32_t *pnNeeded)
18259 {
18260 uint32_t status = DOT11F_PARSE_SUCCESS;
18261 (void)pCtx;
18262 while (pIe->present) {
18263 *pnNeeded += 1;
18264 *pnNeeded += 1;
18265 *pnNeeded += 1;
18266 if (pIe->type) {
18267 switch (pIe->type) {
18268 case 0:
18269 *pnNeeded += 1;
18270 *pnNeeded += 8;
18271 *pnNeeded += 2;
18272 *pnNeeded += 1;
18273 break;
18274 case 1:
18275 *pnNeeded += 1;
18276 *pnNeeded += 8;
18277 *pnNeeded += 2;
18278 *pnNeeded += 1;
18279 break;
18280 case 2:
18281 *pnNeeded += 1;
18282 *pnNeeded += 8;
18283 *pnNeeded += 2;
18284 *pnNeeded += 1;
18285 *pnNeeded += 1;
18286 *pnNeeded += 1;
18287 *pnNeeded += 1;
18288 *pnNeeded += 1;
18289 *pnNeeded += 1;
18290 *pnNeeded += 1;
18291 *pnNeeded += 1;
18292 break;
18293 case 3:
18294 *pnNeeded += 1;
18295 *pnNeeded += 1;
18296 *pnNeeded += 8;
18297 *pnNeeded += 2;
18298 *pnNeeded += 1;
18299 status = get_packed_size_core(pCtx, (uint8_t *)pIe, pnNeeded, IES_reportchannel_load_report);
18300 break;
18301 case 5:
18302 *pnNeeded += 1;
18303 *pnNeeded += 1;
18304 *pnNeeded += 8;
18305 *pnNeeded += 2;
18306 *pnNeeded += 1;
18307 *pnNeeded += 1;
18308 *pnNeeded += 1;
18309 *pnNeeded += 6;
18310 *pnNeeded += 1;
18311 *pnNeeded += 4;
18312 status = get_packed_size_core(pCtx, (uint8_t *)pIe, pnNeeded, IES_reportBeacon);
18313 break;
18314 case 7:
18315 *pnNeeded += 2;
18316 *pnNeeded += 1;
18317 switch (pIe->report.sta_stats.group_id) {
18318 case 0:
18319 *pnNeeded += 4;
18320 *pnNeeded += 4;
18321 *pnNeeded += 4;
18322 *pnNeeded += 4;
18323 *pnNeeded += 4;
18324 *pnNeeded += 4;
18325 *pnNeeded += 4;
18326 break;
18327 case 1:
18328 *pnNeeded += 4;
18329 *pnNeeded += 4;
18330 *pnNeeded += 4;
18331 *pnNeeded += 4;
18332 *pnNeeded += 4;
18333 *pnNeeded += 4;
18334 break;
18335 case 2:
18336 *pnNeeded += 4;
18337 *pnNeeded += 4;
18338 *pnNeeded += 4;
18339 *pnNeeded += 4;
18340 *pnNeeded += 4;
18341 *pnNeeded += 4;
18342 *pnNeeded += 4;
18343 *pnNeeded += 4;
18344 *pnNeeded += 4;
18345 *pnNeeded += 4;
18346 *pnNeeded += 4;
18347 *pnNeeded += 4;
18348 *pnNeeded += 4;
18349 break;
18350 case 10:
18351 *pnNeeded += 1;
18352 *pnNeeded += 1;
18353 *pnNeeded += 1;
18354 *pnNeeded += 1;
18355 *pnNeeded += 1;
18356 *pnNeeded += 2;
18357 *pnNeeded += 1;
18358 break;
18359 }
18360 status = get_packed_size_core(pCtx, (uint8_t *)pIe, pnNeeded, IES_reportsta_stats);
18361 break;
18362 }
18363 } else {
18364 break;
18365 }
18366 break;
18367 }
18368 return status;
18369 } /* End dot11f_get_packed_ie_measurement_report. */
18370
dot11f_get_packed_ie_measurement_request(tpAniSirGlobal pCtx,tDot11fIEMeasurementRequest * pIe,uint32_t * pnNeeded)18371 uint32_t dot11f_get_packed_ie_measurement_request(tpAniSirGlobal pCtx,
18372 tDot11fIEMeasurementRequest *pIe, uint32_t *pnNeeded)
18373 {
18374 uint32_t status = DOT11F_PARSE_SUCCESS;
18375 (void)pCtx;
18376 while (pIe->present) {
18377 *pnNeeded += 1;
18378 *pnNeeded += 1;
18379 *pnNeeded += 1;
18380 switch (pIe->measurement_type) {
18381 case 0:
18382 *pnNeeded += 1;
18383 *pnNeeded += 8;
18384 *pnNeeded += 2;
18385 break;
18386 case 1:
18387 *pnNeeded += 1;
18388 *pnNeeded += 8;
18389 *pnNeeded += 2;
18390 break;
18391 case 2:
18392 *pnNeeded += 1;
18393 *pnNeeded += 8;
18394 *pnNeeded += 2;
18395 break;
18396 case 3:
18397 *pnNeeded += 1;
18398 *pnNeeded += 1;
18399 *pnNeeded += 2;
18400 *pnNeeded += 2;
18401 status = get_packed_size_core(pCtx, (uint8_t *)pIe, pnNeeded, IES_measurement_requestchannel_load);
18402 break;
18403 case 5:
18404 *pnNeeded += 1;
18405 *pnNeeded += 1;
18406 *pnNeeded += 2;
18407 *pnNeeded += 2;
18408 *pnNeeded += 1;
18409 *pnNeeded += 6;
18410 status = get_packed_size_core(pCtx, (uint8_t *)pIe, pnNeeded, IES_measurement_requestBeacon);
18411 break;
18412 case 8:
18413 *pnNeeded += 1;
18414 status = get_packed_size_core(pCtx, (uint8_t *)pIe, pnNeeded, IES_measurement_requestlci);
18415 break;
18416 case 16:
18417 *pnNeeded += 2;
18418 *pnNeeded += 1;
18419 status = get_packed_size_core(pCtx, (uint8_t *)pIe, pnNeeded, IES_measurement_requestftmrr);
18420 break;
18421 case 7:
18422 *pnNeeded += 6;
18423 *pnNeeded += 2;
18424 *pnNeeded += 2;
18425 *pnNeeded += 1;
18426 break;
18427 }
18428 break;
18429 }
18430 return status;
18431 } /* End dot11f_get_packed_ie_measurement_request. */
18432
dot11f_get_packed_ie_neighbor_report(tpAniSirGlobal pCtx,tDot11fIENeighborReport * pIe,uint32_t * pnNeeded)18433 uint32_t dot11f_get_packed_ie_neighbor_report(tpAniSirGlobal pCtx,
18434 tDot11fIENeighborReport *pIe, uint32_t *pnNeeded)
18435 {
18436 uint32_t status = DOT11F_PARSE_SUCCESS;
18437 (void)pCtx;
18438 while (pIe->present) {
18439 *pnNeeded += 6;
18440 *pnNeeded += 1;
18441 *pnNeeded += 1;
18442 *pnNeeded += 2;
18443 *pnNeeded += 1;
18444 *pnNeeded += 1;
18445 *pnNeeded += 1;
18446 status = get_packed_size_core(pCtx, (uint8_t *)pIe, pnNeeded,
18447 IES_NeighborReport);
18448 break;
18449 }
18450 return status;
18451 } /* End dot11f_get_packed_ie_neighbor_report. */
18452
dot11f_get_packed_iep2_p_assoc_req(tpAniSirGlobal pCtx,tDot11fIEP2PAssocReq * pIe,uint32_t * pnNeeded)18453 uint32_t dot11f_get_packed_iep2_p_assoc_req(tpAniSirGlobal pCtx,
18454 tDot11fIEP2PAssocReq *pIe, uint32_t *pnNeeded)
18455 {
18456 uint32_t status = DOT11F_PARSE_SUCCESS;
18457 (void)pCtx;
18458 while (pIe->present) {
18459 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
18460 TLVS_P2PAssocReq);
18461 break;
18462 }
18463 return status;
18464 } /* End dot11f_get_packed_iep2_p_assoc_req. */
18465
dot11f_get_packed_iep2_p_assoc_res(tpAniSirGlobal pCtx,tDot11fIEP2PAssocRes * pIe,uint32_t * pnNeeded)18466 uint32_t dot11f_get_packed_iep2_p_assoc_res(tpAniSirGlobal pCtx,
18467 tDot11fIEP2PAssocRes *pIe, uint32_t *pnNeeded)
18468 {
18469 uint32_t status = DOT11F_PARSE_SUCCESS;
18470 (void)pCtx;
18471 while (pIe->present) {
18472 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
18473 TLVS_P2PAssocRes);
18474 break;
18475 }
18476 return status;
18477 } /* End dot11f_get_packed_iep2_p_assoc_res. */
18478
dot11f_get_packed_iep2_p_beacon(tpAniSirGlobal pCtx,tDot11fIEP2PBeacon * pIe,uint32_t * pnNeeded)18479 uint32_t dot11f_get_packed_iep2_p_beacon(tpAniSirGlobal pCtx,
18480 tDot11fIEP2PBeacon *pIe, uint32_t *pnNeeded)
18481 {
18482 uint32_t status = DOT11F_PARSE_SUCCESS;
18483 (void)pCtx;
18484 while (pIe->present) {
18485 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
18486 TLVS_P2PBeacon);
18487 break;
18488 }
18489 return status;
18490 } /* End dot11f_get_packed_iep2_p_beacon. */
18491
dot11f_get_packed_iep2_p_beacon_probe_res(tpAniSirGlobal pCtx,tDot11fIEP2PBeaconProbeRes * pIe,uint32_t * pnNeeded)18492 uint32_t dot11f_get_packed_iep2_p_beacon_probe_res(tpAniSirGlobal pCtx,
18493 tDot11fIEP2PBeaconProbeRes *pIe, uint32_t *pnNeeded)
18494 {
18495 uint32_t status = DOT11F_PARSE_SUCCESS;
18496 (void)pCtx;
18497 while (pIe->present) {
18498 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
18499 TLVS_P2PBeaconProbeRes);
18500 break;
18501 }
18502 return status;
18503 } /* End dot11f_get_packed_iep2_p_beacon_probe_res. */
18504
dot11f_get_packed_iep2_p_de_auth(tpAniSirGlobal pCtx,tDot11fIEP2PDeAuth * pIe,uint32_t * pnNeeded)18505 uint32_t dot11f_get_packed_iep2_p_de_auth(tpAniSirGlobal pCtx,
18506 tDot11fIEP2PDeAuth *pIe, uint32_t *pnNeeded)
18507 {
18508 uint32_t status = DOT11F_PARSE_SUCCESS;
18509 (void)pCtx;
18510 while (pIe->present) {
18511 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
18512 TLVS_P2PDeAuth);
18513 break;
18514 }
18515 return status;
18516 } /* End dot11f_get_packed_iep2_p_de_auth. */
18517
dot11f_get_packed_iep2_p_dis_assoc(tpAniSirGlobal pCtx,tDot11fIEP2PDisAssoc * pIe,uint32_t * pnNeeded)18518 uint32_t dot11f_get_packed_iep2_p_dis_assoc(tpAniSirGlobal pCtx,
18519 tDot11fIEP2PDisAssoc *pIe, uint32_t *pnNeeded)
18520 {
18521 uint32_t status = DOT11F_PARSE_SUCCESS;
18522 (void)pCtx;
18523 while (pIe->present) {
18524 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
18525 TLVS_P2PDisAssoc);
18526 break;
18527 }
18528 return status;
18529 } /* End dot11f_get_packed_iep2_p_dis_assoc. */
18530
dot11f_get_packed_iep2_p_probe_req(tpAniSirGlobal pCtx,tDot11fIEP2PProbeReq * pIe,uint32_t * pnNeeded)18531 uint32_t dot11f_get_packed_iep2_p_probe_req(tpAniSirGlobal pCtx,
18532 tDot11fIEP2PProbeReq *pIe, uint32_t *pnNeeded)
18533 {
18534 uint32_t status = DOT11F_PARSE_SUCCESS;
18535 (void)pCtx;
18536 while (pIe->present) {
18537 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
18538 TLVS_P2PProbeReq);
18539 break;
18540 }
18541 return status;
18542 } /* End dot11f_get_packed_iep2_p_probe_req. */
18543
dot11f_get_packed_iep2_p_probe_res(tpAniSirGlobal pCtx,tDot11fIEP2PProbeRes * pIe,uint32_t * pnNeeded)18544 uint32_t dot11f_get_packed_iep2_p_probe_res(tpAniSirGlobal pCtx,
18545 tDot11fIEP2PProbeRes *pIe, uint32_t *pnNeeded)
18546 {
18547 uint32_t status = DOT11F_PARSE_SUCCESS;
18548 (void)pCtx;
18549 while (pIe->present) {
18550 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
18551 TLVS_P2PProbeRes);
18552 break;
18553 }
18554 return status;
18555 } /* End dot11f_get_packed_iep2_p_probe_res. */
18556
dot11f_get_packed_ieric_data_desc(tpAniSirGlobal pCtx,tDot11fIERICDataDesc * pIe,uint32_t * pnNeeded)18557 uint32_t dot11f_get_packed_ieric_data_desc(tpAniSirGlobal pCtx,
18558 tDot11fIERICDataDesc *pIe, uint32_t *pnNeeded)
18559 {
18560 uint32_t status = DOT11F_PARSE_SUCCESS;
18561 (void)pCtx;
18562 while (pIe->present) {
18563 status = get_packed_size_core(pCtx, (uint8_t *)pIe, pnNeeded,
18564 IES_RICDataDesc);
18565 break;
18566 }
18567 return status;
18568 } /* End dot11f_get_packed_ieric_data_desc. */
18569
dot11f_get_packed_iersn(tpAniSirGlobal pCtx,tDot11fIERSN * pIe,uint32_t * pnNeeded)18570 uint32_t dot11f_get_packed_iersn(tpAniSirGlobal pCtx,
18571 tDot11fIERSN *pIe, uint32_t *pnNeeded)
18572 {
18573 uint32_t status = DOT11F_PARSE_SUCCESS;
18574 (void)pCtx;
18575 while (pIe->present) {
18576 *pnNeeded += 2;
18577 if (pIe->gp_cipher_suite_present) {
18578
18579 *pnNeeded += 4;
18580 } else {
18581 break;
18582 }
18583 if (pIe->pwise_cipher_suite_count) {
18584 *pnNeeded += 2;
18585 } else {
18586 break;
18587 }
18588 *pnNeeded += (pIe->pwise_cipher_suite_count * 4);
18589 if (pIe->akm_suite_cnt) {
18590 *pnNeeded += 2;
18591 } else {
18592 break;
18593 }
18594 *pnNeeded += (pIe->akm_suite_cnt * 4);
18595 if (pIe->RSN_Cap_present) {
18596
18597 *pnNeeded += 2;
18598 } else {
18599 break;
18600 }
18601 if (pIe->pmkid_count) {
18602 *pnNeeded += 2;
18603 } else {
18604 if (pIe->gp_mgmt_cipher_suite_present) {
18605 *pnNeeded += 2;
18606 }
18607 }
18608 *pnNeeded += (pIe->pmkid_count * 16);
18609 if (pIe->gp_mgmt_cipher_suite_present) {
18610
18611 *pnNeeded += 4;
18612 } else {
18613 break;
18614 }
18615 break;
18616 }
18617 return status;
18618 } /* End dot11f_get_packed_iersn. */
18619
dot11f_get_packed_iewapi(tpAniSirGlobal pCtx,tDot11fIEWAPI * pIe,uint32_t * pnNeeded)18620 uint32_t dot11f_get_packed_iewapi(tpAniSirGlobal pCtx,
18621 tDot11fIEWAPI *pIe, uint32_t *pnNeeded)
18622 {
18623 uint32_t status = DOT11F_PARSE_SUCCESS;
18624 (void)pCtx;
18625 while (pIe->present) {
18626 *pnNeeded += 2;
18627 *pnNeeded += 2;
18628 *pnNeeded += (pIe->akm_suite_count * 4);
18629 *pnNeeded += 2;
18630 *pnNeeded += (pIe->unicast_cipher_suite_count * 4);
18631 *pnNeeded += 4;
18632 *pnNeeded += 2;
18633 if (pIe->bkid_count) {
18634 *pnNeeded += 2;
18635 } else {
18636 break;
18637 }
18638 *pnNeeded += (pIe->bkid_count * 16);
18639 break;
18640 }
18641 return status;
18642 } /* End dot11f_get_packed_iewapi. */
18643
dot11f_get_packed_iewpa(tpAniSirGlobal pCtx,tDot11fIEWPA * pIe,uint32_t * pnNeeded)18644 uint32_t dot11f_get_packed_iewpa(tpAniSirGlobal pCtx,
18645 tDot11fIEWPA *pIe, uint32_t *pnNeeded)
18646 {
18647 uint32_t status = DOT11F_PARSE_SUCCESS;
18648 (void)pCtx;
18649 while (pIe->present) {
18650 *pnNeeded += 2;
18651 if (pIe->multicast_cipher_present) {
18652
18653 *pnNeeded += 4;
18654 } else {
18655 break;
18656 }
18657 if (pIe->unicast_cipher_count) {
18658 *pnNeeded += 2;
18659 } else {
18660 break;
18661 }
18662 *pnNeeded += (pIe->unicast_cipher_count * 4);
18663 if (pIe->auth_suite_count) {
18664 *pnNeeded += 2;
18665 } else {
18666 break;
18667 }
18668 *pnNeeded += (pIe->auth_suite_count * 4);
18669 if (pIe->caps) {
18670 *pnNeeded += 2;
18671 } else {
18672 break;
18673 }
18674 break;
18675 }
18676 return status;
18677 } /* End dot11f_get_packed_iewpa. */
18678
dot11f_get_packed_iewsc(tpAniSirGlobal pCtx,tDot11fIEWSC * pIe,uint32_t * pnNeeded)18679 uint32_t dot11f_get_packed_iewsc(tpAniSirGlobal pCtx,
18680 tDot11fIEWSC *pIe, uint32_t *pnNeeded)
18681 {
18682 uint32_t status = DOT11F_PARSE_SUCCESS;
18683 (void)pCtx;
18684 while (pIe->present) {
18685 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
18686 TLVS_WSC);
18687 break;
18688 }
18689 return status;
18690 } /* End dot11f_get_packed_iewsc. */
18691
dot11f_get_packed_ie_wsc_assoc_req(tpAniSirGlobal pCtx,tDot11fIEWscAssocReq * pIe,uint32_t * pnNeeded)18692 uint32_t dot11f_get_packed_ie_wsc_assoc_req(tpAniSirGlobal pCtx,
18693 tDot11fIEWscAssocReq *pIe, uint32_t *pnNeeded)
18694 {
18695 uint32_t status = DOT11F_PARSE_SUCCESS;
18696 (void)pCtx;
18697 while (pIe->present) {
18698 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
18699 TLVS_WscAssocReq);
18700 break;
18701 }
18702 return status;
18703 } /* End dot11f_get_packed_ie_wsc_assoc_req. */
18704
dot11f_get_packed_ie_wsc_assoc_res(tpAniSirGlobal pCtx,tDot11fIEWscAssocRes * pIe,uint32_t * pnNeeded)18705 uint32_t dot11f_get_packed_ie_wsc_assoc_res(tpAniSirGlobal pCtx,
18706 tDot11fIEWscAssocRes *pIe, uint32_t *pnNeeded)
18707 {
18708 uint32_t status = DOT11F_PARSE_SUCCESS;
18709 (void)pCtx;
18710 while (pIe->present) {
18711 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
18712 TLVS_WscAssocRes);
18713 break;
18714 }
18715 return status;
18716 } /* End dot11f_get_packed_ie_wsc_assoc_res. */
18717
dot11f_get_packed_ie_wsc_beacon(tpAniSirGlobal pCtx,tDot11fIEWscBeacon * pIe,uint32_t * pnNeeded)18718 uint32_t dot11f_get_packed_ie_wsc_beacon(tpAniSirGlobal pCtx,
18719 tDot11fIEWscBeacon *pIe, uint32_t *pnNeeded)
18720 {
18721 uint32_t status = DOT11F_PARSE_SUCCESS;
18722 (void)pCtx;
18723 while (pIe->present) {
18724 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
18725 TLVS_WscBeacon);
18726 break;
18727 }
18728 return status;
18729 } /* End dot11f_get_packed_ie_wsc_beacon. */
18730
dot11f_get_packed_ie_wsc_beacon_probe_res(tpAniSirGlobal pCtx,tDot11fIEWscBeaconProbeRes * pIe,uint32_t * pnNeeded)18731 uint32_t dot11f_get_packed_ie_wsc_beacon_probe_res(tpAniSirGlobal pCtx,
18732 tDot11fIEWscBeaconProbeRes *pIe, uint32_t *pnNeeded)
18733 {
18734 uint32_t status = DOT11F_PARSE_SUCCESS;
18735 (void)pCtx;
18736 while (pIe->present) {
18737 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
18738 TLVS_WscBeaconProbeRes);
18739 break;
18740 }
18741 return status;
18742 } /* End dot11f_get_packed_ie_wsc_beacon_probe_res. */
18743
dot11f_get_packed_ie_wsc_probe_req(tpAniSirGlobal pCtx,tDot11fIEWscProbeReq * pIe,uint32_t * pnNeeded)18744 uint32_t dot11f_get_packed_ie_wsc_probe_req(tpAniSirGlobal pCtx,
18745 tDot11fIEWscProbeReq *pIe, uint32_t *pnNeeded)
18746 {
18747 uint32_t status = DOT11F_PARSE_SUCCESS;
18748 (void)pCtx;
18749 while (pIe->present) {
18750 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
18751 TLVS_WscProbeReq);
18752 break;
18753 }
18754 return status;
18755 } /* End dot11f_get_packed_ie_wsc_probe_req. */
18756
dot11f_get_packed_ie_wsc_probe_res(tpAniSirGlobal pCtx,tDot11fIEWscProbeRes * pIe,uint32_t * pnNeeded)18757 uint32_t dot11f_get_packed_ie_wsc_probe_res(tpAniSirGlobal pCtx,
18758 tDot11fIEWscProbeRes *pIe, uint32_t *pnNeeded)
18759 {
18760 uint32_t status = DOT11F_PARSE_SUCCESS;
18761 (void)pCtx;
18762 while (pIe->present) {
18763 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
18764 TLVS_WscProbeRes);
18765 break;
18766 }
18767 return status;
18768 } /* End dot11f_get_packed_ie_wsc_probe_res. */
18769
dot11f_get_packed_ie_wsc_reassoc_res(tpAniSirGlobal pCtx,tDot11fIEWscReassocRes * pIe,uint32_t * pnNeeded)18770 uint32_t dot11f_get_packed_ie_wsc_reassoc_res(tpAniSirGlobal pCtx,
18771 tDot11fIEWscReassocRes *pIe, uint32_t *pnNeeded)
18772 {
18773 uint32_t status = DOT11F_PARSE_SUCCESS;
18774 (void)pCtx;
18775 while (pIe->present) {
18776 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
18777 TLVS_WscReassocRes);
18778 break;
18779 }
18780 return status;
18781 } /* End dot11f_get_packed_ie_wsc_reassoc_res. */
18782
dot11f_get_packed_ie_descriptor_element(tpAniSirGlobal pCtx,tDot11fIEdescriptor_element * pIe,uint32_t * pnNeeded)18783 uint32_t dot11f_get_packed_ie_descriptor_element(tpAniSirGlobal pCtx,
18784 tDot11fIEdescriptor_element *pIe, uint32_t *pnNeeded)
18785 {
18786 uint32_t status = DOT11F_PARSE_SUCCESS;
18787 (void)pCtx;
18788 while (pIe->present) {
18789 *pnNeeded += 1;
18790 *pnNeeded += 2;
18791 *pnNeeded += 4;
18792 status = get_packed_size_core(pCtx, (uint8_t *)pIe, pnNeeded,
18793 IES_descriptor_element);
18794 break;
18795 }
18796 return status;
18797 } /* End dot11f_get_packed_ie_descriptor_element. */
18798
dot11f_get_packed_ie_eht_cap(tpAniSirGlobal pCtx,tDot11fIEeht_cap * pIe,uint32_t * pnNeeded)18799 uint32_t dot11f_get_packed_ie_eht_cap(tpAniSirGlobal pCtx,
18800 tDot11fIEeht_cap *pIe, uint32_t *pnNeeded)
18801 {
18802 uint32_t status = DOT11F_PARSE_SUCCESS;
18803 (void)pCtx;
18804 while (pIe->present) {
18805 *pnNeeded += 2;
18806 *pnNeeded += 4;
18807 *pnNeeded += 4;
18808 *pnNeeded += 1;
18809 *pnNeeded += 4;
18810 *pnNeeded += 4;
18811 *pnNeeded += 4;
18812 *pnNeeded += 1;
18813 if (pIe->ppet_present) {
18814 switch (pIe->ppet_present) {
18815 case 1:
18816 *pnNeeded += pIe->ppet.ppe_threshold.num_ppe_th;
18817 break;
18818 }
18819 } else {
18820 break;
18821 }
18822 break;
18823 }
18824 return status;
18825 } /* End dot11f_get_packed_ie_eht_cap. */
18826
dot11f_get_packed_ie_he_cap(tpAniSirGlobal pCtx,tDot11fIEhe_cap * pIe,uint32_t * pnNeeded)18827 uint32_t dot11f_get_packed_ie_he_cap(tpAniSirGlobal pCtx,
18828 tDot11fIEhe_cap *pIe, uint32_t *pnNeeded)
18829 {
18830 uint32_t status = DOT11F_PARSE_SUCCESS;
18831 (void)pCtx;
18832 while (pIe->present) {
18833 *pnNeeded += 4;
18834 *pnNeeded += 2;
18835 *pnNeeded += 4;
18836 *pnNeeded += 4;
18837 *pnNeeded += 2;
18838 *pnNeeded += 1;
18839 *pnNeeded += 2;
18840 *pnNeeded += 2;
18841 *pnNeeded += (pIe->chan_width_2 * 2);
18842 *pnNeeded += (pIe->chan_width_2 * 2);
18843 *pnNeeded += (pIe->chan_width_3 * 2);
18844 *pnNeeded += (pIe->chan_width_3 * 2);
18845 if (pIe->ppet_present) {
18846 switch (pIe->ppet_present) {
18847 case 1:
18848 *pnNeeded += pIe->ppet.ppe_threshold.num_ppe_th;
18849 break;
18850 }
18851 } else {
18852 break;
18853 }
18854 break;
18855 }
18856 return status;
18857 } /* End dot11f_get_packed_ie_he_cap. */
18858
dot11f_get_packed_ie_he_op(tpAniSirGlobal pCtx,tDot11fIEhe_op * pIe,uint32_t * pnNeeded)18859 uint32_t dot11f_get_packed_ie_he_op(tpAniSirGlobal pCtx,
18860 tDot11fIEhe_op *pIe, uint32_t *pnNeeded)
18861 {
18862 uint32_t status = DOT11F_PARSE_SUCCESS;
18863 (void)pCtx;
18864 while (pIe->present) {
18865 *pnNeeded += 2;
18866 *pnNeeded += 1;
18867 *pnNeeded += 1;
18868 *pnNeeded += 2;
18869 if (pIe->vht_oper_present) {
18870 switch (pIe->vht_oper_present) {
18871 case 1:
18872 *pnNeeded += 1;
18873 *pnNeeded += 1;
18874 *pnNeeded += 1;
18875 break;
18876 }
18877 }
18878 if (pIe->co_located_bss) {
18879 switch (pIe->co_located_bss) {
18880 case 1:
18881 *pnNeeded += 1;
18882 break;
18883 }
18884 }
18885 if (pIe->oper_info_6g_present) {
18886 switch (pIe->oper_info_6g_present) {
18887 case 1:
18888 *pnNeeded += 1;
18889 *pnNeeded += 1;
18890 *pnNeeded += 1;
18891 *pnNeeded += 1;
18892 *pnNeeded += 1;
18893 break;
18894 }
18895 }
18896 break;
18897 }
18898 return status;
18899 } /* End dot11f_get_packed_ie_he_op. */
18900
dot11f_get_packed_ie_hs20vendor_ie(tpAniSirGlobal pCtx,tDot11fIEhs20vendor_ie * pIe,uint32_t * pnNeeded)18901 uint32_t dot11f_get_packed_ie_hs20vendor_ie(tpAniSirGlobal pCtx,
18902 tDot11fIEhs20vendor_ie *pIe, uint32_t *pnNeeded)
18903 {
18904 uint32_t status = DOT11F_PARSE_SUCCESS;
18905 (void)pCtx;
18906 while (pIe->present) {
18907 *pnNeeded += 1;
18908 if (pIe->hs_id_present) {
18909 switch (pIe->hs_id_present) {
18910 case 1:
18911 *pnNeeded += 2;
18912 break;
18913 case 2:
18914 *pnNeeded += 2;
18915 break;
18916 }
18917 } else {
18918 break;
18919 }
18920 break;
18921 }
18922 return status;
18923 } /* End dot11f_get_packed_ie_hs20vendor_ie. */
18924
dot11f_get_packed_ie_qcn_ie(tpAniSirGlobal pCtx,tDot11fIEqcn_ie * pIe,uint32_t * pnNeeded)18925 uint32_t dot11f_get_packed_ie_qcn_ie(tpAniSirGlobal pCtx,
18926 tDot11fIEqcn_ie *pIe, uint32_t *pnNeeded)
18927 {
18928 uint32_t status = DOT11F_PARSE_SUCCESS;
18929 (void)pCtx;
18930 while (pIe->present) {
18931 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
18932 TLVS_qcn_ie);
18933 break;
18934 }
18935 return status;
18936 } /* End dot11f_get_packed_ie_qcn_ie. */
18937
dot11f_get_packed_ie_reduced_neighbor_report(tpAniSirGlobal pCtx,tDot11fIEreduced_neighbor_report * pIe,uint32_t * pnNeeded)18938 uint32_t dot11f_get_packed_ie_reduced_neighbor_report(tpAniSirGlobal pCtx,
18939 tDot11fIEreduced_neighbor_report *pIe, uint32_t *pnNeeded)
18940 {
18941 uint32_t status = DOT11F_PARSE_SUCCESS;
18942 (void)pCtx;
18943 while (pIe->present) {
18944 *pnNeeded += 2;
18945 *pnNeeded += 1;
18946 *pnNeeded += 1;
18947 switch (pIe->tbtt_info_len) {
18948 case 1:
18949 *pnNeeded += 1;
18950 break;
18951 case 2:
18952 *pnNeeded += 1;
18953 *pnNeeded += 1;
18954 break;
18955 case 5:
18956 *pnNeeded += 1;
18957 *pnNeeded += 4;
18958 break;
18959 case 6:
18960 *pnNeeded += 1;
18961 *pnNeeded += 4;
18962 *pnNeeded += 1;
18963 break;
18964 case 7:
18965 *pnNeeded += 1;
18966 *pnNeeded += 6;
18967 break;
18968 case 8:
18969 *pnNeeded += 1;
18970 *pnNeeded += 6;
18971 *pnNeeded += 1;
18972 break;
18973 case 9:
18974 *pnNeeded += 1;
18975 *pnNeeded += 6;
18976 *pnNeeded += 1;
18977 *pnNeeded += 1;
18978 break;
18979 case 11:
18980 *pnNeeded += 1;
18981 *pnNeeded += 6;
18982 *pnNeeded += 4;
18983 break;
18984 case 12:
18985 *pnNeeded += 1;
18986 *pnNeeded += 6;
18987 *pnNeeded += 4;
18988 *pnNeeded += 1;
18989 break;
18990 case 13:
18991 *pnNeeded += 1;
18992 *pnNeeded += 6;
18993 *pnNeeded += 4;
18994 *pnNeeded += 1;
18995 *pnNeeded += 1;
18996 break;
18997 case 16:
18998 *pnNeeded += 1;
18999 *pnNeeded += 6;
19000 *pnNeeded += 4;
19001 *pnNeeded += 1;
19002 *pnNeeded += 1;
19003 *pnNeeded += 1;
19004 *pnNeeded += 2;
19005 break;
19006 }
19007 break;
19008 }
19009 return status;
19010 } /* End dot11f_get_packed_ie_reduced_neighbor_report. */
19011
dot11f_get_packed_ie_spatial_reuse(tpAniSirGlobal pCtx,tDot11fIEspatial_reuse * pIe,uint32_t * pnNeeded)19012 uint32_t dot11f_get_packed_ie_spatial_reuse(tpAniSirGlobal pCtx,
19013 tDot11fIEspatial_reuse *pIe, uint32_t *pnNeeded)
19014 {
19015 uint32_t status = DOT11F_PARSE_SUCCESS;
19016 (void)pCtx;
19017 while (pIe->present) {
19018 *pnNeeded += 1;
19019 if (pIe->non_srg_offset_present) {
19020 switch (pIe->non_srg_offset_present) {
19021 case 1:
19022 *pnNeeded += 1;
19023 break;
19024 }
19025 } else {
19026 break;
19027 }
19028 if (pIe->srg_info_present) {
19029 switch (pIe->srg_info_present) {
19030 case 1:
19031 *pnNeeded += 1;
19032 *pnNeeded += 1;
19033 *pnNeeded += 8;
19034 *pnNeeded += 8;
19035 break;
19036 }
19037 } else {
19038 break;
19039 }
19040 break;
19041 }
19042 return status;
19043 } /* End dot11f_get_packed_ie_spatial_reuse. */
19044
dot11f_get_packed_ie_vendor_vht_ie(tpAniSirGlobal pCtx,tDot11fIEvendor_vht_ie * pIe,uint32_t * pnNeeded)19045 uint32_t dot11f_get_packed_ie_vendor_vht_ie(tpAniSirGlobal pCtx,
19046 tDot11fIEvendor_vht_ie *pIe, uint32_t *pnNeeded)
19047 {
19048 uint32_t status = DOT11F_PARSE_SUCCESS;
19049 (void)pCtx;
19050 while (pIe->present) {
19051 *pnNeeded += 1;
19052 status = get_packed_size_core(pCtx, (uint8_t *)pIe, pnNeeded,
19053 IES_vendor_vht_ie);
19054 break;
19055 }
19056 return status;
19057 } /* End dot11f_get_packed_ie_vendor_vht_ie. */
19058
dot11f_get_packed_add_ts_request_size(tpAniSirGlobal pCtx,tDot11fAddTSRequest * pFrm,uint32_t * pnNeeded)19059 uint32_t dot11f_get_packed_add_ts_request_size(tpAniSirGlobal pCtx,
19060 tDot11fAddTSRequest *pFrm, uint32_t *pnNeeded)
19061 {
19062 uint32_t status = 0;
19063 *pnNeeded = 3;
19064 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19065 IES_AddTSRequest);
19066 return status;
19067 } /* End dot11f_get_packed_add_ts_request_size. */
19068
dot11f_get_packed_add_ts_response_size(tpAniSirGlobal pCtx,tDot11fAddTSResponse * pFrm,uint32_t * pnNeeded)19069 uint32_t dot11f_get_packed_add_ts_response_size(tpAniSirGlobal pCtx,
19070 tDot11fAddTSResponse *pFrm, uint32_t *pnNeeded)
19071 {
19072 uint32_t status = 0;
19073 *pnNeeded = 5;
19074 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19075 IES_AddTSResponse);
19076 return status;
19077 } /* End dot11f_get_packed_add_ts_response_size. */
19078
dot11f_get_packed_assoc_request_size(tpAniSirGlobal pCtx,tDot11fAssocRequest * pFrm,uint32_t * pnNeeded)19079 uint32_t dot11f_get_packed_assoc_request_size(tpAniSirGlobal pCtx,
19080 tDot11fAssocRequest *pFrm, uint32_t *pnNeeded)
19081 {
19082 uint32_t status = 0;
19083 *pnNeeded = 4;
19084 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19085 IES_AssocRequest);
19086 return status;
19087 } /* End dot11f_get_packed_assoc_request_size. */
19088
dot11f_get_packed_assoc_response_size(tpAniSirGlobal pCtx,tDot11fAssocResponse * pFrm,uint32_t * pnNeeded)19089 uint32_t dot11f_get_packed_assoc_response_size(tpAniSirGlobal pCtx,
19090 tDot11fAssocResponse *pFrm, uint32_t *pnNeeded)
19091 {
19092 uint32_t status = 0;
19093 *pnNeeded = 6;
19094 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19095 IES_AssocResponse);
19096 return status;
19097 } /* End dot11f_get_packed_assoc_response_size. */
19098
dot11f_get_packed_authentication_size(tpAniSirGlobal pCtx,tDot11fAuthentication * pFrm,uint32_t * pnNeeded)19099 uint32_t dot11f_get_packed_authentication_size(tpAniSirGlobal pCtx,
19100 tDot11fAuthentication *pFrm, uint32_t *pnNeeded)
19101 {
19102 uint32_t status = 0;
19103 *pnNeeded = 6;
19104 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19105 IES_Authentication);
19106 return status;
19107 } /* End dot11f_get_packed_authentication_size. */
19108
dot11f_get_packed_beacon_size(tpAniSirGlobal pCtx,tDot11fBeacon * pFrm,uint32_t * pnNeeded)19109 uint32_t dot11f_get_packed_beacon_size(tpAniSirGlobal pCtx,
19110 tDot11fBeacon *pFrm, uint32_t *pnNeeded)
19111 {
19112 uint32_t status = 0;
19113 *pnNeeded = 12;
19114 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19115 IES_Beacon);
19116 return status;
19117 } /* End dot11f_get_packed_beacon_size. */
19118
dot11f_get_packed_beacon1_size(tpAniSirGlobal pCtx,tDot11fBeacon1 * pFrm,uint32_t * pnNeeded)19119 uint32_t dot11f_get_packed_beacon1_size(tpAniSirGlobal pCtx,
19120 tDot11fBeacon1 *pFrm, uint32_t *pnNeeded)
19121 {
19122 uint32_t status = 0;
19123 *pnNeeded = 12;
19124 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19125 IES_Beacon1);
19126 return status;
19127 } /* End dot11f_get_packed_beacon1_size. */
19128
dot11f_get_packed_beacon2_size(tpAniSirGlobal pCtx,tDot11fBeacon2 * pFrm,uint32_t * pnNeeded)19129 uint32_t dot11f_get_packed_beacon2_size(tpAniSirGlobal pCtx,
19130 tDot11fBeacon2 *pFrm, uint32_t *pnNeeded)
19131 {
19132 uint32_t status = 0;
19133 *pnNeeded = 0;
19134 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19135 IES_Beacon2);
19136 return status;
19137 } /* End dot11f_get_packed_beacon2_size. */
19138
dot11f_get_packed_beacon_i_es_size(tpAniSirGlobal pCtx,tDot11fBeaconIEs * pFrm,uint32_t * pnNeeded)19139 uint32_t dot11f_get_packed_beacon_i_es_size(tpAniSirGlobal pCtx,
19140 tDot11fBeaconIEs *pFrm, uint32_t *pnNeeded)
19141 {
19142 uint32_t status = 0;
19143 *pnNeeded = 0;
19144 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19145 IES_BeaconIEs);
19146 return status;
19147 } /* End dot11f_get_packed_beacon_i_es_size. */
19148
dot11f_get_packed_channel_switch_size(tpAniSirGlobal pCtx,tDot11fChannelSwitch * pFrm,uint32_t * pnNeeded)19149 uint32_t dot11f_get_packed_channel_switch_size(tpAniSirGlobal pCtx,
19150 tDot11fChannelSwitch *pFrm, uint32_t *pnNeeded)
19151 {
19152 uint32_t status = 0;
19153 *pnNeeded = 2;
19154 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19155 IES_ChannelSwitch);
19156 return status;
19157 } /* End dot11f_get_packed_channel_switch_size. */
19158
dot11f_get_packed_de_auth_size(tpAniSirGlobal pCtx,tDot11fDeAuth * pFrm,uint32_t * pnNeeded)19159 uint32_t dot11f_get_packed_de_auth_size(tpAniSirGlobal pCtx,
19160 tDot11fDeAuth *pFrm, uint32_t *pnNeeded)
19161 {
19162 uint32_t status = 0;
19163 *pnNeeded = 2;
19164 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19165 IES_DeAuth);
19166 return status;
19167 } /* End dot11f_get_packed_de_auth_size. */
19168
dot11f_get_packed_del_ts_size(tpAniSirGlobal pCtx,tDot11fDelTS * pFrm,uint32_t * pnNeeded)19169 uint32_t dot11f_get_packed_del_ts_size(tpAniSirGlobal pCtx,
19170 tDot11fDelTS *pFrm, uint32_t *pnNeeded)
19171 {
19172 uint32_t status = 0;
19173 *pnNeeded = 7;
19174 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19175 IES_DelTS);
19176 return status;
19177 } /* End dot11f_get_packed_del_ts_size. */
19178
dot11f_get_packed_disassociation_size(tpAniSirGlobal pCtx,tDot11fDisassociation * pFrm,uint32_t * pnNeeded)19179 uint32_t dot11f_get_packed_disassociation_size(tpAniSirGlobal pCtx,
19180 tDot11fDisassociation *pFrm, uint32_t *pnNeeded)
19181 {
19182 uint32_t status = 0;
19183 *pnNeeded = 2;
19184 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19185 IES_Disassociation);
19186 return status;
19187 } /* End dot11f_get_packed_disassociation_size. */
19188
dot11f_get_packed_link_measurement_report_size(tpAniSirGlobal pCtx,tDot11fLinkMeasurementReport * pFrm,uint32_t * pnNeeded)19189 uint32_t dot11f_get_packed_link_measurement_report_size(tpAniSirGlobal pCtx,
19190 tDot11fLinkMeasurementReport *pFrm, uint32_t *pnNeeded)
19191 {
19192 uint32_t status = 0;
19193 *pnNeeded = 11;
19194 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19195 IES_LinkMeasurementReport);
19196 return status;
19197 } /* End dot11f_get_packed_link_measurement_report_size. */
19198
dot11f_get_packed_link_measurement_request_size(tpAniSirGlobal pCtx,tDot11fLinkMeasurementRequest * pFrm,uint32_t * pnNeeded)19199 uint32_t dot11f_get_packed_link_measurement_request_size(tpAniSirGlobal pCtx,
19200 tDot11fLinkMeasurementRequest *pFrm, uint32_t *pnNeeded)
19201 {
19202 uint32_t status = 0;
19203 *pnNeeded = 5;
19204 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19205 IES_LinkMeasurementRequest);
19206 return status;
19207 } /* End dot11f_get_packed_link_measurement_request_size. */
19208
dot11f_get_packed_measurement_report_size(tpAniSirGlobal pCtx,tDot11fMeasurementReport * pFrm,uint32_t * pnNeeded)19209 uint32_t dot11f_get_packed_measurement_report_size(tpAniSirGlobal pCtx,
19210 tDot11fMeasurementReport *pFrm, uint32_t *pnNeeded)
19211 {
19212 uint32_t status = 0;
19213 *pnNeeded = 3;
19214 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19215 IES_MeasurementReport);
19216 return status;
19217 } /* End dot11f_get_packed_measurement_report_size. */
19218
dot11f_get_packed_measurement_request_size(tpAniSirGlobal pCtx,tDot11fMeasurementRequest * pFrm,uint32_t * pnNeeded)19219 uint32_t dot11f_get_packed_measurement_request_size(tpAniSirGlobal pCtx,
19220 tDot11fMeasurementRequest *pFrm, uint32_t *pnNeeded)
19221 {
19222 uint32_t status = 0;
19223 *pnNeeded = 3;
19224 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19225 IES_MeasurementRequest);
19226 return status;
19227 } /* End dot11f_get_packed_measurement_request_size. */
19228
dot11f_get_packed_neighbor_report_request_size(tpAniSirGlobal pCtx,tDot11fNeighborReportRequest * pFrm,uint32_t * pnNeeded)19229 uint32_t dot11f_get_packed_neighbor_report_request_size(tpAniSirGlobal pCtx,
19230 tDot11fNeighborReportRequest *pFrm, uint32_t *pnNeeded)
19231 {
19232 uint32_t status = 0;
19233 *pnNeeded = 3;
19234 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19235 IES_NeighborReportRequest);
19236 return status;
19237 } /* End dot11f_get_packed_neighbor_report_request_size. */
19238
dot11f_get_packed_neighbor_report_response_size(tpAniSirGlobal pCtx,tDot11fNeighborReportResponse * pFrm,uint32_t * pnNeeded)19239 uint32_t dot11f_get_packed_neighbor_report_response_size(tpAniSirGlobal pCtx,
19240 tDot11fNeighborReportResponse *pFrm, uint32_t *pnNeeded)
19241 {
19242 uint32_t status = 0;
19243 *pnNeeded = 3;
19244 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19245 IES_NeighborReportResponse);
19246 return status;
19247 } /* End dot11f_get_packed_neighbor_report_response_size. */
19248
dot11f_get_packed_operating_mode_size(tpAniSirGlobal pCtx,tDot11fOperatingMode * pFrm,uint32_t * pnNeeded)19249 uint32_t dot11f_get_packed_operating_mode_size(tpAniSirGlobal pCtx,
19250 tDot11fOperatingMode *pFrm, uint32_t *pnNeeded)
19251 {
19252 uint32_t status = 0;
19253 *pnNeeded = 3;
19254 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19255 IES_OperatingMode);
19256 return status;
19257 } /* End dot11f_get_packed_operating_mode_size. */
19258
dot11f_get_packed_probe_request_size(tpAniSirGlobal pCtx,tDot11fProbeRequest * pFrm,uint32_t * pnNeeded)19259 uint32_t dot11f_get_packed_probe_request_size(tpAniSirGlobal pCtx,
19260 tDot11fProbeRequest *pFrm, uint32_t *pnNeeded)
19261 {
19262 uint32_t status = 0;
19263 *pnNeeded = 0;
19264 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19265 IES_ProbeRequest);
19266 return status;
19267 } /* End dot11f_get_packed_probe_request_size. */
19268
dot11f_get_packed_probe_response_size(tpAniSirGlobal pCtx,tDot11fProbeResponse * pFrm,uint32_t * pnNeeded)19269 uint32_t dot11f_get_packed_probe_response_size(tpAniSirGlobal pCtx,
19270 tDot11fProbeResponse *pFrm, uint32_t *pnNeeded)
19271 {
19272 uint32_t status = 0;
19273 *pnNeeded = 12;
19274 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19275 IES_ProbeResponse);
19276 return status;
19277 } /* End dot11f_get_packed_probe_response_size. */
19278
dot11f_get_packed_qos_map_configure_size(tpAniSirGlobal pCtx,tDot11fQosMapConfigure * pFrm,uint32_t * pnNeeded)19279 uint32_t dot11f_get_packed_qos_map_configure_size(tpAniSirGlobal pCtx,
19280 tDot11fQosMapConfigure *pFrm, uint32_t *pnNeeded)
19281 {
19282 uint32_t status = 0;
19283 *pnNeeded = 2;
19284 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19285 IES_QosMapConfigure);
19286 return status;
19287 } /* End dot11f_get_packed_qos_map_configure_size. */
19288
dot11f_get_packed_radio_measurement_report_size(tpAniSirGlobal pCtx,tDot11fRadioMeasurementReport * pFrm,uint32_t * pnNeeded)19289 uint32_t dot11f_get_packed_radio_measurement_report_size(tpAniSirGlobal pCtx,
19290 tDot11fRadioMeasurementReport *pFrm, uint32_t *pnNeeded)
19291 {
19292 uint32_t status = 0;
19293 *pnNeeded = 3;
19294 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19295 IES_RadioMeasurementReport);
19296 return status;
19297 } /* End dot11f_get_packed_radio_measurement_report_size. */
19298
dot11f_get_packed_radio_measurement_request_size(tpAniSirGlobal pCtx,tDot11fRadioMeasurementRequest * pFrm,uint32_t * pnNeeded)19299 uint32_t dot11f_get_packed_radio_measurement_request_size(tpAniSirGlobal pCtx,
19300 tDot11fRadioMeasurementRequest *pFrm, uint32_t *pnNeeded)
19301 {
19302 uint32_t status = 0;
19303 *pnNeeded = 5;
19304 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19305 IES_RadioMeasurementRequest);
19306 return status;
19307 } /* End dot11f_get_packed_radio_measurement_request_size. */
19308
dot11f_get_packed_re_assoc_request_size(tpAniSirGlobal pCtx,tDot11fReAssocRequest * pFrm,uint32_t * pnNeeded)19309 uint32_t dot11f_get_packed_re_assoc_request_size(tpAniSirGlobal pCtx,
19310 tDot11fReAssocRequest *pFrm, uint32_t *pnNeeded)
19311 {
19312 uint32_t status = 0;
19313 *pnNeeded = 10;
19314 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19315 IES_ReAssocRequest);
19316 return status;
19317 } /* End dot11f_get_packed_re_assoc_request_size. */
19318
dot11f_get_packed_re_assoc_response_size(tpAniSirGlobal pCtx,tDot11fReAssocResponse * pFrm,uint32_t * pnNeeded)19319 uint32_t dot11f_get_packed_re_assoc_response_size(tpAniSirGlobal pCtx,
19320 tDot11fReAssocResponse *pFrm, uint32_t *pnNeeded)
19321 {
19322 uint32_t status = 0;
19323 *pnNeeded = 6;
19324 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19325 IES_ReAssocResponse);
19326 return status;
19327 } /* End dot11f_get_packed_re_assoc_response_size. */
19328
dot11f_get_packed_sm_power_save_size(tpAniSirGlobal pCtx,tDot11fSMPowerSave * pFrm,uint32_t * pnNeeded)19329 uint32_t dot11f_get_packed_sm_power_save_size(tpAniSirGlobal pCtx,
19330 tDot11fSMPowerSave *pFrm, uint32_t *pnNeeded)
19331 {
19332 uint32_t status = 0;
19333 *pnNeeded = 3;
19334 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19335 IES_SMPowerSave);
19336 return status;
19337 } /* End dot11f_get_packed_sm_power_save_size. */
19338
dot11f_get_packed_sa_query_req_size(tpAniSirGlobal pCtx,tDot11fSaQueryReq * pFrm,uint32_t * pnNeeded)19339 uint32_t dot11f_get_packed_sa_query_req_size(tpAniSirGlobal pCtx,
19340 tDot11fSaQueryReq *pFrm, uint32_t *pnNeeded)
19341 {
19342 uint32_t status = 0;
19343 *pnNeeded = 4;
19344 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19345 IES_SaQueryReq);
19346 return status;
19347 } /* End dot11f_get_packed_sa_query_req_size. */
19348
dot11f_get_packed_sa_query_rsp_size(tpAniSirGlobal pCtx,tDot11fSaQueryRsp * pFrm,uint32_t * pnNeeded)19349 uint32_t dot11f_get_packed_sa_query_rsp_size(tpAniSirGlobal pCtx,
19350 tDot11fSaQueryRsp *pFrm, uint32_t *pnNeeded)
19351 {
19352 uint32_t status = 0;
19353 *pnNeeded = 4;
19354 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19355 IES_SaQueryRsp);
19356 return status;
19357 } /* End dot11f_get_packed_sa_query_rsp_size. */
19358
dot11f_get_packed_tdls_dis_req_size(tpAniSirGlobal pCtx,tDot11fTDLSDisReq * pFrm,uint32_t * pnNeeded)19359 uint32_t dot11f_get_packed_tdls_dis_req_size(tpAniSirGlobal pCtx,
19360 tDot11fTDLSDisReq *pFrm, uint32_t *pnNeeded)
19361 {
19362 uint32_t status = 0;
19363 *pnNeeded = 3;
19364 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19365 IES_TDLSDisReq);
19366 return status;
19367 } /* End dot11f_get_packed_tdls_dis_req_size. */
19368
dot11f_get_packed_tdls_dis_rsp_size(tpAniSirGlobal pCtx,tDot11fTDLSDisRsp * pFrm,uint32_t * pnNeeded)19369 uint32_t dot11f_get_packed_tdls_dis_rsp_size(tpAniSirGlobal pCtx,
19370 tDot11fTDLSDisRsp *pFrm, uint32_t *pnNeeded)
19371 {
19372 uint32_t status = 0;
19373 *pnNeeded = 5;
19374 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19375 IES_TDLSDisRsp);
19376 return status;
19377 } /* End dot11f_get_packed_tdls_dis_rsp_size. */
19378
dot11f_get_packed_tdls_peer_traffic_ind_size(tpAniSirGlobal pCtx,tDot11fTDLSPeerTrafficInd * pFrm,uint32_t * pnNeeded)19379 uint32_t dot11f_get_packed_tdls_peer_traffic_ind_size(tpAniSirGlobal pCtx,
19380 tDot11fTDLSPeerTrafficInd *pFrm, uint32_t *pnNeeded)
19381 {
19382 uint32_t status = 0;
19383 *pnNeeded = 3;
19384 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19385 IES_TDLSPeerTrafficInd);
19386 return status;
19387 } /* End dot11f_get_packed_tdls_peer_traffic_ind_size. */
19388
dot11f_get_packed_tdls_peer_traffic_rsp_size(tpAniSirGlobal pCtx,tDot11fTDLSPeerTrafficRsp * pFrm,uint32_t * pnNeeded)19389 uint32_t dot11f_get_packed_tdls_peer_traffic_rsp_size(tpAniSirGlobal pCtx,
19390 tDot11fTDLSPeerTrafficRsp *pFrm, uint32_t *pnNeeded)
19391 {
19392 uint32_t status = 0;
19393 *pnNeeded = 3;
19394 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19395 IES_TDLSPeerTrafficRsp);
19396 return status;
19397 } /* End dot11f_get_packed_tdls_peer_traffic_rsp_size. */
19398
dot11f_get_packed_tdls_setup_cnf_size(tpAniSirGlobal pCtx,tDot11fTDLSSetupCnf * pFrm,uint32_t * pnNeeded)19399 uint32_t dot11f_get_packed_tdls_setup_cnf_size(tpAniSirGlobal pCtx,
19400 tDot11fTDLSSetupCnf *pFrm, uint32_t *pnNeeded)
19401 {
19402 uint32_t status = 0;
19403 *pnNeeded = 5;
19404 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19405 IES_TDLSSetupCnf);
19406 return status;
19407 } /* End dot11f_get_packed_tdls_setup_cnf_size. */
19408
dot11f_get_packed_tdls_setup_req_size(tpAniSirGlobal pCtx,tDot11fTDLSSetupReq * pFrm,uint32_t * pnNeeded)19409 uint32_t dot11f_get_packed_tdls_setup_req_size(tpAniSirGlobal pCtx,
19410 tDot11fTDLSSetupReq *pFrm, uint32_t *pnNeeded)
19411 {
19412 uint32_t status = 0;
19413 *pnNeeded = 5;
19414 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19415 IES_TDLSSetupReq);
19416 return status;
19417 } /* End dot11f_get_packed_tdls_setup_req_size. */
19418
dot11f_get_packed_tdls_setup_rsp_size(tpAniSirGlobal pCtx,tDot11fTDLSSetupRsp * pFrm,uint32_t * pnNeeded)19419 uint32_t dot11f_get_packed_tdls_setup_rsp_size(tpAniSirGlobal pCtx,
19420 tDot11fTDLSSetupRsp *pFrm, uint32_t *pnNeeded)
19421 {
19422 uint32_t status = 0;
19423 *pnNeeded = 7;
19424 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19425 IES_TDLSSetupRsp);
19426 return status;
19427 } /* End dot11f_get_packed_tdls_setup_rsp_size. */
19428
dot11f_get_packed_tdls_teardown_size(tpAniSirGlobal pCtx,tDot11fTDLSTeardown * pFrm,uint32_t * pnNeeded)19429 uint32_t dot11f_get_packed_tdls_teardown_size(tpAniSirGlobal pCtx,
19430 tDot11fTDLSTeardown *pFrm, uint32_t *pnNeeded)
19431 {
19432 uint32_t status = 0;
19433 *pnNeeded = 4;
19434 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19435 IES_TDLSTeardown);
19436 return status;
19437 } /* End dot11f_get_packed_tdls_teardown_size. */
19438
dot11f_get_packed_tpc_report_size(tpAniSirGlobal pCtx,tDot11fTPCReport * pFrm,uint32_t * pnNeeded)19439 uint32_t dot11f_get_packed_tpc_report_size(tpAniSirGlobal pCtx,
19440 tDot11fTPCReport *pFrm, uint32_t *pnNeeded)
19441 {
19442 uint32_t status = 0;
19443 *pnNeeded = 3;
19444 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19445 IES_TPCReport);
19446 return status;
19447 } /* End dot11f_get_packed_tpc_report_size. */
19448
dot11f_get_packed_tpc_request_size(tpAniSirGlobal pCtx,tDot11fTPCRequest * pFrm,uint32_t * pnNeeded)19449 uint32_t dot11f_get_packed_tpc_request_size(tpAniSirGlobal pCtx,
19450 tDot11fTPCRequest *pFrm, uint32_t *pnNeeded)
19451 {
19452 uint32_t status = 0;
19453 *pnNeeded = 3;
19454 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19455 IES_TPCRequest);
19456 return status;
19457 } /* End dot11f_get_packed_tpc_request_size. */
19458
dot11f_get_packed_timing_advertisement_frame_size(tpAniSirGlobal pCtx,tDot11fTimingAdvertisementFrame * pFrm,uint32_t * pnNeeded)19459 uint32_t dot11f_get_packed_timing_advertisement_frame_size(tpAniSirGlobal pCtx,
19460 tDot11fTimingAdvertisementFrame *pFrm, uint32_t *pnNeeded)
19461 {
19462 uint32_t status = 0;
19463 *pnNeeded = 10;
19464 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19465 IES_TimingAdvertisementFrame);
19466 return status;
19467 } /* End dot11f_get_packed_timing_advertisement_frame_size. */
19468
dot11f_get_packed_vht_gid_management_action_frame_size(tpAniSirGlobal pCtx,tDot11fVHTGidManagementActionFrame * pFrm,uint32_t * pnNeeded)19469 uint32_t dot11f_get_packed_vht_gid_management_action_frame_size(tpAniSirGlobal pCtx,
19470 tDot11fVHTGidManagementActionFrame *pFrm, uint32_t *pnNeeded)
19471 {
19472 uint32_t status = 0;
19473 *pnNeeded = 26;
19474 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19475 IES_VHTGidManagementActionFrame);
19476 return status;
19477 } /* End dot11f_get_packed_vht_gid_management_action_frame_size. */
19478
dot11f_get_packed_wmm_add_ts_request_size(tpAniSirGlobal pCtx,tDot11fWMMAddTSRequest * pFrm,uint32_t * pnNeeded)19479 uint32_t dot11f_get_packed_wmm_add_ts_request_size(tpAniSirGlobal pCtx,
19480 tDot11fWMMAddTSRequest *pFrm, uint32_t *pnNeeded)
19481 {
19482 uint32_t status = 0;
19483 *pnNeeded = 4;
19484 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19485 IES_WMMAddTSRequest);
19486 return status;
19487 } /* End dot11f_get_packed_wmm_add_ts_request_size. */
19488
dot11f_get_packed_wmm_add_ts_response_size(tpAniSirGlobal pCtx,tDot11fWMMAddTSResponse * pFrm,uint32_t * pnNeeded)19489 uint32_t dot11f_get_packed_wmm_add_ts_response_size(tpAniSirGlobal pCtx,
19490 tDot11fWMMAddTSResponse *pFrm, uint32_t *pnNeeded)
19491 {
19492 uint32_t status = 0;
19493 *pnNeeded = 4;
19494 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19495 IES_WMMAddTSResponse);
19496 return status;
19497 } /* End dot11f_get_packed_wmm_add_ts_response_size. */
19498
dot11f_get_packed_wmm_del_ts_size(tpAniSirGlobal pCtx,tDot11fWMMDelTS * pFrm,uint32_t * pnNeeded)19499 uint32_t dot11f_get_packed_wmm_del_ts_size(tpAniSirGlobal pCtx,
19500 tDot11fWMMDelTS *pFrm, uint32_t *pnNeeded)
19501 {
19502 uint32_t status = 0;
19503 *pnNeeded = 4;
19504 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19505 IES_WMMDelTS);
19506 return status;
19507 } /* End dot11f_get_packed_wmm_del_ts_size. */
19508
dot11f_get_packed_addba_req_size(tpAniSirGlobal pCtx,tDot11faddba_req * pFrm,uint32_t * pnNeeded)19509 uint32_t dot11f_get_packed_addba_req_size(tpAniSirGlobal pCtx,
19510 tDot11faddba_req *pFrm, uint32_t *pnNeeded)
19511 {
19512 uint32_t status = 0;
19513 *pnNeeded = 9;
19514 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19515 IES_addba_req);
19516 return status;
19517 } /* End dot11f_get_packed_addba_req_size. */
19518
dot11f_get_packed_addba_rsp_size(tpAniSirGlobal pCtx,tDot11faddba_rsp * pFrm,uint32_t * pnNeeded)19519 uint32_t dot11f_get_packed_addba_rsp_size(tpAniSirGlobal pCtx,
19520 tDot11faddba_rsp *pFrm, uint32_t *pnNeeded)
19521 {
19522 uint32_t status = 0;
19523 *pnNeeded = 9;
19524 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19525 IES_addba_rsp);
19526 return status;
19527 } /* End dot11f_get_packed_addba_rsp_size. */
19528
dot11f_get_packed_delba_req_size(tpAniSirGlobal pCtx,tDot11fdelba_req * pFrm,uint32_t * pnNeeded)19529 uint32_t dot11f_get_packed_delba_req_size(tpAniSirGlobal pCtx,
19530 tDot11fdelba_req *pFrm, uint32_t *pnNeeded)
19531 {
19532 uint32_t status = 0;
19533 *pnNeeded = 6;
19534 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19535 IES_delba_req);
19536 return status;
19537 } /* End dot11f_get_packed_delba_req_size. */
19538
dot11f_get_packed_epcs_neg_reqSize(tpAniSirGlobal pCtx,tDot11fepcs_neg_req * pFrm,uint32_t * pnNeeded)19539 uint32_t dot11f_get_packed_epcs_neg_reqSize(tpAniSirGlobal pCtx,
19540 tDot11fepcs_neg_req *pFrm, uint32_t *pnNeeded)
19541 {
19542 uint32_t status = 0;
19543 *pnNeeded = 3;
19544 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19545 IES_epcs_neg_req);
19546 return status;
19547 } /* End dot11f_get_packed_epcs_neg_reqSize. */
19548
dot11f_get_packed_epcs_neg_rspSize(tpAniSirGlobal pCtx,tDot11fepcs_neg_rsp * pFrm,uint32_t * pnNeeded)19549 uint32_t dot11f_get_packed_epcs_neg_rspSize(tpAniSirGlobal pCtx,
19550 tDot11fepcs_neg_rsp *pFrm, uint32_t *pnNeeded)
19551 {
19552 uint32_t status = 0;
19553 *pnNeeded = 5;
19554 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19555 IES_epcs_neg_rsp);
19556 return status;
19557 } /* End dot11f_get_packed_epcs_neg_rspSize. */
19558
dot11f_get_packed_epcs_teardownSize(tpAniSirGlobal pCtx,tDot11fepcs_teardown * pFrm,uint32_t * pnNeeded)19559 uint32_t dot11f_get_packed_epcs_teardownSize(tpAniSirGlobal pCtx,
19560 tDot11fepcs_teardown *pFrm, uint32_t *pnNeeded)
19561 {
19562 uint32_t status = 0;
19563 *pnNeeded = 2;
19564 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19565 IES_epcs_teardown);
19566 return status;
19567 } /* End dot11f_get_packed_epcs_teardownSize. */
19568
dot11f_get_packed_ext_channel_switch_action_frame_size(tpAniSirGlobal pCtx,tDot11fext_channel_switch_action_frame * pFrm,uint32_t * pnNeeded)19569 uint32_t dot11f_get_packed_ext_channel_switch_action_frame_size(tpAniSirGlobal pCtx,
19570 tDot11fext_channel_switch_action_frame *pFrm, uint32_t *pnNeeded)
19571 {
19572 uint32_t status = 0;
19573 *pnNeeded = 6;
19574 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19575 IES_ext_channel_switch_action_frame);
19576 return status;
19577 } /* End dot11f_get_packed_ext_channel_switch_action_frame_size. */
19578
dot11f_get_packed_ht2040_bss_coexistence_mgmt_action_frameSize(tpAniSirGlobal pCtx,tDot11fht2040_bss_coexistence_mgmt_action_frame * pFrm,uint32_t * pnNeeded)19579 uint32_t dot11f_get_packed_ht2040_bss_coexistence_mgmt_action_frameSize(tpAniSirGlobal pCtx,
19580 tDot11fht2040_bss_coexistence_mgmt_action_frame *pFrm, uint32_t *pnNeeded)
19581 {
19582 uint32_t status = 0;
19583 *pnNeeded = 2;
19584 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19585 IES_ht2040_bss_coexistence_mgmt_action_frame);
19586 return status;
19587 } /* End dot11f_get_packed_ht2040_bss_coexistence_mgmt_action_frameSize. */
19588
dot11f_get_packed_mscs_request_action_frameSize(tpAniSirGlobal pCtx,tDot11fmscs_request_action_frame * pFrm,uint32_t * pnNeeded)19589 uint32_t dot11f_get_packed_mscs_request_action_frameSize(tpAniSirGlobal pCtx,
19590 tDot11fmscs_request_action_frame *pFrm, uint32_t *pnNeeded)
19591 {
19592 uint32_t status = 0;
19593 *pnNeeded = 3;
19594 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19595 IES_mscs_request_action_frame);
19596 return status;
19597 } /* End dot11f_get_packed_mscs_request_action_frameSize. */
19598
dot11f_get_packed_p2p_oper_chan_change_confirmSize(tpAniSirGlobal pCtx,tDot11fp2p_oper_chan_change_confirm * pFrm,uint32_t * pnNeeded)19599 uint32_t dot11f_get_packed_p2p_oper_chan_change_confirmSize(tpAniSirGlobal pCtx,
19600 tDot11fp2p_oper_chan_change_confirm *pFrm, uint32_t *pnNeeded)
19601 {
19602 uint32_t status = 0;
19603 *pnNeeded = 7;
19604 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19605 IES_p2p_oper_chan_change_confirm);
19606 return status;
19607 } /* End dot11f_get_packed_p2p_oper_chan_change_confirmSize. */
19608
dot11f_get_packed_t2lm_neg_reqSize(tpAniSirGlobal pCtx,tDot11ft2lm_neg_req * pFrm,uint32_t * pnNeeded)19609 uint32_t dot11f_get_packed_t2lm_neg_reqSize(tpAniSirGlobal pCtx,
19610 tDot11ft2lm_neg_req *pFrm, uint32_t *pnNeeded)
19611 {
19612 uint32_t status = 0;
19613 *pnNeeded = 3;
19614 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19615 IES_t2lm_neg_req);
19616 return status;
19617 } /* End dot11f_get_packed_t2lm_neg_reqSize. */
19618
dot11f_get_packed_t2lm_neg_rspSize(tpAniSirGlobal pCtx,tDot11ft2lm_neg_rsp * pFrm,uint32_t * pnNeeded)19619 uint32_t dot11f_get_packed_t2lm_neg_rspSize(tpAniSirGlobal pCtx,
19620 tDot11ft2lm_neg_rsp *pFrm, uint32_t *pnNeeded)
19621 {
19622 uint32_t status = 0;
19623 *pnNeeded = 5;
19624 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19625 IES_t2lm_neg_rsp);
19626 return status;
19627 } /* End dot11f_get_packed_t2lm_neg_rspSize. */
19628
dot11f_get_packed_t2lm_teardownSize(tpAniSirGlobal pCtx,tDot11ft2lm_teardown * pFrm,uint32_t * pnNeeded)19629 uint32_t dot11f_get_packed_t2lm_teardownSize(tpAniSirGlobal pCtx,
19630 tDot11ft2lm_teardown *pFrm, uint32_t *pnNeeded)
19631 {
19632 uint32_t status = 0;
19633 *pnNeeded = 2;
19634 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19635 IES_t2lm_teardown);
19636 return status;
19637 } /* End dot11f_get_packed_t2lm_teardownSize. */
19638
dot11f_get_packed_vendor_action_frameSize(tpAniSirGlobal pCtx,tDot11fvendor_action_frame * pFrm,uint32_t * pnNeeded)19639 uint32_t dot11f_get_packed_vendor_action_frameSize(tpAniSirGlobal pCtx,
19640 tDot11fvendor_action_frame *pFrm, uint32_t *pnNeeded)
19641 {
19642 uint32_t status = 0;
19643 *pnNeeded = 5;
19644 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
19645 IES_vendor_action_frame);
19646 return status;
19647 } /* End dot11f_get_packed_vendor_action_frameSize. */
19648
get_packed_size_core(tpAniSirGlobal pCtx,uint8_t * pFrm,uint32_t * pnNeeded,const tIEDefn IEs[])19649 static uint32_t get_packed_size_core(tpAniSirGlobal pCtx,
19650 uint8_t *pFrm,
19651 uint32_t *pnNeeded,
19652 const tIEDefn IEs[])
19653 {
19654 const tIEDefn *pIe;
19655 uint16_t i, n;
19656 uint32_t status;
19657 tFRAMES_BOOL *pfFound;
19658 uint32_t countOffset = 0;
19659 uint32_t byteCount = 0;
19660 uint8_t pIePresent = 0;
19661 uint32_t offset = 0;
19662
19663 status = DOT11F_PARSE_SUCCESS;
19664
19665 (void)pCtx; /* Shutup the compiler if we have no FFs nor IEs... */
19666 i = 0;
19667 n = 0;
19668 pIe = &(IEs[0]);
19669 while (0xff != pIe->eid || pIe->extn_eid) {
19670 pfFound = (tFRAMES_BOOL *)(pFrm + pIe->offset +
19671 pIe->presenceOffset);
19672 if (*pfFound) {
19673 countOffset = ((0 == pIe->arraybound) ? 1 : (*(uint16_t *)(pFrm + pIe->countOffset)));
19674 for (i = 0U; i < countOffset; ++i) {
19675 *pnNeeded += 2U + pIe->noui;
19676 if (pIe->extn_eid)
19677 (*pnNeeded)++;
19678 byteCount = 0;
19679 switch (pIe->sig) {
19680 case SigIeGTK:
19681 offset = sizeof(tDot11fIEGTK);
19682 byteCount = ((tDot11fIEGTK *)
19683 (pFrm + pIe->offset + offset * i))->
19684 num_key + 11;
19685 pIePresent = ((tDot11fIEGTK *)
19686 (pFrm + pIe->offset + offset * i))->
19687 present;
19688 break;
19689 case SigIeIGTK:
19690 offset = sizeof(tDot11fIEIGTK);
19691 byteCount = 33;
19692 pIePresent = ((tDot11fIEIGTK *)
19693 (pFrm + pIe->offset + offset * i))->
19694 present;
19695 break;
19696 case SigIeR0KH_ID:
19697 offset = sizeof(tDot11fIER0KH_ID);
19698 byteCount = ((tDot11fIER0KH_ID *)
19699 (pFrm + pIe->offset + offset * i))->
19700 num_PMK_R0_ID;
19701 pIePresent = ((tDot11fIER0KH_ID *)
19702 (pFrm + pIe->offset + offset * i))->
19703 present;
19704 break;
19705 case SigIeR1KH_ID:
19706 offset = sizeof(tDot11fIER1KH_ID);
19707 byteCount = 6;
19708 pIePresent = ((tDot11fIER1KH_ID *)
19709 (pFrm + pIe->offset + offset * i))->
19710 present;
19711 break;
19712 case SigIeAPChannelReport:
19713 offset = sizeof(tDot11fIEAPChannelReport);
19714 byteCount = ((tDot11fIEAPChannelReport *)
19715 (pFrm + pIe->offset + offset * i))->
19716 num_channelList + 1;
19717 pIePresent = ((tDot11fIEAPChannelReport *)
19718 (pFrm + pIe->offset + offset * i))->
19719 present;
19720 break;
19721 case SigIeBcnReportingDetail:
19722 offset = sizeof(tDot11fIEBcnReportingDetail);
19723 byteCount = 1;
19724 pIePresent = ((tDot11fIEBcnReportingDetail *)
19725 (pFrm + pIe->offset + offset * i))->
19726 present;
19727 break;
19728 case SigIeBeaconReportFrmBody:
19729 offset = sizeof(tDot11fIEBeaconReportFrmBody);
19730 byteCount = ((tDot11fIEBeaconReportFrmBody *)
19731 (pFrm + pIe->offset + offset * i))->
19732 num_reportedFields;
19733 pIePresent = ((tDot11fIEBeaconReportFrmBody *)
19734 (pFrm + pIe->offset + offset * i))->
19735 present;
19736 break;
19737 case SigIeCondensedCountryStr:
19738 offset = sizeof(tDot11fIECondensedCountryStr);
19739 byteCount = 2;
19740 pIePresent = ((tDot11fIECondensedCountryStr *)
19741 (pFrm + pIe->offset + offset * i))->
19742 present;
19743 break;
19744 case SigIeExtRequestedInfo:
19745 offset = sizeof(tDot11fIEExtRequestedInfo);
19746 byteCount = ((tDot11fIEExtRequestedInfo *)
19747 (pFrm + pIe->offset + offset * i))->
19748 num_req_element_id_ext + 1;
19749 pIePresent = ((tDot11fIEExtRequestedInfo *)
19750 (pFrm + pIe->offset + offset * i))->
19751 present;
19752 break;
19753 case SigIeMeasurementPilot:
19754 offset = sizeof(tDot11fIEMeasurementPilot);
19755 byteCount = ((tDot11fIEMeasurementPilot *)
19756 (pFrm + pIe->offset + offset * i))->
19757 num_vendorSpecific + 1;
19758 pIePresent = ((tDot11fIEMeasurementPilot *)
19759 (pFrm + pIe->offset + offset * i))->
19760 present;
19761 break;
19762 case SigIeMultiBssid:
19763 offset = sizeof(tDot11fIEMultiBssid);
19764 byteCount = ((tDot11fIEMultiBssid *)
19765 (pFrm + pIe->offset + offset * i))->
19766 num_vendorSpecific + 1;
19767 pIePresent = ((tDot11fIEMultiBssid *)
19768 (pFrm + pIe->offset + offset * i))->
19769 present;
19770 break;
19771 case SigIeRICData:
19772 offset = sizeof(tDot11fIERICData);
19773 byteCount = 4;
19774 pIePresent = ((tDot11fIERICData *)
19775 (pFrm + pIe->offset + offset * i))->
19776 present;
19777 break;
19778 case SigIeRICDescriptor:
19779 offset = sizeof(tDot11fIERICDescriptor);
19780 byteCount = ((tDot11fIERICDescriptor *)
19781 (pFrm + pIe->offset + offset * i))->
19782 num_variableData + 1;
19783 pIePresent = ((tDot11fIERICDescriptor *)
19784 (pFrm + pIe->offset + offset * i))->
19785 present;
19786 break;
19787 case SigIeRRMEnabledCap:
19788 offset = sizeof(tDot11fIERRMEnabledCap);
19789 byteCount = 5;
19790 pIePresent = ((tDot11fIERRMEnabledCap *)
19791 (pFrm + pIe->offset + offset * i))->
19792 present;
19793 break;
19794 case SigIeRequestedInfo:
19795 offset = sizeof(tDot11fIERequestedInfo);
19796 byteCount = ((tDot11fIERequestedInfo *)
19797 (pFrm + pIe->offset + offset * i))->
19798 num_requested_eids;
19799 pIePresent = ((tDot11fIERequestedInfo *)
19800 (pFrm + pIe->offset + offset * i))->
19801 present;
19802 break;
19803 case SigIeSSID:
19804 offset = sizeof(tDot11fIESSID);
19805 byteCount = ((tDot11fIESSID *)
19806 (pFrm + pIe->offset + offset * i))->
19807 num_ssid;
19808 pIePresent = ((tDot11fIESSID *)
19809 (pFrm + pIe->offset + offset * i))->
19810 present;
19811 break;
19812 case SigIeSchedule:
19813 offset = sizeof(tDot11fIESchedule);
19814 byteCount = 14;
19815 pIePresent = ((tDot11fIESchedule *)
19816 (pFrm + pIe->offset + offset * i))->
19817 present;
19818 break;
19819 case SigIeTCLAS:
19820 offset = sizeof(tDot11fIETCLAS);
19821 status |=
19822 dot11f_get_packed_ietclas(
19823 pCtx, (tDot11fIETCLAS *)
19824 (pFrm + pIe->offset + offset * i),
19825 pnNeeded);
19826 break;
19827 case SigIeTCLASSPROC:
19828 offset = sizeof(tDot11fIETCLASSPROC);
19829 byteCount = 1;
19830 pIePresent = ((tDot11fIETCLASSPROC *)
19831 (pFrm + pIe->offset + offset * i))->
19832 present;
19833 break;
19834 case SigIeTSDelay:
19835 offset = sizeof(tDot11fIETSDelay);
19836 byteCount = 4;
19837 pIePresent = ((tDot11fIETSDelay *)
19838 (pFrm + pIe->offset + offset * i))->
19839 present;
19840 break;
19841 case SigIeTSFInfo:
19842 offset = sizeof(tDot11fIETSFInfo);
19843 byteCount = 4;
19844 pIePresent = ((tDot11fIETSFInfo *)
19845 (pFrm + pIe->offset + offset * i))->
19846 present;
19847 break;
19848 case SigIeTSPEC:
19849 offset = sizeof(tDot11fIETSPEC);
19850 byteCount = 55;
19851 pIePresent = ((tDot11fIETSPEC *)
19852 (pFrm + pIe->offset + offset * i))->
19853 present;
19854 break;
19855 case SigIeVHTCaps:
19856 offset = sizeof(tDot11fIEVHTCaps);
19857 byteCount = 12;
19858 pIePresent = ((tDot11fIEVHTCaps *)
19859 (pFrm + pIe->offset + offset * i))->
19860 present;
19861 break;
19862 case SigIeVHTOperation:
19863 offset = sizeof(tDot11fIEVHTOperation);
19864 byteCount = 5;
19865 pIePresent = ((tDot11fIEVHTOperation *)
19866 (pFrm + pIe->offset + offset * i))->
19867 present;
19868 break;
19869 case SigIeWMMSchedule:
19870 offset = sizeof(tDot11fIEWMMSchedule);
19871 byteCount = 15;
19872 pIePresent = ((tDot11fIEWMMSchedule *)
19873 (pFrm + pIe->offset + offset * i))->
19874 present;
19875 break;
19876 case SigIeWMMTCLAS:
19877 offset = sizeof(tDot11fIEWMMTCLAS);
19878 status |=
19879 dot11f_get_packed_iewmmtclas(
19880 pCtx, (tDot11fIEWMMTCLAS *)
19881 (pFrm + pIe->offset + offset * i),
19882 pnNeeded);
19883 break;
19884 case SigIeWMMTCLASPROC:
19885 offset = sizeof(tDot11fIEWMMTCLASPROC);
19886 byteCount = 2;
19887 pIePresent = ((tDot11fIEWMMTCLASPROC *)
19888 (pFrm + pIe->offset + offset * i))->
19889 present;
19890 break;
19891 case SigIeWMMTSDelay:
19892 offset = sizeof(tDot11fIEWMMTSDelay);
19893 byteCount = 5;
19894 pIePresent = ((tDot11fIEWMMTSDelay *)
19895 (pFrm + pIe->offset + offset * i))->
19896 present;
19897 break;
19898 case SigIeWMMTSPEC:
19899 offset = sizeof(tDot11fIEWMMTSPEC);
19900 byteCount = 56;
19901 pIePresent = ((tDot11fIEWMMTSPEC *)
19902 (pFrm + pIe->offset + offset * i))->
19903 present;
19904 break;
19905 case SigIeWiderBWChanSwitchAnn:
19906 offset = sizeof(tDot11fIEWiderBWChanSwitchAnn);
19907 byteCount = 3;
19908 pIePresent = ((tDot11fIEWiderBWChanSwitchAnn *)
19909 (pFrm + pIe->offset + offset * i))->
19910 present;
19911 break;
19912 case SigIeazimuth_req:
19913 offset = sizeof(tDot11fIEazimuth_req);
19914 byteCount = 1;
19915 pIePresent = ((tDot11fIEazimuth_req *)
19916 (pFrm + pIe->offset + offset * i))->
19917 present;
19918 break;
19919 case SigIebeacon_report_frm_body_fragment_id:
19920 offset = sizeof(tDot11fIEbeacon_report_frm_body_fragment_id);
19921 byteCount = 2;
19922 pIePresent = ((tDot11fIEbeacon_report_frm_body_fragment_id *)
19923 (pFrm + pIe->offset + offset * i))->
19924 present;
19925 break;
19926 case SigIebw_ind_element:
19927 offset = sizeof(tDot11fIEbw_ind_element);
19928 byteCount = ((tDot11fIEbw_ind_element *)
19929 (pFrm + pIe->offset + offset * i))->
19930 disabled_sub_chan_bitmap_present * 2 + 4;
19931 pIePresent = ((tDot11fIEbw_ind_element *)
19932 (pFrm + pIe->offset + offset * i))->
19933 present;
19934 break;
19935 case SigIebw_indication:
19936 offset = sizeof(tDot11fIEbw_indication);
19937 byteCount = ((tDot11fIEbw_indication *)
19938 (pFrm + pIe->offset + offset * i))->
19939 disabled_sub_chan_bitmap_present * 2 + 4;
19940 pIePresent = ((tDot11fIEbw_indication *)
19941 (pFrm + pIe->offset + offset * i))->
19942 present;
19943 break;
19944 case SigIelast_beacon_report_indication:
19945 offset = sizeof(tDot11fIElast_beacon_report_indication);
19946 byteCount = 1;
19947 pIePresent = ((tDot11fIElast_beacon_report_indication *)
19948 (pFrm + pIe->offset + offset * i))->
19949 present;
19950 break;
19951 case SigIemax_age:
19952 offset = sizeof(tDot11fIEmax_age);
19953 byteCount = 2;
19954 pIePresent = ((tDot11fIEmax_age *)
19955 (pFrm + pIe->offset + offset * i))->
19956 present;
19957 break;
19958 case SigIemscs_status:
19959 offset = sizeof(tDot11fIEmscs_status);
19960 byteCount = 1;
19961 pIePresent = ((tDot11fIEmscs_status *)
19962 (pFrm + pIe->offset + offset * i))->
19963 present;
19964 break;
19965 case SigIeneighbor_rpt:
19966 offset = sizeof(tDot11fIEneighbor_rpt);
19967 status |=
19968 dot11f_get_packed_ie_neighbor_rpt(
19969 pCtx, (tDot11fIEneighbor_rpt *)
19970 (pFrm + pIe->offset + offset * i),
19971 pnNeeded);
19972 break;
19973 case SigIereporting_reason:
19974 offset = sizeof(tDot11fIEreporting_reason);
19975 byteCount = 1;
19976 pIePresent = ((tDot11fIEreporting_reason *)
19977 (pFrm + pIe->offset + offset * i))->
19978 present;
19979 break;
19980 case SigIereq_mac_addr:
19981 offset = sizeof(tDot11fIEreq_mac_addr);
19982 byteCount = 6;
19983 pIePresent = ((tDot11fIEreq_mac_addr *)
19984 (pFrm + pIe->offset + offset * i))->
19985 present;
19986 break;
19987 case SigIerrm_reporting:
19988 offset = sizeof(tDot11fIErrm_reporting);
19989 byteCount = 2;
19990 pIePresent = ((tDot11fIErrm_reporting *)
19991 (pFrm + pIe->offset + offset * i))->
19992 present;
19993 break;
19994 case SigIetclas_mask:
19995 offset = sizeof(tDot11fIEtclas_mask);
19996 status |=
19997 dot11f_get_packed_ie_tclas_mask(
19998 pCtx, (tDot11fIEtclas_mask *)
19999 (pFrm + pIe->offset + offset * i),
20000 pnNeeded);
20001 break;
20002 case SigIetgt_mac_addr:
20003 offset = sizeof(tDot11fIEtgt_mac_addr);
20004 byteCount = 6;
20005 pIePresent = ((tDot11fIEtgt_mac_addr *)
20006 (pFrm + pIe->offset + offset * i))->
20007 present;
20008 break;
20009 case SigIetransmit_power_env:
20010 offset = sizeof(tDot11fIEtransmit_power_env);
20011 status |=
20012 dot11f_get_packed_ie_transmit_power_env(
20013 pCtx, (tDot11fIEtransmit_power_env *)
20014 (pFrm + pIe->offset + offset * i),
20015 pnNeeded);
20016 break;
20017 case SigIewide_bw_chan_switch:
20018 offset = sizeof(tDot11fIEwide_bw_chan_switch);
20019 byteCount = 3;
20020 pIePresent = ((tDot11fIEwide_bw_chan_switch *)
20021 (pFrm + pIe->offset + offset * i))->
20022 present;
20023 break;
20024 case SigIeAID:
20025 offset = sizeof(tDot11fIEAID);
20026 byteCount = 2;
20027 pIePresent = ((tDot11fIEAID *)
20028 (pFrm + pIe->offset + offset * i))->
20029 present;
20030 break;
20031 case SigIeCFParams:
20032 offset = sizeof(tDot11fIECFParams);
20033 byteCount = 6;
20034 pIePresent = ((tDot11fIECFParams *)
20035 (pFrm + pIe->offset + offset * i))->
20036 present;
20037 break;
20038 case SigIeChallengeText:
20039 offset = sizeof(tDot11fIEChallengeText);
20040 byteCount = ((tDot11fIEChallengeText *)
20041 (pFrm + pIe->offset + offset * i))->
20042 num_text;
20043 pIePresent = ((tDot11fIEChallengeText *)
20044 (pFrm + pIe->offset + offset * i))->
20045 present;
20046 break;
20047 case SigIeChanSwitchAnn:
20048 offset = sizeof(tDot11fIEChanSwitchAnn);
20049 byteCount = 3;
20050 pIePresent = ((tDot11fIEChanSwitchAnn *)
20051 (pFrm + pIe->offset + offset * i))->
20052 present;
20053 break;
20054 case SigIeChannelSwitchWrapper:
20055 offset = sizeof(tDot11fIEChannelSwitchWrapper);
20056 status |=
20057 dot11f_get_packed_ie_channel_switch_wrapper(
20058 pCtx, (tDot11fIEChannelSwitchWrapper *)
20059 (pFrm + pIe->offset + offset * i),
20060 pnNeeded);
20061 break;
20062 case SigIeCountry:
20063 offset = sizeof(tDot11fIECountry);
20064 status |=
20065 dot11f_get_packed_ie_country(
20066 pCtx, (tDot11fIECountry *)
20067 (pFrm + pIe->offset + offset * i),
20068 pnNeeded);
20069 break;
20070 case SigIeDSParams:
20071 offset = sizeof(tDot11fIEDSParams);
20072 byteCount = 1;
20073 pIePresent = ((tDot11fIEDSParams *)
20074 (pFrm + pIe->offset + offset * i))->
20075 present;
20076 break;
20077 case SigIeEDCAParamSet:
20078 offset = sizeof(tDot11fIEEDCAParamSet);
20079 byteCount = 18;
20080 pIePresent = ((tDot11fIEEDCAParamSet *)
20081 (pFrm + pIe->offset + offset * i))->
20082 present;
20083 break;
20084 case SigIeERPInfo:
20085 offset = sizeof(tDot11fIEERPInfo);
20086 byteCount = 1;
20087 pIePresent = ((tDot11fIEERPInfo *)
20088 (pFrm + pIe->offset + offset * i))->
20089 present;
20090 break;
20091 case SigIeESECckmOpaque:
20092 offset = sizeof(tDot11fIEESECckmOpaque);
20093 byteCount = ((tDot11fIEESECckmOpaque *)
20094 (pFrm + pIe->offset + offset * i))->
20095 num_data;
20096 pIePresent = ((tDot11fIEESECckmOpaque *)
20097 (pFrm + pIe->offset + offset * i))->
20098 present;
20099 break;
20100 case SigIeESERadMgmtCap:
20101 offset = sizeof(tDot11fIEESERadMgmtCap);
20102 byteCount = 2;
20103 pIePresent = ((tDot11fIEESERadMgmtCap *)
20104 (pFrm + pIe->offset + offset * i))->
20105 present;
20106 break;
20107 case SigIeESETrafStrmMet:
20108 offset = sizeof(tDot11fIEESETrafStrmMet);
20109 byteCount = 4;
20110 pIePresent = ((tDot11fIEESETrafStrmMet *)
20111 (pFrm + pIe->offset + offset * i))->
20112 present;
20113 break;
20114 case SigIeESETrafStrmRateSet:
20115 offset = sizeof(tDot11fIEESETrafStrmRateSet);
20116 byteCount = ((tDot11fIEESETrafStrmRateSet *)
20117 (pFrm + pIe->offset + offset * i))->
20118 num_tsrates + 1;
20119 pIePresent = ((tDot11fIEESETrafStrmRateSet *)
20120 (pFrm + pIe->offset + offset * i))->
20121 present;
20122 break;
20123 case SigIeESETxmitPower:
20124 offset = sizeof(tDot11fIEESETxmitPower);
20125 byteCount = 2;
20126 pIePresent = ((tDot11fIEESETxmitPower *)
20127 (pFrm + pIe->offset + offset * i))->
20128 present;
20129 break;
20130 case SigIeESEVersion:
20131 offset = sizeof(tDot11fIEESEVersion);
20132 byteCount = 1;
20133 pIePresent = ((tDot11fIEESEVersion *)
20134 (pFrm + pIe->offset + offset * i))->
20135 present;
20136 break;
20137 case SigIeExtCap:
20138 offset = sizeof(tDot11fIEExtCap);
20139 byteCount = ((tDot11fIEExtCap *)
20140 (pFrm + pIe->offset + offset * i))->
20141 num_bytes;
20142 pIePresent = ((tDot11fIEExtCap *)
20143 (pFrm + pIe->offset + offset * i))->
20144 present;
20145 break;
20146 case SigIeExtSuppRates:
20147 offset = sizeof(tDot11fIEExtSuppRates);
20148 byteCount = ((tDot11fIEExtSuppRates *)
20149 (pFrm + pIe->offset + offset * i))->
20150 num_rates;
20151 pIePresent = ((tDot11fIEExtSuppRates *)
20152 (pFrm + pIe->offset + offset * i))->
20153 present;
20154 break;
20155 case SigIeFHParamSet:
20156 offset = sizeof(tDot11fIEFHParamSet);
20157 byteCount = 5;
20158 pIePresent = ((tDot11fIEFHParamSet *)
20159 (pFrm + pIe->offset + offset * i))->
20160 present;
20161 break;
20162 case SigIeFHParams:
20163 offset = sizeof(tDot11fIEFHParams);
20164 byteCount = 2;
20165 pIePresent = ((tDot11fIEFHParams *)
20166 (pFrm + pIe->offset + offset * i))->
20167 present;
20168 break;
20169 case SigIeFHPattTable:
20170 offset = sizeof(tDot11fIEFHPattTable);
20171 byteCount = ((tDot11fIEFHPattTable *)
20172 (pFrm + pIe->offset + offset * i))->
20173 num_randtable + 4;
20174 pIePresent = ((tDot11fIEFHPattTable *)
20175 (pFrm + pIe->offset + offset * i))->
20176 present;
20177 break;
20178 case SigIeFTInfo:
20179 offset = sizeof(tDot11fIEFTInfo);
20180 status |=
20181 dot11f_get_packed_ieft_info(
20182 pCtx, (tDot11fIEFTInfo *)
20183 (pFrm + pIe->offset + offset * i),
20184 pnNeeded);
20185 break;
20186 case SigIeHTCaps:
20187 offset = sizeof(tDot11fIEHTCaps);
20188 byteCount = ((tDot11fIEHTCaps *)
20189 (pFrm + pIe->offset + offset * i))->
20190 num_rsvd + 26;
20191 pIePresent = ((tDot11fIEHTCaps *)
20192 (pFrm + pIe->offset + offset * i))->
20193 present;
20194 break;
20195 case SigIeHTInfo:
20196 offset = sizeof(tDot11fIEHTInfo);
20197 byteCount = ((tDot11fIEHTInfo *)
20198 (pFrm + pIe->offset + offset * i))->
20199 num_rsvd + 22;
20200 pIePresent = ((tDot11fIEHTInfo *)
20201 (pFrm + pIe->offset + offset * i))->
20202 present;
20203 break;
20204 case SigIeLinkIdentifier:
20205 offset = sizeof(tDot11fIELinkIdentifier);
20206 byteCount = 18;
20207 pIePresent = ((tDot11fIELinkIdentifier *)
20208 (pFrm + pIe->offset + offset * i))->
20209 present;
20210 break;
20211 case SigIeMBO_IE:
20212 offset = sizeof(tDot11fIEMBO_IE);
20213 status |=
20214 dot11f_get_packed_ie_MBO_IE(
20215 pCtx, (tDot11fIEMBO_IE *)
20216 (pFrm + pIe->offset + offset * i),
20217 pnNeeded);
20218 break;
20219 case SigIeMeasurementReport:
20220 offset = sizeof(tDot11fIEMeasurementReport);
20221 status |=
20222 dot11f_get_packed_ie_measurement_report(
20223 pCtx, (tDot11fIEMeasurementReport *)
20224 (pFrm + pIe->offset + offset * i),
20225 pnNeeded);
20226 break;
20227 case SigIeMeasurementRequest:
20228 offset = sizeof(tDot11fIEMeasurementRequest);
20229 status |=
20230 dot11f_get_packed_ie_measurement_request(
20231 pCtx, (tDot11fIEMeasurementRequest *)
20232 (pFrm + pIe->offset + offset * i),
20233 pnNeeded);
20234 break;
20235 case SigIeMobilityDomain:
20236 offset = sizeof(tDot11fIEMobilityDomain);
20237 byteCount = 3;
20238 pIePresent = ((tDot11fIEMobilityDomain *)
20239 (pFrm + pIe->offset + offset * i))->
20240 present;
20241 break;
20242 case SigIeNeighborReport:
20243 offset = sizeof(tDot11fIENeighborReport);
20244 status |=
20245 dot11f_get_packed_ie_neighbor_report(
20246 pCtx, (tDot11fIENeighborReport *)
20247 (pFrm + pIe->offset + offset * i),
20248 pnNeeded);
20249 break;
20250 case SigIeOBSSScanParameters:
20251 offset = sizeof(tDot11fIEOBSSScanParameters);
20252 byteCount = 14;
20253 pIePresent = ((tDot11fIEOBSSScanParameters *)
20254 (pFrm + pIe->offset + offset * i))->
20255 present;
20256 break;
20257 case SigIeOperatingMode:
20258 offset = sizeof(tDot11fIEOperatingMode);
20259 byteCount = 1;
20260 pIePresent = ((tDot11fIEOperatingMode *)
20261 (pFrm + pIe->offset + offset * i))->
20262 present;
20263 break;
20264 case SigIeP2PAssocReq:
20265 offset = sizeof(tDot11fIEP2PAssocReq);
20266 status |=
20267 dot11f_get_packed_iep2_p_assoc_req(
20268 pCtx, (tDot11fIEP2PAssocReq *)
20269 (pFrm + pIe->offset + offset * i),
20270 pnNeeded);
20271 break;
20272 case SigIeP2PAssocRes:
20273 offset = sizeof(tDot11fIEP2PAssocRes);
20274 status |=
20275 dot11f_get_packed_iep2_p_assoc_res(
20276 pCtx, (tDot11fIEP2PAssocRes *)
20277 (pFrm + pIe->offset + offset * i),
20278 pnNeeded);
20279 break;
20280 case SigIeP2PBeacon:
20281 offset = sizeof(tDot11fIEP2PBeacon);
20282 status |=
20283 dot11f_get_packed_iep2_p_beacon(
20284 pCtx, (tDot11fIEP2PBeacon *)
20285 (pFrm + pIe->offset + offset * i),
20286 pnNeeded);
20287 break;
20288 case SigIeP2PBeaconProbeRes:
20289 offset = sizeof(tDot11fIEP2PBeaconProbeRes);
20290 status |=
20291 dot11f_get_packed_iep2_p_beacon_probe_res(
20292 pCtx, (tDot11fIEP2PBeaconProbeRes *)
20293 (pFrm + pIe->offset + offset * i),
20294 pnNeeded);
20295 break;
20296 case SigIeP2PDeAuth:
20297 offset = sizeof(tDot11fIEP2PDeAuth);
20298 status |=
20299 dot11f_get_packed_iep2_p_de_auth(
20300 pCtx, (tDot11fIEP2PDeAuth *)
20301 (pFrm + pIe->offset + offset * i),
20302 pnNeeded);
20303 break;
20304 case SigIeP2PDisAssoc:
20305 offset = sizeof(tDot11fIEP2PDisAssoc);
20306 status |=
20307 dot11f_get_packed_iep2_p_dis_assoc(
20308 pCtx, (tDot11fIEP2PDisAssoc *)
20309 (pFrm + pIe->offset + offset * i),
20310 pnNeeded);
20311 break;
20312 case SigIeP2PIEOpaque:
20313 offset = sizeof(tDot11fIEP2PIEOpaque);
20314 byteCount = ((tDot11fIEP2PIEOpaque *)
20315 (pFrm + pIe->offset + offset * i))->
20316 num_data;
20317 pIePresent = ((tDot11fIEP2PIEOpaque *)
20318 (pFrm + pIe->offset + offset * i))->
20319 present;
20320 break;
20321 case SigIeP2PProbeReq:
20322 offset = sizeof(tDot11fIEP2PProbeReq);
20323 status |=
20324 dot11f_get_packed_iep2_p_probe_req(
20325 pCtx, (tDot11fIEP2PProbeReq *)
20326 (pFrm + pIe->offset + offset * i),
20327 pnNeeded);
20328 break;
20329 case SigIeP2PProbeRes:
20330 offset = sizeof(tDot11fIEP2PProbeRes);
20331 status |=
20332 dot11f_get_packed_iep2_p_probe_res(
20333 pCtx, (tDot11fIEP2PProbeRes *)
20334 (pFrm + pIe->offset + offset * i),
20335 pnNeeded);
20336 break;
20337 case SigIePTIControl:
20338 offset = sizeof(tDot11fIEPTIControl);
20339 byteCount = 3;
20340 pIePresent = ((tDot11fIEPTIControl *)
20341 (pFrm + pIe->offset + offset * i))->
20342 present;
20343 break;
20344 case SigIePUBufferStatus:
20345 offset = sizeof(tDot11fIEPUBufferStatus);
20346 byteCount = 1;
20347 pIePresent = ((tDot11fIEPUBufferStatus *)
20348 (pFrm + pIe->offset + offset * i))->
20349 present;
20350 break;
20351 case SigIePowerCaps:
20352 offset = sizeof(tDot11fIEPowerCaps);
20353 byteCount = 2;
20354 pIePresent = ((tDot11fIEPowerCaps *)
20355 (pFrm + pIe->offset + offset * i))->
20356 present;
20357 break;
20358 case SigIePowerConstraints:
20359 offset = sizeof(tDot11fIEPowerConstraints);
20360 byteCount = 1;
20361 pIePresent = ((tDot11fIEPowerConstraints *)
20362 (pFrm + pIe->offset + offset * i))->
20363 present;
20364 break;
20365 case SigIeQBSSLoad:
20366 offset = sizeof(tDot11fIEQBSSLoad);
20367 byteCount = 5;
20368 pIePresent = ((tDot11fIEQBSSLoad *)
20369 (pFrm + pIe->offset + offset * i))->
20370 present;
20371 break;
20372 case SigIeQComVendorIE:
20373 offset = sizeof(tDot11fIEQComVendorIE);
20374 byteCount = 2;
20375 pIePresent = ((tDot11fIEQComVendorIE *)
20376 (pFrm + pIe->offset + offset * i))->
20377 present;
20378 break;
20379 case SigIeQOSCapsAp:
20380 offset = sizeof(tDot11fIEQOSCapsAp);
20381 byteCount = 1;
20382 pIePresent = ((tDot11fIEQOSCapsAp *)
20383 (pFrm + pIe->offset + offset * i))->
20384 present;
20385 break;
20386 case SigIeQOSCapsStation:
20387 offset = sizeof(tDot11fIEQOSCapsStation);
20388 byteCount = 1;
20389 pIePresent = ((tDot11fIEQOSCapsStation *)
20390 (pFrm + pIe->offset + offset * i))->
20391 present;
20392 break;
20393 case SigIeQosMapSet:
20394 offset = sizeof(tDot11fIEQosMapSet);
20395 byteCount = ((tDot11fIEQosMapSet *)
20396 (pFrm + pIe->offset + offset * i))->
20397 num_dscp_exceptions;
20398 pIePresent = ((tDot11fIEQosMapSet *)
20399 (pFrm + pIe->offset + offset * i))->
20400 present;
20401 break;
20402 case SigIeQuiet:
20403 offset = sizeof(tDot11fIEQuiet);
20404 byteCount = 6;
20405 pIePresent = ((tDot11fIEQuiet *)
20406 (pFrm + pIe->offset + offset * i))->
20407 present;
20408 break;
20409 case SigIeRCPIIE:
20410 offset = sizeof(tDot11fIERCPIIE);
20411 byteCount = 1;
20412 pIePresent = ((tDot11fIERCPIIE *)
20413 (pFrm + pIe->offset + offset * i))->
20414 present;
20415 break;
20416 case SigIeRICDataDesc:
20417 offset = sizeof(tDot11fIERICDataDesc);
20418 pnNeeded -= 2 ; /* Subtract the length and Oui as this is our container IE to group Ies and it doesn't have its own length and OUI. */
20419 status |=
20420 dot11f_get_packed_ieric_data_desc(
20421 pCtx, (tDot11fIERICDataDesc *)
20422 (pFrm + pIe->offset + offset * i),
20423 pnNeeded);
20424 break;
20425 case SigIeRSN:
20426 offset = sizeof(tDot11fIERSN);
20427 status |=
20428 dot11f_get_packed_iersn(
20429 pCtx, (tDot11fIERSN *)
20430 (pFrm + pIe->offset + offset * i),
20431 pnNeeded);
20432 break;
20433 case SigIeRSNIIE:
20434 offset = sizeof(tDot11fIERSNIIE);
20435 byteCount = 1;
20436 pIePresent = ((tDot11fIERSNIIE *)
20437 (pFrm + pIe->offset + offset * i))->
20438 present;
20439 break;
20440 case SigIeRSNOpaque:
20441 offset = sizeof(tDot11fIERSNOpaque);
20442 byteCount = ((tDot11fIERSNOpaque *)
20443 (pFrm + pIe->offset + offset * i))->
20444 num_data;
20445 pIePresent = ((tDot11fIERSNOpaque *)
20446 (pFrm + pIe->offset + offset * i))->
20447 present;
20448 break;
20449 case SigIeSuppChannels:
20450 offset = sizeof(tDot11fIESuppChannels);
20451 byteCount = ((tDot11fIESuppChannels *)
20452 (pFrm + pIe->offset + offset * i))->
20453 num_bands * 2;
20454 pIePresent = ((tDot11fIESuppChannels *)
20455 (pFrm + pIe->offset + offset * i))->
20456 present;
20457 break;
20458 case SigIeSuppOperatingClasses:
20459 offset = sizeof(tDot11fIESuppOperatingClasses);
20460 byteCount = ((tDot11fIESuppOperatingClasses *)
20461 (pFrm + pIe->offset + offset * i))->
20462 num_classes;
20463 pIePresent = ((tDot11fIESuppOperatingClasses *)
20464 (pFrm + pIe->offset + offset * i))->
20465 present;
20466 break;
20467 case SigIeSuppRates:
20468 offset = sizeof(tDot11fIESuppRates);
20469 byteCount = ((tDot11fIESuppRates *)
20470 (pFrm + pIe->offset + offset * i))->
20471 num_rates;
20472 pIePresent = ((tDot11fIESuppRates *)
20473 (pFrm + pIe->offset + offset * i))->
20474 present;
20475 break;
20476 case SigIeTIM:
20477 offset = sizeof(tDot11fIETIM);
20478 byteCount = ((tDot11fIETIM *)
20479 (pFrm + pIe->offset + offset * i))->
20480 num_vbmp + 3;
20481 pIePresent = ((tDot11fIETIM *)
20482 (pFrm + pIe->offset + offset * i))->
20483 present;
20484 break;
20485 case SigIeTPCReport:
20486 offset = sizeof(tDot11fIETPCReport);
20487 byteCount = 2;
20488 pIePresent = ((tDot11fIETPCReport *)
20489 (pFrm + pIe->offset + offset * i))->
20490 present;
20491 break;
20492 case SigIeTPCRequest:
20493 offset = sizeof(tDot11fIETPCRequest);
20494 byteCount = 0;
20495 pIePresent = ((tDot11fIETPCRequest *)
20496 (pFrm + pIe->offset + offset * i))->
20497 present;
20498 break;
20499 case SigIeTimeAdvertisement:
20500 offset = sizeof(tDot11fIETimeAdvertisement);
20501 byteCount = 16;
20502 pIePresent = ((tDot11fIETimeAdvertisement *)
20503 (pFrm + pIe->offset + offset * i))->
20504 present;
20505 break;
20506 case SigIeTimeoutInterval:
20507 offset = sizeof(tDot11fIETimeoutInterval);
20508 byteCount = 5;
20509 pIePresent = ((tDot11fIETimeoutInterval *)
20510 (pFrm + pIe->offset + offset * i))->
20511 present;
20512 break;
20513 case SigIeVHTExtBssLoad:
20514 offset = sizeof(tDot11fIEVHTExtBssLoad);
20515 byteCount = 5;
20516 pIePresent = ((tDot11fIEVHTExtBssLoad *)
20517 (pFrm + pIe->offset + offset * i))->
20518 present;
20519 break;
20520 case SigIeVendor1IE:
20521 offset = sizeof(tDot11fIEVendor1IE);
20522 byteCount = 0;
20523 pIePresent = ((tDot11fIEVendor1IE *)
20524 (pFrm + pIe->offset + offset * i))->
20525 present;
20526 break;
20527 case SigIeVendor3IE:
20528 offset = sizeof(tDot11fIEVendor3IE);
20529 byteCount = 0;
20530 pIePresent = ((tDot11fIEVendor3IE *)
20531 (pFrm + pIe->offset + offset * i))->
20532 present;
20533 break;
20534 case SigIeWAPI:
20535 offset = sizeof(tDot11fIEWAPI);
20536 status |=
20537 dot11f_get_packed_iewapi(
20538 pCtx, (tDot11fIEWAPI *)
20539 (pFrm + pIe->offset + offset * i),
20540 pnNeeded);
20541 break;
20542 case SigIeWAPIOpaque:
20543 offset = sizeof(tDot11fIEWAPIOpaque);
20544 byteCount = ((tDot11fIEWAPIOpaque *)
20545 (pFrm + pIe->offset + offset * i))->
20546 num_data;
20547 pIePresent = ((tDot11fIEWAPIOpaque *)
20548 (pFrm + pIe->offset + offset * i))->
20549 present;
20550 break;
20551 case SigIeWFATPC:
20552 offset = sizeof(tDot11fIEWFATPC);
20553 byteCount = 2;
20554 pIePresent = ((tDot11fIEWFATPC *)
20555 (pFrm + pIe->offset + offset * i))->
20556 present;
20557 break;
20558 case SigIeWFDIEOpaque:
20559 offset = sizeof(tDot11fIEWFDIEOpaque);
20560 byteCount = ((tDot11fIEWFDIEOpaque *)
20561 (pFrm + pIe->offset + offset * i))->
20562 num_data;
20563 pIePresent = ((tDot11fIEWFDIEOpaque *)
20564 (pFrm + pIe->offset + offset * i))->
20565 present;
20566 break;
20567 case SigIeWMMCaps:
20568 offset = sizeof(tDot11fIEWMMCaps);
20569 byteCount = 2;
20570 pIePresent = ((tDot11fIEWMMCaps *)
20571 (pFrm + pIe->offset + offset * i))->
20572 present;
20573 break;
20574 case SigIeWMMInfoAp:
20575 offset = sizeof(tDot11fIEWMMInfoAp);
20576 byteCount = 2;
20577 pIePresent = ((tDot11fIEWMMInfoAp *)
20578 (pFrm + pIe->offset + offset * i))->
20579 present;
20580 break;
20581 case SigIeWMMInfoStation:
20582 offset = sizeof(tDot11fIEWMMInfoStation);
20583 byteCount = 2;
20584 pIePresent = ((tDot11fIEWMMInfoStation *)
20585 (pFrm + pIe->offset + offset * i))->
20586 present;
20587 break;
20588 case SigIeWMMParams:
20589 offset = sizeof(tDot11fIEWMMParams);
20590 byteCount = 19;
20591 pIePresent = ((tDot11fIEWMMParams *)
20592 (pFrm + pIe->offset + offset * i))->
20593 present;
20594 break;
20595 case SigIeWPA:
20596 offset = sizeof(tDot11fIEWPA);
20597 status |=
20598 dot11f_get_packed_iewpa(
20599 pCtx, (tDot11fIEWPA *)
20600 (pFrm + pIe->offset + offset * i),
20601 pnNeeded);
20602 break;
20603 case SigIeWPAOpaque:
20604 offset = sizeof(tDot11fIEWPAOpaque);
20605 byteCount = ((tDot11fIEWPAOpaque *)
20606 (pFrm + pIe->offset + offset * i))->
20607 num_data;
20608 pIePresent = ((tDot11fIEWPAOpaque *)
20609 (pFrm + pIe->offset + offset * i))->
20610 present;
20611 break;
20612 case SigIeWSC:
20613 offset = sizeof(tDot11fIEWSC);
20614 status |=
20615 dot11f_get_packed_iewsc(
20616 pCtx, (tDot11fIEWSC *)
20617 (pFrm + pIe->offset + offset * i),
20618 pnNeeded);
20619 break;
20620 case SigIeWscAssocReq:
20621 offset = sizeof(tDot11fIEWscAssocReq);
20622 status |=
20623 dot11f_get_packed_ie_wsc_assoc_req(
20624 pCtx, (tDot11fIEWscAssocReq *)
20625 (pFrm + pIe->offset + offset * i),
20626 pnNeeded);
20627 break;
20628 case SigIeWscAssocRes:
20629 offset = sizeof(tDot11fIEWscAssocRes);
20630 status |=
20631 dot11f_get_packed_ie_wsc_assoc_res(
20632 pCtx, (tDot11fIEWscAssocRes *)
20633 (pFrm + pIe->offset + offset * i),
20634 pnNeeded);
20635 break;
20636 case SigIeWscBeacon:
20637 offset = sizeof(tDot11fIEWscBeacon);
20638 status |=
20639 dot11f_get_packed_ie_wsc_beacon(
20640 pCtx, (tDot11fIEWscBeacon *)
20641 (pFrm + pIe->offset + offset * i),
20642 pnNeeded);
20643 break;
20644 case SigIeWscBeaconProbeRes:
20645 offset = sizeof(tDot11fIEWscBeaconProbeRes);
20646 status |=
20647 dot11f_get_packed_ie_wsc_beacon_probe_res(
20648 pCtx, (tDot11fIEWscBeaconProbeRes *)
20649 (pFrm + pIe->offset + offset * i),
20650 pnNeeded);
20651 break;
20652 case SigIeWscIEOpaque:
20653 offset = sizeof(tDot11fIEWscIEOpaque);
20654 byteCount = ((tDot11fIEWscIEOpaque *)
20655 (pFrm + pIe->offset + offset * i))->
20656 num_data;
20657 pIePresent = ((tDot11fIEWscIEOpaque *)
20658 (pFrm + pIe->offset + offset * i))->
20659 present;
20660 break;
20661 case SigIeWscProbeReq:
20662 offset = sizeof(tDot11fIEWscProbeReq);
20663 status |=
20664 dot11f_get_packed_ie_wsc_probe_req(
20665 pCtx, (tDot11fIEWscProbeReq *)
20666 (pFrm + pIe->offset + offset * i),
20667 pnNeeded);
20668 break;
20669 case SigIeWscProbeRes:
20670 offset = sizeof(tDot11fIEWscProbeRes);
20671 status |=
20672 dot11f_get_packed_ie_wsc_probe_res(
20673 pCtx, (tDot11fIEWscProbeRes *)
20674 (pFrm + pIe->offset + offset * i),
20675 pnNeeded);
20676 break;
20677 case SigIeWscReassocRes:
20678 offset = sizeof(tDot11fIEWscReassocRes);
20679 status |=
20680 dot11f_get_packed_ie_wsc_reassoc_res(
20681 pCtx, (tDot11fIEWscReassocRes *)
20682 (pFrm + pIe->offset + offset * i),
20683 pnNeeded);
20684 break;
20685 case SigIeaddba_extn_element:
20686 offset = sizeof(tDot11fIEaddba_extn_element);
20687 byteCount = 1;
20688 pIePresent = ((tDot11fIEaddba_extn_element *)
20689 (pFrm + pIe->offset + offset * i))->
20690 present;
20691 break;
20692 case SigIebss_color_change:
20693 offset = sizeof(tDot11fIEbss_color_change);
20694 byteCount = 2;
20695 pIePresent = ((tDot11fIEbss_color_change *)
20696 (pFrm + pIe->offset + offset * i))->
20697 present;
20698 break;
20699 case SigIebss_max_idle_period:
20700 offset = sizeof(tDot11fIEbss_max_idle_period);
20701 byteCount = 3;
20702 pIePresent = ((tDot11fIEbss_max_idle_period *)
20703 (pFrm + pIe->offset + offset * i))->
20704 present;
20705 break;
20706 case SigIedescriptor_element:
20707 offset = sizeof(tDot11fIEdescriptor_element);
20708 status |=
20709 dot11f_get_packed_ie_descriptor_element(
20710 pCtx, (tDot11fIEdescriptor_element *)
20711 (pFrm + pIe->offset + offset * i),
20712 pnNeeded);
20713 break;
20714 case SigIedh_parameter_element:
20715 offset = sizeof(tDot11fIEdh_parameter_element);
20716 byteCount = ((tDot11fIEdh_parameter_element *)
20717 (pFrm + pIe->offset + offset * i))->
20718 num_public_key + 2;
20719 pIePresent = ((tDot11fIEdh_parameter_element *)
20720 (pFrm + pIe->offset + offset * i))->
20721 present;
20722 break;
20723 case SigIeeht_cap:
20724 offset = sizeof(tDot11fIEeht_cap);
20725 status |=
20726 dot11f_get_packed_ie_eht_cap(
20727 pCtx, (tDot11fIEeht_cap *)
20728 (pFrm + pIe->offset + offset * i),
20729 pnNeeded);
20730 break;
20731 case SigIeeht_op:
20732 offset = sizeof(tDot11fIEeht_op);
20733 byteCount = ((tDot11fIEeht_op *)
20734 (pFrm + pIe->offset + offset * i))->
20735 disabled_sub_chan_bitmap_present * 2 + 8;
20736 pIePresent = ((tDot11fIEeht_op *)
20737 (pFrm + pIe->offset + offset * i))->
20738 present;
20739 break;
20740 case SigIeesp_information:
20741 offset = sizeof(tDot11fIEesp_information);
20742 byteCount = ((tDot11fIEesp_information *)
20743 (pFrm + pIe->offset + offset * i))->
20744 num_data;
20745 pIePresent = ((tDot11fIEesp_information *)
20746 (pFrm + pIe->offset + offset * i))->
20747 present;
20748 break;
20749 case SigIeext_chan_switch_ann:
20750 offset = sizeof(tDot11fIEext_chan_switch_ann);
20751 byteCount = 4;
20752 pIePresent = ((tDot11fIEext_chan_switch_ann *)
20753 (pFrm + pIe->offset + offset * i))->
20754 present;
20755 break;
20756 case SigIefils_assoc_delay_info:
20757 offset = sizeof(tDot11fIEfils_assoc_delay_info);
20758 byteCount = 1;
20759 pIePresent = ((tDot11fIEfils_assoc_delay_info *)
20760 (pFrm + pIe->offset + offset * i))->
20761 present;
20762 break;
20763 case SigIefils_hlp_container:
20764 offset = sizeof(tDot11fIEfils_hlp_container);
20765 byteCount = ((tDot11fIEfils_hlp_container *)
20766 (pFrm + pIe->offset + offset * i))->
20767 num_hlp_packet + 12;
20768 pIePresent = ((tDot11fIEfils_hlp_container *)
20769 (pFrm + pIe->offset + offset * i))->
20770 present;
20771 break;
20772 case SigIefils_indication:
20773 offset = sizeof(tDot11fIEfils_indication);
20774 byteCount = ((tDot11fIEfils_indication *)
20775 (pFrm + pIe->offset + offset * i))->
20776 num_variable_data + 2;
20777 pIePresent = ((tDot11fIEfils_indication *)
20778 (pFrm + pIe->offset + offset * i))->
20779 present;
20780 break;
20781 case SigIefils_kde:
20782 offset = sizeof(tDot11fIEfils_kde);
20783 byteCount = ((tDot11fIEfils_kde *)
20784 (pFrm + pIe->offset + offset * i))->
20785 num_kde_list + 8;
20786 pIePresent = ((tDot11fIEfils_kde *)
20787 (pFrm + pIe->offset + offset * i))->
20788 present;
20789 break;
20790 case SigIefils_key_confirmation:
20791 offset = sizeof(tDot11fIEfils_key_confirmation);
20792 byteCount = ((tDot11fIEfils_key_confirmation *)
20793 (pFrm + pIe->offset + offset * i))->
20794 num_key_auth;
20795 pIePresent = ((tDot11fIEfils_key_confirmation *)
20796 (pFrm + pIe->offset + offset * i))->
20797 present;
20798 break;
20799 case SigIefils_nonce:
20800 offset = sizeof(tDot11fIEfils_nonce);
20801 byteCount = 16;
20802 pIePresent = ((tDot11fIEfils_nonce *)
20803 (pFrm + pIe->offset + offset * i))->
20804 present;
20805 break;
20806 case SigIefils_public_key:
20807 offset = sizeof(tDot11fIEfils_public_key);
20808 byteCount = ((tDot11fIEfils_public_key *)
20809 (pFrm + pIe->offset + offset * i))->
20810 num_public_key + 1;
20811 pIePresent = ((tDot11fIEfils_public_key *)
20812 (pFrm + pIe->offset + offset * i))->
20813 present;
20814 break;
20815 case SigIefils_session:
20816 offset = sizeof(tDot11fIEfils_session);
20817 byteCount = 8;
20818 pIePresent = ((tDot11fIEfils_session *)
20819 (pFrm + pIe->offset + offset * i))->
20820 present;
20821 break;
20822 case SigIefils_wrapped_data:
20823 offset = sizeof(tDot11fIEfils_wrapped_data);
20824 byteCount = ((tDot11fIEfils_wrapped_data *)
20825 (pFrm + pIe->offset + offset * i))->
20826 num_wrapped_data;
20827 pIePresent = ((tDot11fIEfils_wrapped_data *)
20828 (pFrm + pIe->offset + offset * i))->
20829 present;
20830 break;
20831 case SigIefragment_ie:
20832 offset = sizeof(tDot11fIEfragment_ie);
20833 byteCount = ((tDot11fIEfragment_ie *)
20834 (pFrm + pIe->offset + offset * i))->
20835 num_data;
20836 pIePresent = ((tDot11fIEfragment_ie *)
20837 (pFrm + pIe->offset + offset * i))->
20838 present;
20839 break;
20840 case SigIehe_6ghz_band_cap:
20841 offset = sizeof(tDot11fIEhe_6ghz_band_cap);
20842 byteCount = 2;
20843 pIePresent = ((tDot11fIEhe_6ghz_band_cap *)
20844 (pFrm + pIe->offset + offset * i))->
20845 present;
20846 break;
20847 case SigIehe_cap:
20848 offset = sizeof(tDot11fIEhe_cap);
20849 status |=
20850 dot11f_get_packed_ie_he_cap(
20851 pCtx, (tDot11fIEhe_cap *)
20852 (pFrm + pIe->offset + offset * i),
20853 pnNeeded);
20854 break;
20855 case SigIehe_op:
20856 offset = sizeof(tDot11fIEhe_op);
20857 status |=
20858 dot11f_get_packed_ie_he_op(
20859 pCtx, (tDot11fIEhe_op *)
20860 (pFrm + pIe->offset + offset * i),
20861 pnNeeded);
20862 break;
20863 case SigIehs20vendor_ie:
20864 offset = sizeof(tDot11fIEhs20vendor_ie);
20865 status |=
20866 dot11f_get_packed_ie_hs20vendor_ie(
20867 pCtx, (tDot11fIEhs20vendor_ie *)
20868 (pFrm + pIe->offset + offset * i),
20869 pnNeeded);
20870 break;
20871 case SigIeht2040_bss_coexistence:
20872 offset = sizeof(tDot11fIEht2040_bss_coexistence);
20873 byteCount = 1;
20874 pIePresent = ((tDot11fIEht2040_bss_coexistence *)
20875 (pFrm + pIe->offset + offset * i))->
20876 present;
20877 break;
20878 case SigIeht2040_bss_intolerant_report:
20879 offset = sizeof(tDot11fIEht2040_bss_intolerant_report);
20880 byteCount = ((tDot11fIEht2040_bss_intolerant_report *)
20881 (pFrm + pIe->offset + offset * i))->
20882 num_channel_list + 1;
20883 pIePresent = ((tDot11fIEht2040_bss_intolerant_report *)
20884 (pFrm + pIe->offset + offset * i))->
20885 present;
20886 break;
20887 case SigIemax_chan_switch_time:
20888 offset = sizeof(tDot11fIEmax_chan_switch_time);
20889 byteCount = 3;
20890 pIePresent = ((tDot11fIEmax_chan_switch_time *)
20891 (pFrm + pIe->offset + offset * i))->
20892 present;
20893 break;
20894 case SigIemlo_ie:
20895 offset = sizeof(tDot11fIEmlo_ie);
20896 byteCount = ((tDot11fIEmlo_ie *)
20897 (pFrm + pIe->offset + offset * i))->
20898 num_data;
20899 pIePresent = ((tDot11fIEmlo_ie *)
20900 (pFrm + pIe->offset + offset * i))->
20901 present;
20902 break;
20903 case SigIemu_edca_param_set:
20904 offset = sizeof(tDot11fIEmu_edca_param_set);
20905 byteCount = 13;
20906 pIePresent = ((tDot11fIEmu_edca_param_set *)
20907 (pFrm + pIe->offset + offset * i))->
20908 present;
20909 break;
20910 case SigIenon_inheritance:
20911 offset = sizeof(tDot11fIEnon_inheritance);
20912 byteCount = ((tDot11fIEnon_inheritance *)
20913 (pFrm + pIe->offset + offset * i))->
20914 num_data;
20915 pIePresent = ((tDot11fIEnon_inheritance *)
20916 (pFrm + pIe->offset + offset * i))->
20917 present;
20918 break;
20919 case SigIeoci:
20920 offset = sizeof(tDot11fIEoci);
20921 byteCount = 3;
20922 pIePresent = ((tDot11fIEoci *)
20923 (pFrm + pIe->offset + offset * i))->
20924 present;
20925 break;
20926 case SigIeosen_ie:
20927 offset = sizeof(tDot11fIEosen_ie);
20928 byteCount = ((tDot11fIEosen_ie *)
20929 (pFrm + pIe->offset + offset * i))->
20930 num_data;
20931 pIePresent = ((tDot11fIEosen_ie *)
20932 (pFrm + pIe->offset + offset * i))->
20933 present;
20934 break;
20935 case SigIeqcn_ie:
20936 offset = sizeof(tDot11fIEqcn_ie);
20937 status |=
20938 dot11f_get_packed_ie_qcn_ie(
20939 pCtx, (tDot11fIEqcn_ie *)
20940 (pFrm + pIe->offset + offset * i),
20941 pnNeeded);
20942 break;
20943 case SigIereduced_neighbor_report:
20944 offset = sizeof(tDot11fIEreduced_neighbor_report);
20945 status |=
20946 dot11f_get_packed_ie_reduced_neighbor_report(
20947 pCtx, (tDot11fIEreduced_neighbor_report *)
20948 (pFrm + pIe->offset + offset * i),
20949 pnNeeded);
20950 break;
20951 case SigIeroaming_consortium_sel:
20952 offset = sizeof(tDot11fIEroaming_consortium_sel);
20953 byteCount = ((tDot11fIEroaming_consortium_sel *)
20954 (pFrm + pIe->offset + offset * i))->
20955 num_data;
20956 pIePresent = ((tDot11fIEroaming_consortium_sel *)
20957 (pFrm + pIe->offset + offset * i))->
20958 present;
20959 break;
20960 case SigIesec_chan_offset_ele:
20961 offset = sizeof(tDot11fIEsec_chan_offset_ele);
20962 byteCount = 1;
20963 pIePresent = ((tDot11fIEsec_chan_offset_ele *)
20964 (pFrm + pIe->offset + offset * i))->
20965 present;
20966 break;
20967 case SigIespatial_reuse:
20968 offset = sizeof(tDot11fIEspatial_reuse);
20969 status |=
20970 dot11f_get_packed_ie_spatial_reuse(
20971 pCtx, (tDot11fIEspatial_reuse *)
20972 (pFrm + pIe->offset + offset * i),
20973 pnNeeded);
20974 break;
20975 case SigIet2lm_ie:
20976 offset = sizeof(tDot11fIEt2lm_ie);
20977 byteCount = ((tDot11fIEt2lm_ie *)
20978 (pFrm + pIe->offset + offset * i))->
20979 num_data;
20980 pIePresent = ((tDot11fIEt2lm_ie *)
20981 (pFrm + pIe->offset + offset * i))->
20982 present;
20983 break;
20984 case SigIevendor_vht_ie:
20985 offset = sizeof(tDot11fIEvendor_vht_ie);
20986 status |=
20987 dot11f_get_packed_ie_vendor_vht_ie(
20988 pCtx, (tDot11fIEvendor_vht_ie *)
20989 (pFrm + pIe->offset + offset * i),
20990 pnNeeded);
20991 break;
20992 default:
20993 FRAMES_LOG1(pCtx, FRLOGE, FRFL("INTERNAL ERROR-- I don"
20994 "'t know about the IE signature %d; this is most l"
20995 "ikely a bug in 'framesc'.\n"), pIe->sig);
20996 return DOT11F_INTERNAL_ERROR;
20997 } /*End of switch Case*/
20998
20999 if (byteCount && pIePresent)
21000 *pnNeeded += byteCount;
21001 } /*End of for loop*/
21002 }
21003 ++pIe;
21004 }
21005 return status;
21006
21007 }
21008
get_packed_size_tlv_core(tpAniSirGlobal pCtx,uint8_t * pFrm,uint32_t * pnNeeded,const tTLVDefn TLVs[])21009 static uint32_t get_packed_size_tlv_core(tpAniSirGlobal pCtx,
21010 uint8_t *pFrm,
21011 uint32_t *pnNeeded,
21012 const tTLVDefn TLVs[])
21013 {
21014 const tTLVDefn *pTlv;
21015 uint32_t status;
21016 tFRAMES_BOOL *pfFound;
21017 uint32_t byteCount = 0;
21018 uint8_t pTlvPresent = 0;
21019
21020 status = DOT11F_PARSE_SUCCESS;
21021
21022 pTlv = &(TLVs[0]);
21023 while (0xffff != pTlv->id) {
21024 pfFound = (tFRAMES_BOOL *)(pFrm + pTlv->offset +
21025 pTlv->presenceOffset);
21026 if (*pfFound) {
21027 *pnNeeded += (pTlv->sType + pTlv->sLen);
21028 if (pTlv->pec)
21029 *pnNeeded += 3U;
21030 switch (pTlv->sig) {
21031 case SigTlvAuthorizedMACs:
21032 byteCount = 6;
21033 pTlvPresent = ((tDot11fTLVAuthorizedMACs *)
21034 (pFrm + pTlv->offset))->present;
21035 break;
21036 case SigTlvRequestToEnroll:
21037 byteCount = 1;
21038 pTlvPresent = ((tDot11fTLVRequestToEnroll *)
21039 (pFrm + pTlv->offset))->present;
21040 break;
21041 case SigTlvVersion2:
21042 byteCount = 1;
21043 pTlvPresent = ((tDot11fTLVVersion2 *)
21044 (pFrm + pTlv->offset))->present;
21045 break;
21046 case SigTlvAPSetupLocked:
21047 byteCount = 1;
21048 pTlvPresent = ((tDot11fTLVAPSetupLocked *)
21049 (pFrm + pTlv->offset))->present;
21050 break;
21051 case SigTlvAssociationState:
21052 byteCount = 2;
21053 pTlvPresent = ((tDot11fTLVAssociationState *)
21054 (pFrm + pTlv->offset))->present;
21055 break;
21056 case SigTlvConfigMethods:
21057 byteCount = 2;
21058 pTlvPresent = ((tDot11fTLVConfigMethods *)
21059 (pFrm + pTlv->offset))->present;
21060 break;
21061 case SigTlvConfigurationError:
21062 byteCount = 2;
21063 pTlvPresent = ((tDot11fTLVConfigurationError *)
21064 (pFrm + pTlv->offset))->present;
21065 break;
21066 case SigTlvDeviceName:
21067 byteCount = ((tDot11fTLVDeviceName *)(pFrm + pTlv->offset))->num_text;
21068 pTlvPresent = ((tDot11fTLVDeviceName *)
21069 (pFrm + pTlv->offset))->present;
21070 break;
21071 case SigTlvDevicePasswordID:
21072 byteCount = 2;
21073 pTlvPresent = ((tDot11fTLVDevicePasswordID *)
21074 (pFrm + pTlv->offset))->present;
21075 break;
21076 case SigTlvExtendedListenTiming:
21077 byteCount = 4;
21078 pTlvPresent = ((tDot11fTLVExtendedListenTiming *)
21079 (pFrm + pTlv->offset))->present;
21080 break;
21081 case SigTlvListenChannel:
21082 byteCount = 5;
21083 pTlvPresent = ((tDot11fTLVListenChannel *)
21084 (pFrm + pTlv->offset))->present;
21085 break;
21086 case SigTlvManufacturer:
21087 byteCount = ((tDot11fTLVManufacturer *)(pFrm + pTlv->offset))->num_name;
21088 pTlvPresent = ((tDot11fTLVManufacturer *)
21089 (pFrm + pTlv->offset))->present;
21090 break;
21091 case SigTlvMinorReasonCode:
21092 byteCount = 1;
21093 pTlvPresent = ((tDot11fTLVMinorReasonCode *)
21094 (pFrm + pTlv->offset))->present;
21095 break;
21096 case SigTlvModelName:
21097 byteCount = ((tDot11fTLVModelName *)(pFrm + pTlv->offset))->num_text;
21098 pTlvPresent = ((tDot11fTLVModelName *)
21099 (pFrm + pTlv->offset))->present;
21100 break;
21101 case SigTlvModelNumber:
21102 byteCount = ((tDot11fTLVModelNumber *)(pFrm + pTlv->offset))->num_text;
21103 pTlvPresent = ((tDot11fTLVModelNumber *)
21104 (pFrm + pTlv->offset))->present;
21105 break;
21106 case SigTlvNoticeOfAbsence:
21107 byteCount = ((tDot11fTLVNoticeOfAbsence *)(pFrm + pTlv->offset))->num_NoADesc+2;
21108 pTlvPresent = ((tDot11fTLVNoticeOfAbsence *)
21109 (pFrm + pTlv->offset))->present;
21110 break;
21111 case SigTlvOperatingChannel:
21112 byteCount = 5;
21113 pTlvPresent = ((tDot11fTLVOperatingChannel *)
21114 (pFrm + pTlv->offset))->present;
21115 break;
21116 case SigTlvP2PCapability:
21117 byteCount = 2;
21118 pTlvPresent = ((tDot11fTLVP2PCapability *)
21119 (pFrm + pTlv->offset))->present;
21120 break;
21121 case SigTlvP2PDeviceId:
21122 byteCount = 6;
21123 pTlvPresent = ((tDot11fTLVP2PDeviceId *)
21124 (pFrm + pTlv->offset))->present;
21125 break;
21126 case SigTlvP2PDeviceInfo:
21127 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pFrm + pTlv->offset, pnNeeded, TLVS_P2PDeviceInfo);
21128 byteCount = 16;
21129 pTlvPresent = ((tDot11fTLVP2PDeviceInfo *)
21130 (pFrm + pTlv->offset))->present;
21131 break;
21132 case SigTlvP2PGroupInfo:
21133 byteCount = ((tDot11fTLVP2PGroupInfo *)(pFrm + pTlv->offset))->num_P2PClientInfoDesc;
21134 pTlvPresent = ((tDot11fTLVP2PGroupInfo *)
21135 (pFrm + pTlv->offset))->present;
21136 break;
21137 case SigTlvP2PStatus:
21138 byteCount = 1;
21139 pTlvPresent = ((tDot11fTLVP2PStatus *)
21140 (pFrm + pTlv->offset))->present;
21141 break;
21142 case SigTlvPrimaryDeviceType:
21143 byteCount = 8;
21144 pTlvPresent = ((tDot11fTLVPrimaryDeviceType *)
21145 (pFrm + pTlv->offset))->present;
21146 break;
21147 case SigTlvRFBands:
21148 byteCount = 1;
21149 pTlvPresent = ((tDot11fTLVRFBands *)
21150 (pFrm + pTlv->offset))->present;
21151 break;
21152 case SigTlvRequestDeviceType:
21153 byteCount = 8;
21154 pTlvPresent = ((tDot11fTLVRequestDeviceType *)
21155 (pFrm + pTlv->offset))->present;
21156 break;
21157 case SigTlvRequestType:
21158 byteCount = 1;
21159 pTlvPresent = ((tDot11fTLVRequestType *)
21160 (pFrm + pTlv->offset))->present;
21161 break;
21162 case SigTlvResponseType:
21163 byteCount = 1;
21164 pTlvPresent = ((tDot11fTLVResponseType *)
21165 (pFrm + pTlv->offset))->present;
21166 break;
21167 case SigTlvSelectedRegistrar:
21168 byteCount = 1;
21169 pTlvPresent = ((tDot11fTLVSelectedRegistrar *)
21170 (pFrm + pTlv->offset))->present;
21171 break;
21172 case SigTlvSelectedRegistrarConfigMethods:
21173 byteCount = 2;
21174 pTlvPresent = ((tDot11fTLVSelectedRegistrarConfigMethods *)
21175 (pFrm + pTlv->offset))->present;
21176 break;
21177 case SigTlvSerialNumber:
21178 byteCount = ((tDot11fTLVSerialNumber *)(pFrm + pTlv->offset))->num_text;
21179 pTlvPresent = ((tDot11fTLVSerialNumber *)
21180 (pFrm + pTlv->offset))->present;
21181 break;
21182 case SigTlvUUID_E:
21183 byteCount = 16;
21184 pTlvPresent = ((tDot11fTLVUUID_E *)
21185 (pFrm + pTlv->offset))->present;
21186 break;
21187 case SigTlvUUID_R:
21188 byteCount = 16;
21189 pTlvPresent = ((tDot11fTLVUUID_R *)
21190 (pFrm + pTlv->offset))->present;
21191 break;
21192 case SigTlvVendorExtension:
21193 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pFrm + pTlv->offset, pnNeeded, TLVS_VendorExtension);
21194 byteCount = 3;
21195 pTlvPresent = ((tDot11fTLVVendorExtension *)
21196 (pFrm + pTlv->offset))->present;
21197 break;
21198 case SigTlvVersion:
21199 byteCount = 1;
21200 pTlvPresent = ((tDot11fTLVVersion *)
21201 (pFrm + pTlv->offset))->present;
21202 break;
21203 case SigTlvWPSState:
21204 byteCount = 1;
21205 pTlvPresent = ((tDot11fTLVWPSState *)
21206 (pFrm + pTlv->offset))->present;
21207 break;
21208 case SigTlvassoc_disallowed:
21209 byteCount = 1;
21210 pTlvPresent = ((tDot11fTLVassoc_disallowed *)
21211 (pFrm + pTlv->offset))->present;
21212 break;
21213 case SigTlvassoc_retry_delay:
21214 byteCount = 2;
21215 pTlvPresent = ((tDot11fTLVassoc_retry_delay *)
21216 (pFrm + pTlv->offset))->present;
21217 break;
21218 case SigTlvcellular_data_cap:
21219 byteCount = 1;
21220 pTlvPresent = ((tDot11fTLVcellular_data_cap *)
21221 (pFrm + pTlv->offset))->present;
21222 break;
21223 case SigTlvcellular_data_con_pref:
21224 byteCount = 1;
21225 pTlvPresent = ((tDot11fTLVcellular_data_con_pref *)
21226 (pFrm + pTlv->offset))->present;
21227 break;
21228 case SigTlvecsa_target_tsf_info_attr:
21229 byteCount = 9;
21230 pTlvPresent = ((tDot11fTLVecsa_target_tsf_info_attr *)
21231 (pFrm + pTlv->offset))->present;
21232 break;
21233 case SigTlvedca_pifs_param_attr:
21234 byteCount = ((tDot11fTLVedca_pifs_param_attr *)(pFrm + pTlv->offset))->num_data+1;
21235 pTlvPresent = ((tDot11fTLVedca_pifs_param_attr *)
21236 (pFrm + pTlv->offset))->present;
21237 break;
21238 case SigTlvhe_2xltf_160mhz_supp:
21239 byteCount = 1;
21240 pTlvPresent = ((tDot11fTLVhe_2xltf_160mhz_supp *)
21241 (pFrm + pTlv->offset))->present;
21242 break;
21243 case SigTlvhe_400ns_sgi_attr:
21244 byteCount = 3;
21245 pTlvPresent = ((tDot11fTLVhe_400ns_sgi_attr *)
21246 (pFrm + pTlv->offset))->present;
21247 break;
21248 case SigTlvhe_dl_mumimo_attr:
21249 byteCount = 1;
21250 pTlvPresent = ((tDot11fTLVhe_dl_mumimo_attr *)
21251 (pFrm + pTlv->offset))->present;
21252 break;
21253 case SigTlvhe_dl_ofdma_attr:
21254 byteCount = 1;
21255 pTlvPresent = ((tDot11fTLVhe_dl_ofdma_attr *)
21256 (pFrm + pTlv->offset))->present;
21257 break;
21258 case SigTlvhe_mcs13_attr:
21259 byteCount = 2;
21260 pTlvPresent = ((tDot11fTLVhe_mcs13_attr *)
21261 (pFrm + pTlv->offset))->present;
21262 break;
21263 case SigTlvmbo_ap_cap:
21264 byteCount = 1;
21265 pTlvPresent = ((tDot11fTLVmbo_ap_cap *)
21266 (pFrm + pTlv->offset))->present;
21267 break;
21268 case SigTlvnon_prefferd_chan_rep:
21269 byteCount = ((tDot11fTLVnon_prefferd_chan_rep *)(pFrm + pTlv->offset))->num_channel_report+1;
21270 pTlvPresent = ((tDot11fTLVnon_prefferd_chan_rep *)
21271 (pFrm + pTlv->offset))->present;
21272 break;
21273 case SigTlvoce_cap:
21274 byteCount = 1;
21275 pTlvPresent = ((tDot11fTLVoce_cap *)
21276 (pFrm + pTlv->offset))->present;
21277 break;
21278 case SigTlvqcn_version:
21279 byteCount = 2;
21280 pTlvPresent = ((tDot11fTLVqcn_version *)
21281 (pFrm + pTlv->offset))->present;
21282 break;
21283 case SigTlvreduced_wan_metrics:
21284 byteCount = 1;
21285 pTlvPresent = ((tDot11fTLVreduced_wan_metrics *)
21286 (pFrm + pTlv->offset))->present;
21287 break;
21288 case SigTlvrssi_assoc_rej:
21289 byteCount = 2;
21290 pTlvPresent = ((tDot11fTLVrssi_assoc_rej *)
21291 (pFrm + pTlv->offset))->present;
21292 break;
21293 case SigTlvtrans_reasonp_attr:
21294 byteCount = 1;
21295 pTlvPresent = ((tDot11fTLVtrans_reasonp_attr *)
21296 (pFrm + pTlv->offset))->present;
21297 break;
21298 case SigTlvtrans_rejectp_attr:
21299 byteCount = 1;
21300 pTlvPresent = ((tDot11fTLVtrans_rejectp_attr *)
21301 (pFrm + pTlv->offset))->present;
21302 break;
21303 case SigTlvtransition_reason:
21304 byteCount = 1;
21305 pTlvPresent = ((tDot11fTLVtransition_reason *)
21306 (pFrm + pTlv->offset))->present;
21307 break;
21308 case SigTlvtransition_reject_reason:
21309 byteCount = 1;
21310 pTlvPresent = ((tDot11fTLVtransition_reject_reason *)
21311 (pFrm + pTlv->offset))->present;
21312 break;
21313 case SigTlvvht_mcs11_attr:
21314 byteCount = 1;
21315 pTlvPresent = ((tDot11fTLVvht_mcs11_attr *)
21316 (pFrm + pTlv->offset))->present;
21317 break;
21318 case SigTlvP2PInterface:
21319 byteCount = 6;
21320 pTlvPresent = ((tDot11fTLVP2PInterface *)
21321 (pFrm + pTlv->offset))->present;
21322 break;
21323 case SigTlvP2PManageability:
21324 byteCount = 1;
21325 pTlvPresent = ((tDot11fTLVP2PManageability *)
21326 (pFrm + pTlv->offset))->present;
21327 break;
21328 default:
21329 FRAMES_LOG1(pCtx, FRLOGE, FRFL("INTERNAL ERROR-- I don"
21330 "'t know about the TLV signature %d; this is most l"
21331 "ikely a bug in 'framesc'.\n"), pTlv->sig);
21332 return DOT11F_INTERNAL_ERROR;
21333 }
21334 if (pTlvPresent) {
21335 *pnNeeded += byteCount;
21336 }
21337 }
21338 ++pTlv;
21339 }
21340 return status;
21341 }
dot11f_pack_ff_aid(tpAniSirGlobal pCtx,tDot11fFfAID * pSrc,uint8_t * pBuf)21342 void dot11f_pack_ff_aid(tpAniSirGlobal pCtx,
21343 tDot11fFfAID *pSrc,
21344 uint8_t *pBuf)
21345 {
21346 frameshtons(pCtx, pBuf, pSrc->associd, 0);
21347 (void)pCtx;
21348 } /* End dot11f_pack_ff_aid. */
21349
dot11f_pack_ff_action(tpAniSirGlobal pCtx,tDot11fFfAction * pSrc,uint8_t * pBuf)21350 void dot11f_pack_ff_action(tpAniSirGlobal pCtx,
21351 tDot11fFfAction *pSrc,
21352 uint8_t *pBuf)
21353 {
21354 *pBuf = pSrc->action;
21355 (void)pCtx;
21356 } /* End dot11f_pack_ff_action. */
21357
dot11f_pack_ff_auth_algo(tpAniSirGlobal pCtx,tDot11fFfAuthAlgo * pSrc,uint8_t * pBuf)21358 void dot11f_pack_ff_auth_algo(tpAniSirGlobal pCtx,
21359 tDot11fFfAuthAlgo *pSrc,
21360 uint8_t *pBuf)
21361 {
21362 frameshtons(pCtx, pBuf, pSrc->algo, 0);
21363 (void)pCtx;
21364 } /* End dot11f_pack_ff_auth_algo. */
21365
dot11f_pack_ff_auth_seq_no(tpAniSirGlobal pCtx,tDot11fFfAuthSeqNo * pSrc,uint8_t * pBuf)21366 void dot11f_pack_ff_auth_seq_no(tpAniSirGlobal pCtx,
21367 tDot11fFfAuthSeqNo *pSrc,
21368 uint8_t *pBuf)
21369 {
21370 frameshtons(pCtx, pBuf, pSrc->no, 0);
21371 (void)pCtx;
21372 } /* End dot11f_pack_ff_auth_seq_no. */
21373
dot11f_pack_ff_beacon_interval(tpAniSirGlobal pCtx,tDot11fFfBeaconInterval * pSrc,uint8_t * pBuf)21374 void dot11f_pack_ff_beacon_interval(tpAniSirGlobal pCtx,
21375 tDot11fFfBeaconInterval *pSrc,
21376 uint8_t *pBuf)
21377 {
21378 frameshtons(pCtx, pBuf, pSrc->interval, 0);
21379 (void)pCtx;
21380 } /* End dot11f_pack_ff_beacon_interval. */
21381
dot11f_pack_ff_capabilities(tpAniSirGlobal pCtx,tDot11fFfCapabilities * pSrc,uint8_t * pBuf)21382 void dot11f_pack_ff_capabilities(tpAniSirGlobal pCtx,
21383 tDot11fFfCapabilities *pSrc,
21384 uint8_t *pBuf)
21385 {
21386 uint16_t tmp120__;
21387 tmp120__ = 0U;
21388 tmp120__ |= (pSrc->ess << 0);
21389 tmp120__ |= (pSrc->ibss << 1);
21390 tmp120__ |= (pSrc->cfPollable << 2);
21391 tmp120__ |= (pSrc->cfPollReq << 3);
21392 tmp120__ |= (pSrc->privacy << 4);
21393 tmp120__ |= (pSrc->shortPreamble << 5);
21394 tmp120__ |= (pSrc->criticalUpdateFlag << 6);
21395 tmp120__ |= (pSrc->channelAgility << 7);
21396 tmp120__ |= (pSrc->spectrumMgt << 8);
21397 tmp120__ |= (pSrc->qos << 9);
21398 tmp120__ |= (pSrc->shortSlotTime << 10);
21399 tmp120__ |= (pSrc->apsd << 11);
21400 tmp120__ |= (pSrc->rrm << 12);
21401 tmp120__ |= (pSrc->dsssOfdm << 13);
21402 tmp120__ |= (pSrc->delayedBA << 14);
21403 tmp120__ |= (pSrc->immediateBA << 15);
21404 frameshtons(pCtx, pBuf, tmp120__, 0);
21405 (void)pCtx;
21406 } /* End dot11f_pack_ff_capabilities. */
21407
dot11f_pack_ff_category(tpAniSirGlobal pCtx,tDot11fFfCategory * pSrc,uint8_t * pBuf)21408 void dot11f_pack_ff_category(tpAniSirGlobal pCtx,
21409 tDot11fFfCategory *pSrc,
21410 uint8_t *pBuf)
21411 {
21412 *pBuf = pSrc->category;
21413 (void)pCtx;
21414 } /* End dot11f_pack_ff_category. */
21415
dot11f_pack_ff_current_ap_address(tpAniSirGlobal pCtx,tDot11fFfCurrentAPAddress * pSrc,uint8_t * pBuf)21416 void dot11f_pack_ff_current_ap_address(tpAniSirGlobal pCtx,
21417 tDot11fFfCurrentAPAddress *pSrc,
21418 uint8_t *pBuf)
21419 {
21420 DOT11F_MEMCPY(pCtx, pBuf, pSrc->mac, 6);
21421 (void)pCtx;
21422 } /* End dot11f_pack_ff_current_ap_address. */
21423
dot11f_pack_ff_dialog_token(tpAniSirGlobal pCtx,tDot11fFfDialogToken * pSrc,uint8_t * pBuf)21424 void dot11f_pack_ff_dialog_token(tpAniSirGlobal pCtx,
21425 tDot11fFfDialogToken *pSrc,
21426 uint8_t *pBuf)
21427 {
21428 *pBuf = pSrc->token;
21429 (void)pCtx;
21430 } /* End dot11f_pack_ff_dialog_token. */
21431
dot11f_pack_ff_link_margin(tpAniSirGlobal pCtx,tDot11fFfLinkMargin * pSrc,uint8_t * pBuf)21432 void dot11f_pack_ff_link_margin(tpAniSirGlobal pCtx,
21433 tDot11fFfLinkMargin *pSrc,
21434 uint8_t *pBuf)
21435 {
21436 *pBuf = pSrc->linkMargin;
21437 (void)pCtx;
21438 } /* End dot11f_pack_ff_link_margin. */
21439
dot11f_pack_ff_listen_interval(tpAniSirGlobal pCtx,tDot11fFfListenInterval * pSrc,uint8_t * pBuf)21440 void dot11f_pack_ff_listen_interval(tpAniSirGlobal pCtx,
21441 tDot11fFfListenInterval *pSrc,
21442 uint8_t *pBuf)
21443 {
21444 frameshtons(pCtx, pBuf, pSrc->interval, 0);
21445 (void)pCtx;
21446 } /* End dot11f_pack_ff_listen_interval. */
21447
dot11f_pack_ff_max_tx_power(tpAniSirGlobal pCtx,tDot11fFfMaxTxPower * pSrc,uint8_t * pBuf)21448 void dot11f_pack_ff_max_tx_power(tpAniSirGlobal pCtx,
21449 tDot11fFfMaxTxPower *pSrc,
21450 uint8_t *pBuf)
21451 {
21452 *pBuf = pSrc->maxTxPower;
21453 (void)pCtx;
21454 } /* End dot11f_pack_ff_max_tx_power. */
21455
dot11f_pack_ff_num_of_repetitions(tpAniSirGlobal pCtx,tDot11fFfNumOfRepetitions * pSrc,uint8_t * pBuf)21456 void dot11f_pack_ff_num_of_repetitions(tpAniSirGlobal pCtx,
21457 tDot11fFfNumOfRepetitions *pSrc,
21458 uint8_t *pBuf)
21459 {
21460 frameshtons(pCtx, pBuf, pSrc->repetitions, 0);
21461 (void)pCtx;
21462 } /* End dot11f_pack_ff_num_of_repetitions. */
21463
dot11f_pack_ff_operating_mode(tpAniSirGlobal pCtx,tDot11fFfOperatingMode * pSrc,uint8_t * pBuf)21464 void dot11f_pack_ff_operating_mode(tpAniSirGlobal pCtx,
21465 tDot11fFfOperatingMode *pSrc,
21466 uint8_t *pBuf)
21467 {
21468 uint8_t tmp121__;
21469 tmp121__ = 0U;
21470 tmp121__ |= (pSrc->chanWidth << 0);
21471 tmp121__ |= (pSrc->reserved << 2);
21472 tmp121__ |= (pSrc->rxNSS << 4);
21473 tmp121__ |= (pSrc->rxNSSType << 7);
21474 *pBuf = tmp121__;
21475 (void)pCtx;
21476 } /* End dot11f_pack_ff_operating_mode. */
21477
dot11f_pack_ff_rcpi(tpAniSirGlobal pCtx,tDot11fFfRCPI * pSrc,uint8_t * pBuf)21478 void dot11f_pack_ff_rcpi(tpAniSirGlobal pCtx,
21479 tDot11fFfRCPI *pSrc,
21480 uint8_t *pBuf)
21481 {
21482 *pBuf = pSrc->rcpi;
21483 (void)pCtx;
21484 } /* End dot11f_pack_ff_rcpi. */
21485
dot11f_pack_ff_rsni(tpAniSirGlobal pCtx,tDot11fFfRSNI * pSrc,uint8_t * pBuf)21486 void dot11f_pack_ff_rsni(tpAniSirGlobal pCtx,
21487 tDot11fFfRSNI *pSrc,
21488 uint8_t *pBuf)
21489 {
21490 *pBuf = pSrc->rsni;
21491 (void)pCtx;
21492 } /* End dot11f_pack_ff_rsni. */
21493
dot11f_pack_ff_reason(tpAniSirGlobal pCtx,tDot11fFfReason * pSrc,uint8_t * pBuf)21494 void dot11f_pack_ff_reason(tpAniSirGlobal pCtx,
21495 tDot11fFfReason *pSrc,
21496 uint8_t *pBuf)
21497 {
21498 frameshtons(pCtx, pBuf, pSrc->code, 0);
21499 (void)pCtx;
21500 } /* End dot11f_pack_ff_reason. */
21501
dot11f_pack_ff_rx_antenna_id(tpAniSirGlobal pCtx,tDot11fFfRxAntennaId * pSrc,uint8_t * pBuf)21502 void dot11f_pack_ff_rx_antenna_id(tpAniSirGlobal pCtx,
21503 tDot11fFfRxAntennaId *pSrc,
21504 uint8_t *pBuf)
21505 {
21506 *pBuf = pSrc->antennaId;
21507 (void)pCtx;
21508 } /* End dot11f_pack_ff_rx_antenna_id. */
21509
dot11f_pack_ff_sm_power_mode_set(tpAniSirGlobal pCtx,tDot11fFfSMPowerModeSet * pSrc,uint8_t * pBuf)21510 void dot11f_pack_ff_sm_power_mode_set(tpAniSirGlobal pCtx,
21511 tDot11fFfSMPowerModeSet *pSrc,
21512 uint8_t *pBuf)
21513 {
21514 uint8_t tmp122__;
21515 tmp122__ = 0U;
21516 tmp122__ |= (pSrc->PowerSave_En << 0);
21517 tmp122__ |= (pSrc->Mode << 1);
21518 tmp122__ |= (pSrc->reserved << 2);
21519 *pBuf = tmp122__;
21520 (void)pCtx;
21521 } /* End dot11f_pack_ff_sm_power_mode_set. */
21522
dot11f_pack_ff_status(tpAniSirGlobal pCtx,tDot11fFfStatus * pSrc,uint8_t * pBuf)21523 void dot11f_pack_ff_status(tpAniSirGlobal pCtx,
21524 tDot11fFfStatus *pSrc,
21525 uint8_t *pBuf)
21526 {
21527 frameshtons(pCtx, pBuf, pSrc->status, 0);
21528 (void)pCtx;
21529 } /* End dot11f_pack_ff_status. */
21530
dot11f_pack_ff_status_code(tpAniSirGlobal pCtx,tDot11fFfStatusCode * pSrc,uint8_t * pBuf)21531 void dot11f_pack_ff_status_code(tpAniSirGlobal pCtx,
21532 tDot11fFfStatusCode *pSrc,
21533 uint8_t *pBuf)
21534 {
21535 *pBuf = pSrc->statusCode;
21536 (void)pCtx;
21537 } /* End dot11f_pack_ff_status_code. */
21538
dot11f_pack_ff_tpc_ele_id(tpAniSirGlobal pCtx,tDot11fFfTPCEleID * pSrc,uint8_t * pBuf)21539 void dot11f_pack_ff_tpc_ele_id(tpAniSirGlobal pCtx,
21540 tDot11fFfTPCEleID *pSrc,
21541 uint8_t *pBuf)
21542 {
21543 *pBuf = pSrc->TPCId;
21544 (void)pCtx;
21545 } /* End dot11f_pack_ff_tpc_ele_id. */
21546
dot11f_pack_ff_tpc_ele_len(tpAniSirGlobal pCtx,tDot11fFfTPCEleLen * pSrc,uint8_t * pBuf)21547 void dot11f_pack_ff_tpc_ele_len(tpAniSirGlobal pCtx,
21548 tDot11fFfTPCEleLen *pSrc,
21549 uint8_t *pBuf)
21550 {
21551 *pBuf = pSrc->TPCLen;
21552 (void)pCtx;
21553 } /* End dot11f_pack_ff_tpc_ele_len. */
21554
dot11f_pack_ff_ts_info(tpAniSirGlobal pCtx,tDot11fFfTSInfo * pSrc,uint8_t * pBuf)21555 void dot11f_pack_ff_ts_info(tpAniSirGlobal pCtx,
21556 tDot11fFfTSInfo *pSrc,
21557 uint8_t *pBuf)
21558 {
21559 uint32_t tmp123__;
21560 tmp123__ = 0U;
21561 tmp123__ |= (pSrc->traffic_type << 0);
21562 tmp123__ |= (pSrc->tsid << 1);
21563 tmp123__ |= (pSrc->direction << 5);
21564 tmp123__ |= (pSrc->access_policy << 7);
21565 tmp123__ |= (pSrc->aggregation << 9);
21566 tmp123__ |= (pSrc->psb << 10);
21567 tmp123__ |= (pSrc->user_priority << 11);
21568 tmp123__ |= (pSrc->tsinfo_ack_pol << 14);
21569 tmp123__ |= (pSrc->schedule << 16);
21570 tmp123__ |= (pSrc->unused << 17);
21571 frameshtonl(pCtx, pBuf, tmp123__, 0);
21572 (void)pCtx;
21573 } /* End dot11f_pack_ff_ts_info. */
21574
dot11f_pack_ff_time_stamp(tpAniSirGlobal pCtx,tDot11fFfTimeStamp * pSrc,uint8_t * pBuf)21575 void dot11f_pack_ff_time_stamp(tpAniSirGlobal pCtx,
21576 tDot11fFfTimeStamp *pSrc,
21577 uint8_t *pBuf)
21578 {
21579 frameshtonq(pCtx, pBuf, pSrc->timestamp, 0);
21580 (void)pCtx;
21581 } /* End dot11f_pack_ff_time_stamp. */
21582
dot11f_pack_ff_transaction_id(tpAniSirGlobal pCtx,tDot11fFfTransactionId * pSrc,uint8_t * pBuf)21583 void dot11f_pack_ff_transaction_id(tpAniSirGlobal pCtx,
21584 tDot11fFfTransactionId *pSrc,
21585 uint8_t *pBuf)
21586 {
21587 DOT11F_MEMCPY(pCtx, pBuf, pSrc->transId, 2);
21588 (void)pCtx;
21589 } /* End dot11f_pack_ff_transaction_id. */
21590
dot11f_pack_ff_tx_antenna_id(tpAniSirGlobal pCtx,tDot11fFfTxAntennaId * pSrc,uint8_t * pBuf)21591 void dot11f_pack_ff_tx_antenna_id(tpAniSirGlobal pCtx,
21592 tDot11fFfTxAntennaId *pSrc,
21593 uint8_t *pBuf)
21594 {
21595 *pBuf = pSrc->antennaId;
21596 (void)pCtx;
21597 } /* End dot11f_pack_ff_tx_antenna_id. */
21598
dot11f_pack_ff_tx_power(tpAniSirGlobal pCtx,tDot11fFfTxPower * pSrc,uint8_t * pBuf)21599 void dot11f_pack_ff_tx_power(tpAniSirGlobal pCtx,
21600 tDot11fFfTxPower *pSrc,
21601 uint8_t *pBuf)
21602 {
21603 *pBuf = pSrc->txPower;
21604 (void)pCtx;
21605 } /* End dot11f_pack_ff_tx_power. */
21606
dot11f_pack_ff_vht_membership_status_array(tpAniSirGlobal pCtx,tDot11fFfVhtMembershipStatusArray * pSrc,uint8_t * pBuf)21607 void dot11f_pack_ff_vht_membership_status_array(tpAniSirGlobal pCtx,
21608 tDot11fFfVhtMembershipStatusArray *pSrc,
21609 uint8_t *pBuf)
21610 {
21611 DOT11F_MEMCPY(pCtx, pBuf, pSrc->membershipStatusArray, 8);
21612 (void)pCtx;
21613 } /* End dot11f_pack_ff_vht_membership_status_array. */
21614
dot11f_pack_ff_vht_user_position_array(tpAniSirGlobal pCtx,tDot11fFfVhtUserPositionArray * pSrc,uint8_t * pBuf)21615 void dot11f_pack_ff_vht_user_position_array(tpAniSirGlobal pCtx,
21616 tDot11fFfVhtUserPositionArray *pSrc,
21617 uint8_t *pBuf)
21618 {
21619 DOT11F_MEMCPY(pCtx, pBuf, pSrc->userPositionArray, 16);
21620 (void)pCtx;
21621 } /* End dot11f_pack_ff_vht_user_position_array. */
21622
dot11f_pack_ff_addba_param_set(tpAniSirGlobal pCtx,tDot11fFfaddba_param_set * pSrc,uint8_t * pBuf)21623 void dot11f_pack_ff_addba_param_set(tpAniSirGlobal pCtx,
21624 tDot11fFfaddba_param_set *pSrc,
21625 uint8_t *pBuf)
21626 {
21627 uint16_t tmp124__;
21628 tmp124__ = 0U;
21629 tmp124__ |= (pSrc->amsdu_supp << 0);
21630 tmp124__ |= (pSrc->policy << 1);
21631 tmp124__ |= (pSrc->tid << 2);
21632 tmp124__ |= (pSrc->buff_size << 6);
21633 frameshtons(pCtx, pBuf, tmp124__, 0);
21634 (void)pCtx;
21635 } /* End dot11f_pack_ff_addba_param_set. */
21636
dot11f_pack_ff_ba_start_seq_ctrl(tpAniSirGlobal pCtx,tDot11fFfba_start_seq_ctrl * pSrc,uint8_t * pBuf)21637 void dot11f_pack_ff_ba_start_seq_ctrl(tpAniSirGlobal pCtx,
21638 tDot11fFfba_start_seq_ctrl *pSrc,
21639 uint8_t *pBuf)
21640 {
21641 uint16_t tmp125__;
21642 tmp125__ = 0U;
21643 tmp125__ |= (pSrc->frag_number << 0);
21644 tmp125__ |= (pSrc->ssn << 4);
21645 frameshtons(pCtx, pBuf, tmp125__, 0);
21646 (void)pCtx;
21647 } /* End dot11f_pack_ff_ba_start_seq_ctrl. */
21648
dot11f_pack_ff_ba_timeout(tpAniSirGlobal pCtx,tDot11fFfba_timeout * pSrc,uint8_t * pBuf)21649 void dot11f_pack_ff_ba_timeout(tpAniSirGlobal pCtx,
21650 tDot11fFfba_timeout *pSrc,
21651 uint8_t *pBuf)
21652 {
21653 frameshtons(pCtx, pBuf, pSrc->timeout, 0);
21654 (void)pCtx;
21655 } /* End dot11f_pack_ff_ba_timeout. */
21656
dot11f_pack_ff_delba_param_set(tpAniSirGlobal pCtx,tDot11fFfdelba_param_set * pSrc,uint8_t * pBuf)21657 void dot11f_pack_ff_delba_param_set(tpAniSirGlobal pCtx,
21658 tDot11fFfdelba_param_set *pSrc,
21659 uint8_t *pBuf)
21660 {
21661 uint16_t tmp126__;
21662 tmp126__ = 0U;
21663 tmp126__ |= (pSrc->reserved << 0);
21664 tmp126__ |= (pSrc->initiator << 11);
21665 tmp126__ |= (pSrc->tid << 12);
21666 frameshtons(pCtx, pBuf, tmp126__, 0);
21667 (void)pCtx;
21668 } /* End dot11f_pack_ff_delba_param_set. */
21669
dot11f_pack_ff_ext_chan_switch_ann_action(tpAniSirGlobal pCtx,tDot11fFfext_chan_switch_ann_action * pSrc,uint8_t * pBuf)21670 void dot11f_pack_ff_ext_chan_switch_ann_action(tpAniSirGlobal pCtx,
21671 tDot11fFfext_chan_switch_ann_action *pSrc,
21672 uint8_t *pBuf)
21673 {
21674 uint32_t tmp127__;
21675 tmp127__ = 0U;
21676 tmp127__ |= (pSrc->switch_mode << 0);
21677 tmp127__ |= (pSrc->op_class << 8);
21678 tmp127__ |= (pSrc->new_channel << 16);
21679 tmp127__ |= (pSrc->switch_count << 24);
21680 frameshtonl(pCtx, pBuf, tmp127__, 0);
21681 (void)pCtx;
21682 } /* End dot11f_pack_ff_ext_chan_switch_ann_action. */
21683
dot11f_pack_ff_p2p_action_oui(tpAniSirGlobal pCtx,tDot11fFfp2p_action_oui * pSrc,uint8_t * pBuf)21684 void dot11f_pack_ff_p2p_action_oui(tpAniSirGlobal pCtx,
21685 tDot11fFfp2p_action_oui *pSrc,
21686 uint8_t *pBuf)
21687 {
21688 DOT11F_MEMCPY(pCtx, pBuf, pSrc->oui_data, 4);
21689 (void)pCtx;
21690 } /* End dot11f_pack_ff_p2p_action_oui. */
21691
dot11f_pack_ff_p2p_action_subtype(tpAniSirGlobal pCtx,tDot11fFfp2p_action_subtype * pSrc,uint8_t * pBuf)21692 void dot11f_pack_ff_p2p_action_subtype(tpAniSirGlobal pCtx,
21693 tDot11fFfp2p_action_subtype *pSrc,
21694 uint8_t *pBuf)
21695 {
21696 *pBuf = pSrc->subtype;
21697 (void)pCtx;
21698 } /* End dot11f_pack_ff_p2p_action_subtype. */
21699
dot11f_pack_ff_vendor_action_subtype(tpAniSirGlobal pCtx,tDot11fFfvendor_action_subtype * pSrc,uint8_t * pBuf)21700 void dot11f_pack_ff_vendor_action_subtype(tpAniSirGlobal pCtx,
21701 tDot11fFfvendor_action_subtype *pSrc,
21702 uint8_t *pBuf)
21703 {
21704 *pBuf = pSrc->subtype;
21705 (void)pCtx;
21706 } /* End dot11f_pack_ff_vendor_action_subtype. */
21707
dot11f_pack_ff_vendor_oui(tpAniSirGlobal pCtx,tDot11fFfvendor_oui * pSrc,uint8_t * pBuf)21708 void dot11f_pack_ff_vendor_oui(tpAniSirGlobal pCtx,
21709 tDot11fFfvendor_oui *pSrc,
21710 uint8_t *pBuf)
21711 {
21712 DOT11F_MEMCPY(pCtx, pBuf, pSrc->oui_data, 3);
21713 (void)pCtx;
21714 } /* End dot11f_pack_ff_vendor_oui. */
21715
dot11f_pack_tlv_authorized_ma_cs(tpAniSirGlobal pCtx,tDot11fTLVAuthorizedMACs * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)21716 uint32_t dot11f_pack_tlv_authorized_ma_cs(tpAniSirGlobal pCtx,
21717 tDot11fTLVAuthorizedMACs *pSrc,
21718 uint8_t *pBuf,
21719 uint32_t nBuf,
21720 uint32_t *pnConsumed)
21721 {
21722 uint8_t *pTlvLen = 0;
21723 uint32_t nConsumedOnEntry = *pnConsumed;
21724 uint32_t nNeeded = 0U;
21725 nNeeded += 8;
21726 if (nNeeded > nBuf)
21727 return DOT11F_BUFFER_OVERFLOW;
21728 while (pSrc->present) {
21729 *pBuf = 1;
21730 pBuf += 1; *pnConsumed += 1;
21731 pTlvLen = pBuf;
21732 pBuf += 1; *pnConsumed += 1;
21733 DOT11F_MEMCPY(pCtx, pBuf, pSrc->mac, 6);
21734 *pnConsumed += 6;
21735 pBuf += 6;
21736 break;
21737 }
21738 (void)pCtx;
21739 if (pTlvLen) {
21740 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
21741 }
21742 return DOT11F_PARSE_SUCCESS;
21743 } /* End dot11f_pack_tlv_authorized_ma_cs. */
21744
dot11f_pack_tlv_request_to_enroll(tpAniSirGlobal pCtx,tDot11fTLVRequestToEnroll * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)21745 uint32_t dot11f_pack_tlv_request_to_enroll(tpAniSirGlobal pCtx,
21746 tDot11fTLVRequestToEnroll *pSrc,
21747 uint8_t *pBuf,
21748 uint32_t nBuf,
21749 uint32_t *pnConsumed)
21750 {
21751 uint8_t *pTlvLen = 0;
21752 uint32_t nConsumedOnEntry = *pnConsumed;
21753 uint32_t nNeeded = 0U;
21754 nNeeded += 3;
21755 if (nNeeded > nBuf)
21756 return DOT11F_BUFFER_OVERFLOW;
21757 while (pSrc->present) {
21758 *pBuf = 3;
21759 pBuf += 1; *pnConsumed += 1;
21760 pTlvLen = pBuf;
21761 pBuf += 1; *pnConsumed += 1;
21762 *pBuf = pSrc->req;
21763 *pnConsumed += 1;
21764 pBuf += 1;
21765 break;
21766 }
21767 (void)pCtx;
21768 if (pTlvLen) {
21769 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
21770 }
21771 return DOT11F_PARSE_SUCCESS;
21772 } /* End dot11f_pack_tlv_request_to_enroll. */
21773
dot11f_pack_tlv_version2(tpAniSirGlobal pCtx,tDot11fTLVVersion2 * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)21774 uint32_t dot11f_pack_tlv_version2(tpAniSirGlobal pCtx,
21775 tDot11fTLVVersion2 *pSrc,
21776 uint8_t *pBuf,
21777 uint32_t nBuf,
21778 uint32_t *pnConsumed)
21779 {
21780 uint8_t *pTlvLen = 0;
21781 uint32_t nConsumedOnEntry = *pnConsumed;
21782 uint32_t nNeeded = 0U;
21783 uint8_t tmp128__;
21784 nNeeded += 3;
21785 if (nNeeded > nBuf)
21786 return DOT11F_BUFFER_OVERFLOW;
21787 while (pSrc->present) {
21788 *pBuf = 0;
21789 pBuf += 1; *pnConsumed += 1;
21790 pTlvLen = pBuf;
21791 pBuf += 1; *pnConsumed += 1;
21792 tmp128__ = 0U;
21793 tmp128__ |= (pSrc->minor << 0);
21794 tmp128__ |= (pSrc->major << 4);
21795 if (unlikely(nBuf < 1))
21796 return DOT11F_INCOMPLETE_IE;
21797
21798 *pBuf = tmp128__;
21799 *pnConsumed += 1;
21800 pBuf += 1;
21801 nBuf -= 1 ;
21802 break;
21803 }
21804 (void)pCtx;
21805 if (pTlvLen) {
21806 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
21807 }
21808 return DOT11F_PARSE_SUCCESS;
21809 } /* End dot11f_pack_tlv_version2. */
21810
dot11f_pack_tlv_ap_setup_locked(tpAniSirGlobal pCtx,tDot11fTLVAPSetupLocked * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)21811 uint32_t dot11f_pack_tlv_ap_setup_locked(tpAniSirGlobal pCtx,
21812 tDot11fTLVAPSetupLocked *pSrc,
21813 uint8_t *pBuf,
21814 uint32_t nBuf,
21815 uint32_t *pnConsumed)
21816 {
21817 uint8_t *pTlvLen = 0;
21818 uint32_t nConsumedOnEntry = *pnConsumed;
21819 uint32_t nNeeded = 0U;
21820 nNeeded += 5;
21821 if (nNeeded > nBuf)
21822 return DOT11F_BUFFER_OVERFLOW;
21823 while (pSrc->present) {
21824 frameshtons(pCtx, pBuf, 4183, 1);
21825 pBuf += 2; *pnConsumed += 2;
21826 pTlvLen = pBuf;
21827 pBuf += 2; *pnConsumed += 2;
21828 *pBuf = pSrc->fLocked;
21829 *pnConsumed += 1;
21830 pBuf += 1;
21831 break;
21832 }
21833 (void)pCtx;
21834 if (pTlvLen) {
21835 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
21836 }
21837 return DOT11F_PARSE_SUCCESS;
21838 } /* End dot11f_pack_tlv_ap_setup_locked. */
21839
dot11f_pack_tlv_association_state(tpAniSirGlobal pCtx,tDot11fTLVAssociationState * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)21840 uint32_t dot11f_pack_tlv_association_state(tpAniSirGlobal pCtx,
21841 tDot11fTLVAssociationState *pSrc,
21842 uint8_t *pBuf,
21843 uint32_t nBuf,
21844 uint32_t *pnConsumed)
21845 {
21846 uint8_t *pTlvLen = 0;
21847 uint32_t nConsumedOnEntry = *pnConsumed;
21848 uint32_t nNeeded = 0U;
21849 nNeeded += 6;
21850 if (nNeeded > nBuf)
21851 return DOT11F_BUFFER_OVERFLOW;
21852 while (pSrc->present) {
21853 frameshtons(pCtx, pBuf, 4098, 1);
21854 pBuf += 2; *pnConsumed += 2;
21855 pTlvLen = pBuf;
21856 pBuf += 2; *pnConsumed += 2;
21857 frameshtons(pCtx, pBuf, pSrc->state, 1);
21858 *pnConsumed += 2;
21859 pBuf += 2;
21860 break;
21861 }
21862 (void)pCtx;
21863 if (pTlvLen) {
21864 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
21865 }
21866 return DOT11F_PARSE_SUCCESS;
21867 } /* End dot11f_pack_tlv_association_state. */
21868
dot11f_pack_tlv_config_methods(tpAniSirGlobal pCtx,tDot11fTLVConfigMethods * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)21869 uint32_t dot11f_pack_tlv_config_methods(tpAniSirGlobal pCtx,
21870 tDot11fTLVConfigMethods *pSrc,
21871 uint8_t *pBuf,
21872 uint32_t nBuf,
21873 uint32_t *pnConsumed)
21874 {
21875 uint8_t *pTlvLen = 0;
21876 uint32_t nConsumedOnEntry = *pnConsumed;
21877 uint32_t nNeeded = 0U;
21878 nNeeded += 6;
21879 if (nNeeded > nBuf)
21880 return DOT11F_BUFFER_OVERFLOW;
21881 while (pSrc->present) {
21882 frameshtons(pCtx, pBuf, 4104, 1);
21883 pBuf += 2; *pnConsumed += 2;
21884 pTlvLen = pBuf;
21885 pBuf += 2; *pnConsumed += 2;
21886 frameshtons(pCtx, pBuf, pSrc->methods, 1);
21887 *pnConsumed += 2;
21888 pBuf += 2;
21889 break;
21890 }
21891 (void)pCtx;
21892 if (pTlvLen) {
21893 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
21894 }
21895 return DOT11F_PARSE_SUCCESS;
21896 } /* End dot11f_pack_tlv_config_methods. */
21897
dot11f_pack_tlv_configuration_error(tpAniSirGlobal pCtx,tDot11fTLVConfigurationError * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)21898 uint32_t dot11f_pack_tlv_configuration_error(tpAniSirGlobal pCtx,
21899 tDot11fTLVConfigurationError *pSrc,
21900 uint8_t *pBuf,
21901 uint32_t nBuf,
21902 uint32_t *pnConsumed)
21903 {
21904 uint8_t *pTlvLen = 0;
21905 uint32_t nConsumedOnEntry = *pnConsumed;
21906 uint32_t nNeeded = 0U;
21907 nNeeded += 6;
21908 if (nNeeded > nBuf)
21909 return DOT11F_BUFFER_OVERFLOW;
21910 while (pSrc->present) {
21911 frameshtons(pCtx, pBuf, 4105, 1);
21912 pBuf += 2; *pnConsumed += 2;
21913 pTlvLen = pBuf;
21914 pBuf += 2; *pnConsumed += 2;
21915 frameshtons(pCtx, pBuf, pSrc->error, 1);
21916 *pnConsumed += 2;
21917 pBuf += 2;
21918 break;
21919 }
21920 (void)pCtx;
21921 if (pTlvLen) {
21922 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
21923 }
21924 return DOT11F_PARSE_SUCCESS;
21925 } /* End dot11f_pack_tlv_configuration_error. */
21926
dot11f_pack_tlv_device_name(tpAniSirGlobal pCtx,tDot11fTLVDeviceName * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)21927 uint32_t dot11f_pack_tlv_device_name(tpAniSirGlobal pCtx,
21928 tDot11fTLVDeviceName *pSrc,
21929 uint8_t *pBuf,
21930 uint32_t nBuf,
21931 uint32_t *pnConsumed)
21932 {
21933 uint8_t *pTlvLen = 0;
21934 uint32_t nConsumedOnEntry = *pnConsumed;
21935 uint32_t nNeeded = 0U;
21936 nNeeded += (pSrc->num_text + 4) ;
21937
21938 if (nNeeded > nBuf)
21939 return DOT11F_BUFFER_OVERFLOW;
21940 while (pSrc->present) {
21941 frameshtons(pCtx, pBuf, 4113, 1);
21942 pBuf += 2; *pnConsumed += 2;
21943 pTlvLen = pBuf;
21944 pBuf += 2; *pnConsumed += 2;
21945 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->text), pSrc->num_text);
21946 *pnConsumed += pSrc->num_text;
21947 pBuf += pSrc->num_text;
21948 break;
21949 }
21950 (void)pCtx;
21951 if (pTlvLen) {
21952 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
21953 }
21954 return DOT11F_PARSE_SUCCESS;
21955 } /* End dot11f_pack_tlv_device_name. */
21956
dot11f_pack_tlv_device_password_id(tpAniSirGlobal pCtx,tDot11fTLVDevicePasswordID * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)21957 uint32_t dot11f_pack_tlv_device_password_id(tpAniSirGlobal pCtx,
21958 tDot11fTLVDevicePasswordID *pSrc,
21959 uint8_t *pBuf,
21960 uint32_t nBuf,
21961 uint32_t *pnConsumed)
21962 {
21963 uint8_t *pTlvLen = 0;
21964 uint32_t nConsumedOnEntry = *pnConsumed;
21965 uint32_t nNeeded = 0U;
21966 nNeeded += 6;
21967 if (nNeeded > nBuf)
21968 return DOT11F_BUFFER_OVERFLOW;
21969 while (pSrc->present) {
21970 frameshtons(pCtx, pBuf, 4114, 1);
21971 pBuf += 2; *pnConsumed += 2;
21972 pTlvLen = pBuf;
21973 pBuf += 2; *pnConsumed += 2;
21974 frameshtons(pCtx, pBuf, pSrc->id, 1);
21975 *pnConsumed += 2;
21976 pBuf += 2;
21977 break;
21978 }
21979 (void)pCtx;
21980 if (pTlvLen) {
21981 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
21982 }
21983 return DOT11F_PARSE_SUCCESS;
21984 } /* End dot11f_pack_tlv_device_password_id. */
21985
dot11f_pack_tlv_extended_listen_timing(tpAniSirGlobal pCtx,tDot11fTLVExtendedListenTiming * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)21986 uint32_t dot11f_pack_tlv_extended_listen_timing(tpAniSirGlobal pCtx,
21987 tDot11fTLVExtendedListenTiming *pSrc,
21988 uint8_t *pBuf,
21989 uint32_t nBuf,
21990 uint32_t *pnConsumed)
21991 {
21992 uint8_t *pTlvLen = 0;
21993 uint32_t nConsumedOnEntry = *pnConsumed;
21994 uint32_t nNeeded = 0U;
21995 nNeeded += 7;
21996 if (nNeeded > nBuf)
21997 return DOT11F_BUFFER_OVERFLOW;
21998 while (pSrc->present) {
21999 *pBuf = 8;
22000 pBuf += 1; *pnConsumed += 1;
22001 pTlvLen = pBuf;
22002 pBuf += 2; *pnConsumed += 2;
22003 frameshtons(pCtx, pBuf, pSrc->availibilityPeriod, 0);
22004 *pnConsumed += 2;
22005 pBuf += 2;
22006 frameshtons(pCtx, pBuf, pSrc->availibilityInterval, 0);
22007 *pnConsumed += 2;
22008 pBuf += 2;
22009 break;
22010 }
22011 (void)pCtx;
22012 if (pTlvLen) {
22013 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 3, 0);
22014 }
22015 return DOT11F_PARSE_SUCCESS;
22016 } /* End dot11f_pack_tlv_extended_listen_timing. */
22017
dot11f_pack_tlv_listen_channel(tpAniSirGlobal pCtx,tDot11fTLVListenChannel * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22018 uint32_t dot11f_pack_tlv_listen_channel(tpAniSirGlobal pCtx,
22019 tDot11fTLVListenChannel *pSrc,
22020 uint8_t *pBuf,
22021 uint32_t nBuf,
22022 uint32_t *pnConsumed)
22023 {
22024 uint8_t *pTlvLen = 0;
22025 uint32_t nConsumedOnEntry = *pnConsumed;
22026 uint32_t nNeeded = 0U;
22027 nNeeded += 8;
22028 if (nNeeded > nBuf)
22029 return DOT11F_BUFFER_OVERFLOW;
22030 while (pSrc->present) {
22031 *pBuf = 6;
22032 pBuf += 1; *pnConsumed += 1;
22033 pTlvLen = pBuf;
22034 pBuf += 2; *pnConsumed += 2;
22035 DOT11F_MEMCPY(pCtx, pBuf, pSrc->countryString, 3);
22036 *pnConsumed += 3;
22037 pBuf += 3;
22038 *pBuf = pSrc->regulatoryClass;
22039 *pnConsumed += 1;
22040 pBuf += 1;
22041 *pBuf = pSrc->channel;
22042 *pnConsumed += 1;
22043 pBuf += 1;
22044 break;
22045 }
22046 (void)pCtx;
22047 if (pTlvLen) {
22048 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 3, 0);
22049 }
22050 return DOT11F_PARSE_SUCCESS;
22051 } /* End dot11f_pack_tlv_listen_channel. */
22052
dot11f_pack_tlv_manufacturer(tpAniSirGlobal pCtx,tDot11fTLVManufacturer * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22053 uint32_t dot11f_pack_tlv_manufacturer(tpAniSirGlobal pCtx,
22054 tDot11fTLVManufacturer *pSrc,
22055 uint8_t *pBuf,
22056 uint32_t nBuf,
22057 uint32_t *pnConsumed)
22058 {
22059 uint8_t *pTlvLen = 0;
22060 uint32_t nConsumedOnEntry = *pnConsumed;
22061 uint32_t nNeeded = 0U;
22062 nNeeded += (pSrc->num_name + 4) ;
22063
22064 if (nNeeded > nBuf)
22065 return DOT11F_BUFFER_OVERFLOW;
22066 while (pSrc->present) {
22067 frameshtons(pCtx, pBuf, 4129, 1);
22068 pBuf += 2; *pnConsumed += 2;
22069 pTlvLen = pBuf;
22070 pBuf += 2; *pnConsumed += 2;
22071 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->name), pSrc->num_name);
22072 *pnConsumed += pSrc->num_name;
22073 pBuf += pSrc->num_name;
22074 break;
22075 }
22076 (void)pCtx;
22077 if (pTlvLen) {
22078 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
22079 }
22080 return DOT11F_PARSE_SUCCESS;
22081 } /* End dot11f_pack_tlv_manufacturer. */
22082
dot11f_pack_tlv_minor_reason_code(tpAniSirGlobal pCtx,tDot11fTLVMinorReasonCode * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22083 uint32_t dot11f_pack_tlv_minor_reason_code(tpAniSirGlobal pCtx,
22084 tDot11fTLVMinorReasonCode *pSrc,
22085 uint8_t *pBuf,
22086 uint32_t nBuf,
22087 uint32_t *pnConsumed)
22088 {
22089 uint8_t *pTlvLen = 0;
22090 uint32_t nConsumedOnEntry = *pnConsumed;
22091 uint32_t nNeeded = 0U;
22092 nNeeded += 4;
22093 if (nNeeded > nBuf)
22094 return DOT11F_BUFFER_OVERFLOW;
22095 while (pSrc->present) {
22096 *pBuf = 1;
22097 pBuf += 1; *pnConsumed += 1;
22098 pTlvLen = pBuf;
22099 pBuf += 2; *pnConsumed += 2;
22100 *pBuf = pSrc->minorReasonCode;
22101 *pnConsumed += 1;
22102 pBuf += 1;
22103 break;
22104 }
22105 (void)pCtx;
22106 if (pTlvLen) {
22107 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 3, 0);
22108 }
22109 return DOT11F_PARSE_SUCCESS;
22110 } /* End dot11f_pack_tlv_minor_reason_code. */
22111
dot11f_pack_tlv_model_name(tpAniSirGlobal pCtx,tDot11fTLVModelName * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22112 uint32_t dot11f_pack_tlv_model_name(tpAniSirGlobal pCtx,
22113 tDot11fTLVModelName *pSrc,
22114 uint8_t *pBuf,
22115 uint32_t nBuf,
22116 uint32_t *pnConsumed)
22117 {
22118 uint8_t *pTlvLen = 0;
22119 uint32_t nConsumedOnEntry = *pnConsumed;
22120 uint32_t nNeeded = 0U;
22121 nNeeded += (pSrc->num_text + 4) ;
22122
22123 if (nNeeded > nBuf)
22124 return DOT11F_BUFFER_OVERFLOW;
22125 while (pSrc->present) {
22126 frameshtons(pCtx, pBuf, 4131, 1);
22127 pBuf += 2; *pnConsumed += 2;
22128 pTlvLen = pBuf;
22129 pBuf += 2; *pnConsumed += 2;
22130 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->text), pSrc->num_text);
22131 *pnConsumed += pSrc->num_text;
22132 pBuf += pSrc->num_text;
22133 break;
22134 }
22135 (void)pCtx;
22136 if (pTlvLen) {
22137 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
22138 }
22139 return DOT11F_PARSE_SUCCESS;
22140 } /* End dot11f_pack_tlv_model_name. */
22141
dot11f_pack_tlv_model_number(tpAniSirGlobal pCtx,tDot11fTLVModelNumber * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22142 uint32_t dot11f_pack_tlv_model_number(tpAniSirGlobal pCtx,
22143 tDot11fTLVModelNumber *pSrc,
22144 uint8_t *pBuf,
22145 uint32_t nBuf,
22146 uint32_t *pnConsumed)
22147 {
22148 uint8_t *pTlvLen = 0;
22149 uint32_t nConsumedOnEntry = *pnConsumed;
22150 uint32_t nNeeded = 0U;
22151 nNeeded += (pSrc->num_text + 4) ;
22152
22153 if (nNeeded > nBuf)
22154 return DOT11F_BUFFER_OVERFLOW;
22155 while (pSrc->present) {
22156 frameshtons(pCtx, pBuf, 4132, 1);
22157 pBuf += 2; *pnConsumed += 2;
22158 pTlvLen = pBuf;
22159 pBuf += 2; *pnConsumed += 2;
22160 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->text), pSrc->num_text);
22161 *pnConsumed += pSrc->num_text;
22162 pBuf += pSrc->num_text;
22163 break;
22164 }
22165 (void)pCtx;
22166 if (pTlvLen) {
22167 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
22168 }
22169 return DOT11F_PARSE_SUCCESS;
22170 } /* End dot11f_pack_tlv_model_number. */
22171
dot11f_pack_tlv_notice_of_absence(tpAniSirGlobal pCtx,tDot11fTLVNoticeOfAbsence * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22172 uint32_t dot11f_pack_tlv_notice_of_absence(tpAniSirGlobal pCtx,
22173 tDot11fTLVNoticeOfAbsence *pSrc,
22174 uint8_t *pBuf,
22175 uint32_t nBuf,
22176 uint32_t *pnConsumed)
22177 {
22178 uint8_t *pTlvLen = 0;
22179 uint32_t nConsumedOnEntry = *pnConsumed;
22180 uint32_t nNeeded = 0U;
22181 nNeeded += (pSrc->num_NoADesc + 5) ;
22182
22183 if (nNeeded > nBuf)
22184 return DOT11F_BUFFER_OVERFLOW;
22185 while (pSrc->present) {
22186 *pBuf = 12;
22187 pBuf += 1; *pnConsumed += 1;
22188 pTlvLen = pBuf;
22189 pBuf += 2; *pnConsumed += 2;
22190 *pBuf = pSrc->index;
22191 *pnConsumed += 1;
22192 pBuf += 1;
22193 *pBuf = pSrc->CTSWindowOppPS;
22194 *pnConsumed += 1;
22195 pBuf += 1;
22196 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->NoADesc), pSrc->num_NoADesc);
22197 *pnConsumed += pSrc->num_NoADesc;
22198 pBuf += pSrc->num_NoADesc;
22199 break;
22200 }
22201 (void)pCtx;
22202 if (pTlvLen) {
22203 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 3, 0);
22204 }
22205 return DOT11F_PARSE_SUCCESS;
22206 } /* End dot11f_pack_tlv_notice_of_absence. */
22207
dot11f_pack_tlv_operating_channel(tpAniSirGlobal pCtx,tDot11fTLVOperatingChannel * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22208 uint32_t dot11f_pack_tlv_operating_channel(tpAniSirGlobal pCtx,
22209 tDot11fTLVOperatingChannel *pSrc,
22210 uint8_t *pBuf,
22211 uint32_t nBuf,
22212 uint32_t *pnConsumed)
22213 {
22214 uint8_t *pTlvLen = 0;
22215 uint32_t nConsumedOnEntry = *pnConsumed;
22216 uint32_t nNeeded = 0U;
22217 nNeeded += 8;
22218 if (nNeeded > nBuf)
22219 return DOT11F_BUFFER_OVERFLOW;
22220 while (pSrc->present) {
22221 *pBuf = 17;
22222 pBuf += 1; *pnConsumed += 1;
22223 pTlvLen = pBuf;
22224 pBuf += 2; *pnConsumed += 2;
22225 DOT11F_MEMCPY(pCtx, pBuf, pSrc->countryString, 3);
22226 *pnConsumed += 3;
22227 pBuf += 3;
22228 *pBuf = pSrc->regulatoryClass;
22229 *pnConsumed += 1;
22230 pBuf += 1;
22231 *pBuf = pSrc->channel;
22232 *pnConsumed += 1;
22233 pBuf += 1;
22234 break;
22235 }
22236 (void)pCtx;
22237 if (pTlvLen) {
22238 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 3, 0);
22239 }
22240 return DOT11F_PARSE_SUCCESS;
22241 } /* End dot11f_pack_tlv_operating_channel. */
22242
dot11f_pack_tlv_p2_p_capability(tpAniSirGlobal pCtx,tDot11fTLVP2PCapability * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22243 uint32_t dot11f_pack_tlv_p2_p_capability(tpAniSirGlobal pCtx,
22244 tDot11fTLVP2PCapability *pSrc,
22245 uint8_t *pBuf,
22246 uint32_t nBuf,
22247 uint32_t *pnConsumed)
22248 {
22249 uint8_t *pTlvLen = 0;
22250 uint32_t nConsumedOnEntry = *pnConsumed;
22251 uint32_t nNeeded = 0U;
22252 nNeeded += 5;
22253 if (nNeeded > nBuf)
22254 return DOT11F_BUFFER_OVERFLOW;
22255 while (pSrc->present) {
22256 *pBuf = 2;
22257 pBuf += 1; *pnConsumed += 1;
22258 pTlvLen = pBuf;
22259 pBuf += 2; *pnConsumed += 2;
22260 *pBuf = pSrc->deviceCapability;
22261 *pnConsumed += 1;
22262 pBuf += 1;
22263 *pBuf = pSrc->groupCapability;
22264 *pnConsumed += 1;
22265 pBuf += 1;
22266 break;
22267 }
22268 (void)pCtx;
22269 if (pTlvLen) {
22270 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 3, 0);
22271 }
22272 return DOT11F_PARSE_SUCCESS;
22273 } /* End dot11f_pack_tlv_p2_p_capability. */
22274
dot11f_pack_tlv_p2_p_device_id(tpAniSirGlobal pCtx,tDot11fTLVP2PDeviceId * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22275 uint32_t dot11f_pack_tlv_p2_p_device_id(tpAniSirGlobal pCtx,
22276 tDot11fTLVP2PDeviceId *pSrc,
22277 uint8_t *pBuf,
22278 uint32_t nBuf,
22279 uint32_t *pnConsumed)
22280 {
22281 uint8_t *pTlvLen = 0;
22282 uint32_t nConsumedOnEntry = *pnConsumed;
22283 uint32_t nNeeded = 0U;
22284 nNeeded += 9;
22285 if (nNeeded > nBuf)
22286 return DOT11F_BUFFER_OVERFLOW;
22287 while (pSrc->present) {
22288 *pBuf = 3;
22289 pBuf += 1; *pnConsumed += 1;
22290 pTlvLen = pBuf;
22291 pBuf += 2; *pnConsumed += 2;
22292 DOT11F_MEMCPY(pCtx, pBuf, pSrc->P2PDeviceAddress, 6);
22293 *pnConsumed += 6;
22294 pBuf += 6;
22295 break;
22296 }
22297 (void)pCtx;
22298 if (pTlvLen) {
22299 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 3, 0);
22300 }
22301 return DOT11F_PARSE_SUCCESS;
22302 } /* End dot11f_pack_tlv_p2_p_device_id. */
22303
dot11f_pack_tlv_p2_p_device_info(tpAniSirGlobal pCtx,tDot11fTLVP2PDeviceInfo * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22304 uint32_t dot11f_pack_tlv_p2_p_device_info(tpAniSirGlobal pCtx,
22305 tDot11fTLVP2PDeviceInfo *pSrc,
22306 uint8_t *pBuf,
22307 uint32_t nBuf,
22308 uint32_t *pnConsumed)
22309 {
22310 uint8_t *pTlvLen = 0;
22311 uint32_t nConsumedOnEntry = *pnConsumed;
22312 uint32_t status = DOT11F_PARSE_SUCCESS;
22313 uint32_t nNeeded = 0U;
22314 uint32_t idx = 0;
22315 nNeeded += 19;
22316 if (nNeeded > nBuf)
22317 return DOT11F_BUFFER_OVERFLOW;
22318 while (pSrc->present) {
22319 *pBuf = 13;
22320 pBuf += 1; nBuf -= 1; *pnConsumed += 1;
22321 pTlvLen = pBuf;
22322 pBuf += 2; nBuf -= 2; *pnConsumed += 2;
22323 DOT11F_MEMCPY(pCtx, pBuf, pSrc->P2PDeviceAddress, 6);
22324 *pnConsumed += 6;
22325 pBuf += 6;
22326 frameshtons(pCtx, pBuf, pSrc->configMethod, 1);
22327 *pnConsumed += 2;
22328 pBuf += 2;
22329 DOT11F_MEMCPY(pCtx, pBuf, pSrc->primaryDeviceType, 8);
22330 *pnConsumed += 8;
22331 pBuf += 8;
22332 status |= pack_tlv_core(pCtx,
22333 (uint8_t *)pSrc,
22334 pBuf,
22335 nBuf,
22336 pnConsumed,
22337 TLVS_P2PDeviceInfo, &idx);
22338 break;
22339 }
22340 (void)pCtx;
22341 if (pTlvLen) {
22342 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 3, 0);
22343 }
22344 return status;
22345 } /* End dot11f_pack_tlv_p2_p_device_info. */
22346
dot11f_pack_tlv_p2_p_group_info(tpAniSirGlobal pCtx,tDot11fTLVP2PGroupInfo * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22347 uint32_t dot11f_pack_tlv_p2_p_group_info(tpAniSirGlobal pCtx,
22348 tDot11fTLVP2PGroupInfo *pSrc,
22349 uint8_t *pBuf,
22350 uint32_t nBuf,
22351 uint32_t *pnConsumed)
22352 {
22353 uint8_t *pTlvLen = 0;
22354 uint32_t nConsumedOnEntry = *pnConsumed;
22355 uint32_t nNeeded = 0U;
22356 nNeeded += (pSrc->num_P2PClientInfoDesc + 3) ;
22357
22358 if (nNeeded > nBuf)
22359 return DOT11F_BUFFER_OVERFLOW;
22360 while (pSrc->present) {
22361 *pBuf = 14;
22362 pBuf += 1; *pnConsumed += 1;
22363 pTlvLen = pBuf;
22364 pBuf += 2; *pnConsumed += 2;
22365 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->P2PClientInfoDesc), pSrc->num_P2PClientInfoDesc);
22366 *pnConsumed += pSrc->num_P2PClientInfoDesc;
22367 pBuf += pSrc->num_P2PClientInfoDesc;
22368 break;
22369 }
22370 (void)pCtx;
22371 if (pTlvLen) {
22372 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 3, 0);
22373 }
22374 return DOT11F_PARSE_SUCCESS;
22375 } /* End dot11f_pack_tlv_p2_p_group_info. */
22376
dot11f_pack_tlv_p2_p_status(tpAniSirGlobal pCtx,tDot11fTLVP2PStatus * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22377 uint32_t dot11f_pack_tlv_p2_p_status(tpAniSirGlobal pCtx,
22378 tDot11fTLVP2PStatus *pSrc,
22379 uint8_t *pBuf,
22380 uint32_t nBuf,
22381 uint32_t *pnConsumed)
22382 {
22383 uint8_t *pTlvLen = 0;
22384 uint32_t nConsumedOnEntry = *pnConsumed;
22385 uint32_t nNeeded = 0U;
22386 nNeeded += 4;
22387 if (nNeeded > nBuf)
22388 return DOT11F_BUFFER_OVERFLOW;
22389 while (pSrc->present) {
22390 *pBuf = 0;
22391 pBuf += 1; *pnConsumed += 1;
22392 pTlvLen = pBuf;
22393 pBuf += 2; *pnConsumed += 2;
22394 *pBuf = pSrc->status;
22395 *pnConsumed += 1;
22396 pBuf += 1;
22397 break;
22398 }
22399 (void)pCtx;
22400 if (pTlvLen) {
22401 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 3, 0);
22402 }
22403 return DOT11F_PARSE_SUCCESS;
22404 } /* End dot11f_pack_tlv_p2_p_status. */
22405
dot11f_pack_tlv_primary_device_type(tpAniSirGlobal pCtx,tDot11fTLVPrimaryDeviceType * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22406 uint32_t dot11f_pack_tlv_primary_device_type(tpAniSirGlobal pCtx,
22407 tDot11fTLVPrimaryDeviceType *pSrc,
22408 uint8_t *pBuf,
22409 uint32_t nBuf,
22410 uint32_t *pnConsumed)
22411 {
22412 uint8_t *pTlvLen = 0;
22413 uint32_t nConsumedOnEntry = *pnConsumed;
22414 uint32_t nNeeded = 0U;
22415 nNeeded += 12;
22416 if (nNeeded > nBuf)
22417 return DOT11F_BUFFER_OVERFLOW;
22418 while (pSrc->present) {
22419 frameshtons(pCtx, pBuf, 4180, 1);
22420 pBuf += 2; *pnConsumed += 2;
22421 pTlvLen = pBuf;
22422 pBuf += 2; *pnConsumed += 2;
22423 frameshtons(pCtx, pBuf, pSrc->primary_category, 1);
22424 *pnConsumed += 2;
22425 pBuf += 2;
22426 DOT11F_MEMCPY(pCtx, pBuf, pSrc->oui, 4);
22427 *pnConsumed += 4;
22428 pBuf += 4;
22429 frameshtons(pCtx, pBuf, pSrc->sub_category, 1);
22430 *pnConsumed += 2;
22431 pBuf += 2;
22432 break;
22433 }
22434 (void)pCtx;
22435 if (pTlvLen) {
22436 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
22437 }
22438 return DOT11F_PARSE_SUCCESS;
22439 } /* End dot11f_pack_tlv_primary_device_type. */
22440
dot11f_pack_tlv_rf_bands(tpAniSirGlobal pCtx,tDot11fTLVRFBands * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22441 uint32_t dot11f_pack_tlv_rf_bands(tpAniSirGlobal pCtx,
22442 tDot11fTLVRFBands *pSrc,
22443 uint8_t *pBuf,
22444 uint32_t nBuf,
22445 uint32_t *pnConsumed)
22446 {
22447 uint8_t *pTlvLen = 0;
22448 uint32_t nConsumedOnEntry = *pnConsumed;
22449 uint32_t nNeeded = 0U;
22450 nNeeded += 5;
22451 if (nNeeded > nBuf)
22452 return DOT11F_BUFFER_OVERFLOW;
22453 while (pSrc->present) {
22454 frameshtons(pCtx, pBuf, 4156, 1);
22455 pBuf += 2; *pnConsumed += 2;
22456 pTlvLen = pBuf;
22457 pBuf += 2; *pnConsumed += 2;
22458 *pBuf = pSrc->bands;
22459 *pnConsumed += 1;
22460 pBuf += 1;
22461 break;
22462 }
22463 (void)pCtx;
22464 if (pTlvLen) {
22465 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
22466 }
22467 return DOT11F_PARSE_SUCCESS;
22468 } /* End dot11f_pack_tlv_rf_bands. */
22469
dot11f_pack_tlv_request_device_type(tpAniSirGlobal pCtx,tDot11fTLVRequestDeviceType * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22470 uint32_t dot11f_pack_tlv_request_device_type(tpAniSirGlobal pCtx,
22471 tDot11fTLVRequestDeviceType *pSrc,
22472 uint8_t *pBuf,
22473 uint32_t nBuf,
22474 uint32_t *pnConsumed)
22475 {
22476 uint8_t *pTlvLen = 0;
22477 uint32_t nConsumedOnEntry = *pnConsumed;
22478 uint32_t nNeeded = 0U;
22479 nNeeded += 12;
22480 if (nNeeded > nBuf)
22481 return DOT11F_BUFFER_OVERFLOW;
22482 while (pSrc->present) {
22483 frameshtons(pCtx, pBuf, 4202, 1);
22484 pBuf += 2; *pnConsumed += 2;
22485 pTlvLen = pBuf;
22486 pBuf += 2; *pnConsumed += 2;
22487 frameshtons(pCtx, pBuf, pSrc->primary_category, 1);
22488 *pnConsumed += 2;
22489 pBuf += 2;
22490 DOT11F_MEMCPY(pCtx, pBuf, pSrc->oui, 4);
22491 *pnConsumed += 4;
22492 pBuf += 4;
22493 frameshtons(pCtx, pBuf, pSrc->sub_category, 1);
22494 *pnConsumed += 2;
22495 pBuf += 2;
22496 break;
22497 }
22498 (void)pCtx;
22499 if (pTlvLen) {
22500 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
22501 }
22502 return DOT11F_PARSE_SUCCESS;
22503 } /* End dot11f_pack_tlv_request_device_type. */
22504
dot11f_pack_tlv_request_type(tpAniSirGlobal pCtx,tDot11fTLVRequestType * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22505 uint32_t dot11f_pack_tlv_request_type(tpAniSirGlobal pCtx,
22506 tDot11fTLVRequestType *pSrc,
22507 uint8_t *pBuf,
22508 uint32_t nBuf,
22509 uint32_t *pnConsumed)
22510 {
22511 uint8_t *pTlvLen = 0;
22512 uint32_t nConsumedOnEntry = *pnConsumed;
22513 uint32_t nNeeded = 0U;
22514 nNeeded += 5;
22515 if (nNeeded > nBuf)
22516 return DOT11F_BUFFER_OVERFLOW;
22517 while (pSrc->present) {
22518 frameshtons(pCtx, pBuf, 4154, 1);
22519 pBuf += 2; *pnConsumed += 2;
22520 pTlvLen = pBuf;
22521 pBuf += 2; *pnConsumed += 2;
22522 *pBuf = pSrc->reqType;
22523 *pnConsumed += 1;
22524 pBuf += 1;
22525 break;
22526 }
22527 (void)pCtx;
22528 if (pTlvLen) {
22529 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
22530 }
22531 return DOT11F_PARSE_SUCCESS;
22532 } /* End dot11f_pack_tlv_request_type. */
22533
dot11f_pack_tlv_response_type(tpAniSirGlobal pCtx,tDot11fTLVResponseType * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22534 uint32_t dot11f_pack_tlv_response_type(tpAniSirGlobal pCtx,
22535 tDot11fTLVResponseType *pSrc,
22536 uint8_t *pBuf,
22537 uint32_t nBuf,
22538 uint32_t *pnConsumed)
22539 {
22540 uint8_t *pTlvLen = 0;
22541 uint32_t nConsumedOnEntry = *pnConsumed;
22542 uint32_t nNeeded = 0U;
22543 nNeeded += 5;
22544 if (nNeeded > nBuf)
22545 return DOT11F_BUFFER_OVERFLOW;
22546 while (pSrc->present) {
22547 frameshtons(pCtx, pBuf, 4155, 1);
22548 pBuf += 2; *pnConsumed += 2;
22549 pTlvLen = pBuf;
22550 pBuf += 2; *pnConsumed += 2;
22551 *pBuf = pSrc->resType;
22552 *pnConsumed += 1;
22553 pBuf += 1;
22554 break;
22555 }
22556 (void)pCtx;
22557 if (pTlvLen) {
22558 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
22559 }
22560 return DOT11F_PARSE_SUCCESS;
22561 } /* End dot11f_pack_tlv_response_type. */
22562
dot11f_pack_tlv_selected_registrar(tpAniSirGlobal pCtx,tDot11fTLVSelectedRegistrar * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22563 uint32_t dot11f_pack_tlv_selected_registrar(tpAniSirGlobal pCtx,
22564 tDot11fTLVSelectedRegistrar *pSrc,
22565 uint8_t *pBuf,
22566 uint32_t nBuf,
22567 uint32_t *pnConsumed)
22568 {
22569 uint8_t *pTlvLen = 0;
22570 uint32_t nConsumedOnEntry = *pnConsumed;
22571 uint32_t nNeeded = 0U;
22572 nNeeded += 5;
22573 if (nNeeded > nBuf)
22574 return DOT11F_BUFFER_OVERFLOW;
22575 while (pSrc->present) {
22576 frameshtons(pCtx, pBuf, 4161, 1);
22577 pBuf += 2; *pnConsumed += 2;
22578 pTlvLen = pBuf;
22579 pBuf += 2; *pnConsumed += 2;
22580 *pBuf = pSrc->selected;
22581 *pnConsumed += 1;
22582 pBuf += 1;
22583 break;
22584 }
22585 (void)pCtx;
22586 if (pTlvLen) {
22587 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
22588 }
22589 return DOT11F_PARSE_SUCCESS;
22590 } /* End dot11f_pack_tlv_selected_registrar. */
22591
dot11f_pack_tlv_selected_registrar_config_methods(tpAniSirGlobal pCtx,tDot11fTLVSelectedRegistrarConfigMethods * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22592 uint32_t dot11f_pack_tlv_selected_registrar_config_methods(tpAniSirGlobal pCtx,
22593 tDot11fTLVSelectedRegistrarConfigMethods *pSrc,
22594 uint8_t *pBuf,
22595 uint32_t nBuf,
22596 uint32_t *pnConsumed)
22597 {
22598 uint8_t *pTlvLen = 0;
22599 uint32_t nConsumedOnEntry = *pnConsumed;
22600 uint32_t nNeeded = 0U;
22601 nNeeded += 6;
22602 if (nNeeded > nBuf)
22603 return DOT11F_BUFFER_OVERFLOW;
22604 while (pSrc->present) {
22605 frameshtons(pCtx, pBuf, 4179, 1);
22606 pBuf += 2; *pnConsumed += 2;
22607 pTlvLen = pBuf;
22608 pBuf += 2; *pnConsumed += 2;
22609 frameshtons(pCtx, pBuf, pSrc->methods, 1);
22610 *pnConsumed += 2;
22611 pBuf += 2;
22612 break;
22613 }
22614 (void)pCtx;
22615 if (pTlvLen) {
22616 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
22617 }
22618 return DOT11F_PARSE_SUCCESS;
22619 } /* End dot11f_pack_tlv_selected_registrar_config_methods. */
22620
dot11f_pack_tlv_serial_number(tpAniSirGlobal pCtx,tDot11fTLVSerialNumber * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22621 uint32_t dot11f_pack_tlv_serial_number(tpAniSirGlobal pCtx,
22622 tDot11fTLVSerialNumber *pSrc,
22623 uint8_t *pBuf,
22624 uint32_t nBuf,
22625 uint32_t *pnConsumed)
22626 {
22627 uint8_t *pTlvLen = 0;
22628 uint32_t nConsumedOnEntry = *pnConsumed;
22629 uint32_t nNeeded = 0U;
22630 nNeeded += (pSrc->num_text + 4) ;
22631
22632 if (nNeeded > nBuf)
22633 return DOT11F_BUFFER_OVERFLOW;
22634 while (pSrc->present) {
22635 frameshtons(pCtx, pBuf, 4162, 1);
22636 pBuf += 2; *pnConsumed += 2;
22637 pTlvLen = pBuf;
22638 pBuf += 2; *pnConsumed += 2;
22639 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->text), pSrc->num_text);
22640 *pnConsumed += pSrc->num_text;
22641 pBuf += pSrc->num_text;
22642 break;
22643 }
22644 (void)pCtx;
22645 if (pTlvLen) {
22646 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
22647 }
22648 return DOT11F_PARSE_SUCCESS;
22649 } /* End dot11f_pack_tlv_serial_number. */
22650
dot11f_pack_tlv_uuid_e(tpAniSirGlobal pCtx,tDot11fTLVUUID_E * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22651 uint32_t dot11f_pack_tlv_uuid_e(tpAniSirGlobal pCtx,
22652 tDot11fTLVUUID_E *pSrc,
22653 uint8_t *pBuf,
22654 uint32_t nBuf,
22655 uint32_t *pnConsumed)
22656 {
22657 uint8_t *pTlvLen = 0;
22658 uint32_t nConsumedOnEntry = *pnConsumed;
22659 uint32_t nNeeded = 0U;
22660 nNeeded += 20;
22661 if (nNeeded > nBuf)
22662 return DOT11F_BUFFER_OVERFLOW;
22663 while (pSrc->present) {
22664 frameshtons(pCtx, pBuf, 4167, 1);
22665 pBuf += 2; *pnConsumed += 2;
22666 pTlvLen = pBuf;
22667 pBuf += 2; *pnConsumed += 2;
22668 DOT11F_MEMCPY(pCtx, pBuf, pSrc->uuid, 16);
22669 *pnConsumed += 16;
22670 pBuf += 16;
22671 break;
22672 }
22673 (void)pCtx;
22674 if (pTlvLen) {
22675 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
22676 }
22677 return DOT11F_PARSE_SUCCESS;
22678 } /* End dot11f_pack_tlv_uuid_e. */
22679
dot11f_pack_tlv_uuid_r(tpAniSirGlobal pCtx,tDot11fTLVUUID_R * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22680 uint32_t dot11f_pack_tlv_uuid_r(tpAniSirGlobal pCtx,
22681 tDot11fTLVUUID_R *pSrc,
22682 uint8_t *pBuf,
22683 uint32_t nBuf,
22684 uint32_t *pnConsumed)
22685 {
22686 uint8_t *pTlvLen = 0;
22687 uint32_t nConsumedOnEntry = *pnConsumed;
22688 uint32_t nNeeded = 0U;
22689 nNeeded += 20;
22690 if (nNeeded > nBuf)
22691 return DOT11F_BUFFER_OVERFLOW;
22692 while (pSrc->present) {
22693 frameshtons(pCtx, pBuf, 4168, 1);
22694 pBuf += 2; *pnConsumed += 2;
22695 pTlvLen = pBuf;
22696 pBuf += 2; *pnConsumed += 2;
22697 DOT11F_MEMCPY(pCtx, pBuf, pSrc->uuid, 16);
22698 *pnConsumed += 16;
22699 pBuf += 16;
22700 break;
22701 }
22702 (void)pCtx;
22703 if (pTlvLen) {
22704 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
22705 }
22706 return DOT11F_PARSE_SUCCESS;
22707 } /* End dot11f_pack_tlv_uuid_r. */
22708
dot11f_pack_tlv_vendor_extension(tpAniSirGlobal pCtx,tDot11fTLVVendorExtension * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22709 uint32_t dot11f_pack_tlv_vendor_extension(tpAniSirGlobal pCtx,
22710 tDot11fTLVVendorExtension *pSrc,
22711 uint8_t *pBuf,
22712 uint32_t nBuf,
22713 uint32_t *pnConsumed)
22714 {
22715 uint8_t *pTlvLen = 0;
22716 uint32_t nConsumedOnEntry = *pnConsumed;
22717 uint32_t status = DOT11F_PARSE_SUCCESS;
22718 uint32_t nNeeded = 0U;
22719 uint32_t idx = 0;
22720 nNeeded += 7;
22721 if (nNeeded > nBuf)
22722 return DOT11F_BUFFER_OVERFLOW;
22723 while (pSrc->present) {
22724 frameshtons(pCtx, pBuf, 4169, 1);
22725 pBuf += 2; nBuf -= 2; *pnConsumed += 2;
22726 pTlvLen = pBuf;
22727 pBuf += 2; nBuf -= 2; *pnConsumed += 2;
22728 DOT11F_MEMCPY(pCtx, pBuf, pSrc->vendorId, 3);
22729 *pnConsumed += 3;
22730 pBuf += 3;
22731 status |= pack_tlv_core(pCtx,
22732 (uint8_t *)pSrc,
22733 pBuf,
22734 nBuf,
22735 pnConsumed,
22736 TLVS_VendorExtension, &idx);
22737 break;
22738 }
22739 (void)pCtx;
22740 if (pTlvLen) {
22741 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
22742 }
22743 return status;
22744 } /* End dot11f_pack_tlv_vendor_extension. */
22745
dot11f_pack_tlv_version(tpAniSirGlobal pCtx,tDot11fTLVVersion * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22746 uint32_t dot11f_pack_tlv_version(tpAniSirGlobal pCtx,
22747 tDot11fTLVVersion *pSrc,
22748 uint8_t *pBuf,
22749 uint32_t nBuf,
22750 uint32_t *pnConsumed)
22751 {
22752 uint8_t *pTlvLen = 0;
22753 uint32_t nConsumedOnEntry = *pnConsumed;
22754 uint32_t nNeeded = 0U;
22755 uint8_t tmp129__;
22756 nNeeded += 5;
22757 if (nNeeded > nBuf)
22758 return DOT11F_BUFFER_OVERFLOW;
22759 while (pSrc->present) {
22760 frameshtons(pCtx, pBuf, 4170, 1);
22761 pBuf += 2; *pnConsumed += 2;
22762 pTlvLen = pBuf;
22763 pBuf += 2; *pnConsumed += 2;
22764 tmp129__ = 0U;
22765 tmp129__ |= (pSrc->minor << 0);
22766 tmp129__ |= (pSrc->major << 4);
22767 if (unlikely(nBuf < 1))
22768 return DOT11F_INCOMPLETE_IE;
22769
22770 *pBuf = tmp129__;
22771 *pnConsumed += 1;
22772 pBuf += 1;
22773 nBuf -= 1 ;
22774 break;
22775 }
22776 (void)pCtx;
22777 if (pTlvLen) {
22778 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
22779 }
22780 return DOT11F_PARSE_SUCCESS;
22781 } /* End dot11f_pack_tlv_version. */
22782
dot11f_pack_tlv_wps_state(tpAniSirGlobal pCtx,tDot11fTLVWPSState * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22783 uint32_t dot11f_pack_tlv_wps_state(tpAniSirGlobal pCtx,
22784 tDot11fTLVWPSState *pSrc,
22785 uint8_t *pBuf,
22786 uint32_t nBuf,
22787 uint32_t *pnConsumed)
22788 {
22789 uint8_t *pTlvLen = 0;
22790 uint32_t nConsumedOnEntry = *pnConsumed;
22791 uint32_t nNeeded = 0U;
22792 nNeeded += 5;
22793 if (nNeeded > nBuf)
22794 return DOT11F_BUFFER_OVERFLOW;
22795 while (pSrc->present) {
22796 frameshtons(pCtx, pBuf, 4164, 1);
22797 pBuf += 2; *pnConsumed += 2;
22798 pTlvLen = pBuf;
22799 pBuf += 2; *pnConsumed += 2;
22800 *pBuf = pSrc->state;
22801 *pnConsumed += 1;
22802 pBuf += 1;
22803 break;
22804 }
22805 (void)pCtx;
22806 if (pTlvLen) {
22807 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
22808 }
22809 return DOT11F_PARSE_SUCCESS;
22810 } /* End dot11f_pack_tlv_wps_state. */
22811
dot11f_pack_tlv_assoc_disallowed(tpAniSirGlobal pCtx,tDot11fTLVassoc_disallowed * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22812 uint32_t dot11f_pack_tlv_assoc_disallowed(tpAniSirGlobal pCtx,
22813 tDot11fTLVassoc_disallowed *pSrc,
22814 uint8_t *pBuf,
22815 uint32_t nBuf,
22816 uint32_t *pnConsumed)
22817 {
22818 uint8_t *pTlvLen = 0;
22819 uint32_t nConsumedOnEntry = *pnConsumed;
22820 uint32_t nNeeded = 0U;
22821 nNeeded += 3;
22822 if (nNeeded > nBuf)
22823 return DOT11F_BUFFER_OVERFLOW;
22824 while (pSrc->present) {
22825 *pBuf = 4;
22826 pBuf += 1; *pnConsumed += 1;
22827 pTlvLen = pBuf;
22828 pBuf += 1; *pnConsumed += 1;
22829 *pBuf = pSrc->reason_code;
22830 *pnConsumed += 1;
22831 pBuf += 1;
22832 break;
22833 }
22834 (void)pCtx;
22835 if (pTlvLen) {
22836 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
22837 }
22838 return DOT11F_PARSE_SUCCESS;
22839 } /* End dot11f_pack_tlv_assoc_disallowed. */
22840
dot11f_pack_tlv_assoc_retry_delay(tpAniSirGlobal pCtx,tDot11fTLVassoc_retry_delay * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22841 uint32_t dot11f_pack_tlv_assoc_retry_delay(tpAniSirGlobal pCtx,
22842 tDot11fTLVassoc_retry_delay *pSrc,
22843 uint8_t *pBuf,
22844 uint32_t nBuf,
22845 uint32_t *pnConsumed)
22846 {
22847 uint8_t *pTlvLen = 0;
22848 uint32_t nConsumedOnEntry = *pnConsumed;
22849 uint32_t nNeeded = 0U;
22850 nNeeded += 4;
22851 if (nNeeded > nBuf)
22852 return DOT11F_BUFFER_OVERFLOW;
22853 while (pSrc->present) {
22854 *pBuf = 8;
22855 pBuf += 1; *pnConsumed += 1;
22856 pTlvLen = pBuf;
22857 pBuf += 1; *pnConsumed += 1;
22858 frameshtons(pCtx, pBuf, pSrc->delay, 0);
22859 *pnConsumed += 2;
22860 pBuf += 2;
22861 break;
22862 }
22863 (void)pCtx;
22864 if (pTlvLen) {
22865 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
22866 }
22867 return DOT11F_PARSE_SUCCESS;
22868 } /* End dot11f_pack_tlv_assoc_retry_delay. */
22869
dot11f_pack_tlv_cellular_data_cap(tpAniSirGlobal pCtx,tDot11fTLVcellular_data_cap * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22870 uint32_t dot11f_pack_tlv_cellular_data_cap(tpAniSirGlobal pCtx,
22871 tDot11fTLVcellular_data_cap *pSrc,
22872 uint8_t *pBuf,
22873 uint32_t nBuf,
22874 uint32_t *pnConsumed)
22875 {
22876 uint8_t *pTlvLen = 0;
22877 uint32_t nConsumedOnEntry = *pnConsumed;
22878 uint32_t nNeeded = 0U;
22879 nNeeded += 3;
22880 if (nNeeded > nBuf)
22881 return DOT11F_BUFFER_OVERFLOW;
22882 while (pSrc->present) {
22883 *pBuf = 3;
22884 pBuf += 1; *pnConsumed += 1;
22885 pTlvLen = pBuf;
22886 pBuf += 1; *pnConsumed += 1;
22887 *pBuf = pSrc->cellular_connectivity;
22888 *pnConsumed += 1;
22889 pBuf += 1;
22890 break;
22891 }
22892 (void)pCtx;
22893 if (pTlvLen) {
22894 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
22895 }
22896 return DOT11F_PARSE_SUCCESS;
22897 } /* End dot11f_pack_tlv_cellular_data_cap. */
22898
dot11f_pack_tlv_cellular_data_con_pref(tpAniSirGlobal pCtx,tDot11fTLVcellular_data_con_pref * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22899 uint32_t dot11f_pack_tlv_cellular_data_con_pref(tpAniSirGlobal pCtx,
22900 tDot11fTLVcellular_data_con_pref *pSrc,
22901 uint8_t *pBuf,
22902 uint32_t nBuf,
22903 uint32_t *pnConsumed)
22904 {
22905 uint8_t *pTlvLen = 0;
22906 uint32_t nConsumedOnEntry = *pnConsumed;
22907 uint32_t nNeeded = 0U;
22908 nNeeded += 3;
22909 if (nNeeded > nBuf)
22910 return DOT11F_BUFFER_OVERFLOW;
22911 while (pSrc->present) {
22912 *pBuf = 5;
22913 pBuf += 1; *pnConsumed += 1;
22914 pTlvLen = pBuf;
22915 pBuf += 1; *pnConsumed += 1;
22916 *pBuf = pSrc->cellular_preference;
22917 *pnConsumed += 1;
22918 pBuf += 1;
22919 break;
22920 }
22921 (void)pCtx;
22922 if (pTlvLen) {
22923 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
22924 }
22925 return DOT11F_PARSE_SUCCESS;
22926 } /* End dot11f_pack_tlv_cellular_data_con_pref. */
22927
dot11f_pack_tlv_ecsa_target_tsf_info_attr(tpAniSirGlobal pCtx,tDot11fTLVecsa_target_tsf_info_attr * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22928 uint32_t dot11f_pack_tlv_ecsa_target_tsf_info_attr(tpAniSirGlobal pCtx,
22929 tDot11fTLVecsa_target_tsf_info_attr *pSrc,
22930 uint8_t *pBuf,
22931 uint32_t nBuf,
22932 uint32_t *pnConsumed)
22933 {
22934 uint8_t *pTlvLen = 0;
22935 uint32_t nConsumedOnEntry = *pnConsumed;
22936 uint32_t nNeeded = 0U;
22937 nNeeded += 11;
22938 if (nNeeded > nBuf)
22939 return DOT11F_BUFFER_OVERFLOW;
22940 while (pSrc->present) {
22941 *pBuf = 14;
22942 pBuf += 1; *pnConsumed += 1;
22943 pTlvLen = pBuf;
22944 pBuf += 1; *pnConsumed += 1;
22945 *pBuf = pSrc->twt_ch_sw_mode;
22946 *pnConsumed += 1;
22947 pBuf += 1;
22948 frameshtonq(pCtx, pBuf, pSrc->target_tsf, 0);
22949 *pnConsumed += 8;
22950 pBuf += 8;
22951 break;
22952 }
22953 (void)pCtx;
22954 if (pTlvLen) {
22955 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
22956 }
22957 return DOT11F_PARSE_SUCCESS;
22958 } /* End dot11f_pack_tlv_ecsa_target_tsf_info_attr. */
22959
dot11f_pack_tlv_edca_pifs_param_attr(tpAniSirGlobal pCtx,tDot11fTLVedca_pifs_param_attr * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22960 uint32_t dot11f_pack_tlv_edca_pifs_param_attr(tpAniSirGlobal pCtx,
22961 tDot11fTLVedca_pifs_param_attr *pSrc,
22962 uint8_t *pBuf,
22963 uint32_t nBuf,
22964 uint32_t *pnConsumed)
22965 {
22966 uint8_t *pTlvLen = 0;
22967 uint32_t nConsumedOnEntry = *pnConsumed;
22968 uint32_t nNeeded = 0U;
22969 nNeeded += (pSrc->num_data + 3) ;
22970
22971 if (nNeeded > nBuf)
22972 return DOT11F_BUFFER_OVERFLOW;
22973 while (pSrc->present) {
22974 *pBuf = 13;
22975 pBuf += 1; *pnConsumed += 1;
22976 pTlvLen = pBuf;
22977 pBuf += 1; *pnConsumed += 1;
22978 *pBuf = pSrc->edca_param_type;
22979 *pnConsumed += 1;
22980 pBuf += 1;
22981 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->data), pSrc->num_data);
22982 *pnConsumed += pSrc->num_data;
22983 pBuf += pSrc->num_data;
22984 break;
22985 }
22986 (void)pCtx;
22987 if (pTlvLen) {
22988 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
22989 }
22990 return DOT11F_PARSE_SUCCESS;
22991 } /* End dot11f_pack_tlv_edca_pifs_param_attr. */
22992
dot11f_pack_tlv_he_2xltf_160mhz_supp(tpAniSirGlobal pCtx,tDot11fTLVhe_2xltf_160mhz_supp * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)22993 uint32_t dot11f_pack_tlv_he_2xltf_160mhz_supp(tpAniSirGlobal pCtx,
22994 tDot11fTLVhe_2xltf_160mhz_supp *pSrc,
22995 uint8_t *pBuf,
22996 uint32_t nBuf,
22997 uint32_t *pnConsumed)
22998 {
22999 uint8_t *pTlvLen = 0;
23000 uint32_t nConsumedOnEntry = *pnConsumed;
23001 uint32_t nNeeded = 0U;
23002 nNeeded += 3;
23003 if (nNeeded > nBuf)
23004 return DOT11F_BUFFER_OVERFLOW;
23005 while (pSrc->present) {
23006 *pBuf = 4;
23007 pBuf += 1; *pnConsumed += 1;
23008 pTlvLen = pBuf;
23009 pBuf += 1; *pnConsumed += 1;
23010 *pBuf = pSrc->he_2xltf_160MHz_supp;
23011 *pnConsumed += 1;
23012 pBuf += 1;
23013 break;
23014 }
23015 (void)pCtx;
23016 if (pTlvLen) {
23017 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
23018 }
23019 return DOT11F_PARSE_SUCCESS;
23020 } /* End dot11f_pack_tlv_he_2xltf_160mhz_supp. */
23021
dot11f_pack_tlv_he_400ns_sgi_attr(tpAniSirGlobal pCtx,tDot11fTLVhe_400ns_sgi_attr * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23022 uint32_t dot11f_pack_tlv_he_400ns_sgi_attr(tpAniSirGlobal pCtx,
23023 tDot11fTLVhe_400ns_sgi_attr *pSrc,
23024 uint8_t *pBuf,
23025 uint32_t nBuf,
23026 uint32_t *pnConsumed)
23027 {
23028 uint8_t *pTlvLen = 0;
23029 uint32_t nConsumedOnEntry = *pnConsumed;
23030 uint32_t nNeeded = 0U;
23031 nNeeded += 5;
23032 if (nNeeded > nBuf)
23033 return DOT11F_BUFFER_OVERFLOW;
23034 while (pSrc->present) {
23035 *pBuf = 3;
23036 pBuf += 1; *pnConsumed += 1;
23037 pTlvLen = pBuf;
23038 pBuf += 1; *pnConsumed += 1;
23039 *pBuf = pSrc->he_ltf1x_400ns_sgi;
23040 *pnConsumed += 1;
23041 pBuf += 1;
23042 *pBuf = pSrc->he_ltf2x_400ns_sgi;
23043 *pnConsumed += 1;
23044 pBuf += 1;
23045 *pBuf = pSrc->he_ltf4x_400ns_sgi;
23046 *pnConsumed += 1;
23047 pBuf += 1;
23048 break;
23049 }
23050 (void)pCtx;
23051 if (pTlvLen) {
23052 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
23053 }
23054 return DOT11F_PARSE_SUCCESS;
23055 } /* End dot11f_pack_tlv_he_400ns_sgi_attr. */
23056
dot11f_pack_tlv_he_dl_mumimo_attr(tpAniSirGlobal pCtx,tDot11fTLVhe_dl_mumimo_attr * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23057 uint32_t dot11f_pack_tlv_he_dl_mumimo_attr(tpAniSirGlobal pCtx,
23058 tDot11fTLVhe_dl_mumimo_attr *pSrc,
23059 uint8_t *pBuf,
23060 uint32_t nBuf,
23061 uint32_t *pnConsumed)
23062 {
23063 uint8_t *pTlvLen = 0;
23064 uint32_t nConsumedOnEntry = *pnConsumed;
23065 uint32_t nNeeded = 0U;
23066 nNeeded += 3;
23067 if (nNeeded > nBuf)
23068 return DOT11F_BUFFER_OVERFLOW;
23069 while (pSrc->present) {
23070 *pBuf = 8;
23071 pBuf += 1; *pnConsumed += 1;
23072 pTlvLen = pBuf;
23073 pBuf += 1; *pnConsumed += 1;
23074 *pBuf = pSrc->he_dl_mumimo_supp;
23075 *pnConsumed += 1;
23076 pBuf += 1;
23077 break;
23078 }
23079 (void)pCtx;
23080 if (pTlvLen) {
23081 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
23082 }
23083 return DOT11F_PARSE_SUCCESS;
23084 } /* End dot11f_pack_tlv_he_dl_mumimo_attr. */
23085
dot11f_pack_tlv_he_dl_ofdma_attr(tpAniSirGlobal pCtx,tDot11fTLVhe_dl_ofdma_attr * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23086 uint32_t dot11f_pack_tlv_he_dl_ofdma_attr(tpAniSirGlobal pCtx,
23087 tDot11fTLVhe_dl_ofdma_attr *pSrc,
23088 uint8_t *pBuf,
23089 uint32_t nBuf,
23090 uint32_t *pnConsumed)
23091 {
23092 uint8_t *pTlvLen = 0;
23093 uint32_t nConsumedOnEntry = *pnConsumed;
23094 uint32_t nNeeded = 0U;
23095 nNeeded += 3;
23096 if (nNeeded > nBuf)
23097 return DOT11F_BUFFER_OVERFLOW;
23098 while (pSrc->present) {
23099 *pBuf = 5;
23100 pBuf += 1; *pnConsumed += 1;
23101 pTlvLen = pBuf;
23102 pBuf += 1; *pnConsumed += 1;
23103 *pBuf = pSrc->he_dl_ofdma_supp;
23104 *pnConsumed += 1;
23105 pBuf += 1;
23106 break;
23107 }
23108 (void)pCtx;
23109 if (pTlvLen) {
23110 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
23111 }
23112 return DOT11F_PARSE_SUCCESS;
23113 } /* End dot11f_pack_tlv_he_dl_ofdma_attr. */
23114
dot11f_pack_tlv_he_mcs13_attr(tpAniSirGlobal pCtx,tDot11fTLVhe_mcs13_attr * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23115 uint32_t dot11f_pack_tlv_he_mcs13_attr(tpAniSirGlobal pCtx,
23116 tDot11fTLVhe_mcs13_attr *pSrc,
23117 uint8_t *pBuf,
23118 uint32_t nBuf,
23119 uint32_t *pnConsumed)
23120 {
23121 uint8_t *pTlvLen = 0;
23122 uint32_t nConsumedOnEntry = *pnConsumed;
23123 uint32_t nNeeded = 0U;
23124 nNeeded += 4;
23125 if (nNeeded > nBuf)
23126 return DOT11F_BUFFER_OVERFLOW;
23127 while (pSrc->present) {
23128 *pBuf = 9;
23129 pBuf += 1; *pnConsumed += 1;
23130 pTlvLen = pBuf;
23131 pBuf += 1; *pnConsumed += 1;
23132 *pBuf = pSrc->he_mcs_12_13_supp_80;
23133 *pnConsumed += 1;
23134 pBuf += 1;
23135 *pBuf = pSrc->he_mcs_12_13_supp_160;
23136 *pnConsumed += 1;
23137 pBuf += 1;
23138 break;
23139 }
23140 (void)pCtx;
23141 if (pTlvLen) {
23142 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
23143 }
23144 return DOT11F_PARSE_SUCCESS;
23145 } /* End dot11f_pack_tlv_he_mcs13_attr. */
23146
dot11f_pack_tlv_mbo_ap_cap(tpAniSirGlobal pCtx,tDot11fTLVmbo_ap_cap * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23147 uint32_t dot11f_pack_tlv_mbo_ap_cap(tpAniSirGlobal pCtx,
23148 tDot11fTLVmbo_ap_cap *pSrc,
23149 uint8_t *pBuf,
23150 uint32_t nBuf,
23151 uint32_t *pnConsumed)
23152 {
23153 uint8_t *pTlvLen = 0;
23154 uint32_t nConsumedOnEntry = *pnConsumed;
23155 uint32_t nNeeded = 0U;
23156 nNeeded += 3;
23157 if (nNeeded > nBuf)
23158 return DOT11F_BUFFER_OVERFLOW;
23159 while (pSrc->present) {
23160 *pBuf = 1;
23161 pBuf += 1; *pnConsumed += 1;
23162 pTlvLen = pBuf;
23163 pBuf += 1; *pnConsumed += 1;
23164 *pBuf = pSrc->mbo_cap_ind;
23165 *pnConsumed += 1;
23166 pBuf += 1;
23167 break;
23168 }
23169 (void)pCtx;
23170 if (pTlvLen) {
23171 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
23172 }
23173 return DOT11F_PARSE_SUCCESS;
23174 } /* End dot11f_pack_tlv_mbo_ap_cap. */
23175
dot11f_pack_tlv_non_prefferd_chan_rep(tpAniSirGlobal pCtx,tDot11fTLVnon_prefferd_chan_rep * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23176 uint32_t dot11f_pack_tlv_non_prefferd_chan_rep(tpAniSirGlobal pCtx,
23177 tDot11fTLVnon_prefferd_chan_rep *pSrc,
23178 uint8_t *pBuf,
23179 uint32_t nBuf,
23180 uint32_t *pnConsumed)
23181 {
23182 uint8_t *pTlvLen = 0;
23183 uint32_t nConsumedOnEntry = *pnConsumed;
23184 uint32_t nNeeded = 0U;
23185 nNeeded += (pSrc->num_channel_report + 3) ;
23186
23187 if (nNeeded > nBuf)
23188 return DOT11F_BUFFER_OVERFLOW;
23189 while (pSrc->present) {
23190 *pBuf = 2;
23191 pBuf += 1; *pnConsumed += 1;
23192 pTlvLen = pBuf;
23193 pBuf += 1; *pnConsumed += 1;
23194 *pBuf = pSrc->oper_class;
23195 *pnConsumed += 1;
23196 pBuf += 1;
23197 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->channel_report), pSrc->num_channel_report);
23198 *pnConsumed += pSrc->num_channel_report;
23199 pBuf += pSrc->num_channel_report;
23200 break;
23201 }
23202 (void)pCtx;
23203 if (pTlvLen) {
23204 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
23205 }
23206 return DOT11F_PARSE_SUCCESS;
23207 } /* End dot11f_pack_tlv_non_prefferd_chan_rep. */
23208
dot11f_pack_tlv_oce_cap(tpAniSirGlobal pCtx,tDot11fTLVoce_cap * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23209 uint32_t dot11f_pack_tlv_oce_cap(tpAniSirGlobal pCtx,
23210 tDot11fTLVoce_cap *pSrc,
23211 uint8_t *pBuf,
23212 uint32_t nBuf,
23213 uint32_t *pnConsumed)
23214 {
23215 uint8_t *pTlvLen = 0;
23216 uint32_t nConsumedOnEntry = *pnConsumed;
23217 uint32_t nNeeded = 0U;
23218 uint8_t tmp130__;
23219 nNeeded += 3;
23220 if (nNeeded > nBuf)
23221 return DOT11F_BUFFER_OVERFLOW;
23222 while (pSrc->present) {
23223 *pBuf = 101;
23224 pBuf += 1; *pnConsumed += 1;
23225 pTlvLen = pBuf;
23226 pBuf += 1; *pnConsumed += 1;
23227 tmp130__ = 0U;
23228 tmp130__ |= (pSrc->oce_release << 0);
23229 tmp130__ |= (pSrc->is_sta_cfon << 3);
23230 tmp130__ |= (pSrc->non_oce_ap_present << 4);
23231 tmp130__ |= (pSrc->reserved << 5);
23232 if (unlikely(nBuf < 1))
23233 return DOT11F_INCOMPLETE_IE;
23234
23235 *pBuf = tmp130__;
23236 *pnConsumed += 1;
23237 pBuf += 1;
23238 nBuf -= 1 ;
23239 break;
23240 }
23241 (void)pCtx;
23242 if (pTlvLen) {
23243 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
23244 }
23245 return DOT11F_PARSE_SUCCESS;
23246 } /* End dot11f_pack_tlv_oce_cap. */
23247
dot11f_pack_tlv_qcn_version(tpAniSirGlobal pCtx,tDot11fTLVqcn_version * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23248 uint32_t dot11f_pack_tlv_qcn_version(tpAniSirGlobal pCtx,
23249 tDot11fTLVqcn_version *pSrc,
23250 uint8_t *pBuf,
23251 uint32_t nBuf,
23252 uint32_t *pnConsumed)
23253 {
23254 uint8_t *pTlvLen = 0;
23255 uint32_t nConsumedOnEntry = *pnConsumed;
23256 uint32_t nNeeded = 0U;
23257 nNeeded += 4;
23258 if (nNeeded > nBuf)
23259 return DOT11F_BUFFER_OVERFLOW;
23260 while (pSrc->present) {
23261 *pBuf = 1;
23262 pBuf += 1; *pnConsumed += 1;
23263 pTlvLen = pBuf;
23264 pBuf += 1; *pnConsumed += 1;
23265 *pBuf = pSrc->version;
23266 *pnConsumed += 1;
23267 pBuf += 1;
23268 *pBuf = pSrc->sub_version;
23269 *pnConsumed += 1;
23270 pBuf += 1;
23271 break;
23272 }
23273 (void)pCtx;
23274 if (pTlvLen) {
23275 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
23276 }
23277 return DOT11F_PARSE_SUCCESS;
23278 } /* End dot11f_pack_tlv_qcn_version. */
23279
dot11f_pack_tlv_reduced_wan_metrics(tpAniSirGlobal pCtx,tDot11fTLVreduced_wan_metrics * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23280 uint32_t dot11f_pack_tlv_reduced_wan_metrics(tpAniSirGlobal pCtx,
23281 tDot11fTLVreduced_wan_metrics *pSrc,
23282 uint8_t *pBuf,
23283 uint32_t nBuf,
23284 uint32_t *pnConsumed)
23285 {
23286 uint8_t *pTlvLen = 0;
23287 uint32_t nConsumedOnEntry = *pnConsumed;
23288 uint32_t nNeeded = 0U;
23289 uint8_t tmp131__;
23290 nNeeded += 3;
23291 if (nNeeded > nBuf)
23292 return DOT11F_BUFFER_OVERFLOW;
23293 while (pSrc->present) {
23294 *pBuf = 103;
23295 pBuf += 1; *pnConsumed += 1;
23296 pTlvLen = pBuf;
23297 pBuf += 1; *pnConsumed += 1;
23298 tmp131__ = 0U;
23299 tmp131__ |= (pSrc->downlink_av_cap << 0);
23300 tmp131__ |= (pSrc->uplink_av_cap << 4);
23301 if (unlikely(nBuf < 1))
23302 return DOT11F_INCOMPLETE_IE;
23303
23304 *pBuf = tmp131__;
23305 *pnConsumed += 1;
23306 pBuf += 1;
23307 nBuf -= 1 ;
23308 break;
23309 }
23310 (void)pCtx;
23311 if (pTlvLen) {
23312 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
23313 }
23314 return DOT11F_PARSE_SUCCESS;
23315 } /* End dot11f_pack_tlv_reduced_wan_metrics. */
23316
dot11f_pack_tlv_rssi_assoc_rej(tpAniSirGlobal pCtx,tDot11fTLVrssi_assoc_rej * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23317 uint32_t dot11f_pack_tlv_rssi_assoc_rej(tpAniSirGlobal pCtx,
23318 tDot11fTLVrssi_assoc_rej *pSrc,
23319 uint8_t *pBuf,
23320 uint32_t nBuf,
23321 uint32_t *pnConsumed)
23322 {
23323 uint8_t *pTlvLen = 0;
23324 uint32_t nConsumedOnEntry = *pnConsumed;
23325 uint32_t nNeeded = 0U;
23326 nNeeded += 4;
23327 if (nNeeded > nBuf)
23328 return DOT11F_BUFFER_OVERFLOW;
23329 while (pSrc->present) {
23330 *pBuf = 102;
23331 pBuf += 1; *pnConsumed += 1;
23332 pTlvLen = pBuf;
23333 pBuf += 1; *pnConsumed += 1;
23334 *pBuf = pSrc->delta_rssi;
23335 *pnConsumed += 1;
23336 pBuf += 1;
23337 *pBuf = pSrc->retry_delay;
23338 *pnConsumed += 1;
23339 pBuf += 1;
23340 break;
23341 }
23342 (void)pCtx;
23343 if (pTlvLen) {
23344 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
23345 }
23346 return DOT11F_PARSE_SUCCESS;
23347 } /* End dot11f_pack_tlv_rssi_assoc_rej. */
23348
dot11f_pack_tlv_trans_reasonp_attr(tpAniSirGlobal pCtx,tDot11fTLVtrans_reasonp_attr * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23349 uint32_t dot11f_pack_tlv_trans_reasonp_attr(tpAniSirGlobal pCtx,
23350 tDot11fTLVtrans_reasonp_attr *pSrc,
23351 uint8_t *pBuf,
23352 uint32_t nBuf,
23353 uint32_t *pnConsumed)
23354 {
23355 uint8_t *pTlvLen = 0;
23356 uint32_t nConsumedOnEntry = *pnConsumed;
23357 uint32_t nNeeded = 0U;
23358 nNeeded += 3;
23359 if (nNeeded > nBuf)
23360 return DOT11F_BUFFER_OVERFLOW;
23361 while (pSrc->present) {
23362 *pBuf = 6;
23363 pBuf += 1; *pnConsumed += 1;
23364 pTlvLen = pBuf;
23365 pBuf += 1; *pnConsumed += 1;
23366 *pBuf = pSrc->transition_reasonp;
23367 *pnConsumed += 1;
23368 pBuf += 1;
23369 break;
23370 }
23371 (void)pCtx;
23372 if (pTlvLen) {
23373 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
23374 }
23375 return DOT11F_PARSE_SUCCESS;
23376 } /* End dot11f_pack_tlv_trans_reasonp_attr. */
23377
dot11f_pack_tlv_trans_rejectp_attr(tpAniSirGlobal pCtx,tDot11fTLVtrans_rejectp_attr * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23378 uint32_t dot11f_pack_tlv_trans_rejectp_attr(tpAniSirGlobal pCtx,
23379 tDot11fTLVtrans_rejectp_attr *pSrc,
23380 uint8_t *pBuf,
23381 uint32_t nBuf,
23382 uint32_t *pnConsumed)
23383 {
23384 uint8_t *pTlvLen = 0;
23385 uint32_t nConsumedOnEntry = *pnConsumed;
23386 uint32_t nNeeded = 0U;
23387 nNeeded += 3;
23388 if (nNeeded > nBuf)
23389 return DOT11F_BUFFER_OVERFLOW;
23390 while (pSrc->present) {
23391 *pBuf = 7;
23392 pBuf += 1; *pnConsumed += 1;
23393 pTlvLen = pBuf;
23394 pBuf += 1; *pnConsumed += 1;
23395 *pBuf = pSrc->transition_rejp;
23396 *pnConsumed += 1;
23397 pBuf += 1;
23398 break;
23399 }
23400 (void)pCtx;
23401 if (pTlvLen) {
23402 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
23403 }
23404 return DOT11F_PARSE_SUCCESS;
23405 } /* End dot11f_pack_tlv_trans_rejectp_attr. */
23406
dot11f_pack_tlv_transition_reason(tpAniSirGlobal pCtx,tDot11fTLVtransition_reason * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23407 uint32_t dot11f_pack_tlv_transition_reason(tpAniSirGlobal pCtx,
23408 tDot11fTLVtransition_reason *pSrc,
23409 uint8_t *pBuf,
23410 uint32_t nBuf,
23411 uint32_t *pnConsumed)
23412 {
23413 uint8_t *pTlvLen = 0;
23414 uint32_t nConsumedOnEntry = *pnConsumed;
23415 uint32_t nNeeded = 0U;
23416 nNeeded += 3;
23417 if (nNeeded > nBuf)
23418 return DOT11F_BUFFER_OVERFLOW;
23419 while (pSrc->present) {
23420 *pBuf = 6;
23421 pBuf += 1; *pnConsumed += 1;
23422 pTlvLen = pBuf;
23423 pBuf += 1; *pnConsumed += 1;
23424 *pBuf = pSrc->transition_reason_code;
23425 *pnConsumed += 1;
23426 pBuf += 1;
23427 break;
23428 }
23429 (void)pCtx;
23430 if (pTlvLen) {
23431 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
23432 }
23433 return DOT11F_PARSE_SUCCESS;
23434 } /* End dot11f_pack_tlv_transition_reason. */
23435
dot11f_pack_tlv_transition_reject_reason(tpAniSirGlobal pCtx,tDot11fTLVtransition_reject_reason * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23436 uint32_t dot11f_pack_tlv_transition_reject_reason(tpAniSirGlobal pCtx,
23437 tDot11fTLVtransition_reject_reason *pSrc,
23438 uint8_t *pBuf,
23439 uint32_t nBuf,
23440 uint32_t *pnConsumed)
23441 {
23442 uint8_t *pTlvLen = 0;
23443 uint32_t nConsumedOnEntry = *pnConsumed;
23444 uint32_t nNeeded = 0U;
23445 nNeeded += 3;
23446 if (nNeeded > nBuf)
23447 return DOT11F_BUFFER_OVERFLOW;
23448 while (pSrc->present) {
23449 *pBuf = 7;
23450 pBuf += 1; *pnConsumed += 1;
23451 pTlvLen = pBuf;
23452 pBuf += 1; *pnConsumed += 1;
23453 *pBuf = pSrc->transition_reject_code;
23454 *pnConsumed += 1;
23455 pBuf += 1;
23456 break;
23457 }
23458 (void)pCtx;
23459 if (pTlvLen) {
23460 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
23461 }
23462 return DOT11F_PARSE_SUCCESS;
23463 } /* End dot11f_pack_tlv_transition_reject_reason. */
23464
dot11f_pack_tlv_vht_mcs11_attr(tpAniSirGlobal pCtx,tDot11fTLVvht_mcs11_attr * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23465 uint32_t dot11f_pack_tlv_vht_mcs11_attr(tpAniSirGlobal pCtx,
23466 tDot11fTLVvht_mcs11_attr *pSrc,
23467 uint8_t *pBuf,
23468 uint32_t nBuf,
23469 uint32_t *pnConsumed)
23470 {
23471 uint8_t *pTlvLen = 0;
23472 uint32_t nConsumedOnEntry = *pnConsumed;
23473 uint32_t nNeeded = 0U;
23474 nNeeded += 3;
23475 if (nNeeded > nBuf)
23476 return DOT11F_BUFFER_OVERFLOW;
23477 while (pSrc->present) {
23478 *pBuf = 2;
23479 pBuf += 1; *pnConsumed += 1;
23480 pTlvLen = pBuf;
23481 pBuf += 1; *pnConsumed += 1;
23482 *pBuf = pSrc->vht_mcs_10_11_supp;
23483 *pnConsumed += 1;
23484 pBuf += 1;
23485 break;
23486 }
23487 (void)pCtx;
23488 if (pTlvLen) {
23489 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
23490 }
23491 return DOT11F_PARSE_SUCCESS;
23492 } /* End dot11f_pack_tlv_vht_mcs11_attr. */
23493
dot11f_pack_tlv_p2_p_interface(tpAniSirGlobal pCtx,tDot11fTLVP2PInterface * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23494 uint32_t dot11f_pack_tlv_p2_p_interface(tpAniSirGlobal pCtx,
23495 tDot11fTLVP2PInterface *pSrc,
23496 uint8_t *pBuf,
23497 uint32_t nBuf,
23498 uint32_t *pnConsumed)
23499 {
23500 uint8_t *pTlvLen = 0;
23501 uint32_t nConsumedOnEntry = *pnConsumed;
23502 uint32_t nNeeded = 0U;
23503 nNeeded += 9;
23504 if (nNeeded > nBuf)
23505 return DOT11F_BUFFER_OVERFLOW;
23506 while (pSrc->present) {
23507 *pBuf = 16;
23508 pBuf += 1; *pnConsumed += 1;
23509 pTlvLen = pBuf;
23510 pBuf += 2; *pnConsumed += 2;
23511 DOT11F_MEMCPY(pCtx, pBuf, pSrc->P2PDeviceAddress, 6);
23512 *pnConsumed += 6;
23513 pBuf += 6;
23514 break;
23515 }
23516 (void)pCtx;
23517 if (pTlvLen) {
23518 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 3, 0);
23519 }
23520 return DOT11F_PARSE_SUCCESS;
23521 } /* End dot11f_pack_tlv_p2_p_interface. */
23522
dot11f_pack_tlv_p2_p_manageability(tpAniSirGlobal pCtx,tDot11fTLVP2PManageability * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23523 uint32_t dot11f_pack_tlv_p2_p_manageability(tpAniSirGlobal pCtx,
23524 tDot11fTLVP2PManageability *pSrc,
23525 uint8_t *pBuf,
23526 uint32_t nBuf,
23527 uint32_t *pnConsumed)
23528 {
23529 uint8_t *pTlvLen = 0;
23530 uint32_t nConsumedOnEntry = *pnConsumed;
23531 uint32_t nNeeded = 0U;
23532 nNeeded += 4;
23533 if (nNeeded > nBuf)
23534 return DOT11F_BUFFER_OVERFLOW;
23535 while (pSrc->present) {
23536 *pBuf = 10;
23537 pBuf += 1; *pnConsumed += 1;
23538 pTlvLen = pBuf;
23539 pBuf += 2; *pnConsumed += 2;
23540 *pBuf = pSrc->manageability;
23541 *pnConsumed += 1;
23542 pBuf += 1;
23543 break;
23544 }
23545 (void)pCtx;
23546 if (pTlvLen) {
23547 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 3, 0);
23548 }
23549 return DOT11F_PARSE_SUCCESS;
23550 } /* End dot11f_pack_tlv_p2_p_manageability. */
23551
dot11f_pack_ie_gtk(tpAniSirGlobal pCtx,tDot11fIEGTK * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23552 uint32_t dot11f_pack_ie_gtk(tpAniSirGlobal pCtx,
23553 tDot11fIEGTK *pSrc,
23554 uint8_t *pBuf,
23555 uint32_t nBuf,
23556 uint32_t *pnConsumed)
23557 {
23558 uint8_t *pIeLen = 0;
23559 uint32_t nConsumedOnEntry = *pnConsumed;
23560 uint32_t nNeeded = 0U;
23561 uint16_t tmp132__;
23562 nNeeded += (pSrc->num_key + 11);
23563 while (pSrc->present) {
23564 if (nNeeded > nBuf)
23565 return DOT11F_BUFFER_OVERFLOW;
23566 *pBuf = 2;
23567 ++pBuf; ++(*pnConsumed);
23568 pIeLen = pBuf;
23569 ++pBuf; ++(*pnConsumed);
23570 tmp132__ = 0U;
23571 tmp132__ |= (pSrc->keyId << 0);
23572 tmp132__ |= (pSrc->reserved << 2);
23573 if (unlikely(nBuf < 2))
23574 return DOT11F_INCOMPLETE_IE;
23575
23576 frameshtons(pCtx, pBuf, tmp132__, 0);
23577 *pnConsumed += 2;
23578 pBuf += 2;
23579 nBuf -= 2 ;
23580 *pBuf = pSrc->keyLength;
23581 *pnConsumed += 1;
23582 pBuf += 1;
23583 DOT11F_MEMCPY(pCtx, pBuf, pSrc->RSC, 8);
23584 *pnConsumed += 8;
23585 pBuf += 8;
23586 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->key), pSrc->num_key);
23587 *pnConsumed += pSrc->num_key;
23588 /* fieldsEndFlag = 1 */
23589 break;
23590 }
23591 (void)pCtx;
23592 if (pIeLen) {
23593 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23594 }
23595 return DOT11F_PARSE_SUCCESS;
23596 } /* End dot11f_pack_ie_gtk. */
23597
dot11f_pack_ie_igtk(tpAniSirGlobal pCtx,tDot11fIEIGTK * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23598 uint32_t dot11f_pack_ie_igtk(tpAniSirGlobal pCtx,
23599 tDot11fIEIGTK *pSrc,
23600 uint8_t *pBuf,
23601 uint32_t nBuf,
23602 uint32_t *pnConsumed)
23603 {
23604 uint8_t *pIeLen = 0;
23605 uint32_t nConsumedOnEntry = *pnConsumed;
23606 uint32_t nNeeded = 0U;
23607 nNeeded += 33;
23608 while (pSrc->present) {
23609 if (nNeeded > nBuf)
23610 return DOT11F_BUFFER_OVERFLOW;
23611 *pBuf = 4;
23612 ++pBuf; ++(*pnConsumed);
23613 pIeLen = pBuf;
23614 ++pBuf; ++(*pnConsumed);
23615 DOT11F_MEMCPY(pCtx, pBuf, pSrc->keyID, 2);
23616 *pnConsumed += 2;
23617 pBuf += 2;
23618 DOT11F_MEMCPY(pCtx, pBuf, pSrc->IPN, 6);
23619 *pnConsumed += 6;
23620 pBuf += 6;
23621 *pBuf = pSrc->keyLength;
23622 *pnConsumed += 1;
23623 pBuf += 1;
23624 DOT11F_MEMCPY(pCtx, pBuf, pSrc->key, 24);
23625 *pnConsumed += 24;
23626 /* fieldsEndFlag = 1 */
23627 break;
23628 }
23629 (void)pCtx;
23630 if (pIeLen) {
23631 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23632 }
23633 return DOT11F_PARSE_SUCCESS;
23634 } /* End dot11f_pack_ie_igtk. */
23635
dot11f_pack_ie_r0_kh_id(tpAniSirGlobal pCtx,tDot11fIER0KH_ID * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23636 uint32_t dot11f_pack_ie_r0_kh_id(tpAniSirGlobal pCtx,
23637 tDot11fIER0KH_ID *pSrc,
23638 uint8_t *pBuf,
23639 uint32_t nBuf,
23640 uint32_t *pnConsumed)
23641 {
23642 uint8_t *pIeLen = 0;
23643 uint32_t nConsumedOnEntry = *pnConsumed;
23644 uint32_t nNeeded = 0U;
23645 nNeeded += pSrc->num_PMK_R0_ID;
23646 while (pSrc->present) {
23647 if (nNeeded > nBuf)
23648 return DOT11F_BUFFER_OVERFLOW;
23649 *pBuf = 3;
23650 ++pBuf; ++(*pnConsumed);
23651 pIeLen = pBuf;
23652 ++pBuf; ++(*pnConsumed);
23653 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->PMK_R0_ID), pSrc->num_PMK_R0_ID);
23654 *pnConsumed += pSrc->num_PMK_R0_ID;
23655 /* fieldsEndFlag = 1 */
23656 break;
23657 }
23658 (void)pCtx;
23659 if (pIeLen) {
23660 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23661 }
23662 return DOT11F_PARSE_SUCCESS;
23663 } /* End dot11f_pack_ie_r0_kh_id. */
23664
dot11f_pack_ie_r1_kh_id(tpAniSirGlobal pCtx,tDot11fIER1KH_ID * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23665 uint32_t dot11f_pack_ie_r1_kh_id(tpAniSirGlobal pCtx,
23666 tDot11fIER1KH_ID *pSrc,
23667 uint8_t *pBuf,
23668 uint32_t nBuf,
23669 uint32_t *pnConsumed)
23670 {
23671 uint8_t *pIeLen = 0;
23672 uint32_t nConsumedOnEntry = *pnConsumed;
23673 uint32_t nNeeded = 0U;
23674 nNeeded += 6;
23675 while (pSrc->present) {
23676 if (nNeeded > nBuf)
23677 return DOT11F_BUFFER_OVERFLOW;
23678 *pBuf = 1;
23679 ++pBuf; ++(*pnConsumed);
23680 pIeLen = pBuf;
23681 ++pBuf; ++(*pnConsumed);
23682 DOT11F_MEMCPY(pCtx, pBuf, pSrc->PMK_R1_ID, 6);
23683 *pnConsumed += 6;
23684 /* fieldsEndFlag = 1 */
23685 break;
23686 }
23687 (void)pCtx;
23688 if (pIeLen) {
23689 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23690 }
23691 return DOT11F_PARSE_SUCCESS;
23692 } /* End dot11f_pack_ie_r1_kh_id. */
23693
dot11f_pack_ie_ap_channel_report(tpAniSirGlobal pCtx,tDot11fIEAPChannelReport * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23694 uint32_t dot11f_pack_ie_ap_channel_report(tpAniSirGlobal pCtx,
23695 tDot11fIEAPChannelReport *pSrc,
23696 uint8_t *pBuf,
23697 uint32_t nBuf,
23698 uint32_t *pnConsumed)
23699 {
23700 uint8_t *pIeLen = 0;
23701 uint32_t nConsumedOnEntry = *pnConsumed;
23702 uint32_t nNeeded = 0U;
23703 nNeeded += (pSrc->num_channelList + 1);
23704 while (pSrc->present) {
23705 if (nNeeded > nBuf)
23706 return DOT11F_BUFFER_OVERFLOW;
23707 *pBuf = 51;
23708 ++pBuf; ++(*pnConsumed);
23709 pIeLen = pBuf;
23710 ++pBuf; ++(*pnConsumed);
23711 *pBuf = pSrc->regulatoryClass;
23712 *pnConsumed += 1;
23713 pBuf += 1;
23714 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->channelList), pSrc->num_channelList);
23715 *pnConsumed += pSrc->num_channelList;
23716 /* fieldsEndFlag = 1 */
23717 break;
23718 }
23719 (void)pCtx;
23720 if (pIeLen) {
23721 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23722 }
23723 return DOT11F_PARSE_SUCCESS;
23724 } /* End dot11f_pack_ie_ap_channel_report. */
23725
dot11f_pack_ie_bcn_reporting_detail(tpAniSirGlobal pCtx,tDot11fIEBcnReportingDetail * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23726 uint32_t dot11f_pack_ie_bcn_reporting_detail(tpAniSirGlobal pCtx,
23727 tDot11fIEBcnReportingDetail *pSrc,
23728 uint8_t *pBuf,
23729 uint32_t nBuf,
23730 uint32_t *pnConsumed)
23731 {
23732 uint8_t *pIeLen = 0;
23733 uint32_t nConsumedOnEntry = *pnConsumed;
23734 uint32_t nNeeded = 0U;
23735 nNeeded += 1;
23736 while (pSrc->present) {
23737 if (nNeeded > nBuf)
23738 return DOT11F_BUFFER_OVERFLOW;
23739 *pBuf = 2;
23740 ++pBuf; ++(*pnConsumed);
23741 pIeLen = pBuf;
23742 ++pBuf; ++(*pnConsumed);
23743 *pBuf = pSrc->reportingDetail;
23744 *pnConsumed += 1;
23745 /* fieldsEndFlag = 1 */
23746 break;
23747 }
23748 (void)pCtx;
23749 if (pIeLen) {
23750 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23751 }
23752 return DOT11F_PARSE_SUCCESS;
23753 } /* End dot11f_pack_ie_bcn_reporting_detail. */
23754
dot11f_pack_ie_beacon_report_frm_body(tpAniSirGlobal pCtx,tDot11fIEBeaconReportFrmBody * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23755 uint32_t dot11f_pack_ie_beacon_report_frm_body(tpAniSirGlobal pCtx,
23756 tDot11fIEBeaconReportFrmBody *pSrc,
23757 uint8_t *pBuf,
23758 uint32_t nBuf,
23759 uint32_t *pnConsumed)
23760 {
23761 uint8_t *pIeLen = 0;
23762 uint32_t nConsumedOnEntry = *pnConsumed;
23763 uint32_t nNeeded = 0U;
23764 nNeeded += pSrc->num_reportedFields;
23765 while (pSrc->present) {
23766 if (nNeeded > nBuf)
23767 return DOT11F_BUFFER_OVERFLOW;
23768 *pBuf = 1;
23769 ++pBuf; ++(*pnConsumed);
23770 pIeLen = pBuf;
23771 ++pBuf; ++(*pnConsumed);
23772 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->reportedFields), pSrc->num_reportedFields);
23773 *pnConsumed += pSrc->num_reportedFields;
23774 /* fieldsEndFlag = 1 */
23775 break;
23776 }
23777 (void)pCtx;
23778 if (pIeLen) {
23779 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23780 }
23781 return DOT11F_PARSE_SUCCESS;
23782 } /* End dot11f_pack_ie_beacon_report_frm_body. */
23783
dot11f_pack_ie_condensed_country_str(tpAniSirGlobal pCtx,tDot11fIECondensedCountryStr * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23784 uint32_t dot11f_pack_ie_condensed_country_str(tpAniSirGlobal pCtx,
23785 tDot11fIECondensedCountryStr *pSrc,
23786 uint8_t *pBuf,
23787 uint32_t nBuf,
23788 uint32_t *pnConsumed)
23789 {
23790 uint8_t *pIeLen = 0;
23791 uint32_t nConsumedOnEntry = *pnConsumed;
23792 uint32_t nNeeded = 0U;
23793 nNeeded += 2;
23794 while (pSrc->present) {
23795 if (nNeeded > nBuf)
23796 return DOT11F_BUFFER_OVERFLOW;
23797 *pBuf = 2;
23798 ++pBuf; ++(*pnConsumed);
23799 pIeLen = pBuf;
23800 ++pBuf; ++(*pnConsumed);
23801 DOT11F_MEMCPY(pCtx, pBuf, pSrc->countryStr, 2);
23802 *pnConsumed += 2;
23803 /* fieldsEndFlag = 1 */
23804 break;
23805 }
23806 (void)pCtx;
23807 if (pIeLen) {
23808 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23809 }
23810 return DOT11F_PARSE_SUCCESS;
23811 } /* End dot11f_pack_ie_condensed_country_str. */
23812
dot11f_pack_ie_ExtRequestedInfo(tpAniSirGlobal pCtx,tDot11fIEExtRequestedInfo * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23813 uint32_t dot11f_pack_ie_ExtRequestedInfo(tpAniSirGlobal pCtx,
23814 tDot11fIEExtRequestedInfo *pSrc,
23815 uint8_t *pBuf,
23816 uint32_t nBuf,
23817 uint32_t *pnConsumed)
23818 {
23819 uint8_t *pIeLen = 0;
23820 uint32_t nConsumedOnEntry = *pnConsumed;
23821 uint32_t nNeeded = 0U;
23822 nNeeded += (pSrc->num_req_element_id_ext + 1);
23823 while (pSrc->present) {
23824 if (nNeeded > nBuf)
23825 return DOT11F_BUFFER_OVERFLOW;
23826 *pBuf = 11;
23827 ++pBuf; ++(*pnConsumed);
23828 pIeLen = pBuf;
23829 ++pBuf; ++(*pnConsumed);
23830 *pBuf = pSrc->req_element_id;
23831 *pnConsumed += 1;
23832 pBuf += 1;
23833 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->req_element_id_ext), pSrc->num_req_element_id_ext);
23834 *pnConsumed += pSrc->num_req_element_id_ext;
23835 /* fieldsEndFlag = 1 */
23836 break;
23837 }
23838 (void)pCtx;
23839 if (pIeLen) {
23840 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23841 }
23842 return DOT11F_PARSE_SUCCESS;
23843 } /* End dot11f_pack_ie_ExtRequestedInfo. */
23844
dot11f_pack_ie_measurement_pilot(tpAniSirGlobal pCtx,tDot11fIEMeasurementPilot * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23845 uint32_t dot11f_pack_ie_measurement_pilot(tpAniSirGlobal pCtx,
23846 tDot11fIEMeasurementPilot *pSrc,
23847 uint8_t *pBuf,
23848 uint32_t nBuf,
23849 uint32_t *pnConsumed)
23850 {
23851 uint8_t *pIeLen = 0;
23852 uint32_t nConsumedOnEntry = *pnConsumed;
23853 uint32_t nNeeded = 0U;
23854 nNeeded += (pSrc->num_vendorSpecific + 1);
23855 while (pSrc->present) {
23856 if (nNeeded > nBuf)
23857 return DOT11F_BUFFER_OVERFLOW;
23858 *pBuf = 66;
23859 ++pBuf; ++(*pnConsumed);
23860 pIeLen = pBuf;
23861 ++pBuf; ++(*pnConsumed);
23862 *pBuf = pSrc->measurementPilot;
23863 *pnConsumed += 1;
23864 pBuf += 1;
23865 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->vendorSpecific), pSrc->num_vendorSpecific);
23866 *pnConsumed += pSrc->num_vendorSpecific;
23867 /* fieldsEndFlag = 1 */
23868 break;
23869 }
23870 (void)pCtx;
23871 if (pIeLen) {
23872 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23873 }
23874 return DOT11F_PARSE_SUCCESS;
23875 } /* End dot11f_pack_ie_measurement_pilot. */
23876
dot11f_pack_ie_multi_bssid(tpAniSirGlobal pCtx,tDot11fIEMultiBssid * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23877 uint32_t dot11f_pack_ie_multi_bssid(tpAniSirGlobal pCtx,
23878 tDot11fIEMultiBssid *pSrc,
23879 uint8_t *pBuf,
23880 uint32_t nBuf,
23881 uint32_t *pnConsumed)
23882 {
23883 uint8_t *pIeLen = 0;
23884 uint32_t nConsumedOnEntry = *pnConsumed;
23885 uint32_t nNeeded = 0U;
23886 nNeeded += (pSrc->num_vendorSpecific + 1);
23887 while (pSrc->present) {
23888 if (nNeeded > nBuf)
23889 return DOT11F_BUFFER_OVERFLOW;
23890 *pBuf = 71;
23891 ++pBuf; ++(*pnConsumed);
23892 pIeLen = pBuf;
23893 ++pBuf; ++(*pnConsumed);
23894 *pBuf = pSrc->maxBSSIDIndicator;
23895 *pnConsumed += 1;
23896 pBuf += 1;
23897 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->vendorSpecific), pSrc->num_vendorSpecific);
23898 *pnConsumed += pSrc->num_vendorSpecific;
23899 /* fieldsEndFlag = 1 */
23900 break;
23901 }
23902 (void)pCtx;
23903 if (pIeLen) {
23904 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23905 }
23906 return DOT11F_PARSE_SUCCESS;
23907 } /* End dot11f_pack_ie_multi_bssid. */
23908
dot11f_pack_ie_ric_data(tpAniSirGlobal pCtx,tDot11fIERICData * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23909 uint32_t dot11f_pack_ie_ric_data(tpAniSirGlobal pCtx,
23910 tDot11fIERICData *pSrc,
23911 uint8_t *pBuf,
23912 uint32_t nBuf,
23913 uint32_t *pnConsumed)
23914 {
23915 uint8_t *pIeLen = 0;
23916 uint32_t nConsumedOnEntry = *pnConsumed;
23917 uint32_t nNeeded = 0U;
23918 nNeeded += 4;
23919 while (pSrc->present) {
23920 if (nNeeded > nBuf)
23921 return DOT11F_BUFFER_OVERFLOW;
23922 *pBuf = 57;
23923 ++pBuf; ++(*pnConsumed);
23924 pIeLen = pBuf;
23925 ++pBuf; ++(*pnConsumed);
23926 *pBuf = pSrc->Identifier;
23927 *pnConsumed += 1;
23928 pBuf += 1;
23929 *pBuf = pSrc->resourceDescCount;
23930 *pnConsumed += 1;
23931 pBuf += 1;
23932 frameshtons(pCtx, pBuf, pSrc->statusCode, 0);
23933 *pnConsumed += 2;
23934 /* fieldsEndFlag = 1 */
23935 break;
23936 }
23937 (void)pCtx;
23938 if (pIeLen) {
23939 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23940 }
23941 return DOT11F_PARSE_SUCCESS;
23942 } /* End dot11f_pack_ie_ric_data. */
23943
dot11f_pack_ie_ric_descriptor(tpAniSirGlobal pCtx,tDot11fIERICDescriptor * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23944 uint32_t dot11f_pack_ie_ric_descriptor(tpAniSirGlobal pCtx,
23945 tDot11fIERICDescriptor *pSrc,
23946 uint8_t *pBuf,
23947 uint32_t nBuf,
23948 uint32_t *pnConsumed)
23949 {
23950 uint8_t *pIeLen = 0;
23951 uint32_t nConsumedOnEntry = *pnConsumed;
23952 uint32_t nNeeded = 0U;
23953 nNeeded += (pSrc->num_variableData + 1);
23954 while (pSrc->present) {
23955 if (nNeeded > nBuf)
23956 return DOT11F_BUFFER_OVERFLOW;
23957 *pBuf = 75;
23958 ++pBuf; ++(*pnConsumed);
23959 pIeLen = pBuf;
23960 ++pBuf; ++(*pnConsumed);
23961 *pBuf = pSrc->resourceType;
23962 *pnConsumed += 1;
23963 pBuf += 1;
23964 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->variableData), pSrc->num_variableData);
23965 *pnConsumed += pSrc->num_variableData;
23966 /* fieldsEndFlag = 1 */
23967 break;
23968 }
23969 (void)pCtx;
23970 if (pIeLen) {
23971 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23972 }
23973 return DOT11F_PARSE_SUCCESS;
23974 } /* End dot11f_pack_ie_ric_descriptor. */
23975
dot11f_pack_ie_rrm_enabled_cap(tpAniSirGlobal pCtx,tDot11fIERRMEnabledCap * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)23976 uint32_t dot11f_pack_ie_rrm_enabled_cap(tpAniSirGlobal pCtx,
23977 tDot11fIERRMEnabledCap *pSrc,
23978 uint8_t *pBuf,
23979 uint32_t nBuf,
23980 uint32_t *pnConsumed)
23981 {
23982 uint8_t *pIeLen = 0;
23983 uint32_t nConsumedOnEntry = *pnConsumed;
23984 uint32_t nNeeded = 0U;
23985 uint8_t tmp133__;
23986 uint8_t tmp134__;
23987 uint8_t tmp135__;
23988 uint8_t tmp136__;
23989 uint8_t tmp137__;
23990 nNeeded += 5;
23991 while (pSrc->present) {
23992 if (nNeeded > nBuf)
23993 return DOT11F_BUFFER_OVERFLOW;
23994 *pBuf = 70;
23995 ++pBuf; ++(*pnConsumed);
23996 pIeLen = pBuf;
23997 ++pBuf; ++(*pnConsumed);
23998 tmp133__ = 0U;
23999 tmp133__ |= (pSrc->LinkMeasurement << 0);
24000 tmp133__ |= (pSrc->NeighborRpt << 1);
24001 tmp133__ |= (pSrc->parallel << 2);
24002 tmp133__ |= (pSrc->repeated << 3);
24003 tmp133__ |= (pSrc->BeaconPassive << 4);
24004 tmp133__ |= (pSrc->BeaconActive << 5);
24005 tmp133__ |= (pSrc->BeaconTable << 6);
24006 tmp133__ |= (pSrc->BeaconRepCond << 7);
24007 if (unlikely(nBuf < 1))
24008 return DOT11F_INCOMPLETE_IE;
24009
24010 *pBuf = tmp133__;
24011 *pnConsumed += 1;
24012 pBuf += 1;
24013 nBuf -= 1 ;
24014 tmp134__ = 0U;
24015 tmp134__ |= (pSrc->FrameMeasurement << 0);
24016 tmp134__ |= (pSrc->ChannelLoad << 1);
24017 tmp134__ |= (pSrc->NoiseHistogram << 2);
24018 tmp134__ |= (pSrc->statistics << 3);
24019 tmp134__ |= (pSrc->LCIMeasurement << 4);
24020 tmp134__ |= (pSrc->LCIAzimuth << 5);
24021 tmp134__ |= (pSrc->TCMCapability << 6);
24022 tmp134__ |= (pSrc->triggeredTCM << 7);
24023 if (unlikely(nBuf < 1))
24024 return DOT11F_INCOMPLETE_IE;
24025
24026 *pBuf = tmp134__;
24027 *pnConsumed += 1;
24028 pBuf += 1;
24029 nBuf -= 1 ;
24030 tmp135__ = 0U;
24031 tmp135__ |= (pSrc->APChanReport << 0);
24032 tmp135__ |= (pSrc->RRMMIBEnabled << 1);
24033 tmp135__ |= (pSrc->operatingChanMax << 2);
24034 tmp135__ |= (pSrc->nonOperatinChanMax << 5);
24035 if (unlikely(nBuf < 1))
24036 return DOT11F_INCOMPLETE_IE;
24037
24038 *pBuf = tmp135__;
24039 *pnConsumed += 1;
24040 pBuf += 1;
24041 nBuf -= 1 ;
24042 tmp136__ = 0U;
24043 tmp136__ |= (pSrc->MeasurementPilot << 0);
24044 tmp136__ |= (pSrc->MeasurementPilotEnabled << 3);
24045 tmp136__ |= (pSrc->NeighborTSFOffset << 4);
24046 tmp136__ |= (pSrc->RCPIMeasurement << 5);
24047 tmp136__ |= (pSrc->RSNIMeasurement << 6);
24048 tmp136__ |= (pSrc->BssAvgAccessDelay << 7);
24049 if (unlikely(nBuf < 1))
24050 return DOT11F_INCOMPLETE_IE;
24051
24052 *pBuf = tmp136__;
24053 *pnConsumed += 1;
24054 pBuf += 1;
24055 nBuf -= 1 ;
24056 tmp137__ = 0U;
24057 tmp137__ |= (pSrc->BSSAvailAdmission << 0);
24058 tmp137__ |= (pSrc->AntennaInformation << 1);
24059 tmp137__ |= (pSrc->fine_time_meas_rpt << 2);
24060 tmp137__ |= (pSrc->lci_capability << 3);
24061 tmp137__ |= (pSrc->reserved << 4);
24062 if (unlikely(nBuf < 1))
24063 return DOT11F_INCOMPLETE_IE;
24064
24065 *pBuf = tmp137__;
24066 *pnConsumed += 1;
24067 /* fieldsEndFlag = 1 */
24068 nBuf -= 1 ;
24069 break;
24070 }
24071 (void)pCtx;
24072 if (pIeLen) {
24073 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24074 }
24075 return DOT11F_PARSE_SUCCESS;
24076 } /* End dot11f_pack_ie_rrm_enabled_cap. */
24077
dot11f_pack_ie_requested_info(tpAniSirGlobal pCtx,tDot11fIERequestedInfo * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)24078 uint32_t dot11f_pack_ie_requested_info(tpAniSirGlobal pCtx,
24079 tDot11fIERequestedInfo *pSrc,
24080 uint8_t *pBuf,
24081 uint32_t nBuf,
24082 uint32_t *pnConsumed)
24083 {
24084 uint8_t *pIeLen = 0;
24085 uint32_t nConsumedOnEntry = *pnConsumed;
24086 uint32_t nNeeded = 0U;
24087 nNeeded += pSrc->num_requested_eids;
24088 while (pSrc->present) {
24089 if (nNeeded > nBuf)
24090 return DOT11F_BUFFER_OVERFLOW;
24091 *pBuf = 10;
24092 ++pBuf; ++(*pnConsumed);
24093 pIeLen = pBuf;
24094 ++pBuf; ++(*pnConsumed);
24095 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->requested_eids), pSrc->num_requested_eids);
24096 *pnConsumed += pSrc->num_requested_eids;
24097 /* fieldsEndFlag = 1 */
24098 break;
24099 }
24100 (void)pCtx;
24101 if (pIeLen) {
24102 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24103 }
24104 return DOT11F_PARSE_SUCCESS;
24105 } /* End dot11f_pack_ie_requested_info. */
24106
dot11f_pack_ie_ssid(tpAniSirGlobal pCtx,tDot11fIESSID * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)24107 uint32_t dot11f_pack_ie_ssid(tpAniSirGlobal pCtx,
24108 tDot11fIESSID *pSrc,
24109 uint8_t *pBuf,
24110 uint32_t nBuf,
24111 uint32_t *pnConsumed)
24112 {
24113 uint8_t *pIeLen = 0;
24114 uint32_t nConsumedOnEntry = *pnConsumed;
24115 uint32_t nNeeded = 0U;
24116 nNeeded += pSrc->num_ssid;
24117 while (pSrc->present) {
24118 if (nNeeded > nBuf)
24119 return DOT11F_BUFFER_OVERFLOW;
24120 *pBuf = 0;
24121 ++pBuf; ++(*pnConsumed);
24122 pIeLen = pBuf;
24123 ++pBuf; ++(*pnConsumed);
24124 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->ssid), pSrc->num_ssid);
24125 *pnConsumed += pSrc->num_ssid;
24126 /* fieldsEndFlag = 1 */
24127 break;
24128 }
24129 (void)pCtx;
24130 if (pIeLen) {
24131 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24132 }
24133 return DOT11F_PARSE_SUCCESS;
24134 } /* End dot11f_pack_ie_ssid. */
24135
dot11f_pack_ie_schedule(tpAniSirGlobal pCtx,tDot11fIESchedule * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)24136 uint32_t dot11f_pack_ie_schedule(tpAniSirGlobal pCtx,
24137 tDot11fIESchedule *pSrc,
24138 uint8_t *pBuf,
24139 uint32_t nBuf,
24140 uint32_t *pnConsumed)
24141 {
24142 uint8_t *pIeLen = 0;
24143 uint32_t nConsumedOnEntry = *pnConsumed;
24144 uint32_t nNeeded = 0U;
24145 uint16_t tmp138__;
24146 nNeeded += 14;
24147 while (pSrc->present) {
24148 if (nNeeded > nBuf)
24149 return DOT11F_BUFFER_OVERFLOW;
24150 *pBuf = 15;
24151 ++pBuf; ++(*pnConsumed);
24152 pIeLen = pBuf;
24153 ++pBuf; ++(*pnConsumed);
24154 tmp138__ = 0U;
24155 tmp138__ |= (pSrc->aggregation << 0);
24156 tmp138__ |= (pSrc->tsid << 1);
24157 tmp138__ |= (pSrc->direction << 5);
24158 tmp138__ |= (pSrc->reserved << 7);
24159 if (unlikely(nBuf < 2))
24160 return DOT11F_INCOMPLETE_IE;
24161
24162 frameshtons(pCtx, pBuf, tmp138__, 0);
24163 *pnConsumed += 2;
24164 pBuf += 2;
24165 nBuf -= 2 ;
24166 frameshtonl(pCtx, pBuf, pSrc->service_start_time, 0);
24167 *pnConsumed += 4;
24168 pBuf += 4;
24169 frameshtonl(pCtx, pBuf, pSrc->service_interval, 0);
24170 *pnConsumed += 4;
24171 pBuf += 4;
24172 frameshtons(pCtx, pBuf, pSrc->max_service_dur, 0);
24173 *pnConsumed += 2;
24174 pBuf += 2;
24175 frameshtons(pCtx, pBuf, pSrc->spec_interval, 0);
24176 *pnConsumed += 2;
24177 /* fieldsEndFlag = 1 */
24178 break;
24179 }
24180 (void)pCtx;
24181 if (pIeLen) {
24182 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24183 }
24184 return DOT11F_PARSE_SUCCESS;
24185 } /* End dot11f_pack_ie_schedule. */
24186
dot11f_pack_ie_tclas(tpAniSirGlobal pCtx,tDot11fIETCLAS * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)24187 uint32_t dot11f_pack_ie_tclas(tpAniSirGlobal pCtx,
24188 tDot11fIETCLAS *pSrc,
24189 uint8_t *pBuf,
24190 uint32_t nBuf,
24191 uint32_t *pnConsumed)
24192 {
24193 uint8_t *pIeLen = 0;
24194 uint32_t nConsumedOnEntry = *pnConsumed;
24195 uint32_t nNeeded = 0U;
24196 uint32_t status = DOT11F_PARSE_SUCCESS;
24197 status = dot11f_get_packed_ietclas(pCtx, pSrc, &nNeeded);
24198 if (!DOT11F_SUCCEEDED(status))
24199 return status;
24200 while (pSrc->present) {
24201 if (nNeeded > nBuf)
24202 return DOT11F_BUFFER_OVERFLOW;
24203 *pBuf = 14;
24204 ++pBuf; ++(*pnConsumed);
24205 pIeLen = pBuf;
24206 ++pBuf; ++(*pnConsumed);
24207 *pBuf = pSrc->user_priority;
24208 *pnConsumed += 1;
24209 pBuf += 1;
24210 *pBuf = pSrc->classifier_type;
24211 *pnConsumed += 1;
24212 pBuf += 1;
24213 *pBuf = pSrc->classifier_mask;
24214 *pnConsumed += 1;
24215 pBuf += 1;
24216 switch (pSrc->classifier_type) {
24217 case 0:
24218 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.EthParams.source, 6);
24219 *pnConsumed += 6;
24220 pBuf += 6;
24221 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.EthParams.dest, 6);
24222 *pnConsumed += 6;
24223 pBuf += 6;
24224 frameshtons(pCtx, pBuf, pSrc->info.EthParams.type, 0);
24225 *pnConsumed += 2;
24226 /* fieldsEndFlag = 1 */
24227 break;
24228 case 1:
24229 *pBuf = pSrc->info.IpParams.version;
24230 *pnConsumed += 1;
24231 pBuf += 1;
24232 switch (pSrc->info.IpParams.version) {
24233 case 4:
24234 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.IpParams.params.IpV4Params.source, 4);
24235 *pnConsumed += 4;
24236 pBuf += 4;
24237 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.IpParams.params.IpV4Params.dest, 4);
24238 *pnConsumed += 4;
24239 pBuf += 4;
24240 frameshtons(pCtx, pBuf, pSrc->info.IpParams.params.IpV4Params.src_port, 0);
24241 *pnConsumed += 2;
24242 pBuf += 2;
24243 frameshtons(pCtx, pBuf, pSrc->info.IpParams.params.IpV4Params.dest_port, 0);
24244 *pnConsumed += 2;
24245 pBuf += 2;
24246 *pBuf = pSrc->info.IpParams.params.IpV4Params.DSCP;
24247 *pnConsumed += 1;
24248 pBuf += 1;
24249 *pBuf = pSrc->info.IpParams.params.IpV4Params.proto;
24250 *pnConsumed += 1;
24251 pBuf += 1;
24252 *pBuf = pSrc->info.IpParams.params.IpV4Params.reserved;
24253 *pnConsumed += 1;
24254 /* fieldsEndFlag = 1 */
24255 break;
24256 case 6:
24257 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.IpParams.params.IpV6Params.source, 16);
24258 *pnConsumed += 16;
24259 pBuf += 16;
24260 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.IpParams.params.IpV6Params.dest, 16);
24261 *pnConsumed += 16;
24262 pBuf += 16;
24263 frameshtons(pCtx, pBuf, pSrc->info.IpParams.params.IpV6Params.src_port, 0);
24264 *pnConsumed += 2;
24265 pBuf += 2;
24266 frameshtons(pCtx, pBuf, pSrc->info.IpParams.params.IpV6Params.dest_port, 0);
24267 *pnConsumed += 2;
24268 pBuf += 2;
24269 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.IpParams.params.IpV6Params.flow_label, 3);
24270 *pnConsumed += 3;
24271 /* fieldsEndFlag = 1 */
24272 break;
24273 }
24274 break;
24275 case 2:
24276 frameshtons(pCtx, pBuf, pSrc->info.Params8021dq.tag_type, 0);
24277 *pnConsumed += 2;
24278 /* fieldsEndFlag = 1 */
24279 break;
24280 }
24281 break;
24282 }
24283 (void)pCtx;
24284 if (pIeLen) {
24285 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24286 }
24287 return status;
24288 } /* End dot11f_pack_ie_tclas. */
24289
dot11f_pack_ie_tclassproc(tpAniSirGlobal pCtx,tDot11fIETCLASSPROC * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)24290 uint32_t dot11f_pack_ie_tclassproc(tpAniSirGlobal pCtx,
24291 tDot11fIETCLASSPROC *pSrc,
24292 uint8_t *pBuf,
24293 uint32_t nBuf,
24294 uint32_t *pnConsumed)
24295 {
24296 uint8_t *pIeLen = 0;
24297 uint32_t nConsumedOnEntry = *pnConsumed;
24298 uint32_t nNeeded = 0U;
24299 nNeeded += 1;
24300 while (pSrc->present) {
24301 if (nNeeded > nBuf)
24302 return DOT11F_BUFFER_OVERFLOW;
24303 *pBuf = 44;
24304 ++pBuf; ++(*pnConsumed);
24305 pIeLen = pBuf;
24306 ++pBuf; ++(*pnConsumed);
24307 *pBuf = pSrc->processing;
24308 *pnConsumed += 1;
24309 /* fieldsEndFlag = 1 */
24310 break;
24311 }
24312 (void)pCtx;
24313 if (pIeLen) {
24314 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24315 }
24316 return DOT11F_PARSE_SUCCESS;
24317 } /* End dot11f_pack_ie_tclassproc. */
24318
dot11f_pack_ie_ts_delay(tpAniSirGlobal pCtx,tDot11fIETSDelay * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)24319 uint32_t dot11f_pack_ie_ts_delay(tpAniSirGlobal pCtx,
24320 tDot11fIETSDelay *pSrc,
24321 uint8_t *pBuf,
24322 uint32_t nBuf,
24323 uint32_t *pnConsumed)
24324 {
24325 uint8_t *pIeLen = 0;
24326 uint32_t nConsumedOnEntry = *pnConsumed;
24327 uint32_t nNeeded = 0U;
24328 nNeeded += 4;
24329 while (pSrc->present) {
24330 if (nNeeded > nBuf)
24331 return DOT11F_BUFFER_OVERFLOW;
24332 *pBuf = 43;
24333 ++pBuf; ++(*pnConsumed);
24334 pIeLen = pBuf;
24335 ++pBuf; ++(*pnConsumed);
24336 frameshtonl(pCtx, pBuf, pSrc->delay, 0);
24337 *pnConsumed += 4;
24338 /* fieldsEndFlag = 1 */
24339 break;
24340 }
24341 (void)pCtx;
24342 if (pIeLen) {
24343 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24344 }
24345 return DOT11F_PARSE_SUCCESS;
24346 } /* End dot11f_pack_ie_ts_delay. */
24347
dot11f_pack_ie_tsf_info(tpAniSirGlobal pCtx,tDot11fIETSFInfo * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)24348 uint32_t dot11f_pack_ie_tsf_info(tpAniSirGlobal pCtx,
24349 tDot11fIETSFInfo *pSrc,
24350 uint8_t *pBuf,
24351 uint32_t nBuf,
24352 uint32_t *pnConsumed)
24353 {
24354 uint8_t *pIeLen = 0;
24355 uint32_t nConsumedOnEntry = *pnConsumed;
24356 uint32_t nNeeded = 0U;
24357 nNeeded += 4;
24358 while (pSrc->present) {
24359 if (nNeeded > nBuf)
24360 return DOT11F_BUFFER_OVERFLOW;
24361 *pBuf = 1;
24362 ++pBuf; ++(*pnConsumed);
24363 pIeLen = pBuf;
24364 ++pBuf; ++(*pnConsumed);
24365 frameshtons(pCtx, pBuf, pSrc->TsfOffset, 0);
24366 *pnConsumed += 2;
24367 pBuf += 2;
24368 frameshtons(pCtx, pBuf, pSrc->BeaconIntvl, 0);
24369 *pnConsumed += 2;
24370 /* fieldsEndFlag = 1 */
24371 break;
24372 }
24373 (void)pCtx;
24374 if (pIeLen) {
24375 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24376 }
24377 return DOT11F_PARSE_SUCCESS;
24378 } /* End dot11f_pack_ie_tsf_info. */
24379
dot11f_pack_ie_tspec(tpAniSirGlobal pCtx,tDot11fIETSPEC * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)24380 uint32_t dot11f_pack_ie_tspec(tpAniSirGlobal pCtx,
24381 tDot11fIETSPEC *pSrc,
24382 uint8_t *pBuf,
24383 uint32_t nBuf,
24384 uint32_t *pnConsumed)
24385 {
24386 uint8_t *pIeLen = 0;
24387 uint32_t nConsumedOnEntry = *pnConsumed;
24388 uint32_t nNeeded = 0U;
24389 uint16_t tmp139__;
24390 uint8_t tmp140__;
24391 uint16_t tmp141__;
24392 nNeeded += 55;
24393 while (pSrc->present) {
24394 if (nNeeded > nBuf)
24395 return DOT11F_BUFFER_OVERFLOW;
24396 *pBuf = 13;
24397 ++pBuf; ++(*pnConsumed);
24398 pIeLen = pBuf;
24399 ++pBuf; ++(*pnConsumed);
24400 tmp139__ = 0U;
24401 tmp139__ |= (pSrc->traffic_type << 0);
24402 tmp139__ |= (pSrc->tsid << 1);
24403 tmp139__ |= (pSrc->direction << 5);
24404 tmp139__ |= (pSrc->access_policy << 7);
24405 tmp139__ |= (pSrc->aggregation << 9);
24406 tmp139__ |= (pSrc->psb << 10);
24407 tmp139__ |= (pSrc->user_priority << 11);
24408 tmp139__ |= (pSrc->tsinfo_ack_pol << 14);
24409 if (unlikely(nBuf < 2))
24410 return DOT11F_INCOMPLETE_IE;
24411
24412 frameshtons(pCtx, pBuf, tmp139__, 0);
24413 *pnConsumed += 2;
24414 pBuf += 2;
24415 nBuf -= 2 ;
24416 tmp140__ = 0U;
24417 tmp140__ |= (pSrc->schedule << 0);
24418 tmp140__ |= (pSrc->unused << 1);
24419 if (unlikely(nBuf < 1))
24420 return DOT11F_INCOMPLETE_IE;
24421
24422 *pBuf = tmp140__;
24423 *pnConsumed += 1;
24424 pBuf += 1;
24425 nBuf -= 1 ;
24426 tmp141__ = 0U;
24427 tmp141__ |= (pSrc->size << 0);
24428 tmp141__ |= (pSrc->fixed << 15);
24429 if (unlikely(nBuf < 2))
24430 return DOT11F_INCOMPLETE_IE;
24431
24432 frameshtons(pCtx, pBuf, tmp141__, 0);
24433 *pnConsumed += 2;
24434 pBuf += 2;
24435 nBuf -= 2 ;
24436 frameshtons(pCtx, pBuf, pSrc->max_msdu_size, 0);
24437 *pnConsumed += 2;
24438 pBuf += 2;
24439 frameshtonl(pCtx, pBuf, pSrc->min_service_int, 0);
24440 *pnConsumed += 4;
24441 pBuf += 4;
24442 frameshtonl(pCtx, pBuf, pSrc->max_service_int, 0);
24443 *pnConsumed += 4;
24444 pBuf += 4;
24445 frameshtonl(pCtx, pBuf, pSrc->inactivity_int, 0);
24446 *pnConsumed += 4;
24447 pBuf += 4;
24448 frameshtonl(pCtx, pBuf, pSrc->suspension_int, 0);
24449 *pnConsumed += 4;
24450 pBuf += 4;
24451 frameshtonl(pCtx, pBuf, pSrc->service_start_time, 0);
24452 *pnConsumed += 4;
24453 pBuf += 4;
24454 frameshtonl(pCtx, pBuf, pSrc->min_data_rate, 0);
24455 *pnConsumed += 4;
24456 pBuf += 4;
24457 frameshtonl(pCtx, pBuf, pSrc->mean_data_rate, 0);
24458 *pnConsumed += 4;
24459 pBuf += 4;
24460 frameshtonl(pCtx, pBuf, pSrc->peak_data_rate, 0);
24461 *pnConsumed += 4;
24462 pBuf += 4;
24463 frameshtonl(pCtx, pBuf, pSrc->burst_size, 0);
24464 *pnConsumed += 4;
24465 pBuf += 4;
24466 frameshtonl(pCtx, pBuf, pSrc->delay_bound, 0);
24467 *pnConsumed += 4;
24468 pBuf += 4;
24469 frameshtonl(pCtx, pBuf, pSrc->min_phy_rate, 0);
24470 *pnConsumed += 4;
24471 pBuf += 4;
24472 frameshtons(pCtx, pBuf, pSrc->surplus_bw_allowance, 0);
24473 *pnConsumed += 2;
24474 pBuf += 2;
24475 frameshtons(pCtx, pBuf, pSrc->medium_time, 0);
24476 *pnConsumed += 2;
24477 /* fieldsEndFlag = 1 */
24478 break;
24479 }
24480 (void)pCtx;
24481 if (pIeLen) {
24482 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24483 }
24484 return DOT11F_PARSE_SUCCESS;
24485 } /* End dot11f_pack_ie_tspec. */
24486
dot11f_pack_ie_vht_caps(tpAniSirGlobal pCtx,tDot11fIEVHTCaps * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)24487 uint32_t dot11f_pack_ie_vht_caps(tpAniSirGlobal pCtx,
24488 tDot11fIEVHTCaps *pSrc,
24489 uint8_t *pBuf,
24490 uint32_t nBuf,
24491 uint32_t *pnConsumed)
24492 {
24493 uint8_t *pIeLen = 0;
24494 uint32_t nConsumedOnEntry = *pnConsumed;
24495 uint32_t nNeeded = 0U;
24496 uint32_t tmp142__;
24497 uint16_t tmp143__;
24498 uint16_t tmp144__;
24499 nNeeded += 12;
24500 while (pSrc->present) {
24501 if (nNeeded > nBuf)
24502 return DOT11F_BUFFER_OVERFLOW;
24503 *pBuf = 191;
24504 ++pBuf; ++(*pnConsumed);
24505 pIeLen = pBuf;
24506 ++pBuf; ++(*pnConsumed);
24507 tmp142__ = 0U;
24508 tmp142__ |= (pSrc->maxMPDULen << 0);
24509 tmp142__ |= (pSrc->supportedChannelWidthSet << 2);
24510 tmp142__ |= (pSrc->ldpcCodingCap << 4);
24511 tmp142__ |= (pSrc->shortGI80MHz << 5);
24512 tmp142__ |= (pSrc->shortGI160and80plus80MHz << 6);
24513 tmp142__ |= (pSrc->txSTBC << 7);
24514 tmp142__ |= (pSrc->rxSTBC << 8);
24515 tmp142__ |= (pSrc->suBeamFormerCap << 11);
24516 tmp142__ |= (pSrc->suBeamformeeCap << 12);
24517 tmp142__ |= (pSrc->csnofBeamformerAntSup << 13);
24518 tmp142__ |= (pSrc->numSoundingDim << 16);
24519 tmp142__ |= (pSrc->muBeamformerCap << 19);
24520 tmp142__ |= (pSrc->muBeamformeeCap << 20);
24521 tmp142__ |= (pSrc->vhtTXOPPS << 21);
24522 tmp142__ |= (pSrc->htcVHTCap << 22);
24523 tmp142__ |= (pSrc->maxAMPDULenExp << 23);
24524 tmp142__ |= (pSrc->vhtLinkAdaptCap << 26);
24525 tmp142__ |= (pSrc->rxAntPattern << 28);
24526 tmp142__ |= (pSrc->txAntPattern << 29);
24527 tmp142__ |= (pSrc->extended_nss_bw_supp << 30);
24528 if (unlikely(nBuf < 4))
24529 return DOT11F_INCOMPLETE_IE;
24530
24531 frameshtonl(pCtx, pBuf, tmp142__, 0);
24532 *pnConsumed += 4;
24533 pBuf += 4;
24534 nBuf -= 4 ;
24535 frameshtons(pCtx, pBuf, pSrc->rxMCSMap, 0);
24536 *pnConsumed += 2;
24537 pBuf += 2;
24538 tmp143__ = 0U;
24539 tmp143__ |= (pSrc->rxHighSupDataRate << 0);
24540 tmp143__ |= (pSrc->max_nsts_total << 13);
24541 if (unlikely(nBuf < 2))
24542 return DOT11F_INCOMPLETE_IE;
24543
24544 frameshtons(pCtx, pBuf, tmp143__, 0);
24545 *pnConsumed += 2;
24546 pBuf += 2;
24547 nBuf -= 2 ;
24548 frameshtons(pCtx, pBuf, pSrc->txMCSMap, 0);
24549 *pnConsumed += 2;
24550 pBuf += 2;
24551 tmp144__ = 0U;
24552 tmp144__ |= (pSrc->txSupDataRate << 0);
24553 tmp144__ |= (pSrc->vht_extended_nss_bw_cap << 13);
24554 tmp144__ |= (pSrc->reserved << 14);
24555 if (unlikely(nBuf < 2))
24556 return DOT11F_INCOMPLETE_IE;
24557
24558 frameshtons(pCtx, pBuf, tmp144__, 0);
24559 *pnConsumed += 2;
24560 /* fieldsEndFlag = 1 */
24561 nBuf -= 2 ;
24562 break;
24563 }
24564 (void)pCtx;
24565 if (pIeLen) {
24566 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24567 }
24568 return DOT11F_PARSE_SUCCESS;
24569 } /* End dot11f_pack_ie_vht_caps. */
24570
dot11f_pack_ie_vht_operation(tpAniSirGlobal pCtx,tDot11fIEVHTOperation * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)24571 uint32_t dot11f_pack_ie_vht_operation(tpAniSirGlobal pCtx,
24572 tDot11fIEVHTOperation *pSrc,
24573 uint8_t *pBuf,
24574 uint32_t nBuf,
24575 uint32_t *pnConsumed)
24576 {
24577 uint8_t *pIeLen = 0;
24578 uint32_t nConsumedOnEntry = *pnConsumed;
24579 uint32_t nNeeded = 0U;
24580 nNeeded += 5;
24581 while (pSrc->present) {
24582 if (nNeeded > nBuf)
24583 return DOT11F_BUFFER_OVERFLOW;
24584 *pBuf = 192;
24585 ++pBuf; ++(*pnConsumed);
24586 pIeLen = pBuf;
24587 ++pBuf; ++(*pnConsumed);
24588 *pBuf = pSrc->chanWidth;
24589 *pnConsumed += 1;
24590 pBuf += 1;
24591 *pBuf = pSrc->chan_center_freq_seg0;
24592 *pnConsumed += 1;
24593 pBuf += 1;
24594 *pBuf = pSrc->chan_center_freq_seg1;
24595 *pnConsumed += 1;
24596 pBuf += 1;
24597 frameshtons(pCtx, pBuf, pSrc->basicMCSSet, 0);
24598 *pnConsumed += 2;
24599 /* fieldsEndFlag = 1 */
24600 break;
24601 }
24602 (void)pCtx;
24603 if (pIeLen) {
24604 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24605 }
24606 return DOT11F_PARSE_SUCCESS;
24607 } /* End dot11f_pack_ie_vht_operation. */
24608
dot11f_pack_ie_wmm_schedule(tpAniSirGlobal pCtx,tDot11fIEWMMSchedule * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)24609 uint32_t dot11f_pack_ie_wmm_schedule(tpAniSirGlobal pCtx,
24610 tDot11fIEWMMSchedule *pSrc,
24611 uint8_t *pBuf,
24612 uint32_t nBuf,
24613 uint32_t *pnConsumed)
24614 {
24615 uint8_t *pIeLen = 0;
24616 uint32_t nConsumedOnEntry = *pnConsumed;
24617 uint32_t nNeeded = 0U;
24618 uint16_t tmp145__;
24619 nNeeded += 15;
24620 while (pSrc->present) {
24621 if (nNeeded > nBuf)
24622 return DOT11F_BUFFER_OVERFLOW;
24623 *pBuf = 221;
24624 ++pBuf; ++(*pnConsumed);
24625 pIeLen = pBuf;
24626 ++pBuf; ++(*pnConsumed);
24627 *pBuf = 0x0;
24628 ++pBuf; ++(*pnConsumed);
24629 *pBuf = 0x50;
24630 ++pBuf; ++(*pnConsumed);
24631 *pBuf = 0xf2;
24632 ++pBuf; ++(*pnConsumed);
24633 *pBuf = 0x2;
24634 ++pBuf; ++(*pnConsumed);
24635 *pBuf = 0x9;
24636 ++pBuf; ++(*pnConsumed);
24637 *pBuf = pSrc->version;
24638 *pnConsumed += 1;
24639 pBuf += 1;
24640 tmp145__ = 0U;
24641 tmp145__ |= (pSrc->aggregation << 0);
24642 tmp145__ |= (pSrc->tsid << 1);
24643 tmp145__ |= (pSrc->direction << 5);
24644 tmp145__ |= (pSrc->reserved << 7);
24645 if (unlikely(nBuf < 2))
24646 return DOT11F_INCOMPLETE_IE;
24647
24648 frameshtons(pCtx, pBuf, tmp145__, 0);
24649 *pnConsumed += 2;
24650 pBuf += 2;
24651 nBuf -= 2 ;
24652 frameshtonl(pCtx, pBuf, pSrc->service_start_time, 0);
24653 *pnConsumed += 4;
24654 pBuf += 4;
24655 frameshtonl(pCtx, pBuf, pSrc->service_interval, 0);
24656 *pnConsumed += 4;
24657 pBuf += 4;
24658 frameshtons(pCtx, pBuf, pSrc->max_service_dur, 0);
24659 *pnConsumed += 2;
24660 pBuf += 2;
24661 frameshtons(pCtx, pBuf, pSrc->spec_interval, 0);
24662 *pnConsumed += 2;
24663 /* fieldsEndFlag = 1 */
24664 break;
24665 }
24666 (void)pCtx;
24667 if (pIeLen) {
24668 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24669 }
24670 return DOT11F_PARSE_SUCCESS;
24671 } /* End dot11f_pack_ie_wmm_schedule. */
24672
dot11f_pack_ie_wmmtclas(tpAniSirGlobal pCtx,tDot11fIEWMMTCLAS * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)24673 uint32_t dot11f_pack_ie_wmmtclas(tpAniSirGlobal pCtx,
24674 tDot11fIEWMMTCLAS *pSrc,
24675 uint8_t *pBuf,
24676 uint32_t nBuf,
24677 uint32_t *pnConsumed)
24678 {
24679 uint8_t *pIeLen = 0;
24680 uint32_t nConsumedOnEntry = *pnConsumed;
24681 uint32_t nNeeded = 0U;
24682 uint32_t status = DOT11F_PARSE_SUCCESS;
24683 status = dot11f_get_packed_iewmmtclas(pCtx, pSrc, &nNeeded);
24684 if (!DOT11F_SUCCEEDED(status))
24685 return status;
24686 while (pSrc->present) {
24687 if (nNeeded > nBuf)
24688 return DOT11F_BUFFER_OVERFLOW;
24689 *pBuf = 221;
24690 ++pBuf; ++(*pnConsumed);
24691 pIeLen = pBuf;
24692 ++pBuf; ++(*pnConsumed);
24693 *pBuf = 0x0;
24694 ++pBuf; ++(*pnConsumed);
24695 *pBuf = 0x50;
24696 ++pBuf; ++(*pnConsumed);
24697 *pBuf = 0xf2;
24698 ++pBuf; ++(*pnConsumed);
24699 *pBuf = 0x2;
24700 ++pBuf; ++(*pnConsumed);
24701 *pBuf = 0x6;
24702 ++pBuf; ++(*pnConsumed);
24703 *pBuf = pSrc->version;
24704 *pnConsumed += 1;
24705 pBuf += 1;
24706 *pBuf = pSrc->user_priority;
24707 *pnConsumed += 1;
24708 pBuf += 1;
24709 *pBuf = pSrc->classifier_type;
24710 *pnConsumed += 1;
24711 pBuf += 1;
24712 *pBuf = pSrc->classifier_mask;
24713 *pnConsumed += 1;
24714 pBuf += 1;
24715 switch (pSrc->classifier_type) {
24716 case 0:
24717 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.EthParams.source, 6);
24718 *pnConsumed += 6;
24719 pBuf += 6;
24720 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.EthParams.dest, 6);
24721 *pnConsumed += 6;
24722 pBuf += 6;
24723 frameshtons(pCtx, pBuf, pSrc->info.EthParams.type, 0);
24724 *pnConsumed += 2;
24725 /* fieldsEndFlag = 1 */
24726 break;
24727 case 1:
24728 *pBuf = pSrc->info.IpParams.version;
24729 *pnConsumed += 1;
24730 pBuf += 1;
24731 switch (pSrc->info.IpParams.version) {
24732 case 4:
24733 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.IpParams.params.IpV4Params.source, 4);
24734 *pnConsumed += 4;
24735 pBuf += 4;
24736 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.IpParams.params.IpV4Params.dest, 4);
24737 *pnConsumed += 4;
24738 pBuf += 4;
24739 frameshtons(pCtx, pBuf, pSrc->info.IpParams.params.IpV4Params.src_port, 0);
24740 *pnConsumed += 2;
24741 pBuf += 2;
24742 frameshtons(pCtx, pBuf, pSrc->info.IpParams.params.IpV4Params.dest_port, 0);
24743 *pnConsumed += 2;
24744 pBuf += 2;
24745 *pBuf = pSrc->info.IpParams.params.IpV4Params.DSCP;
24746 *pnConsumed += 1;
24747 pBuf += 1;
24748 *pBuf = pSrc->info.IpParams.params.IpV4Params.proto;
24749 *pnConsumed += 1;
24750 pBuf += 1;
24751 *pBuf = pSrc->info.IpParams.params.IpV4Params.reserved;
24752 *pnConsumed += 1;
24753 /* fieldsEndFlag = 1 */
24754 break;
24755 case 6:
24756 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.IpParams.params.IpV6Params.source, 10);
24757 *pnConsumed += 10;
24758 pBuf += 10;
24759 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.IpParams.params.IpV6Params.dest, 10);
24760 *pnConsumed += 10;
24761 pBuf += 10;
24762 frameshtons(pCtx, pBuf, pSrc->info.IpParams.params.IpV6Params.src_port, 0);
24763 *pnConsumed += 2;
24764 pBuf += 2;
24765 frameshtons(pCtx, pBuf, pSrc->info.IpParams.params.IpV6Params.dest_port, 0);
24766 *pnConsumed += 2;
24767 pBuf += 2;
24768 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.IpParams.params.IpV6Params.flow_label, 3);
24769 *pnConsumed += 3;
24770 /* fieldsEndFlag = 1 */
24771 break;
24772 }
24773 break;
24774 case 2:
24775 frameshtons(pCtx, pBuf, pSrc->info.Params8021dq.tag_type, 0);
24776 *pnConsumed += 2;
24777 /* fieldsEndFlag = 1 */
24778 break;
24779 }
24780 break;
24781 }
24782 (void)pCtx;
24783 if (pIeLen) {
24784 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24785 }
24786 return status;
24787 } /* End dot11f_pack_ie_wmmtclas. */
24788
dot11f_pack_ie_wmmtclasproc(tpAniSirGlobal pCtx,tDot11fIEWMMTCLASPROC * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)24789 uint32_t dot11f_pack_ie_wmmtclasproc(tpAniSirGlobal pCtx,
24790 tDot11fIEWMMTCLASPROC *pSrc,
24791 uint8_t *pBuf,
24792 uint32_t nBuf,
24793 uint32_t *pnConsumed)
24794 {
24795 uint8_t *pIeLen = 0;
24796 uint32_t nConsumedOnEntry = *pnConsumed;
24797 uint32_t nNeeded = 0U;
24798 nNeeded += 2;
24799 while (pSrc->present) {
24800 if (nNeeded > nBuf)
24801 return DOT11F_BUFFER_OVERFLOW;
24802 *pBuf = 221;
24803 ++pBuf; ++(*pnConsumed);
24804 pIeLen = pBuf;
24805 ++pBuf; ++(*pnConsumed);
24806 *pBuf = 0x0;
24807 ++pBuf; ++(*pnConsumed);
24808 *pBuf = 0x50;
24809 ++pBuf; ++(*pnConsumed);
24810 *pBuf = 0xf2;
24811 ++pBuf; ++(*pnConsumed);
24812 *pBuf = 0x2;
24813 ++pBuf; ++(*pnConsumed);
24814 *pBuf = 0x7;
24815 ++pBuf; ++(*pnConsumed);
24816 *pBuf = pSrc->version;
24817 *pnConsumed += 1;
24818 pBuf += 1;
24819 *pBuf = pSrc->processing;
24820 *pnConsumed += 1;
24821 /* fieldsEndFlag = 1 */
24822 break;
24823 }
24824 (void)pCtx;
24825 if (pIeLen) {
24826 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24827 }
24828 return DOT11F_PARSE_SUCCESS;
24829 } /* End dot11f_pack_ie_wmmtclasproc. */
24830
dot11f_pack_ie_wmmts_delay(tpAniSirGlobal pCtx,tDot11fIEWMMTSDelay * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)24831 uint32_t dot11f_pack_ie_wmmts_delay(tpAniSirGlobal pCtx,
24832 tDot11fIEWMMTSDelay *pSrc,
24833 uint8_t *pBuf,
24834 uint32_t nBuf,
24835 uint32_t *pnConsumed)
24836 {
24837 uint8_t *pIeLen = 0;
24838 uint32_t nConsumedOnEntry = *pnConsumed;
24839 uint32_t nNeeded = 0U;
24840 nNeeded += 5;
24841 while (pSrc->present) {
24842 if (nNeeded > nBuf)
24843 return DOT11F_BUFFER_OVERFLOW;
24844 *pBuf = 221;
24845 ++pBuf; ++(*pnConsumed);
24846 pIeLen = pBuf;
24847 ++pBuf; ++(*pnConsumed);
24848 *pBuf = 0x0;
24849 ++pBuf; ++(*pnConsumed);
24850 *pBuf = 0x50;
24851 ++pBuf; ++(*pnConsumed);
24852 *pBuf = 0xf2;
24853 ++pBuf; ++(*pnConsumed);
24854 *pBuf = 0x2;
24855 ++pBuf; ++(*pnConsumed);
24856 *pBuf = 0x8;
24857 ++pBuf; ++(*pnConsumed);
24858 *pBuf = pSrc->version;
24859 *pnConsumed += 1;
24860 pBuf += 1;
24861 frameshtonl(pCtx, pBuf, pSrc->delay, 0);
24862 *pnConsumed += 4;
24863 /* fieldsEndFlag = 1 */
24864 break;
24865 }
24866 (void)pCtx;
24867 if (pIeLen) {
24868 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24869 }
24870 return DOT11F_PARSE_SUCCESS;
24871 } /* End dot11f_pack_ie_wmmts_delay. */
24872
dot11f_pack_ie_wmmtspec(tpAniSirGlobal pCtx,tDot11fIEWMMTSPEC * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)24873 uint32_t dot11f_pack_ie_wmmtspec(tpAniSirGlobal pCtx,
24874 tDot11fIEWMMTSPEC *pSrc,
24875 uint8_t *pBuf,
24876 uint32_t nBuf,
24877 uint32_t *pnConsumed)
24878 {
24879 uint8_t *pIeLen = 0;
24880 uint32_t nConsumedOnEntry = *pnConsumed;
24881 uint32_t nNeeded = 0U;
24882 uint16_t tmp146__;
24883 uint8_t tmp147__;
24884 uint16_t tmp148__;
24885 nNeeded += 38;
24886 while (pSrc->present) {
24887 if (nNeeded > nBuf)
24888 return DOT11F_BUFFER_OVERFLOW;
24889 *pBuf = 221;
24890 ++pBuf; ++(*pnConsumed);
24891 pIeLen = pBuf;
24892 ++pBuf; ++(*pnConsumed);
24893 *pBuf = 0x0;
24894 ++pBuf; ++(*pnConsumed);
24895 *pBuf = 0x50;
24896 ++pBuf; ++(*pnConsumed);
24897 *pBuf = 0xf2;
24898 ++pBuf; ++(*pnConsumed);
24899 *pBuf = 0x2;
24900 ++pBuf; ++(*pnConsumed);
24901 *pBuf = 0x2;
24902 ++pBuf; ++(*pnConsumed);
24903 *pBuf = pSrc->version;
24904 *pnConsumed += 1;
24905 pBuf += 1;
24906 tmp146__ = 0U;
24907 tmp146__ |= (pSrc->traffic_type << 0);
24908 tmp146__ |= (pSrc->tsid << 1);
24909 tmp146__ |= (pSrc->direction << 5);
24910 tmp146__ |= (pSrc->access_policy << 7);
24911 tmp146__ |= (pSrc->aggregation << 9);
24912 tmp146__ |= (pSrc->psb << 10);
24913 tmp146__ |= (pSrc->user_priority << 11);
24914 tmp146__ |= (pSrc->tsinfo_ack_pol << 14);
24915 if (unlikely(nBuf < 2))
24916 return DOT11F_INCOMPLETE_IE;
24917
24918 frameshtons(pCtx, pBuf, tmp146__, 0);
24919 *pnConsumed += 2;
24920 pBuf += 2;
24921 nBuf -= 2 ;
24922 tmp147__ = 0U;
24923 tmp147__ |= (pSrc->tsinfo_rsvd << 0);
24924 tmp147__ |= (pSrc->burst_size_defn << 7);
24925 if (unlikely(nBuf < 1))
24926 return DOT11F_INCOMPLETE_IE;
24927
24928 *pBuf = tmp147__;
24929 *pnConsumed += 1;
24930 pBuf += 1;
24931 nBuf -= 1 ;
24932 tmp148__ = 0U;
24933 tmp148__ |= (pSrc->size << 0);
24934 tmp148__ |= (pSrc->fixed << 15);
24935 if (unlikely(nBuf < 2))
24936 return DOT11F_INCOMPLETE_IE;
24937
24938 frameshtons(pCtx, pBuf, tmp148__, 0);
24939 *pnConsumed += 2;
24940 pBuf += 2;
24941 nBuf -= 2 ;
24942 frameshtons(pCtx, pBuf, pSrc->max_msdu_size, 0);
24943 *pnConsumed += 2;
24944 pBuf += 2;
24945 frameshtonl(pCtx, pBuf, pSrc->min_service_int, 0);
24946 *pnConsumed += 4;
24947 pBuf += 4;
24948 frameshtonl(pCtx, pBuf, pSrc->max_service_int, 0);
24949 *pnConsumed += 4;
24950 pBuf += 4;
24951 frameshtonl(pCtx, pBuf, pSrc->inactivity_int, 0);
24952 *pnConsumed += 4;
24953 pBuf += 4;
24954 frameshtonl(pCtx, pBuf, pSrc->suspension_int, 0);
24955 *pnConsumed += 4;
24956 pBuf += 4;
24957 frameshtonl(pCtx, pBuf, pSrc->service_start_time, 0);
24958 *pnConsumed += 4;
24959 pBuf += 4;
24960 frameshtonl(pCtx, pBuf, pSrc->min_data_rate, 0);
24961 *pnConsumed += 4;
24962 pBuf += 4;
24963 frameshtonl(pCtx, pBuf, pSrc->mean_data_rate, 0);
24964 *pnConsumed += 4;
24965 pBuf += 4;
24966 frameshtonl(pCtx, pBuf, pSrc->peak_data_rate, 0);
24967 *pnConsumed += 4;
24968 pBuf += 4;
24969 frameshtonl(pCtx, pBuf, pSrc->burst_size, 0);
24970 *pnConsumed += 4;
24971 pBuf += 4;
24972 frameshtonl(pCtx, pBuf, pSrc->delay_bound, 0);
24973 *pnConsumed += 4;
24974 pBuf += 4;
24975 frameshtonl(pCtx, pBuf, pSrc->min_phy_rate, 0);
24976 *pnConsumed += 4;
24977 pBuf += 4;
24978 frameshtons(pCtx, pBuf, pSrc->surplus_bw_allowance, 0);
24979 *pnConsumed += 2;
24980 pBuf += 2;
24981 frameshtons(pCtx, pBuf, pSrc->medium_time, 0);
24982 *pnConsumed += 2;
24983 /* fieldsEndFlag = 1 */
24984 break;
24985 }
24986 (void)pCtx;
24987 if (pIeLen) {
24988 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24989 }
24990 return DOT11F_PARSE_SUCCESS;
24991 } /* End dot11f_pack_ie_wmmtspec. */
24992
dot11f_pack_ie_wider_bw_chan_switch_ann(tpAniSirGlobal pCtx,tDot11fIEWiderBWChanSwitchAnn * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)24993 uint32_t dot11f_pack_ie_wider_bw_chan_switch_ann(tpAniSirGlobal pCtx,
24994 tDot11fIEWiderBWChanSwitchAnn *pSrc,
24995 uint8_t *pBuf,
24996 uint32_t nBuf,
24997 uint32_t *pnConsumed)
24998 {
24999 uint8_t *pIeLen = 0;
25000 uint32_t nConsumedOnEntry = *pnConsumed;
25001 uint32_t nNeeded = 0U;
25002 nNeeded += 3;
25003 while (pSrc->present) {
25004 if (nNeeded > nBuf)
25005 return DOT11F_BUFFER_OVERFLOW;
25006 *pBuf = 194;
25007 ++pBuf; ++(*pnConsumed);
25008 pIeLen = pBuf;
25009 ++pBuf; ++(*pnConsumed);
25010 *pBuf = pSrc->newChanWidth;
25011 *pnConsumed += 1;
25012 pBuf += 1;
25013 *pBuf = pSrc->newCenterChanFreq0;
25014 *pnConsumed += 1;
25015 pBuf += 1;
25016 *pBuf = pSrc->newCenterChanFreq1;
25017 *pnConsumed += 1;
25018 /* fieldsEndFlag = 1 */
25019 break;
25020 }
25021 (void)pCtx;
25022 if (pIeLen) {
25023 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25024 }
25025 return DOT11F_PARSE_SUCCESS;
25026 } /* End dot11f_pack_ie_wider_bw_chan_switch_ann. */
25027
dot11f_pack_ie_azimuth_req(tpAniSirGlobal pCtx,tDot11fIEazimuth_req * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)25028 uint32_t dot11f_pack_ie_azimuth_req(tpAniSirGlobal pCtx,
25029 tDot11fIEazimuth_req *pSrc,
25030 uint8_t *pBuf,
25031 uint32_t nBuf,
25032 uint32_t *pnConsumed)
25033 {
25034 uint8_t *pIeLen = 0;
25035 uint32_t nConsumedOnEntry = *pnConsumed;
25036 uint32_t nNeeded = 0U;
25037 nNeeded += 1;
25038 while (pSrc->present) {
25039 if (nNeeded > nBuf)
25040 return DOT11F_BUFFER_OVERFLOW;
25041 *pBuf = 1;
25042 ++pBuf; ++(*pnConsumed);
25043 pIeLen = pBuf;
25044 ++pBuf; ++(*pnConsumed);
25045 *pBuf = pSrc->request;
25046 *pnConsumed += 1;
25047 /* fieldsEndFlag = 1 */
25048 break;
25049 }
25050 (void)pCtx;
25051 if (pIeLen) {
25052 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25053 }
25054 return DOT11F_PARSE_SUCCESS;
25055 } /* End dot11f_pack_ie_azimuth_req. */
25056
dot11f_pack_ie_beacon_report_frm_body_fragment_id(tpAniSirGlobal pCtx,tDot11fIEbeacon_report_frm_body_fragment_id * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)25057 uint32_t dot11f_pack_ie_beacon_report_frm_body_fragment_id(tpAniSirGlobal pCtx,
25058 tDot11fIEbeacon_report_frm_body_fragment_id *pSrc,
25059 uint8_t *pBuf,
25060 uint32_t nBuf,
25061 uint32_t *pnConsumed)
25062 {
25063 uint8_t *pIeLen = 0;
25064 uint32_t nConsumedOnEntry = *pnConsumed;
25065 uint32_t nNeeded = 0U;
25066 uint16_t tmp149__;
25067 nNeeded += 2;
25068 while (pSrc->present) {
25069 if (nNeeded > nBuf)
25070 return DOT11F_BUFFER_OVERFLOW;
25071 *pBuf = 2;
25072 ++pBuf; ++(*pnConsumed);
25073 pIeLen = pBuf;
25074 ++pBuf; ++(*pnConsumed);
25075 tmp149__ = 0U;
25076 tmp149__ |= (pSrc->beacon_report_id << 0);
25077 tmp149__ |= (pSrc->fragment_id_number << 8);
25078 tmp149__ |= (pSrc->more_fragments << 15);
25079 if (unlikely(nBuf < 2))
25080 return DOT11F_INCOMPLETE_IE;
25081
25082 frameshtons(pCtx, pBuf, tmp149__, 0);
25083 *pnConsumed += 2;
25084 /* fieldsEndFlag = 1 */
25085 nBuf -= 2 ;
25086 break;
25087 }
25088 (void)pCtx;
25089 if (pIeLen) {
25090 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25091 }
25092 return DOT11F_PARSE_SUCCESS;
25093 } /* End dot11f_pack_ie_beacon_report_frm_body_fragment_id. */
25094
dot11f_pack_ie_bw_ind_element(tpAniSirGlobal pCtx,tDot11fIEbw_ind_element * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)25095 uint32_t dot11f_pack_ie_bw_ind_element(tpAniSirGlobal pCtx,
25096 tDot11fIEbw_ind_element *pSrc,
25097 uint8_t *pBuf,
25098 uint32_t nBuf,
25099 uint32_t *pnConsumed)
25100 {
25101 uint8_t *pIeLen = 0;
25102 uint32_t nConsumedOnEntry = *pnConsumed;
25103 uint32_t nNeeded = 0U;
25104 uint8_t tmp150__;
25105 uint8_t tmp151__;
25106 nNeeded += (pSrc->disabled_sub_chan_bitmap_present * 2 + 4);
25107 while (pSrc->present) {
25108 if (nNeeded > nBuf)
25109 return DOT11F_BUFFER_OVERFLOW;
25110 *pBuf = 255;
25111 ++pBuf; ++(*pnConsumed);
25112 pIeLen = pBuf;
25113 ++pBuf; ++(*pnConsumed);
25114 *pBuf = 135;
25115 ++pBuf; ++(*pnConsumed);
25116 tmp150__ = 0U;
25117 tmp150__ |= (pSrc->reserved << 0);
25118 tmp150__ |= (pSrc->disabled_sub_chan_bitmap_present << 1);
25119 tmp150__ |= (pSrc->reserved_1 << 2);
25120 if (unlikely(nBuf < 1))
25121 return DOT11F_INCOMPLETE_IE;
25122
25123 *pBuf = tmp150__;
25124 *pnConsumed += 1;
25125 pBuf += 1;
25126 nBuf -= 1 ;
25127 tmp151__ = 0U;
25128 tmp151__ |= (pSrc->channel_width << 0);
25129 tmp151__ |= (pSrc->reserved_2 << 3);
25130 if (unlikely(nBuf < 1))
25131 return DOT11F_INCOMPLETE_IE;
25132
25133 *pBuf = tmp151__;
25134 *pnConsumed += 1;
25135 pBuf += 1;
25136 nBuf -= 1 ;
25137 *pBuf = pSrc->ccfs0;
25138 *pnConsumed += 1;
25139 pBuf += 1;
25140 *pBuf = pSrc->ccfs1;
25141 *pnConsumed += 1;
25142 pBuf += 1;
25143 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->disabled_sub_chan_bitmap), (pSrc->disabled_sub_chan_bitmap_present * 2));
25144 *pnConsumed += (pSrc->disabled_sub_chan_bitmap_present * 2);
25145 /* fieldsEndFlag = 1 */
25146 break;
25147 }
25148 (void)pCtx;
25149 if (pIeLen) {
25150 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25151 }
25152 return DOT11F_PARSE_SUCCESS;
25153 } /* End dot11f_pack_ie_bw_ind_element. */
25154
dot11f_pack_ie_bw_indication(tpAniSirGlobal pCtx,tDot11fIEbw_indication * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)25155 uint32_t dot11f_pack_ie_bw_indication(tpAniSirGlobal pCtx,
25156 tDot11fIEbw_indication *pSrc,
25157 uint8_t *pBuf,
25158 uint32_t nBuf,
25159 uint32_t *pnConsumed)
25160 {
25161 uint8_t *pIeLen = 0;
25162 uint32_t nConsumedOnEntry = *pnConsumed;
25163 uint32_t nNeeded = 0U;
25164 uint8_t tmp152__;
25165 uint8_t tmp153__;
25166 nNeeded += (pSrc->disabled_sub_chan_bitmap_present * 2 + 4);
25167 while (pSrc->present) {
25168 if (nNeeded > nBuf)
25169 return DOT11F_BUFFER_OVERFLOW;
25170 *pBuf = 164;
25171 ++pBuf; ++(*pnConsumed);
25172 pIeLen = pBuf;
25173 ++pBuf; ++(*pnConsumed);
25174 tmp152__ = 0U;
25175 tmp152__ |= (pSrc->reserved << 0);
25176 tmp152__ |= (pSrc->disabled_sub_chan_bitmap_present << 1);
25177 tmp152__ |= (pSrc->reserved_1 << 2);
25178 if (unlikely(nBuf < 1))
25179 return DOT11F_INCOMPLETE_IE;
25180
25181 *pBuf = tmp152__;
25182 *pnConsumed += 1;
25183 pBuf += 1;
25184 nBuf -= 1 ;
25185 tmp153__ = 0U;
25186 tmp153__ |= (pSrc->channel_width << 0);
25187 tmp153__ |= (pSrc->reserved_2 << 3);
25188 if (unlikely(nBuf < 1))
25189 return DOT11F_INCOMPLETE_IE;
25190
25191 *pBuf = tmp153__;
25192 *pnConsumed += 1;
25193 pBuf += 1;
25194 nBuf -= 1 ;
25195 *pBuf = pSrc->ccfs0;
25196 *pnConsumed += 1;
25197 pBuf += 1;
25198 *pBuf = pSrc->ccfs1;
25199 *pnConsumed += 1;
25200 pBuf += 1;
25201 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->disabled_sub_chan_bitmap), (pSrc->disabled_sub_chan_bitmap_present * 2));
25202 *pnConsumed += (pSrc->disabled_sub_chan_bitmap_present * 2);
25203 /* fieldsEndFlag = 1 */
25204 break;
25205 }
25206 (void)pCtx;
25207 if (pIeLen) {
25208 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25209 }
25210 return DOT11F_PARSE_SUCCESS;
25211 } /* End dot11f_pack_ie_bw_indication. */
25212
dot11f_pack_ie_last_beacon_report_indication(tpAniSirGlobal pCtx,tDot11fIElast_beacon_report_indication * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)25213 uint32_t dot11f_pack_ie_last_beacon_report_indication(tpAniSirGlobal pCtx,
25214 tDot11fIElast_beacon_report_indication *pSrc,
25215 uint8_t *pBuf,
25216 uint32_t nBuf,
25217 uint32_t *pnConsumed)
25218 {
25219 uint8_t *pIeLen = 0;
25220 uint32_t nConsumedOnEntry = *pnConsumed;
25221 uint32_t nNeeded = 0U;
25222 nNeeded += 1;
25223 while (pSrc->present) {
25224 if (nNeeded > nBuf)
25225 return DOT11F_BUFFER_OVERFLOW;
25226 *pBuf = 164;
25227 ++pBuf; ++(*pnConsumed);
25228 pIeLen = pBuf;
25229 ++pBuf; ++(*pnConsumed);
25230 *pBuf = pSrc->last_fragment;
25231 *pnConsumed += 1;
25232 /* fieldsEndFlag = 1 */
25233 break;
25234 }
25235 (void)pCtx;
25236 if (pIeLen) {
25237 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25238 }
25239 return DOT11F_PARSE_SUCCESS;
25240 } /* End dot11f_pack_ie_last_beacon_report_indication. */
25241
dot11f_pack_ie_max_age(tpAniSirGlobal pCtx,tDot11fIEmax_age * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)25242 uint32_t dot11f_pack_ie_max_age(tpAniSirGlobal pCtx,
25243 tDot11fIEmax_age *pSrc,
25244 uint8_t *pBuf,
25245 uint32_t nBuf,
25246 uint32_t *pnConsumed)
25247 {
25248 uint8_t *pIeLen = 0;
25249 uint32_t nConsumedOnEntry = *pnConsumed;
25250 uint32_t nNeeded = 0U;
25251 nNeeded += 2;
25252 while (pSrc->present) {
25253 if (nNeeded > nBuf)
25254 return DOT11F_BUFFER_OVERFLOW;
25255 *pBuf = 4;
25256 ++pBuf; ++(*pnConsumed);
25257 pIeLen = pBuf;
25258 ++pBuf; ++(*pnConsumed);
25259 frameshtons(pCtx, pBuf, pSrc->max_age, 0);
25260 *pnConsumed += 2;
25261 /* fieldsEndFlag = 1 */
25262 break;
25263 }
25264 (void)pCtx;
25265 if (pIeLen) {
25266 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25267 }
25268 return DOT11F_PARSE_SUCCESS;
25269 } /* End dot11f_pack_ie_max_age. */
25270
dot11f_pack_ie_mscs_status(tpAniSirGlobal pCtx,tDot11fIEmscs_status * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)25271 uint32_t dot11f_pack_ie_mscs_status(tpAniSirGlobal pCtx,
25272 tDot11fIEmscs_status *pSrc,
25273 uint8_t *pBuf,
25274 uint32_t nBuf,
25275 uint32_t *pnConsumed)
25276 {
25277 uint8_t *pIeLen = 0;
25278 uint32_t nConsumedOnEntry = *pnConsumed;
25279 uint32_t nNeeded = 0U;
25280 nNeeded += 1;
25281 while (pSrc->present) {
25282 if (nNeeded > nBuf)
25283 return DOT11F_BUFFER_OVERFLOW;
25284 *pBuf = 76;
25285 ++pBuf; ++(*pnConsumed);
25286 pIeLen = pBuf;
25287 ++pBuf; ++(*pnConsumed);
25288 *pBuf = pSrc->status_code;
25289 *pnConsumed += 1;
25290 /* fieldsEndFlag = 1 */
25291 break;
25292 }
25293 (void)pCtx;
25294 if (pIeLen) {
25295 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25296 }
25297 return DOT11F_PARSE_SUCCESS;
25298 } /* End dot11f_pack_ie_mscs_status. */
25299
dot11f_pack_ie_neighbor_rpt(tpAniSirGlobal pCtx,tDot11fIEneighbor_rpt * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)25300 uint32_t dot11f_pack_ie_neighbor_rpt(tpAniSirGlobal pCtx,
25301 tDot11fIEneighbor_rpt *pSrc,
25302 uint8_t *pBuf,
25303 uint32_t nBuf,
25304 uint32_t *pnConsumed)
25305 {
25306 uint8_t *pIeLen = 0;
25307 uint32_t nConsumedOnEntry = *pnConsumed;
25308 uint32_t nNeeded = 0U;
25309 uint8_t tmp154__;
25310 uint8_t tmp155__;
25311 uint32_t status = DOT11F_PARSE_SUCCESS;
25312 status = dot11f_get_packed_ie_neighbor_rpt(pCtx, pSrc, &nNeeded);
25313 if (!DOT11F_SUCCEEDED(status))
25314 return status;
25315 while (pSrc->present) {
25316 if (nNeeded > nBuf)
25317 return DOT11F_BUFFER_OVERFLOW;
25318 *pBuf = 52;
25319 ++pBuf; --nBuf; ++(*pnConsumed);
25320 pIeLen = pBuf;
25321 ++pBuf; --nBuf; ++(*pnConsumed);
25322 DOT11F_MEMCPY(pCtx, pBuf, pSrc->bssid, 6);
25323 *pnConsumed += 6;
25324 pBuf += 6;
25325 tmp154__ = 0U;
25326 tmp154__ |= (pSrc->APReachability << 0);
25327 tmp154__ |= (pSrc->Security << 2);
25328 tmp154__ |= (pSrc->KeyScope << 3);
25329 tmp154__ |= (pSrc->SpecMgmtCap << 4);
25330 tmp154__ |= (pSrc->QosCap << 5);
25331 tmp154__ |= (pSrc->apsd << 6);
25332 tmp154__ |= (pSrc->rrm << 7);
25333 if (unlikely(nBuf < 1))
25334 return DOT11F_INCOMPLETE_IE;
25335
25336 *pBuf = tmp154__;
25337 *pnConsumed += 1;
25338 pBuf += 1;
25339 nBuf -= 1 ;
25340 tmp155__ = 0U;
25341 tmp155__ |= (pSrc->DelayedBA << 0);
25342 tmp155__ |= (pSrc->ImmBA << 1);
25343 tmp155__ |= (pSrc->MobilityDomain << 2);
25344 tmp155__ |= (pSrc->reserved << 3);
25345 if (unlikely(nBuf < 1))
25346 return DOT11F_INCOMPLETE_IE;
25347
25348 *pBuf = tmp155__;
25349 *pnConsumed += 1;
25350 pBuf += 1;
25351 nBuf -= 1 ;
25352 frameshtons(pCtx, pBuf, pSrc->reserved1, 0);
25353 *pnConsumed += 2;
25354 pBuf += 2;
25355 *pBuf = pSrc->regulatoryClass;
25356 *pnConsumed += 1;
25357 pBuf += 1;
25358 *pBuf = pSrc->channel;
25359 *pnConsumed += 1;
25360 pBuf += 1;
25361 *pBuf = pSrc->PhyType;
25362 *pnConsumed += 1;
25363 pBuf += 1;
25364 status = pack_core(pCtx,
25365 (uint8_t *)pSrc,
25366 pBuf,
25367 nBuf,
25368 pnConsumed,
25369 FFS_neighbor_rpt,
25370 IES_neighbor_rpt);
25371 break;
25372 }
25373 (void)pCtx;
25374 if (pIeLen) {
25375 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25376 }
25377 return status;
25378 } /* End dot11f_pack_ie_neighbor_rpt. */
25379
dot11f_pack_ie_reporting_reason(tpAniSirGlobal pCtx,tDot11fIEreporting_reason * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)25380 uint32_t dot11f_pack_ie_reporting_reason(tpAniSirGlobal pCtx,
25381 tDot11fIEreporting_reason *pSrc,
25382 uint8_t *pBuf,
25383 uint32_t nBuf,
25384 uint32_t *pnConsumed)
25385 {
25386 uint8_t *pIeLen = 0;
25387 uint32_t nConsumedOnEntry = *pnConsumed;
25388 uint32_t nNeeded = 0U;
25389 uint8_t tmp156__;
25390 nNeeded += 1;
25391 while (pSrc->present) {
25392 if (nNeeded > nBuf)
25393 return DOT11F_BUFFER_OVERFLOW;
25394 *pBuf = 1;
25395 ++pBuf; ++(*pnConsumed);
25396 pIeLen = pBuf;
25397 ++pBuf; ++(*pnConsumed);
25398 tmp156__ = 0U;
25399 tmp156__ |= (pSrc->failed_count << 0);
25400 tmp156__ |= (pSrc->fcs_error << 1);
25401 tmp156__ |= (pSrc->multiple_retry << 2);
25402 tmp156__ |= (pSrc->frame_duplicate << 3);
25403 tmp156__ |= (pSrc->rts_failure << 4);
25404 tmp156__ |= (pSrc->ack_failure << 5);
25405 tmp156__ |= (pSrc->retry << 6);
25406 tmp156__ |= (pSrc->reserved << 7);
25407 if (unlikely(nBuf < 1))
25408 return DOT11F_INCOMPLETE_IE;
25409
25410 *pBuf = tmp156__;
25411 *pnConsumed += 1;
25412 /* fieldsEndFlag = 1 */
25413 nBuf -= 1 ;
25414 break;
25415 }
25416 (void)pCtx;
25417 if (pIeLen) {
25418 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25419 }
25420 return DOT11F_PARSE_SUCCESS;
25421 } /* End dot11f_pack_ie_reporting_reason. */
25422
dot11f_pack_ie_req_mac_addr(tpAniSirGlobal pCtx,tDot11fIEreq_mac_addr * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)25423 uint32_t dot11f_pack_ie_req_mac_addr(tpAniSirGlobal pCtx,
25424 tDot11fIEreq_mac_addr *pSrc,
25425 uint8_t *pBuf,
25426 uint32_t nBuf,
25427 uint32_t *pnConsumed)
25428 {
25429 uint8_t *pIeLen = 0;
25430 uint32_t nConsumedOnEntry = *pnConsumed;
25431 uint32_t nNeeded = 0U;
25432 nNeeded += 6;
25433 while (pSrc->present) {
25434 if (nNeeded > nBuf)
25435 return DOT11F_BUFFER_OVERFLOW;
25436 *pBuf = 2;
25437 ++pBuf; ++(*pnConsumed);
25438 pIeLen = pBuf;
25439 ++pBuf; ++(*pnConsumed);
25440 DOT11F_MEMCPY(pCtx, pBuf, pSrc->addr, 6);
25441 *pnConsumed += 6;
25442 /* fieldsEndFlag = 1 */
25443 break;
25444 }
25445 (void)pCtx;
25446 if (pIeLen) {
25447 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25448 }
25449 return DOT11F_PARSE_SUCCESS;
25450 } /* End dot11f_pack_ie_req_mac_addr. */
25451
dot11f_pack_ie_rrm_reporting(tpAniSirGlobal pCtx,tDot11fIErrm_reporting * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)25452 uint32_t dot11f_pack_ie_rrm_reporting(tpAniSirGlobal pCtx,
25453 tDot11fIErrm_reporting *pSrc,
25454 uint8_t *pBuf,
25455 uint32_t nBuf,
25456 uint32_t *pnConsumed)
25457 {
25458 uint8_t *pIeLen = 0;
25459 uint32_t nConsumedOnEntry = *pnConsumed;
25460 uint32_t nNeeded = 0U;
25461 nNeeded += 2;
25462 while (pSrc->present) {
25463 if (nNeeded > nBuf)
25464 return DOT11F_BUFFER_OVERFLOW;
25465 *pBuf = 1;
25466 ++pBuf; ++(*pnConsumed);
25467 pIeLen = pBuf;
25468 ++pBuf; ++(*pnConsumed);
25469 *pBuf = pSrc->reporting_condition;
25470 *pnConsumed += 1;
25471 pBuf += 1;
25472 *pBuf = pSrc->threshold;
25473 *pnConsumed += 1;
25474 /* fieldsEndFlag = 1 */
25475 break;
25476 }
25477 (void)pCtx;
25478 if (pIeLen) {
25479 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25480 }
25481 return DOT11F_PARSE_SUCCESS;
25482 } /* End dot11f_pack_ie_rrm_reporting. */
25483
dot11f_pack_ie_tclas_mask(tpAniSirGlobal pCtx,tDot11fIEtclas_mask * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)25484 uint32_t dot11f_pack_ie_tclas_mask(tpAniSirGlobal pCtx,
25485 tDot11fIEtclas_mask *pSrc,
25486 uint8_t *pBuf,
25487 uint32_t nBuf,
25488 uint32_t *pnConsumed)
25489 {
25490 uint8_t *pIeLen = 0;
25491 uint32_t nConsumedOnEntry = *pnConsumed;
25492 uint32_t nNeeded = 0U;
25493 uint32_t status = DOT11F_PARSE_SUCCESS;
25494 status = dot11f_get_packed_ie_tclas_mask(pCtx, pSrc, &nNeeded);
25495 if (!DOT11F_SUCCEEDED(status))
25496 return status;
25497 while (pSrc->present) {
25498 if (nNeeded > nBuf)
25499 return DOT11F_BUFFER_OVERFLOW;
25500 *pBuf = 255;
25501 ++pBuf; ++(*pnConsumed);
25502 pIeLen = pBuf;
25503 ++pBuf; ++(*pnConsumed);
25504 *pBuf = 89;
25505 ++pBuf; ++(*pnConsumed);
25506 *pBuf = pSrc->classifier_type;
25507 *pnConsumed += 1;
25508 pBuf += 1;
25509 *pBuf = pSrc->classifier_mask;
25510 *pnConsumed += 1;
25511 pBuf += 1;
25512 switch (pSrc->classifier_type) {
25513 case 4:
25514 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.ip_param.reserved, 16);
25515 *pnConsumed += 16;
25516 /* fieldsEndFlag = 1 */
25517 break;
25518 }
25519 break;
25520 }
25521 (void)pCtx;
25522 if (pIeLen) {
25523 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25524 }
25525 return status;
25526 } /* End dot11f_pack_ie_tclas_mask. */
25527
dot11f_pack_ie_tgt_mac_addr(tpAniSirGlobal pCtx,tDot11fIEtgt_mac_addr * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)25528 uint32_t dot11f_pack_ie_tgt_mac_addr(tpAniSirGlobal pCtx,
25529 tDot11fIEtgt_mac_addr *pSrc,
25530 uint8_t *pBuf,
25531 uint32_t nBuf,
25532 uint32_t *pnConsumed)
25533 {
25534 uint8_t *pIeLen = 0;
25535 uint32_t nConsumedOnEntry = *pnConsumed;
25536 uint32_t nNeeded = 0U;
25537 nNeeded += 6;
25538 while (pSrc->present) {
25539 if (nNeeded > nBuf)
25540 return DOT11F_BUFFER_OVERFLOW;
25541 *pBuf = 3;
25542 ++pBuf; ++(*pnConsumed);
25543 pIeLen = pBuf;
25544 ++pBuf; ++(*pnConsumed);
25545 DOT11F_MEMCPY(pCtx, pBuf, pSrc->addr, 6);
25546 *pnConsumed += 6;
25547 /* fieldsEndFlag = 1 */
25548 break;
25549 }
25550 (void)pCtx;
25551 if (pIeLen) {
25552 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25553 }
25554 return DOT11F_PARSE_SUCCESS;
25555 } /* End dot11f_pack_ie_tgt_mac_addr. */
25556
dot11f_pack_ie_transmit_power_env(tpAniSirGlobal pCtx,tDot11fIEtransmit_power_env * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)25557 uint32_t dot11f_pack_ie_transmit_power_env(tpAniSirGlobal pCtx,
25558 tDot11fIEtransmit_power_env *pSrc,
25559 uint8_t *pBuf,
25560 uint32_t nBuf,
25561 uint32_t *pnConsumed)
25562 {
25563 uint8_t *pIeLen = 0;
25564 uint32_t nConsumedOnEntry = *pnConsumed;
25565 uint32_t nNeeded = 0U;
25566 uint8_t tmp157__;
25567 uint8_t tmp158__;
25568 uint8_t tmp159__;
25569 uint32_t status = DOT11F_PARSE_SUCCESS;
25570 status = dot11f_get_packed_ie_transmit_power_env(pCtx, pSrc, &nNeeded);
25571 if (!DOT11F_SUCCEEDED(status))
25572 return status;
25573 while (pSrc->present) {
25574 if (nNeeded > nBuf)
25575 return DOT11F_BUFFER_OVERFLOW;
25576 *pBuf = 195;
25577 ++pBuf; ++(*pnConsumed);
25578 pIeLen = pBuf;
25579 ++pBuf; ++(*pnConsumed);
25580 tmp157__ = 0U;
25581 tmp157__ |= (pSrc->max_tx_pwr_count << 0);
25582 tmp157__ |= (pSrc->max_tx_pwr_interpret << 3);
25583 tmp157__ |= (pSrc->max_tx_pwr_category << 6);
25584 if (unlikely(nBuf < 1))
25585 return DOT11F_INCOMPLETE_IE;
25586
25587 *pBuf = tmp157__;
25588 *pnConsumed += 1;
25589 pBuf += 1;
25590 nBuf -= 1 ;
25591 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->tx_power), pSrc->num_tx_power);
25592 *pnConsumed += pSrc->num_tx_power;
25593 pBuf += pSrc->num_tx_power;
25594 if (pSrc->max_tx_pwr_interpret) {
25595 switch (pSrc->max_tx_pwr_interpret) {
25596 case 0:
25597 *pBuf = pSrc->ext_max_tx_power.ext_max_tx_power_local_eirp.max_tx_power_for_320;
25598 *pnConsumed += 1;
25599 /* fieldsEndFlag = 1 */
25600 break;
25601 case 1:
25602 tmp158__ = 0U;
25603 tmp158__ |= (pSrc->ext_max_tx_power.ext_max_tx_power_local_psd.ext_count << 0);
25604 tmp158__ |= (pSrc->ext_max_tx_power.ext_max_tx_power_local_psd.reserved << 4);
25605 if (unlikely(nBuf < 1))
25606 return DOT11F_INCOMPLETE_IE;
25607
25608 *pBuf = tmp158__;
25609 *pnConsumed += 1;
25610 pBuf += 1;
25611 nBuf -= 1 ;
25612 DOT11F_MEMCPY(pCtx, pBuf, pSrc->ext_max_tx_power.ext_max_tx_power_local_psd.max_tx_psd_power, 8);
25613 *pnConsumed += 8;
25614 /* fieldsEndFlag = 1 */
25615 break;
25616 case 2:
25617 *pBuf = pSrc->ext_max_tx_power.ext_max_tx_power_reg_eirp.max_tx_power_for_320;
25618 *pnConsumed += 1;
25619 /* fieldsEndFlag = 1 */
25620 break;
25621 case 3:
25622 tmp159__ = 0U;
25623 tmp159__ |= (pSrc->ext_max_tx_power.ext_max_tx_power_reg_psd.ext_count << 0);
25624 tmp159__ |= (pSrc->ext_max_tx_power.ext_max_tx_power_reg_psd.reserved << 4);
25625 if (unlikely(nBuf < 1))
25626 return DOT11F_INCOMPLETE_IE;
25627
25628 *pBuf = tmp159__;
25629 *pnConsumed += 1;
25630 pBuf += 1;
25631 nBuf -= 1 ;
25632 DOT11F_MEMCPY(pCtx, pBuf, pSrc->ext_max_tx_power.ext_max_tx_power_reg_psd.max_tx_psd_power, 8);
25633 *pnConsumed += 8;
25634 /* fieldsEndFlag = 1 */
25635 break;
25636 }
25637 } else {
25638 break;
25639 }
25640 break;
25641 }
25642 (void)pCtx;
25643 if (pIeLen) {
25644 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25645 }
25646 return status;
25647 } /* End dot11f_pack_ie_transmit_power_env. */
25648
dot11f_pack_ie_wide_bw_chan_switch(tpAniSirGlobal pCtx,tDot11fIEwide_bw_chan_switch * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)25649 uint32_t dot11f_pack_ie_wide_bw_chan_switch(tpAniSirGlobal pCtx,
25650 tDot11fIEwide_bw_chan_switch *pSrc,
25651 uint8_t *pBuf,
25652 uint32_t nBuf,
25653 uint32_t *pnConsumed)
25654 {
25655 uint8_t *pIeLen = 0;
25656 uint32_t nConsumedOnEntry = *pnConsumed;
25657 uint32_t nNeeded = 0U;
25658 nNeeded += 3;
25659 while (pSrc->present) {
25660 if (nNeeded > nBuf)
25661 return DOT11F_BUFFER_OVERFLOW;
25662 *pBuf = 163;
25663 ++pBuf; ++(*pnConsumed);
25664 pIeLen = pBuf;
25665 ++pBuf; ++(*pnConsumed);
25666 *pBuf = pSrc->new_chan_width;
25667 *pnConsumed += 1;
25668 pBuf += 1;
25669 *pBuf = pSrc->new_center_chan_freq0;
25670 *pnConsumed += 1;
25671 pBuf += 1;
25672 *pBuf = pSrc->new_center_chan_freq1;
25673 *pnConsumed += 1;
25674 /* fieldsEndFlag = 1 */
25675 break;
25676 }
25677 (void)pCtx;
25678 if (pIeLen) {
25679 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25680 }
25681 return DOT11F_PARSE_SUCCESS;
25682 } /* End dot11f_pack_ie_wide_bw_chan_switch. */
25683
dot11f_pack_ie_aid(tpAniSirGlobal pCtx,tDot11fIEAID * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)25684 uint32_t dot11f_pack_ie_aid(tpAniSirGlobal pCtx,
25685 tDot11fIEAID *pSrc,
25686 uint8_t *pBuf,
25687 uint32_t nBuf,
25688 uint32_t *pnConsumed)
25689 {
25690 uint8_t *pIeLen = 0;
25691 uint32_t nConsumedOnEntry = *pnConsumed;
25692 uint32_t nNeeded = 0U;
25693 nNeeded += 2;
25694 while (pSrc->present) {
25695 if (nNeeded > nBuf)
25696 return DOT11F_BUFFER_OVERFLOW;
25697 *pBuf = 197;
25698 ++pBuf; ++(*pnConsumed);
25699 pIeLen = pBuf;
25700 ++pBuf; ++(*pnConsumed);
25701 frameshtons(pCtx, pBuf, pSrc->assocId, 0);
25702 *pnConsumed += 2;
25703 /* fieldsEndFlag = 1 */
25704 break;
25705 }
25706 (void)pCtx;
25707 if (pIeLen) {
25708 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25709 }
25710 return DOT11F_PARSE_SUCCESS;
25711 } /* End dot11f_pack_ie_aid. */
25712
dot11f_pack_ie_cf_params(tpAniSirGlobal pCtx,tDot11fIECFParams * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)25713 uint32_t dot11f_pack_ie_cf_params(tpAniSirGlobal pCtx,
25714 tDot11fIECFParams *pSrc,
25715 uint8_t *pBuf,
25716 uint32_t nBuf,
25717 uint32_t *pnConsumed)
25718 {
25719 uint8_t *pIeLen = 0;
25720 uint32_t nConsumedOnEntry = *pnConsumed;
25721 uint32_t nNeeded = 0U;
25722 nNeeded += 6;
25723 while (pSrc->present) {
25724 if (nNeeded > nBuf)
25725 return DOT11F_BUFFER_OVERFLOW;
25726 *pBuf = 4;
25727 ++pBuf; ++(*pnConsumed);
25728 pIeLen = pBuf;
25729 ++pBuf; ++(*pnConsumed);
25730 *pBuf = pSrc->cfp_count;
25731 *pnConsumed += 1;
25732 pBuf += 1;
25733 *pBuf = pSrc->cfp_period;
25734 *pnConsumed += 1;
25735 pBuf += 1;
25736 frameshtons(pCtx, pBuf, pSrc->cfp_maxduration, 0);
25737 *pnConsumed += 2;
25738 pBuf += 2;
25739 frameshtons(pCtx, pBuf, pSrc->cfp_durremaining, 0);
25740 *pnConsumed += 2;
25741 /* fieldsEndFlag = 1 */
25742 break;
25743 }
25744 (void)pCtx;
25745 if (pIeLen) {
25746 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25747 }
25748 return DOT11F_PARSE_SUCCESS;
25749 } /* End dot11f_pack_ie_cf_params. */
25750
dot11f_pack_ie_challenge_text(tpAniSirGlobal pCtx,tDot11fIEChallengeText * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)25751 uint32_t dot11f_pack_ie_challenge_text(tpAniSirGlobal pCtx,
25752 tDot11fIEChallengeText *pSrc,
25753 uint8_t *pBuf,
25754 uint32_t nBuf,
25755 uint32_t *pnConsumed)
25756 {
25757 uint8_t *pIeLen = 0;
25758 uint32_t nConsumedOnEntry = *pnConsumed;
25759 uint32_t nNeeded = 0U;
25760 nNeeded += pSrc->num_text;
25761 while (pSrc->present) {
25762 if (nNeeded > nBuf)
25763 return DOT11F_BUFFER_OVERFLOW;
25764 *pBuf = 16;
25765 ++pBuf; ++(*pnConsumed);
25766 pIeLen = pBuf;
25767 ++pBuf; ++(*pnConsumed);
25768 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->text), pSrc->num_text);
25769 *pnConsumed += pSrc->num_text;
25770 /* fieldsEndFlag = 1 */
25771 break;
25772 }
25773 (void)pCtx;
25774 if (pIeLen) {
25775 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25776 }
25777 return DOT11F_PARSE_SUCCESS;
25778 } /* End dot11f_pack_ie_challenge_text. */
25779
dot11f_pack_ie_chan_switch_ann(tpAniSirGlobal pCtx,tDot11fIEChanSwitchAnn * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)25780 uint32_t dot11f_pack_ie_chan_switch_ann(tpAniSirGlobal pCtx,
25781 tDot11fIEChanSwitchAnn *pSrc,
25782 uint8_t *pBuf,
25783 uint32_t nBuf,
25784 uint32_t *pnConsumed)
25785 {
25786 uint8_t *pIeLen = 0;
25787 uint32_t nConsumedOnEntry = *pnConsumed;
25788 uint32_t nNeeded = 0U;
25789 nNeeded += 3;
25790 while (pSrc->present) {
25791 if (nNeeded > nBuf)
25792 return DOT11F_BUFFER_OVERFLOW;
25793 *pBuf = 37;
25794 ++pBuf; ++(*pnConsumed);
25795 pIeLen = pBuf;
25796 ++pBuf; ++(*pnConsumed);
25797 *pBuf = pSrc->switchMode;
25798 *pnConsumed += 1;
25799 pBuf += 1;
25800 *pBuf = pSrc->newChannel;
25801 *pnConsumed += 1;
25802 pBuf += 1;
25803 *pBuf = pSrc->switchCount;
25804 *pnConsumed += 1;
25805 /* fieldsEndFlag = 1 */
25806 break;
25807 }
25808 (void)pCtx;
25809 if (pIeLen) {
25810 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25811 }
25812 return DOT11F_PARSE_SUCCESS;
25813 } /* End dot11f_pack_ie_chan_switch_ann. */
25814
dot11f_pack_ie_channel_switch_wrapper(tpAniSirGlobal pCtx,tDot11fIEChannelSwitchWrapper * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)25815 uint32_t dot11f_pack_ie_channel_switch_wrapper(tpAniSirGlobal pCtx,
25816 tDot11fIEChannelSwitchWrapper *pSrc,
25817 uint8_t *pBuf,
25818 uint32_t nBuf,
25819 uint32_t *pnConsumed)
25820 {
25821 uint8_t *pIeLen = 0;
25822 uint32_t nConsumedOnEntry = *pnConsumed;
25823 uint32_t nNeeded = 0U;
25824 uint32_t status = DOT11F_PARSE_SUCCESS;
25825 status = dot11f_get_packed_ie_channel_switch_wrapper(pCtx, pSrc, &nNeeded);
25826 if (!DOT11F_SUCCEEDED(status))
25827 return status;
25828 while (pSrc->present) {
25829 if (nNeeded > nBuf)
25830 return DOT11F_BUFFER_OVERFLOW;
25831 *pBuf = 196;
25832 ++pBuf; --nBuf; ++(*pnConsumed);
25833 pIeLen = pBuf;
25834 ++pBuf; --nBuf; ++(*pnConsumed);
25835 status = pack_core(pCtx,
25836 (uint8_t *)pSrc,
25837 pBuf,
25838 nBuf,
25839 pnConsumed,
25840 FFS_ChannelSwitchWrapper,
25841 IES_ChannelSwitchWrapper);
25842 break;
25843 }
25844 (void)pCtx;
25845 if (pIeLen) {
25846 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25847 }
25848 return status;
25849 } /* End dot11f_pack_ie_channel_switch_wrapper. */
25850
dot11f_pack_ie_country(tpAniSirGlobal pCtx,tDot11fIECountry * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)25851 uint32_t dot11f_pack_ie_country(tpAniSirGlobal pCtx,
25852 tDot11fIECountry *pSrc,
25853 uint8_t *pBuf,
25854 uint32_t nBuf,
25855 uint32_t *pnConsumed)
25856 {
25857 uint8_t *pIeLen = 0;
25858 uint32_t nConsumedOnEntry = *pnConsumed;
25859 uint32_t nNeeded = 0U;
25860 uint32_t status = DOT11F_PARSE_SUCCESS;
25861 status = dot11f_get_packed_ie_country(pCtx, pSrc, &nNeeded);
25862 if (!DOT11F_SUCCEEDED(status))
25863 return status;
25864 while (pSrc->present) {
25865 if (nNeeded > nBuf)
25866 return DOT11F_BUFFER_OVERFLOW;
25867 *pBuf = 7;
25868 ++pBuf; ++(*pnConsumed);
25869 pIeLen = pBuf;
25870 ++pBuf; ++(*pnConsumed);
25871 DOT11F_MEMCPY(pCtx, pBuf, pSrc->country, 3);
25872 *pnConsumed += 3;
25873 pBuf += 3;
25874 DOT11F_MEMCPY(pCtx, pBuf, pSrc->first_triplet, 3);
25875 *pnConsumed += 3;
25876 pBuf += 3;
25877 if (pSrc->num_more_triplets) {
25878 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->more_triplets), (pSrc->num_more_triplets * 3));
25879 *pnConsumed += (pSrc->num_more_triplets * 3);
25880 /* fieldsEndFlag = 1 */
25881 } else {
25882 break;
25883 }
25884 break;
25885 }
25886 (void)pCtx;
25887 if (pIeLen) {
25888 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25889 }
25890 return status;
25891 } /* End dot11f_pack_ie_country. */
25892
dot11f_pack_ie_ds_params(tpAniSirGlobal pCtx,tDot11fIEDSParams * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)25893 uint32_t dot11f_pack_ie_ds_params(tpAniSirGlobal pCtx,
25894 tDot11fIEDSParams *pSrc,
25895 uint8_t *pBuf,
25896 uint32_t nBuf,
25897 uint32_t *pnConsumed)
25898 {
25899 uint8_t *pIeLen = 0;
25900 uint32_t nConsumedOnEntry = *pnConsumed;
25901 uint32_t nNeeded = 0U;
25902 nNeeded += 1;
25903 while (pSrc->present) {
25904 if (nNeeded > nBuf)
25905 return DOT11F_BUFFER_OVERFLOW;
25906 *pBuf = 3;
25907 ++pBuf; ++(*pnConsumed);
25908 pIeLen = pBuf;
25909 ++pBuf; ++(*pnConsumed);
25910 *pBuf = pSrc->curr_channel;
25911 *pnConsumed += 1;
25912 /* fieldsEndFlag = 1 */
25913 break;
25914 }
25915 (void)pCtx;
25916 if (pIeLen) {
25917 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25918 }
25919 return DOT11F_PARSE_SUCCESS;
25920 } /* End dot11f_pack_ie_ds_params. */
25921
dot11f_pack_ie_edca_param_set(tpAniSirGlobal pCtx,tDot11fIEEDCAParamSet * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)25922 uint32_t dot11f_pack_ie_edca_param_set(tpAniSirGlobal pCtx,
25923 tDot11fIEEDCAParamSet *pSrc,
25924 uint8_t *pBuf,
25925 uint32_t nBuf,
25926 uint32_t *pnConsumed)
25927 {
25928 uint8_t *pIeLen = 0;
25929 uint32_t nConsumedOnEntry = *pnConsumed;
25930 uint32_t nNeeded = 0U;
25931 uint8_t tmp160__;
25932 uint8_t tmp161__;
25933 uint8_t tmp162__;
25934 uint8_t tmp163__;
25935 uint8_t tmp164__;
25936 uint8_t tmp165__;
25937 uint8_t tmp166__;
25938 uint8_t tmp167__;
25939 nNeeded += 18;
25940 while (pSrc->present) {
25941 if (nNeeded > nBuf)
25942 return DOT11F_BUFFER_OVERFLOW;
25943 *pBuf = 12;
25944 ++pBuf; ++(*pnConsumed);
25945 pIeLen = pBuf;
25946 ++pBuf; ++(*pnConsumed);
25947 *pBuf = pSrc->qos;
25948 *pnConsumed += 1;
25949 pBuf += 1;
25950 *pBuf = pSrc->reserved;
25951 *pnConsumed += 1;
25952 pBuf += 1;
25953 tmp160__ = 0U;
25954 tmp160__ |= (pSrc->acbe_aifsn << 0);
25955 tmp160__ |= (pSrc->acbe_acm << 4);
25956 tmp160__ |= (pSrc->acbe_aci << 5);
25957 tmp160__ |= (pSrc->unused1 << 7);
25958 if (unlikely(nBuf < 1))
25959 return DOT11F_INCOMPLETE_IE;
25960
25961 *pBuf = tmp160__;
25962 *pnConsumed += 1;
25963 pBuf += 1;
25964 nBuf -= 1 ;
25965 tmp161__ = 0U;
25966 tmp161__ |= (pSrc->acbe_acwmin << 0);
25967 tmp161__ |= (pSrc->acbe_acwmax << 4);
25968 if (unlikely(nBuf < 1))
25969 return DOT11F_INCOMPLETE_IE;
25970
25971 *pBuf = tmp161__;
25972 *pnConsumed += 1;
25973 pBuf += 1;
25974 nBuf -= 1 ;
25975 frameshtons(pCtx, pBuf, pSrc->acbe_txoplimit, 0);
25976 *pnConsumed += 2;
25977 pBuf += 2;
25978 tmp162__ = 0U;
25979 tmp162__ |= (pSrc->acbk_aifsn << 0);
25980 tmp162__ |= (pSrc->acbk_acm << 4);
25981 tmp162__ |= (pSrc->acbk_aci << 5);
25982 tmp162__ |= (pSrc->unused2 << 7);
25983 if (unlikely(nBuf < 1))
25984 return DOT11F_INCOMPLETE_IE;
25985
25986 *pBuf = tmp162__;
25987 *pnConsumed += 1;
25988 pBuf += 1;
25989 nBuf -= 1 ;
25990 tmp163__ = 0U;
25991 tmp163__ |= (pSrc->acbk_acwmin << 0);
25992 tmp163__ |= (pSrc->acbk_acwmax << 4);
25993 if (unlikely(nBuf < 1))
25994 return DOT11F_INCOMPLETE_IE;
25995
25996 *pBuf = tmp163__;
25997 *pnConsumed += 1;
25998 pBuf += 1;
25999 nBuf -= 1 ;
26000 frameshtons(pCtx, pBuf, pSrc->acbk_txoplimit, 0);
26001 *pnConsumed += 2;
26002 pBuf += 2;
26003 tmp164__ = 0U;
26004 tmp164__ |= (pSrc->acvi_aifsn << 0);
26005 tmp164__ |= (pSrc->acvi_acm << 4);
26006 tmp164__ |= (pSrc->acvi_aci << 5);
26007 tmp164__ |= (pSrc->unused3 << 7);
26008 if (unlikely(nBuf < 1))
26009 return DOT11F_INCOMPLETE_IE;
26010
26011 *pBuf = tmp164__;
26012 *pnConsumed += 1;
26013 pBuf += 1;
26014 nBuf -= 1 ;
26015 tmp165__ = 0U;
26016 tmp165__ |= (pSrc->acvi_acwmin << 0);
26017 tmp165__ |= (pSrc->acvi_acwmax << 4);
26018 if (unlikely(nBuf < 1))
26019 return DOT11F_INCOMPLETE_IE;
26020
26021 *pBuf = tmp165__;
26022 *pnConsumed += 1;
26023 pBuf += 1;
26024 nBuf -= 1 ;
26025 frameshtons(pCtx, pBuf, pSrc->acvi_txoplimit, 0);
26026 *pnConsumed += 2;
26027 pBuf += 2;
26028 tmp166__ = 0U;
26029 tmp166__ |= (pSrc->acvo_aifsn << 0);
26030 tmp166__ |= (pSrc->acvo_acm << 4);
26031 tmp166__ |= (pSrc->acvo_aci << 5);
26032 tmp166__ |= (pSrc->unused4 << 7);
26033 if (unlikely(nBuf < 1))
26034 return DOT11F_INCOMPLETE_IE;
26035
26036 *pBuf = tmp166__;
26037 *pnConsumed += 1;
26038 pBuf += 1;
26039 nBuf -= 1 ;
26040 tmp167__ = 0U;
26041 tmp167__ |= (pSrc->acvo_acwmin << 0);
26042 tmp167__ |= (pSrc->acvo_acwmax << 4);
26043 if (unlikely(nBuf < 1))
26044 return DOT11F_INCOMPLETE_IE;
26045
26046 *pBuf = tmp167__;
26047 *pnConsumed += 1;
26048 pBuf += 1;
26049 nBuf -= 1 ;
26050 frameshtons(pCtx, pBuf, pSrc->acvo_txoplimit, 0);
26051 *pnConsumed += 2;
26052 /* fieldsEndFlag = 1 */
26053 break;
26054 }
26055 (void)pCtx;
26056 if (pIeLen) {
26057 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
26058 }
26059 return DOT11F_PARSE_SUCCESS;
26060 } /* End dot11f_pack_ie_edca_param_set. */
26061
dot11f_pack_ie_erp_info(tpAniSirGlobal pCtx,tDot11fIEERPInfo * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)26062 uint32_t dot11f_pack_ie_erp_info(tpAniSirGlobal pCtx,
26063 tDot11fIEERPInfo *pSrc,
26064 uint8_t *pBuf,
26065 uint32_t nBuf,
26066 uint32_t *pnConsumed)
26067 {
26068 uint8_t *pIeLen = 0;
26069 uint32_t nConsumedOnEntry = *pnConsumed;
26070 uint32_t nNeeded = 0U;
26071 uint8_t tmp168__;
26072 nNeeded += 1;
26073 while (pSrc->present) {
26074 if (nNeeded > nBuf)
26075 return DOT11F_BUFFER_OVERFLOW;
26076 *pBuf = 42;
26077 ++pBuf; ++(*pnConsumed);
26078 pIeLen = pBuf;
26079 ++pBuf; ++(*pnConsumed);
26080 tmp168__ = 0U;
26081 tmp168__ |= (pSrc->non_erp_present << 0);
26082 tmp168__ |= (pSrc->use_prot << 1);
26083 tmp168__ |= (pSrc->barker_preamble << 2);
26084 tmp168__ |= (pSrc->unused << 3);
26085 if (unlikely(nBuf < 1))
26086 return DOT11F_INCOMPLETE_IE;
26087
26088 *pBuf = tmp168__;
26089 *pnConsumed += 1;
26090 /* fieldsEndFlag = 1 */
26091 nBuf -= 1 ;
26092 break;
26093 }
26094 (void)pCtx;
26095 if (pIeLen) {
26096 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
26097 }
26098 return DOT11F_PARSE_SUCCESS;
26099 } /* End dot11f_pack_ie_erp_info. */
26100
dot11f_pack_ie_ese_cckm_opaque(tpAniSirGlobal pCtx,tDot11fIEESECckmOpaque * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)26101 uint32_t dot11f_pack_ie_ese_cckm_opaque(tpAniSirGlobal pCtx,
26102 tDot11fIEESECckmOpaque *pSrc,
26103 uint8_t *pBuf,
26104 uint32_t nBuf,
26105 uint32_t *pnConsumed)
26106 {
26107 uint8_t *pIeLen = 0;
26108 uint32_t nConsumedOnEntry = *pnConsumed;
26109 uint32_t nNeeded = 0U;
26110 nNeeded += pSrc->num_data;
26111 while (pSrc->present) {
26112 if (nNeeded > nBuf)
26113 return DOT11F_BUFFER_OVERFLOW;
26114 *pBuf = 156;
26115 ++pBuf; ++(*pnConsumed);
26116 pIeLen = pBuf;
26117 ++pBuf; ++(*pnConsumed);
26118 *pBuf = 0x0;
26119 ++pBuf; ++(*pnConsumed);
26120 *pBuf = 0x40;
26121 ++pBuf; ++(*pnConsumed);
26122 *pBuf = 0x96;
26123 ++pBuf; ++(*pnConsumed);
26124 *pBuf = 0x0;
26125 ++pBuf; ++(*pnConsumed);
26126 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->data), pSrc->num_data);
26127 *pnConsumed += pSrc->num_data;
26128 /* fieldsEndFlag = 1 */
26129 break;
26130 }
26131 (void)pCtx;
26132 if (pIeLen) {
26133 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
26134 }
26135 return DOT11F_PARSE_SUCCESS;
26136 } /* End dot11f_pack_ie_ese_cckm_opaque. */
26137
dot11f_pack_ie_ese_rad_mgmt_cap(tpAniSirGlobal pCtx,tDot11fIEESERadMgmtCap * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)26138 uint32_t dot11f_pack_ie_ese_rad_mgmt_cap(tpAniSirGlobal pCtx,
26139 tDot11fIEESERadMgmtCap *pSrc,
26140 uint8_t *pBuf,
26141 uint32_t nBuf,
26142 uint32_t *pnConsumed)
26143 {
26144 uint8_t *pIeLen = 0;
26145 uint32_t nConsumedOnEntry = *pnConsumed;
26146 uint32_t nNeeded = 0U;
26147 uint8_t tmp169__;
26148 nNeeded += 2;
26149 while (pSrc->present) {
26150 if (nNeeded > nBuf)
26151 return DOT11F_BUFFER_OVERFLOW;
26152 *pBuf = 221;
26153 ++pBuf; ++(*pnConsumed);
26154 pIeLen = pBuf;
26155 ++pBuf; ++(*pnConsumed);
26156 *pBuf = 0x0;
26157 ++pBuf; ++(*pnConsumed);
26158 *pBuf = 0x40;
26159 ++pBuf; ++(*pnConsumed);
26160 *pBuf = 0x96;
26161 ++pBuf; ++(*pnConsumed);
26162 *pBuf = 0x1;
26163 ++pBuf; ++(*pnConsumed);
26164 *pBuf = pSrc->mgmt_state;
26165 *pnConsumed += 1;
26166 pBuf += 1;
26167 tmp169__ = 0U;
26168 tmp169__ |= (pSrc->mbssid_mask << 0);
26169 tmp169__ |= (pSrc->reserved << 3);
26170 if (unlikely(nBuf < 1))
26171 return DOT11F_INCOMPLETE_IE;
26172
26173 *pBuf = tmp169__;
26174 *pnConsumed += 1;
26175 /* fieldsEndFlag = 1 */
26176 nBuf -= 1 ;
26177 break;
26178 }
26179 (void)pCtx;
26180 if (pIeLen) {
26181 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
26182 }
26183 return DOT11F_PARSE_SUCCESS;
26184 } /* End dot11f_pack_ie_ese_rad_mgmt_cap. */
26185
dot11f_pack_ie_ese_traf_strm_met(tpAniSirGlobal pCtx,tDot11fIEESETrafStrmMet * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)26186 uint32_t dot11f_pack_ie_ese_traf_strm_met(tpAniSirGlobal pCtx,
26187 tDot11fIEESETrafStrmMet *pSrc,
26188 uint8_t *pBuf,
26189 uint32_t nBuf,
26190 uint32_t *pnConsumed)
26191 {
26192 uint8_t *pIeLen = 0;
26193 uint32_t nConsumedOnEntry = *pnConsumed;
26194 uint32_t nNeeded = 0U;
26195 nNeeded += 4;
26196 while (pSrc->present) {
26197 if (nNeeded > nBuf)
26198 return DOT11F_BUFFER_OVERFLOW;
26199 *pBuf = 221;
26200 ++pBuf; ++(*pnConsumed);
26201 pIeLen = pBuf;
26202 ++pBuf; ++(*pnConsumed);
26203 *pBuf = 0x0;
26204 ++pBuf; ++(*pnConsumed);
26205 *pBuf = 0x40;
26206 ++pBuf; ++(*pnConsumed);
26207 *pBuf = 0x96;
26208 ++pBuf; ++(*pnConsumed);
26209 *pBuf = 0x7;
26210 ++pBuf; ++(*pnConsumed);
26211 *pBuf = pSrc->tsid;
26212 *pnConsumed += 1;
26213 pBuf += 1;
26214 *pBuf = pSrc->state;
26215 *pnConsumed += 1;
26216 pBuf += 1;
26217 frameshtons(pCtx, pBuf, pSrc->msmt_interval, 0);
26218 *pnConsumed += 2;
26219 /* fieldsEndFlag = 1 */
26220 break;
26221 }
26222 (void)pCtx;
26223 if (pIeLen) {
26224 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
26225 }
26226 return DOT11F_PARSE_SUCCESS;
26227 } /* End dot11f_pack_ie_ese_traf_strm_met. */
26228
dot11f_pack_ie_ese_traf_strm_rate_set(tpAniSirGlobal pCtx,tDot11fIEESETrafStrmRateSet * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)26229 uint32_t dot11f_pack_ie_ese_traf_strm_rate_set(tpAniSirGlobal pCtx,
26230 tDot11fIEESETrafStrmRateSet *pSrc,
26231 uint8_t *pBuf,
26232 uint32_t nBuf,
26233 uint32_t *pnConsumed)
26234 {
26235 uint8_t *pIeLen = 0;
26236 uint32_t nConsumedOnEntry = *pnConsumed;
26237 uint32_t nNeeded = 0U;
26238 nNeeded += (pSrc->num_tsrates + 1);
26239 while (pSrc->present) {
26240 if (nNeeded > nBuf)
26241 return DOT11F_BUFFER_OVERFLOW;
26242 *pBuf = 221;
26243 ++pBuf; ++(*pnConsumed);
26244 pIeLen = pBuf;
26245 ++pBuf; ++(*pnConsumed);
26246 *pBuf = 0x0;
26247 ++pBuf; ++(*pnConsumed);
26248 *pBuf = 0x40;
26249 ++pBuf; ++(*pnConsumed);
26250 *pBuf = 0x96;
26251 ++pBuf; ++(*pnConsumed);
26252 *pBuf = 0x8;
26253 ++pBuf; ++(*pnConsumed);
26254 *pBuf = pSrc->tsid;
26255 *pnConsumed += 1;
26256 pBuf += 1;
26257 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->tsrates), pSrc->num_tsrates);
26258 *pnConsumed += pSrc->num_tsrates;
26259 /* fieldsEndFlag = 1 */
26260 break;
26261 }
26262 (void)pCtx;
26263 if (pIeLen) {
26264 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
26265 }
26266 return DOT11F_PARSE_SUCCESS;
26267 } /* End dot11f_pack_ie_ese_traf_strm_rate_set. */
26268
dot11f_pack_ie_ese_txmit_power(tpAniSirGlobal pCtx,tDot11fIEESETxmitPower * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)26269 uint32_t dot11f_pack_ie_ese_txmit_power(tpAniSirGlobal pCtx,
26270 tDot11fIEESETxmitPower *pSrc,
26271 uint8_t *pBuf,
26272 uint32_t nBuf,
26273 uint32_t *pnConsumed)
26274 {
26275 uint8_t *pIeLen = 0;
26276 uint32_t nConsumedOnEntry = *pnConsumed;
26277 uint32_t nNeeded = 0U;
26278 nNeeded += 2;
26279 while (pSrc->present) {
26280 if (nNeeded > nBuf)
26281 return DOT11F_BUFFER_OVERFLOW;
26282 *pBuf = 150;
26283 ++pBuf; ++(*pnConsumed);
26284 pIeLen = pBuf;
26285 ++pBuf; ++(*pnConsumed);
26286 *pBuf = 0x0;
26287 ++pBuf; ++(*pnConsumed);
26288 *pBuf = 0x40;
26289 ++pBuf; ++(*pnConsumed);
26290 *pBuf = 0x96;
26291 ++pBuf; ++(*pnConsumed);
26292 *pBuf = 0x0;
26293 ++pBuf; ++(*pnConsumed);
26294 *pBuf = pSrc->power_limit;
26295 *pnConsumed += 1;
26296 pBuf += 1;
26297 *pBuf = pSrc->reserved;
26298 *pnConsumed += 1;
26299 /* fieldsEndFlag = 1 */
26300 break;
26301 }
26302 (void)pCtx;
26303 if (pIeLen) {
26304 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
26305 }
26306 return DOT11F_PARSE_SUCCESS;
26307 } /* End dot11f_pack_ie_ese_txmit_power. */
26308
dot11f_pack_ie_ese_version(tpAniSirGlobal pCtx,tDot11fIEESEVersion * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)26309 uint32_t dot11f_pack_ie_ese_version(tpAniSirGlobal pCtx,
26310 tDot11fIEESEVersion *pSrc,
26311 uint8_t *pBuf,
26312 uint32_t nBuf,
26313 uint32_t *pnConsumed)
26314 {
26315 uint8_t *pIeLen = 0;
26316 uint32_t nConsumedOnEntry = *pnConsumed;
26317 uint32_t nNeeded = 0U;
26318 nNeeded += 1;
26319 while (pSrc->present) {
26320 if (nNeeded > nBuf)
26321 return DOT11F_BUFFER_OVERFLOW;
26322 *pBuf = 221;
26323 ++pBuf; ++(*pnConsumed);
26324 pIeLen = pBuf;
26325 ++pBuf; ++(*pnConsumed);
26326 *pBuf = 0x0;
26327 ++pBuf; ++(*pnConsumed);
26328 *pBuf = 0x40;
26329 ++pBuf; ++(*pnConsumed);
26330 *pBuf = 0x96;
26331 ++pBuf; ++(*pnConsumed);
26332 *pBuf = 0x3;
26333 ++pBuf; ++(*pnConsumed);
26334 *pBuf = pSrc->version;
26335 *pnConsumed += 1;
26336 /* fieldsEndFlag = 1 */
26337 break;
26338 }
26339 (void)pCtx;
26340 if (pIeLen) {
26341 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
26342 }
26343 return DOT11F_PARSE_SUCCESS;
26344 } /* End dot11f_pack_ie_ese_version. */
26345
dot11f_pack_ie_ext_cap(tpAniSirGlobal pCtx,tDot11fIEExtCap * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)26346 uint32_t dot11f_pack_ie_ext_cap(tpAniSirGlobal pCtx,
26347 tDot11fIEExtCap *pSrc,
26348 uint8_t *pBuf,
26349 uint32_t nBuf,
26350 uint32_t *pnConsumed)
26351 {
26352 uint8_t *pIeLen = 0;
26353 uint32_t nConsumedOnEntry = *pnConsumed;
26354 uint32_t nNeeded = 0U;
26355 nNeeded += pSrc->num_bytes;
26356 while (pSrc->present) {
26357 if (nNeeded > nBuf)
26358 return DOT11F_BUFFER_OVERFLOW;
26359 *pBuf = 127;
26360 ++pBuf; ++(*pnConsumed);
26361 pIeLen = pBuf;
26362 ++pBuf; ++(*pnConsumed);
26363 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->bytes), pSrc->num_bytes);
26364 *pnConsumed += pSrc->num_bytes;
26365 /* fieldsEndFlag = 1 */
26366 break;
26367 }
26368 (void)pCtx;
26369 if (pIeLen) {
26370 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
26371 }
26372 return DOT11F_PARSE_SUCCESS;
26373 } /* End dot11f_pack_ie_ext_cap. */
26374
dot11f_pack_ie_ext_supp_rates(tpAniSirGlobal pCtx,tDot11fIEExtSuppRates * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)26375 uint32_t dot11f_pack_ie_ext_supp_rates(tpAniSirGlobal pCtx,
26376 tDot11fIEExtSuppRates *pSrc,
26377 uint8_t *pBuf,
26378 uint32_t nBuf,
26379 uint32_t *pnConsumed)
26380 {
26381 uint8_t *pIeLen = 0;
26382 uint32_t nConsumedOnEntry = *pnConsumed;
26383 uint32_t nNeeded = 0U;
26384 nNeeded += pSrc->num_rates;
26385 while (pSrc->present) {
26386 if (nNeeded > nBuf)
26387 return DOT11F_BUFFER_OVERFLOW;
26388 *pBuf = 50;
26389 ++pBuf; ++(*pnConsumed);
26390 pIeLen = pBuf;
26391 ++pBuf; ++(*pnConsumed);
26392 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->rates), pSrc->num_rates);
26393 *pnConsumed += pSrc->num_rates;
26394 /* fieldsEndFlag = 1 */
26395 break;
26396 }
26397 (void)pCtx;
26398 if (pIeLen) {
26399 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
26400 }
26401 return DOT11F_PARSE_SUCCESS;
26402 } /* End dot11f_pack_ie_ext_supp_rates. */
26403
dot11f_pack_ie_fh_param_set(tpAniSirGlobal pCtx,tDot11fIEFHParamSet * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)26404 uint32_t dot11f_pack_ie_fh_param_set(tpAniSirGlobal pCtx,
26405 tDot11fIEFHParamSet *pSrc,
26406 uint8_t *pBuf,
26407 uint32_t nBuf,
26408 uint32_t *pnConsumed)
26409 {
26410 uint8_t *pIeLen = 0;
26411 uint32_t nConsumedOnEntry = *pnConsumed;
26412 uint32_t nNeeded = 0U;
26413 nNeeded += 5;
26414 while (pSrc->present) {
26415 if (nNeeded > nBuf)
26416 return DOT11F_BUFFER_OVERFLOW;
26417 *pBuf = 2;
26418 ++pBuf; ++(*pnConsumed);
26419 pIeLen = pBuf;
26420 ++pBuf; ++(*pnConsumed);
26421 frameshtons(pCtx, pBuf, pSrc->dwell_time, 0);
26422 *pnConsumed += 2;
26423 pBuf += 2;
26424 *pBuf = pSrc->hop_set;
26425 *pnConsumed += 1;
26426 pBuf += 1;
26427 *pBuf = pSrc->hop_pattern;
26428 *pnConsumed += 1;
26429 pBuf += 1;
26430 *pBuf = pSrc->hop_index;
26431 *pnConsumed += 1;
26432 /* fieldsEndFlag = 1 */
26433 break;
26434 }
26435 (void)pCtx;
26436 if (pIeLen) {
26437 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
26438 }
26439 return DOT11F_PARSE_SUCCESS;
26440 } /* End dot11f_pack_ie_fh_param_set. */
26441
dot11f_pack_ie_fh_params(tpAniSirGlobal pCtx,tDot11fIEFHParams * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)26442 uint32_t dot11f_pack_ie_fh_params(tpAniSirGlobal pCtx,
26443 tDot11fIEFHParams *pSrc,
26444 uint8_t *pBuf,
26445 uint32_t nBuf,
26446 uint32_t *pnConsumed)
26447 {
26448 uint8_t *pIeLen = 0;
26449 uint32_t nConsumedOnEntry = *pnConsumed;
26450 uint32_t nNeeded = 0U;
26451 nNeeded += 2;
26452 while (pSrc->present) {
26453 if (nNeeded > nBuf)
26454 return DOT11F_BUFFER_OVERFLOW;
26455 *pBuf = 8;
26456 ++pBuf; ++(*pnConsumed);
26457 pIeLen = pBuf;
26458 ++pBuf; ++(*pnConsumed);
26459 *pBuf = pSrc->radix;
26460 *pnConsumed += 1;
26461 pBuf += 1;
26462 *pBuf = pSrc->nchannels;
26463 *pnConsumed += 1;
26464 /* fieldsEndFlag = 1 */
26465 break;
26466 }
26467 (void)pCtx;
26468 if (pIeLen) {
26469 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
26470 }
26471 return DOT11F_PARSE_SUCCESS;
26472 } /* End dot11f_pack_ie_fh_params. */
26473
dot11f_pack_ie_fh_patt_table(tpAniSirGlobal pCtx,tDot11fIEFHPattTable * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)26474 uint32_t dot11f_pack_ie_fh_patt_table(tpAniSirGlobal pCtx,
26475 tDot11fIEFHPattTable *pSrc,
26476 uint8_t *pBuf,
26477 uint32_t nBuf,
26478 uint32_t *pnConsumed)
26479 {
26480 uint8_t *pIeLen = 0;
26481 uint32_t nConsumedOnEntry = *pnConsumed;
26482 uint32_t nNeeded = 0U;
26483 nNeeded += (pSrc->num_randtable + 4);
26484 while (pSrc->present) {
26485 if (nNeeded > nBuf)
26486 return DOT11F_BUFFER_OVERFLOW;
26487 *pBuf = 9;
26488 ++pBuf; ++(*pnConsumed);
26489 pIeLen = pBuf;
26490 ++pBuf; ++(*pnConsumed);
26491 *pBuf = pSrc->flag;
26492 *pnConsumed += 1;
26493 pBuf += 1;
26494 *pBuf = pSrc->nsets;
26495 *pnConsumed += 1;
26496 pBuf += 1;
26497 *pBuf = pSrc->modulus;
26498 *pnConsumed += 1;
26499 pBuf += 1;
26500 *pBuf = pSrc->offset;
26501 *pnConsumed += 1;
26502 pBuf += 1;
26503 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->randtable), pSrc->num_randtable);
26504 *pnConsumed += pSrc->num_randtable;
26505 /* fieldsEndFlag = 1 */
26506 break;
26507 }
26508 (void)pCtx;
26509 if (pIeLen) {
26510 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
26511 }
26512 return DOT11F_PARSE_SUCCESS;
26513 } /* End dot11f_pack_ie_fh_patt_table. */
26514
dot11f_pack_ie_ft_info(tpAniSirGlobal pCtx,tDot11fIEFTInfo * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)26515 uint32_t dot11f_pack_ie_ft_info(tpAniSirGlobal pCtx,
26516 tDot11fIEFTInfo *pSrc,
26517 uint8_t *pBuf,
26518 uint32_t nBuf,
26519 uint32_t *pnConsumed)
26520 {
26521 uint8_t *pIeLen = 0;
26522 uint32_t nConsumedOnEntry = *pnConsumed;
26523 uint32_t nNeeded = 0U;
26524 uint16_t tmp170__;
26525 uint32_t status = DOT11F_PARSE_SUCCESS;
26526 status = dot11f_get_packed_ieft_info(pCtx, pSrc, &nNeeded);
26527 if (!DOT11F_SUCCEEDED(status))
26528 return status;
26529 while (pSrc->present) {
26530 if (nNeeded > nBuf)
26531 return DOT11F_BUFFER_OVERFLOW;
26532 *pBuf = 55;
26533 ++pBuf; --nBuf; ++(*pnConsumed);
26534 pIeLen = pBuf;
26535 ++pBuf; --nBuf; ++(*pnConsumed);
26536 tmp170__ = 0U;
26537 tmp170__ |= (pSrc->reserved << 0);
26538 tmp170__ |= (pSrc->IECount << 8);
26539 if (unlikely(nBuf < 2))
26540 return DOT11F_INCOMPLETE_IE;
26541
26542 frameshtons(pCtx, pBuf, tmp170__, 0);
26543 *pnConsumed += 2;
26544 pBuf += 2;
26545 nBuf -= 2 ;
26546 DOT11F_MEMCPY(pCtx, pBuf, pSrc->MIC, 16);
26547 *pnConsumed += 16;
26548 pBuf += 16;
26549 DOT11F_MEMCPY(pCtx, pBuf, pSrc->Anonce, 32);
26550 *pnConsumed += 32;
26551 pBuf += 32;
26552 DOT11F_MEMCPY(pCtx, pBuf, pSrc->Snonce, 32);
26553 *pnConsumed += 32;
26554 pBuf += 32;
26555 status = pack_core(pCtx,
26556 (uint8_t *)pSrc,
26557 pBuf,
26558 nBuf,
26559 pnConsumed,
26560 FFS_FTInfo,
26561 IES_FTInfo);
26562 break;
26563 }
26564 (void)pCtx;
26565 if (pIeLen) {
26566 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
26567 }
26568 return status;
26569 } /* End dot11f_pack_ie_ft_info. */
26570
dot11f_pack_ie_ht_caps(tpAniSirGlobal pCtx,tDot11fIEHTCaps * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)26571 uint32_t dot11f_pack_ie_ht_caps(tpAniSirGlobal pCtx,
26572 tDot11fIEHTCaps *pSrc,
26573 uint8_t *pBuf,
26574 uint32_t nBuf,
26575 uint32_t *pnConsumed)
26576 {
26577 uint8_t *pIeLen = 0;
26578 uint32_t nConsumedOnEntry = *pnConsumed;
26579 uint32_t nNeeded = 0U;
26580 uint16_t tmp171__;
26581 uint8_t tmp172__;
26582 uint16_t tmp173__;
26583 uint32_t tmp174__;
26584 uint8_t tmp175__;
26585 nNeeded += (pSrc->num_rsvd + 26);
26586 while (pSrc->present) {
26587 if (nNeeded > nBuf)
26588 return DOT11F_BUFFER_OVERFLOW;
26589 *pBuf = 45;
26590 ++pBuf; ++(*pnConsumed);
26591 pIeLen = pBuf;
26592 ++pBuf; ++(*pnConsumed);
26593 tmp171__ = 0U;
26594 tmp171__ |= (pSrc->advCodingCap << 0);
26595 tmp171__ |= (pSrc->supportedChannelWidthSet << 1);
26596 tmp171__ |= (pSrc->mimoPowerSave << 2);
26597 tmp171__ |= (pSrc->greenField << 4);
26598 tmp171__ |= (pSrc->shortGI20MHz << 5);
26599 tmp171__ |= (pSrc->shortGI40MHz << 6);
26600 tmp171__ |= (pSrc->txSTBC << 7);
26601 tmp171__ |= (pSrc->rxSTBC << 8);
26602 tmp171__ |= (pSrc->delayedBA << 10);
26603 tmp171__ |= (pSrc->maximalAMSDUsize << 11);
26604 tmp171__ |= (pSrc->dsssCckMode40MHz << 12);
26605 tmp171__ |= (pSrc->psmp << 13);
26606 tmp171__ |= (pSrc->stbcControlFrame << 14);
26607 tmp171__ |= (pSrc->lsigTXOPProtection << 15);
26608 if (unlikely(nBuf < 2))
26609 return DOT11F_INCOMPLETE_IE;
26610
26611 frameshtons(pCtx, pBuf, tmp171__, 0);
26612 *pnConsumed += 2;
26613 pBuf += 2;
26614 nBuf -= 2 ;
26615 tmp172__ = 0U;
26616 tmp172__ |= (pSrc->maxRxAMPDUFactor << 0);
26617 tmp172__ |= (pSrc->mpduDensity << 2);
26618 tmp172__ |= (pSrc->reserved1 << 5);
26619 if (unlikely(nBuf < 1))
26620 return DOT11F_INCOMPLETE_IE;
26621
26622 *pBuf = tmp172__;
26623 *pnConsumed += 1;
26624 pBuf += 1;
26625 nBuf -= 1 ;
26626 DOT11F_MEMCPY(pCtx, pBuf, pSrc->supportedMCSSet, 16);
26627 *pnConsumed += 16;
26628 pBuf += 16;
26629 tmp173__ = 0U;
26630 tmp173__ |= (pSrc->pco << 0);
26631 tmp173__ |= (pSrc->transitionTime << 1);
26632 tmp173__ |= (pSrc->reserved2 << 3);
26633 tmp173__ |= (pSrc->mcsFeedback << 8);
26634 tmp173__ |= (pSrc->reserved3 << 10);
26635 if (unlikely(nBuf < 2))
26636 return DOT11F_INCOMPLETE_IE;
26637
26638 frameshtons(pCtx, pBuf, tmp173__, 0);
26639 *pnConsumed += 2;
26640 pBuf += 2;
26641 nBuf -= 2 ;
26642 tmp174__ = 0U;
26643 tmp174__ |= (pSrc->txBF << 0);
26644 tmp174__ |= (pSrc->rxStaggeredSounding << 1);
26645 tmp174__ |= (pSrc->txStaggeredSounding << 2);
26646 tmp174__ |= (pSrc->rxZLF << 3);
26647 tmp174__ |= (pSrc->txZLF << 4);
26648 tmp174__ |= (pSrc->implicitTxBF << 5);
26649 tmp174__ |= (pSrc->calibration << 6);
26650 tmp174__ |= (pSrc->explicitCSITxBF << 8);
26651 tmp174__ |= (pSrc->explicitUncompressedSteeringMatrix << 9);
26652 tmp174__ |= (pSrc->explicitBFCSIFeedback << 10);
26653 tmp174__ |= (pSrc->explicitUncompressedSteeringMatrixFeedback << 13);
26654 tmp174__ |= (pSrc->explicitCompressedSteeringMatrixFeedback << 16);
26655 tmp174__ |= (pSrc->csiNumBFAntennae << 19);
26656 tmp174__ |= (pSrc->uncompressedSteeringMatrixBFAntennae << 21);
26657 tmp174__ |= (pSrc->compressedSteeringMatrixBFAntennae << 23);
26658 tmp174__ |= (pSrc->reserved4 << 25);
26659 if (unlikely(nBuf < 4))
26660 return DOT11F_INCOMPLETE_IE;
26661
26662 frameshtonl(pCtx, pBuf, tmp174__, 0);
26663 *pnConsumed += 4;
26664 pBuf += 4;
26665 nBuf -= 4 ;
26666 tmp175__ = 0U;
26667 tmp175__ |= (pSrc->antennaSelection << 0);
26668 tmp175__ |= (pSrc->explicitCSIFeedbackTx << 1);
26669 tmp175__ |= (pSrc->antennaIndicesFeedbackTx << 2);
26670 tmp175__ |= (pSrc->explicitCSIFeedback << 3);
26671 tmp175__ |= (pSrc->antennaIndicesFeedback << 4);
26672 tmp175__ |= (pSrc->rxAS << 5);
26673 tmp175__ |= (pSrc->txSoundingPPDUs << 6);
26674 tmp175__ |= (pSrc->reserved5 << 7);
26675 if (unlikely(nBuf < 1))
26676 return DOT11F_INCOMPLETE_IE;
26677
26678 *pBuf = tmp175__;
26679 *pnConsumed += 1;
26680 pBuf += 1;
26681 nBuf -= 1 ;
26682 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->rsvd), pSrc->num_rsvd);
26683 *pnConsumed += pSrc->num_rsvd;
26684 /* fieldsEndFlag = 1 */
26685 break;
26686 }
26687 (void)pCtx;
26688 if (pIeLen) {
26689 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
26690 }
26691 return DOT11F_PARSE_SUCCESS;
26692 } /* End dot11f_pack_ie_ht_caps. */
26693
dot11f_pack_ie_ht_info(tpAniSirGlobal pCtx,tDot11fIEHTInfo * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)26694 uint32_t dot11f_pack_ie_ht_info(tpAniSirGlobal pCtx,
26695 tDot11fIEHTInfo *pSrc,
26696 uint8_t *pBuf,
26697 uint32_t nBuf,
26698 uint32_t *pnConsumed)
26699 {
26700 uint8_t *pIeLen = 0;
26701 uint32_t nConsumedOnEntry = *pnConsumed;
26702 uint32_t nNeeded = 0U;
26703 uint8_t tmp176__;
26704 uint16_t tmp177__;
26705 uint16_t tmp178__;
26706 nNeeded += (pSrc->num_rsvd + 22);
26707 while (pSrc->present) {
26708 if (nNeeded > nBuf)
26709 return DOT11F_BUFFER_OVERFLOW;
26710 *pBuf = 61;
26711 ++pBuf; ++(*pnConsumed);
26712 pIeLen = pBuf;
26713 ++pBuf; ++(*pnConsumed);
26714 *pBuf = pSrc->primaryChannel;
26715 *pnConsumed += 1;
26716 pBuf += 1;
26717 tmp176__ = 0U;
26718 tmp176__ |= (pSrc->secondaryChannelOffset << 0);
26719 tmp176__ |= (pSrc->recommendedTxWidthSet << 2);
26720 tmp176__ |= (pSrc->rifsMode << 3);
26721 tmp176__ |= (pSrc->controlledAccessOnly << 4);
26722 tmp176__ |= (pSrc->serviceIntervalGranularity << 5);
26723 if (unlikely(nBuf < 1))
26724 return DOT11F_INCOMPLETE_IE;
26725
26726 *pBuf = tmp176__;
26727 *pnConsumed += 1;
26728 pBuf += 1;
26729 nBuf -= 1 ;
26730 tmp177__ = 0U;
26731 tmp177__ |= (pSrc->opMode << 0);
26732 tmp177__ |= (pSrc->nonGFDevicesPresent << 2);
26733 tmp177__ |= (pSrc->transmitBurstLimit << 3);
26734 tmp177__ |= (pSrc->obssNonHTStaPresent << 4);
26735 tmp177__ |= (pSrc->chan_center_freq_seg2 << 5);
26736 tmp177__ |= (pSrc->reserved << 13);
26737 if (unlikely(nBuf < 2))
26738 return DOT11F_INCOMPLETE_IE;
26739
26740 frameshtons(pCtx, pBuf, tmp177__, 0);
26741 *pnConsumed += 2;
26742 pBuf += 2;
26743 nBuf -= 2 ;
26744 tmp178__ = 0U;
26745 tmp178__ |= (pSrc->basicSTBCMCS << 0);
26746 tmp178__ |= (pSrc->dualCTSProtection << 7);
26747 tmp178__ |= (pSrc->secondaryBeacon << 8);
26748 tmp178__ |= (pSrc->lsigTXOPProtectionFullSupport << 9);
26749 tmp178__ |= (pSrc->pcoActive << 10);
26750 tmp178__ |= (pSrc->pcoPhase << 11);
26751 tmp178__ |= (pSrc->reserved2 << 12);
26752 if (unlikely(nBuf < 2))
26753 return DOT11F_INCOMPLETE_IE;
26754
26755 frameshtons(pCtx, pBuf, tmp178__, 0);
26756 *pnConsumed += 2;
26757 pBuf += 2;
26758 nBuf -= 2 ;
26759 DOT11F_MEMCPY(pCtx, pBuf, pSrc->basicMCSSet, 16);
26760 *pnConsumed += 16;
26761 pBuf += 16;
26762 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->rsvd), pSrc->num_rsvd);
26763 *pnConsumed += pSrc->num_rsvd;
26764 /* fieldsEndFlag = 1 */
26765 break;
26766 }
26767 (void)pCtx;
26768 if (pIeLen) {
26769 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
26770 }
26771 return DOT11F_PARSE_SUCCESS;
26772 } /* End dot11f_pack_ie_ht_info. */
26773
dot11f_pack_ie_link_identifier(tpAniSirGlobal pCtx,tDot11fIELinkIdentifier * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)26774 uint32_t dot11f_pack_ie_link_identifier(tpAniSirGlobal pCtx,
26775 tDot11fIELinkIdentifier *pSrc,
26776 uint8_t *pBuf,
26777 uint32_t nBuf,
26778 uint32_t *pnConsumed)
26779 {
26780 uint8_t *pIeLen = 0;
26781 uint32_t nConsumedOnEntry = *pnConsumed;
26782 uint32_t nNeeded = 0U;
26783 nNeeded += 18;
26784 while (pSrc->present) {
26785 if (nNeeded > nBuf)
26786 return DOT11F_BUFFER_OVERFLOW;
26787 *pBuf = 101;
26788 ++pBuf; ++(*pnConsumed);
26789 pIeLen = pBuf;
26790 ++pBuf; ++(*pnConsumed);
26791 DOT11F_MEMCPY(pCtx, pBuf, pSrc->bssid, 6);
26792 *pnConsumed += 6;
26793 pBuf += 6;
26794 DOT11F_MEMCPY(pCtx, pBuf, pSrc->InitStaAddr, 6);
26795 *pnConsumed += 6;
26796 pBuf += 6;
26797 DOT11F_MEMCPY(pCtx, pBuf, pSrc->RespStaAddr, 6);
26798 *pnConsumed += 6;
26799 /* fieldsEndFlag = 1 */
26800 break;
26801 }
26802 (void)pCtx;
26803 if (pIeLen) {
26804 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
26805 }
26806 return DOT11F_PARSE_SUCCESS;
26807 } /* End dot11f_pack_ie_link_identifier. */
26808
dot11f_pack_ie_MBO_IE(tpAniSirGlobal pCtx,tDot11fIEMBO_IE * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)26809 uint32_t dot11f_pack_ie_MBO_IE(tpAniSirGlobal pCtx,
26810 tDot11fIEMBO_IE *pSrc,
26811 uint8_t *pBuf,
26812 uint32_t nBuf,
26813 uint32_t *pnConsumed)
26814 {
26815 uint8_t *pIeLen = 0;
26816 uint32_t n, idx = 0, idxlast;
26817 uint32_t nConsumedSoFar, nConsumedNow;
26818 uint32_t status = DOT11F_PARSE_SUCCESS;
26819 uint32_t nNeeded = 0U;
26820 status = dot11f_get_packed_ie_MBO_IE(pCtx, pSrc, &nNeeded);
26821 if (!DOT11F_SUCCEEDED(status))
26822 return status;
26823 if (nNeeded > nBuf)
26824 return DOT11F_BUFFER_OVERFLOW;
26825 (void)pCtx;
26826 if (pSrc->present) {
26827 do {
26828 nConsumedSoFar = *pnConsumed;
26829 *pBuf = 221;
26830 ++pBuf; --nBuf; ++(*pnConsumed);
26831 pIeLen = pBuf;
26832 ++pBuf; --nBuf; ++(*pnConsumed);
26833 *pBuf = 0x50;
26834 ++pBuf; --nBuf; ++(*pnConsumed);
26835 *pBuf = 0x6f;
26836 ++pBuf; --nBuf; ++(*pnConsumed);
26837 *pBuf = 0x9a;
26838 ++pBuf; --nBuf; ++(*pnConsumed);
26839 *pBuf = 0x16;
26840 ++pBuf; --nBuf; ++(*pnConsumed);
26841 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
26842 nConsumedNow = *pnConsumed;
26843 idxlast = idx;
26844 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
26845 pnConsumed,
26846 TLVS_MBO_IE +
26847 idx, &idx);
26848 nConsumedNow = *pnConsumed - nConsumedNow;
26849 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
26850 pBuf += nConsumedNow;
26851 nBuf -= nConsumedNow;
26852 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
26853 }
26854 return status;
26855 } /* End dot11f_pack_ie_MBO_IE. */
26856
dot11f_pack_ie_measurement_report(tpAniSirGlobal pCtx,tDot11fIEMeasurementReport * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)26857 uint32_t dot11f_pack_ie_measurement_report(tpAniSirGlobal pCtx,
26858 tDot11fIEMeasurementReport *pSrc,
26859 uint8_t *pBuf,
26860 uint32_t nBuf,
26861 uint32_t *pnConsumed)
26862 {
26863 uint8_t *pIeLen = 0;
26864 uint32_t nConsumedOnEntry = *pnConsumed;
26865 uint32_t nNeeded = 0U;
26866 uint8_t tmp179__;
26867 uint8_t tmp180__;
26868 uint8_t tmp181__;
26869 uint32_t status = DOT11F_PARSE_SUCCESS;
26870 status = dot11f_get_packed_ie_measurement_report(pCtx, pSrc, &nNeeded);
26871 if (!DOT11F_SUCCEEDED(status))
26872 return status;
26873 while (pSrc->present) {
26874 if (nNeeded > nBuf)
26875 return DOT11F_BUFFER_OVERFLOW;
26876 *pBuf = 39;
26877 ++pBuf; ++(*pnConsumed);
26878 pIeLen = pBuf;
26879 ++pBuf; ++(*pnConsumed);
26880 *pBuf = pSrc->token;
26881 *pnConsumed += 1;
26882 pBuf += 1;
26883 tmp179__ = 0U;
26884 tmp179__ |= (pSrc->late << 0);
26885 tmp179__ |= (pSrc->incapable << 1);
26886 tmp179__ |= (pSrc->refused << 2);
26887 tmp179__ |= (pSrc->unused << 3);
26888 if (unlikely(nBuf < 1))
26889 return DOT11F_INCOMPLETE_IE;
26890
26891 *pBuf = tmp179__;
26892 *pnConsumed += 1;
26893 pBuf += 1;
26894 nBuf -= 1 ;
26895 *pBuf = pSrc->type;
26896 *pnConsumed += 1;
26897 pBuf += 1;
26898 if (pSrc->type) {
26899 switch (pSrc->type) {
26900 case 0:
26901 *pBuf = pSrc->report.Basic.channel;
26902 *pnConsumed += 1;
26903 pBuf += 1;
26904 frameshtonq(pCtx, pBuf, pSrc->report.Basic.meas_start_time, 0);
26905 *pnConsumed += 8;
26906 pBuf += 8;
26907 frameshtons(pCtx, pBuf, pSrc->report.Basic.meas_duration, 0);
26908 *pnConsumed += 2;
26909 pBuf += 2;
26910 tmp180__ = 0U;
26911 tmp180__ |= (pSrc->report.Basic.bss << 0);
26912 tmp180__ |= (pSrc->report.Basic.ofdm_preamble << 1);
26913 tmp180__ |= (pSrc->report.Basic.unid_signal << 2);
26914 tmp180__ |= (pSrc->report.Basic.rader << 3);
26915 tmp180__ |= (pSrc->report.Basic.unmeasured << 4);
26916 tmp180__ |= (pSrc->report.Basic.unused << 5);
26917 if (unlikely(nBuf < 1))
26918 return DOT11F_INCOMPLETE_IE;
26919
26920 *pBuf = tmp180__;
26921 *pnConsumed += 1;
26922 /* fieldsEndFlag = 1 */
26923 nBuf -= 1 ;
26924 break;
26925 case 1:
26926 *pBuf = pSrc->report.CCA.channel;
26927 *pnConsumed += 1;
26928 pBuf += 1;
26929 frameshtonq(pCtx, pBuf, pSrc->report.CCA.meas_start_time, 0);
26930 *pnConsumed += 8;
26931 pBuf += 8;
26932 frameshtons(pCtx, pBuf, pSrc->report.CCA.meas_duration, 0);
26933 *pnConsumed += 2;
26934 pBuf += 2;
26935 *pBuf = pSrc->report.CCA.cca_busy_fraction;
26936 *pnConsumed += 1;
26937 /* fieldsEndFlag = 1 */
26938 break;
26939 case 2:
26940 *pBuf = pSrc->report.RPIHistogram.channel;
26941 *pnConsumed += 1;
26942 pBuf += 1;
26943 frameshtonq(pCtx, pBuf, pSrc->report.RPIHistogram.meas_start_time, 0);
26944 *pnConsumed += 8;
26945 pBuf += 8;
26946 frameshtons(pCtx, pBuf, pSrc->report.RPIHistogram.meas_duration, 0);
26947 *pnConsumed += 2;
26948 pBuf += 2;
26949 *pBuf = pSrc->report.RPIHistogram.rpi0_density;
26950 *pnConsumed += 1;
26951 pBuf += 1;
26952 *pBuf = pSrc->report.RPIHistogram.rpi1_density;
26953 *pnConsumed += 1;
26954 pBuf += 1;
26955 *pBuf = pSrc->report.RPIHistogram.rpi2_density;
26956 *pnConsumed += 1;
26957 pBuf += 1;
26958 *pBuf = pSrc->report.RPIHistogram.rpi3_density;
26959 *pnConsumed += 1;
26960 pBuf += 1;
26961 *pBuf = pSrc->report.RPIHistogram.rpi4_density;
26962 *pnConsumed += 1;
26963 pBuf += 1;
26964 *pBuf = pSrc->report.RPIHistogram.rpi5_density;
26965 *pnConsumed += 1;
26966 pBuf += 1;
26967 *pBuf = pSrc->report.RPIHistogram.rpi6_density;
26968 *pnConsumed += 1;
26969 pBuf += 1;
26970 *pBuf = pSrc->report.RPIHistogram.rpi7_density;
26971 *pnConsumed += 1;
26972 /* fieldsEndFlag = 1 */
26973 break;
26974 case 3:
26975 *pBuf = pSrc->report.channel_load_report.op_class;
26976 *pnConsumed += 1;
26977 pBuf += 1;
26978 *pBuf = pSrc->report.channel_load_report.channel;
26979 *pnConsumed += 1;
26980 pBuf += 1;
26981 frameshtonq(pCtx, pBuf, pSrc->report.channel_load_report.meas_start_time, 0);
26982 *pnConsumed += 8;
26983 pBuf += 8;
26984 frameshtons(pCtx, pBuf, pSrc->report.channel_load_report.meas_duration, 0);
26985 *pnConsumed += 2;
26986 pBuf += 2;
26987 *pBuf = pSrc->report.channel_load_report.chan_load;
26988 *pnConsumed += 1;
26989 pBuf += 1;
26990 status = pack_core(pCtx,
26991 (uint8_t *)pSrc,
26992 pBuf,
26993 nBuf,
26994 pnConsumed,
26995 FFS_reportchannel_load_report,
26996 IES_reportchannel_load_report);
26997 break;
26998 case 5:
26999 *pBuf = pSrc->report.Beacon.regClass;
27000 *pnConsumed += 1;
27001 pBuf += 1;
27002 *pBuf = pSrc->report.Beacon.channel;
27003 *pnConsumed += 1;
27004 pBuf += 1;
27005 frameshtonq(pCtx, pBuf, pSrc->report.Beacon.meas_start_time, 0);
27006 *pnConsumed += 8;
27007 pBuf += 8;
27008 frameshtons(pCtx, pBuf, pSrc->report.Beacon.meas_duration, 0);
27009 *pnConsumed += 2;
27010 pBuf += 2;
27011 tmp181__ = 0U;
27012 tmp181__ |= (pSrc->report.Beacon.condensed_PHY << 0);
27013 tmp181__ |= (pSrc->report.Beacon.reported_frame_type << 7);
27014 if (unlikely(nBuf < 1))
27015 return DOT11F_INCOMPLETE_IE;
27016
27017 *pBuf = tmp181__;
27018 *pnConsumed += 1;
27019 pBuf += 1;
27020 nBuf -= 1 ;
27021 *pBuf = pSrc->report.Beacon.RCPI;
27022 *pnConsumed += 1;
27023 pBuf += 1;
27024 *pBuf = pSrc->report.Beacon.RSNI;
27025 *pnConsumed += 1;
27026 pBuf += 1;
27027 DOT11F_MEMCPY(pCtx, pBuf, pSrc->report.Beacon.BSSID, 6);
27028 *pnConsumed += 6;
27029 pBuf += 6;
27030 *pBuf = pSrc->report.Beacon.antenna_id;
27031 *pnConsumed += 1;
27032 pBuf += 1;
27033 frameshtonl(pCtx, pBuf, pSrc->report.Beacon.parent_TSF, 0);
27034 *pnConsumed += 4;
27035 pBuf += 4;
27036 status = pack_core(pCtx,
27037 (uint8_t *)pSrc,
27038 pBuf,
27039 nBuf,
27040 pnConsumed,
27041 FFS_reportBeacon,
27042 IES_reportBeacon);
27043 break;
27044 case 7:
27045 frameshtons(pCtx, pBuf, pSrc->report.sta_stats.meas_duration, 0);
27046 *pnConsumed += 2;
27047 pBuf += 2;
27048 *pBuf = pSrc->report.sta_stats.group_id;
27049 *pnConsumed += 1;
27050 pBuf += 1;
27051 switch (pSrc->report.sta_stats.group_id) {
27052 case 0:
27053 frameshtonl(pCtx, pBuf, pSrc->report.sta_stats.statsgroupdata.dot11_counter_stats.transmitted_fragment_count, 0);
27054 *pnConsumed += 4;
27055 pBuf += 4;
27056 frameshtonl(pCtx, pBuf, pSrc->report.sta_stats.statsgroupdata.dot11_counter_stats.group_transmitted_frame_count, 0);
27057 *pnConsumed += 4;
27058 pBuf += 4;
27059 frameshtonl(pCtx, pBuf, pSrc->report.sta_stats.statsgroupdata.dot11_counter_stats.failed_count, 0);
27060 *pnConsumed += 4;
27061 pBuf += 4;
27062 frameshtonl(pCtx, pBuf, pSrc->report.sta_stats.statsgroupdata.dot11_counter_stats.received_fragment_count, 0);
27063 *pnConsumed += 4;
27064 pBuf += 4;
27065 frameshtonl(pCtx, pBuf, pSrc->report.sta_stats.statsgroupdata.dot11_counter_stats.group_received_frame_count, 0);
27066 *pnConsumed += 4;
27067 pBuf += 4;
27068 frameshtonl(pCtx, pBuf, pSrc->report.sta_stats.statsgroupdata.dot11_counter_stats.fcs_error_count, 0);
27069 *pnConsumed += 4;
27070 pBuf += 4;
27071 frameshtonl(pCtx, pBuf, pSrc->report.sta_stats.statsgroupdata.dot11_counter_stats.transmitted_frame_count, 0);
27072 *pnConsumed += 4;
27073 pBuf += 4;
27074 break;
27075 case 1:
27076 frameshtonl(pCtx, pBuf, pSrc->report.sta_stats.statsgroupdata.dot11_mac_stats.retry_count, 0);
27077 *pnConsumed += 4;
27078 pBuf += 4;
27079 frameshtonl(pCtx, pBuf, pSrc->report.sta_stats.statsgroupdata.dot11_mac_stats.multiple_retry_count, 0);
27080 *pnConsumed += 4;
27081 pBuf += 4;
27082 frameshtonl(pCtx, pBuf, pSrc->report.sta_stats.statsgroupdata.dot11_mac_stats.frame_duplicate_count, 0);
27083 *pnConsumed += 4;
27084 pBuf += 4;
27085 frameshtonl(pCtx, pBuf, pSrc->report.sta_stats.statsgroupdata.dot11_mac_stats.rts_success_count, 0);
27086 *pnConsumed += 4;
27087 pBuf += 4;
27088 frameshtonl(pCtx, pBuf, pSrc->report.sta_stats.statsgroupdata.dot11_mac_stats.rts_failure_count, 0);
27089 *pnConsumed += 4;
27090 pBuf += 4;
27091 frameshtonl(pCtx, pBuf, pSrc->report.sta_stats.statsgroupdata.dot11_mac_stats.ack_failure_count, 0);
27092 *pnConsumed += 4;
27093 pBuf += 4;
27094 break;
27095 case 2:
27096 frameshtonl(pCtx, pBuf, pSrc->report.sta_stats.statsgroupdata.dot11_qos_counter.qos_transmitted_fragment_count, 0);
27097 *pnConsumed += 4;
27098 pBuf += 4;
27099 frameshtonl(pCtx, pBuf, pSrc->report.sta_stats.statsgroupdata.dot11_qos_counter.qos_failed_count, 0);
27100 *pnConsumed += 4;
27101 pBuf += 4;
27102 frameshtonl(pCtx, pBuf, pSrc->report.sta_stats.statsgroupdata.dot11_qos_counter.qos_retry_count, 0);
27103 *pnConsumed += 4;
27104 pBuf += 4;
27105 frameshtonl(pCtx, pBuf, pSrc->report.sta_stats.statsgroupdata.dot11_qos_counter.qos_multiple_retry_count, 0);
27106 *pnConsumed += 4;
27107 pBuf += 4;
27108 frameshtonl(pCtx, pBuf, pSrc->report.sta_stats.statsgroupdata.dot11_qos_counter.qos_frame_duplicate_count, 0);
27109 *pnConsumed += 4;
27110 pBuf += 4;
27111 frameshtonl(pCtx, pBuf, pSrc->report.sta_stats.statsgroupdata.dot11_qos_counter.qos_rts_success_count, 0);
27112 *pnConsumed += 4;
27113 pBuf += 4;
27114 frameshtonl(pCtx, pBuf, pSrc->report.sta_stats.statsgroupdata.dot11_qos_counter.qos_rts_failure_count, 0);
27115 *pnConsumed += 4;
27116 pBuf += 4;
27117 frameshtonl(pCtx, pBuf, pSrc->report.sta_stats.statsgroupdata.dot11_qos_counter.qos_ack_failure_count, 0);
27118 *pnConsumed += 4;
27119 pBuf += 4;
27120 frameshtonl(pCtx, pBuf, pSrc->report.sta_stats.statsgroupdata.dot11_qos_counter.qos_received_fragment_count, 0);
27121 *pnConsumed += 4;
27122 pBuf += 4;
27123 frameshtonl(pCtx, pBuf, pSrc->report.sta_stats.statsgroupdata.dot11_qos_counter.qos_transmitted_frame_count, 0);
27124 *pnConsumed += 4;
27125 pBuf += 4;
27126 frameshtonl(pCtx, pBuf, pSrc->report.sta_stats.statsgroupdata.dot11_qos_counter.qos_discarded_frame_count, 0);
27127 *pnConsumed += 4;
27128 pBuf += 4;
27129 frameshtonl(pCtx, pBuf, pSrc->report.sta_stats.statsgroupdata.dot11_qos_counter.qos_mpdus_received_count, 0);
27130 *pnConsumed += 4;
27131 pBuf += 4;
27132 frameshtonl(pCtx, pBuf, pSrc->report.sta_stats.statsgroupdata.dot11_qos_counter.qos_retries_received_count, 0);
27133 *pnConsumed += 4;
27134 pBuf += 4;
27135 break;
27136 case 10:
27137 *pBuf = pSrc->report.sta_stats.statsgroupdata.dot11_bss_average_access_delay.ap_average_access_delay;
27138 *pnConsumed += 1;
27139 pBuf += 1;
27140 *pBuf = pSrc->report.sta_stats.statsgroupdata.dot11_bss_average_access_delay.average_access_delay_besteffort;
27141 *pnConsumed += 1;
27142 pBuf += 1;
27143 *pBuf = pSrc->report.sta_stats.statsgroupdata.dot11_bss_average_access_delay.average_access_delay_background;
27144 *pnConsumed += 1;
27145 pBuf += 1;
27146 *pBuf = pSrc->report.sta_stats.statsgroupdata.dot11_bss_average_access_delay.average_access_delay_video;
27147 *pnConsumed += 1;
27148 pBuf += 1;
27149 *pBuf = pSrc->report.sta_stats.statsgroupdata.dot11_bss_average_access_delay.average_access_delay_voice;
27150 *pnConsumed += 1;
27151 pBuf += 1;
27152 frameshtons(pCtx, pBuf, pSrc->report.sta_stats.statsgroupdata.dot11_bss_average_access_delay.station_count, 0);
27153 *pnConsumed += 2;
27154 pBuf += 2;
27155 *pBuf = pSrc->report.sta_stats.statsgroupdata.dot11_bss_average_access_delay.channel_utilization;
27156 *pnConsumed += 1;
27157 pBuf += 1;
27158 break;
27159 }
27160 status = pack_core(pCtx,
27161 (uint8_t *)pSrc,
27162 pBuf,
27163 nBuf,
27164 pnConsumed,
27165 FFS_reportsta_stats,
27166 IES_reportsta_stats);
27167 break;
27168 }
27169 } else {
27170 break;
27171 }
27172 break;
27173 }
27174 (void)pCtx;
27175 if (pIeLen) {
27176 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
27177 }
27178 return status;
27179 } /* End dot11f_pack_ie_measurement_report. */
27180
dot11f_pack_ie_measurement_request(tpAniSirGlobal pCtx,tDot11fIEMeasurementRequest * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)27181 uint32_t dot11f_pack_ie_measurement_request(tpAniSirGlobal pCtx,
27182 tDot11fIEMeasurementRequest *pSrc,
27183 uint8_t *pBuf,
27184 uint32_t nBuf,
27185 uint32_t *pnConsumed)
27186 {
27187 uint8_t *pIeLen = 0;
27188 uint32_t nConsumedOnEntry = *pnConsumed;
27189 uint32_t nNeeded = 0U;
27190 uint8_t tmp182__;
27191 uint32_t status = DOT11F_PARSE_SUCCESS;
27192 status = dot11f_get_packed_ie_measurement_request(pCtx, pSrc, &nNeeded);
27193 if (!DOT11F_SUCCEEDED(status))
27194 return status;
27195 while (pSrc->present) {
27196 if (nNeeded > nBuf)
27197 return DOT11F_BUFFER_OVERFLOW;
27198 *pBuf = 38;
27199 ++pBuf; ++(*pnConsumed);
27200 pIeLen = pBuf;
27201 ++pBuf; ++(*pnConsumed);
27202 *pBuf = pSrc->measurement_token;
27203 *pnConsumed += 1;
27204 pBuf += 1;
27205 tmp182__ = 0U;
27206 tmp182__ |= (pSrc->parallel << 0);
27207 tmp182__ |= (pSrc->enable << 1);
27208 tmp182__ |= (pSrc->request << 2);
27209 tmp182__ |= (pSrc->report << 3);
27210 tmp182__ |= (pSrc->durationMandatory << 4);
27211 tmp182__ |= (pSrc->unused << 5);
27212 if (unlikely(nBuf < 1))
27213 return DOT11F_INCOMPLETE_IE;
27214
27215 *pBuf = tmp182__;
27216 *pnConsumed += 1;
27217 pBuf += 1;
27218 nBuf -= 1 ;
27219 *pBuf = pSrc->measurement_type;
27220 *pnConsumed += 1;
27221 pBuf += 1;
27222 switch (pSrc->measurement_type) {
27223 case 0:
27224 *pBuf = pSrc->measurement_request.Basic.channel_no;
27225 *pnConsumed += 1;
27226 pBuf += 1;
27227 DOT11F_MEMCPY(pCtx, pBuf, pSrc->measurement_request.Basic.meas_start_time, 8);
27228 *pnConsumed += 8;
27229 pBuf += 8;
27230 frameshtons(pCtx, pBuf, pSrc->measurement_request.Basic.meas_duration, 0);
27231 *pnConsumed += 2;
27232 /* fieldsEndFlag = 1 */
27233 break;
27234 case 1:
27235 *pBuf = pSrc->measurement_request.CCA.channel_no;
27236 *pnConsumed += 1;
27237 pBuf += 1;
27238 DOT11F_MEMCPY(pCtx, pBuf, pSrc->measurement_request.CCA.meas_start_time, 8);
27239 *pnConsumed += 8;
27240 pBuf += 8;
27241 frameshtons(pCtx, pBuf, pSrc->measurement_request.CCA.meas_duration, 0);
27242 *pnConsumed += 2;
27243 /* fieldsEndFlag = 1 */
27244 break;
27245 case 2:
27246 *pBuf = pSrc->measurement_request.RPIHistogram.channel_no;
27247 *pnConsumed += 1;
27248 pBuf += 1;
27249 DOT11F_MEMCPY(pCtx, pBuf, pSrc->measurement_request.RPIHistogram.meas_start_time, 8);
27250 *pnConsumed += 8;
27251 pBuf += 8;
27252 frameshtons(pCtx, pBuf, pSrc->measurement_request.RPIHistogram.meas_duration, 0);
27253 *pnConsumed += 2;
27254 /* fieldsEndFlag = 1 */
27255 break;
27256 case 3:
27257 *pBuf = pSrc->measurement_request.channel_load.op_class;
27258 *pnConsumed += 1;
27259 pBuf += 1;
27260 *pBuf = pSrc->measurement_request.channel_load.channel;
27261 *pnConsumed += 1;
27262 pBuf += 1;
27263 frameshtons(pCtx, pBuf, pSrc->measurement_request.channel_load.randomization_intv, 0);
27264 *pnConsumed += 2;
27265 pBuf += 2;
27266 frameshtons(pCtx, pBuf, pSrc->measurement_request.channel_load.meas_duration, 0);
27267 *pnConsumed += 2;
27268 pBuf += 2;
27269 status = pack_core(pCtx,
27270 (uint8_t *)pSrc,
27271 pBuf,
27272 nBuf,
27273 pnConsumed,
27274 FFS_measurement_requestchannel_load,
27275 IES_measurement_requestchannel_load);
27276 break;
27277 case 5:
27278 *pBuf = pSrc->measurement_request.Beacon.regClass;
27279 *pnConsumed += 1;
27280 pBuf += 1;
27281 *pBuf = pSrc->measurement_request.Beacon.channel;
27282 *pnConsumed += 1;
27283 pBuf += 1;
27284 frameshtons(pCtx, pBuf, pSrc->measurement_request.Beacon.randomization, 0);
27285 *pnConsumed += 2;
27286 pBuf += 2;
27287 frameshtons(pCtx, pBuf, pSrc->measurement_request.Beacon.meas_duration, 0);
27288 *pnConsumed += 2;
27289 pBuf += 2;
27290 *pBuf = pSrc->measurement_request.Beacon.meas_mode;
27291 *pnConsumed += 1;
27292 pBuf += 1;
27293 DOT11F_MEMCPY(pCtx, pBuf, pSrc->measurement_request.Beacon.BSSID, 6);
27294 *pnConsumed += 6;
27295 pBuf += 6;
27296 status = pack_core(pCtx,
27297 (uint8_t *)pSrc,
27298 pBuf,
27299 nBuf,
27300 pnConsumed,
27301 FFS_measurement_requestBeacon,
27302 IES_measurement_requestBeacon);
27303 break;
27304 case 8:
27305 *pBuf = pSrc->measurement_request.lci.loc_subject;
27306 *pnConsumed += 1;
27307 pBuf += 1;
27308 status = pack_core(pCtx,
27309 (uint8_t *)pSrc,
27310 pBuf,
27311 nBuf,
27312 pnConsumed,
27313 FFS_measurement_requestlci,
27314 IES_measurement_requestlci);
27315 break;
27316 case 16:
27317 frameshtons(pCtx, pBuf, pSrc->measurement_request.ftmrr.random_interval, 0);
27318 *pnConsumed += 2;
27319 pBuf += 2;
27320 *pBuf = pSrc->measurement_request.ftmrr.min_ap_count;
27321 *pnConsumed += 1;
27322 pBuf += 1;
27323 status = pack_core(pCtx,
27324 (uint8_t *)pSrc,
27325 pBuf,
27326 nBuf,
27327 pnConsumed,
27328 FFS_measurement_requestftmrr,
27329 IES_measurement_requestftmrr);
27330 break;
27331 case 7:
27332 DOT11F_MEMCPY(pCtx, pBuf, pSrc->measurement_request.sta_stats.peer_mac_addr, 6);
27333 *pnConsumed += 6;
27334 pBuf += 6;
27335 frameshtons(pCtx, pBuf, pSrc->measurement_request.sta_stats.randomization, 0);
27336 *pnConsumed += 2;
27337 pBuf += 2;
27338 frameshtons(pCtx, pBuf, pSrc->measurement_request.sta_stats.meas_duration, 0);
27339 *pnConsumed += 2;
27340 pBuf += 2;
27341 *pBuf = pSrc->measurement_request.sta_stats.group_identity;
27342 *pnConsumed += 1;
27343 /* fieldsEndFlag = 1 */
27344 break;
27345 }
27346 break;
27347 }
27348 (void)pCtx;
27349 if (pIeLen) {
27350 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
27351 }
27352 return status;
27353 } /* End dot11f_pack_ie_measurement_request. */
27354
dot11f_pack_ie_mobility_domain(tpAniSirGlobal pCtx,tDot11fIEMobilityDomain * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)27355 uint32_t dot11f_pack_ie_mobility_domain(tpAniSirGlobal pCtx,
27356 tDot11fIEMobilityDomain *pSrc,
27357 uint8_t *pBuf,
27358 uint32_t nBuf,
27359 uint32_t *pnConsumed)
27360 {
27361 uint8_t *pIeLen = 0;
27362 uint32_t nConsumedOnEntry = *pnConsumed;
27363 uint32_t nNeeded = 0U;
27364 uint8_t tmp183__;
27365 nNeeded += 3;
27366 while (pSrc->present) {
27367 if (nNeeded > nBuf)
27368 return DOT11F_BUFFER_OVERFLOW;
27369 *pBuf = 54;
27370 ++pBuf; ++(*pnConsumed);
27371 pIeLen = pBuf;
27372 ++pBuf; ++(*pnConsumed);
27373 frameshtons(pCtx, pBuf, pSrc->MDID, 0);
27374 *pnConsumed += 2;
27375 pBuf += 2;
27376 tmp183__ = 0U;
27377 tmp183__ |= (pSrc->overDSCap << 0);
27378 tmp183__ |= (pSrc->resourceReqCap << 1);
27379 tmp183__ |= (pSrc->reserved << 2);
27380 if (unlikely(nBuf < 1))
27381 return DOT11F_INCOMPLETE_IE;
27382
27383 *pBuf = tmp183__;
27384 *pnConsumed += 1;
27385 /* fieldsEndFlag = 1 */
27386 nBuf -= 1 ;
27387 break;
27388 }
27389 (void)pCtx;
27390 if (pIeLen) {
27391 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
27392 }
27393 return DOT11F_PARSE_SUCCESS;
27394 } /* End dot11f_pack_ie_mobility_domain. */
27395
dot11f_pack_ie_neighbor_report(tpAniSirGlobal pCtx,tDot11fIENeighborReport * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)27396 uint32_t dot11f_pack_ie_neighbor_report(tpAniSirGlobal pCtx,
27397 tDot11fIENeighborReport *pSrc,
27398 uint8_t *pBuf,
27399 uint32_t nBuf,
27400 uint32_t *pnConsumed)
27401 {
27402 uint8_t *pIeLen = 0;
27403 uint32_t nConsumedOnEntry = *pnConsumed;
27404 uint32_t nNeeded = 0U;
27405 uint8_t tmp184__;
27406 uint8_t tmp185__;
27407 uint32_t status = DOT11F_PARSE_SUCCESS;
27408 status = dot11f_get_packed_ie_neighbor_report(pCtx, pSrc, &nNeeded);
27409 if (!DOT11F_SUCCEEDED(status))
27410 return status;
27411 while (pSrc->present) {
27412 if (nNeeded > nBuf)
27413 return DOT11F_BUFFER_OVERFLOW;
27414 *pBuf = 52;
27415 ++pBuf; --nBuf; ++(*pnConsumed);
27416 pIeLen = pBuf;
27417 ++pBuf; --nBuf; ++(*pnConsumed);
27418 DOT11F_MEMCPY(pCtx, pBuf, pSrc->bssid, 6);
27419 *pnConsumed += 6;
27420 pBuf += 6;
27421 tmp184__ = 0U;
27422 tmp184__ |= (pSrc->APReachability << 0);
27423 tmp184__ |= (pSrc->Security << 2);
27424 tmp184__ |= (pSrc->KeyScope << 3);
27425 tmp184__ |= (pSrc->SpecMgmtCap << 4);
27426 tmp184__ |= (pSrc->QosCap << 5);
27427 tmp184__ |= (pSrc->apsd << 6);
27428 tmp184__ |= (pSrc->rrm << 7);
27429 if (unlikely(nBuf < 1))
27430 return DOT11F_INCOMPLETE_IE;
27431
27432 *pBuf = tmp184__;
27433 *pnConsumed += 1;
27434 pBuf += 1;
27435 nBuf -= 1 ;
27436 tmp185__ = 0U;
27437 tmp185__ |= (pSrc->DelayedBA << 0);
27438 tmp185__ |= (pSrc->ImmBA << 1);
27439 tmp185__ |= (pSrc->MobilityDomain << 2);
27440 tmp185__ |= (pSrc->reserved << 3);
27441 if (unlikely(nBuf < 1))
27442 return DOT11F_INCOMPLETE_IE;
27443
27444 *pBuf = tmp185__;
27445 *pnConsumed += 1;
27446 pBuf += 1;
27447 nBuf -= 1 ;
27448 frameshtons(pCtx, pBuf, pSrc->reserved1, 0);
27449 *pnConsumed += 2;
27450 pBuf += 2;
27451 *pBuf = pSrc->regulatoryClass;
27452 *pnConsumed += 1;
27453 pBuf += 1;
27454 *pBuf = pSrc->channel;
27455 *pnConsumed += 1;
27456 pBuf += 1;
27457 *pBuf = pSrc->PhyType;
27458 *pnConsumed += 1;
27459 pBuf += 1;
27460 status = pack_core(pCtx,
27461 (uint8_t *)pSrc,
27462 pBuf,
27463 nBuf,
27464 pnConsumed,
27465 FFS_NeighborReport,
27466 IES_NeighborReport);
27467 break;
27468 }
27469 (void)pCtx;
27470 if (pIeLen) {
27471 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
27472 }
27473 return status;
27474 } /* End dot11f_pack_ie_neighbor_report. */
27475
dot11f_pack_ie_obss_scan_parameters(tpAniSirGlobal pCtx,tDot11fIEOBSSScanParameters * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)27476 uint32_t dot11f_pack_ie_obss_scan_parameters(tpAniSirGlobal pCtx,
27477 tDot11fIEOBSSScanParameters *pSrc,
27478 uint8_t *pBuf,
27479 uint32_t nBuf,
27480 uint32_t *pnConsumed)
27481 {
27482 uint8_t *pIeLen = 0;
27483 uint32_t nConsumedOnEntry = *pnConsumed;
27484 uint32_t nNeeded = 0U;
27485 nNeeded += 14;
27486 while (pSrc->present) {
27487 if (nNeeded > nBuf)
27488 return DOT11F_BUFFER_OVERFLOW;
27489 *pBuf = 74;
27490 ++pBuf; ++(*pnConsumed);
27491 pIeLen = pBuf;
27492 ++pBuf; ++(*pnConsumed);
27493 frameshtons(pCtx, pBuf, pSrc->obssScanPassiveDwell, 0);
27494 *pnConsumed += 2;
27495 pBuf += 2;
27496 frameshtons(pCtx, pBuf, pSrc->obssScanActiveDwell, 0);
27497 *pnConsumed += 2;
27498 pBuf += 2;
27499 frameshtons(pCtx, pBuf, pSrc->bssChannelWidthTriggerScanInterval, 0);
27500 *pnConsumed += 2;
27501 pBuf += 2;
27502 frameshtons(pCtx, pBuf, pSrc->obssScanPassiveTotalPerChannel, 0);
27503 *pnConsumed += 2;
27504 pBuf += 2;
27505 frameshtons(pCtx, pBuf, pSrc->obssScanActiveTotalPerChannel, 0);
27506 *pnConsumed += 2;
27507 pBuf += 2;
27508 frameshtons(pCtx, pBuf, pSrc->bssWidthChannelTransitionDelayFactor, 0);
27509 *pnConsumed += 2;
27510 pBuf += 2;
27511 frameshtons(pCtx, pBuf, pSrc->obssScanActivityThreshold, 0);
27512 *pnConsumed += 2;
27513 /* fieldsEndFlag = 1 */
27514 break;
27515 }
27516 (void)pCtx;
27517 if (pIeLen) {
27518 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
27519 }
27520 return DOT11F_PARSE_SUCCESS;
27521 } /* End dot11f_pack_ie_obss_scan_parameters. */
27522
dot11f_pack_ie_operating_mode(tpAniSirGlobal pCtx,tDot11fIEOperatingMode * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)27523 uint32_t dot11f_pack_ie_operating_mode(tpAniSirGlobal pCtx,
27524 tDot11fIEOperatingMode *pSrc,
27525 uint8_t *pBuf,
27526 uint32_t nBuf,
27527 uint32_t *pnConsumed)
27528 {
27529 uint8_t *pIeLen = 0;
27530 uint32_t nConsumedOnEntry = *pnConsumed;
27531 uint32_t nNeeded = 0U;
27532 uint8_t tmp186__;
27533 nNeeded += 1;
27534 while (pSrc->present) {
27535 if (nNeeded > nBuf)
27536 return DOT11F_BUFFER_OVERFLOW;
27537 *pBuf = 199;
27538 ++pBuf; ++(*pnConsumed);
27539 pIeLen = pBuf;
27540 ++pBuf; ++(*pnConsumed);
27541 tmp186__ = 0U;
27542 tmp186__ |= (pSrc->chanWidth << 0);
27543 tmp186__ |= (pSrc->vht_160_80p80_supp << 2);
27544 tmp186__ |= (pSrc->no_ldpc << 3);
27545 tmp186__ |= (pSrc->rxNSS << 4);
27546 tmp186__ |= (pSrc->rxNSSType << 7);
27547 if (unlikely(nBuf < 1))
27548 return DOT11F_INCOMPLETE_IE;
27549
27550 *pBuf = tmp186__;
27551 *pnConsumed += 1;
27552 /* fieldsEndFlag = 1 */
27553 nBuf -= 1 ;
27554 break;
27555 }
27556 (void)pCtx;
27557 if (pIeLen) {
27558 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
27559 }
27560 return DOT11F_PARSE_SUCCESS;
27561 } /* End dot11f_pack_ie_operating_mode. */
27562
dot11f_pack_ie_p2_p_assoc_req(tpAniSirGlobal pCtx,tDot11fIEP2PAssocReq * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)27563 uint32_t dot11f_pack_ie_p2_p_assoc_req(tpAniSirGlobal pCtx,
27564 tDot11fIEP2PAssocReq *pSrc,
27565 uint8_t *pBuf,
27566 uint32_t nBuf,
27567 uint32_t *pnConsumed)
27568 {
27569 uint8_t *pIeLen = 0;
27570 uint32_t n, idx = 0, idxlast;
27571 uint32_t nConsumedSoFar, nConsumedNow;
27572 uint32_t status = DOT11F_PARSE_SUCCESS;
27573 uint32_t nNeeded = 0U;
27574 status = dot11f_get_packed_iep2_p_assoc_req(pCtx, pSrc, &nNeeded);
27575 if (!DOT11F_SUCCEEDED(status))
27576 return status;
27577 if (nNeeded > nBuf)
27578 return DOT11F_BUFFER_OVERFLOW;
27579 (void)pCtx;
27580 if (pSrc->present) {
27581 do {
27582 nConsumedSoFar = *pnConsumed;
27583 *pBuf = 221;
27584 ++pBuf; --nBuf; ++(*pnConsumed);
27585 pIeLen = pBuf;
27586 ++pBuf; --nBuf; ++(*pnConsumed);
27587 *pBuf = 0x50;
27588 ++pBuf; --nBuf; ++(*pnConsumed);
27589 *pBuf = 0x6f;
27590 ++pBuf; --nBuf; ++(*pnConsumed);
27591 *pBuf = 0x9a;
27592 ++pBuf; --nBuf; ++(*pnConsumed);
27593 *pBuf = 0x9;
27594 ++pBuf; --nBuf; ++(*pnConsumed);
27595 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
27596 nConsumedNow = *pnConsumed;
27597 idxlast = idx;
27598 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
27599 pnConsumed,
27600 TLVS_P2PAssocReq +
27601 idx, &idx);
27602 nConsumedNow = *pnConsumed - nConsumedNow;
27603 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
27604 pBuf += nConsumedNow;
27605 nBuf -= nConsumedNow;
27606 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
27607 }
27608 return status;
27609 } /* End dot11f_pack_ie_p2_p_assoc_req. */
27610
dot11f_pack_ie_p2_p_assoc_res(tpAniSirGlobal pCtx,tDot11fIEP2PAssocRes * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)27611 uint32_t dot11f_pack_ie_p2_p_assoc_res(tpAniSirGlobal pCtx,
27612 tDot11fIEP2PAssocRes *pSrc,
27613 uint8_t *pBuf,
27614 uint32_t nBuf,
27615 uint32_t *pnConsumed)
27616 {
27617 uint8_t *pIeLen = 0;
27618 uint32_t n, idx = 0, idxlast;
27619 uint32_t nConsumedSoFar, nConsumedNow;
27620 uint32_t status = DOT11F_PARSE_SUCCESS;
27621 uint32_t nNeeded = 0U;
27622 status = dot11f_get_packed_iep2_p_assoc_res(pCtx, pSrc, &nNeeded);
27623 if (!DOT11F_SUCCEEDED(status))
27624 return status;
27625 if (nNeeded > nBuf)
27626 return DOT11F_BUFFER_OVERFLOW;
27627 (void)pCtx;
27628 if (pSrc->present) {
27629 do {
27630 nConsumedSoFar = *pnConsumed;
27631 *pBuf = 221;
27632 ++pBuf; --nBuf; ++(*pnConsumed);
27633 pIeLen = pBuf;
27634 ++pBuf; --nBuf; ++(*pnConsumed);
27635 *pBuf = 0x50;
27636 ++pBuf; --nBuf; ++(*pnConsumed);
27637 *pBuf = 0x6f;
27638 ++pBuf; --nBuf; ++(*pnConsumed);
27639 *pBuf = 0x9a;
27640 ++pBuf; --nBuf; ++(*pnConsumed);
27641 *pBuf = 0x9;
27642 ++pBuf; --nBuf; ++(*pnConsumed);
27643 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
27644 nConsumedNow = *pnConsumed;
27645 idxlast = idx;
27646 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
27647 pnConsumed,
27648 TLVS_P2PAssocRes +
27649 idx, &idx);
27650 nConsumedNow = *pnConsumed - nConsumedNow;
27651 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
27652 pBuf += nConsumedNow;
27653 nBuf -= nConsumedNow;
27654 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
27655 }
27656 return status;
27657 } /* End dot11f_pack_ie_p2_p_assoc_res. */
27658
dot11f_pack_ie_p2_p_beacon(tpAniSirGlobal pCtx,tDot11fIEP2PBeacon * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)27659 uint32_t dot11f_pack_ie_p2_p_beacon(tpAniSirGlobal pCtx,
27660 tDot11fIEP2PBeacon *pSrc,
27661 uint8_t *pBuf,
27662 uint32_t nBuf,
27663 uint32_t *pnConsumed)
27664 {
27665 uint8_t *pIeLen = 0;
27666 uint32_t n, idx = 0, idxlast;
27667 uint32_t nConsumedSoFar, nConsumedNow;
27668 uint32_t status = DOT11F_PARSE_SUCCESS;
27669 uint32_t nNeeded = 0U;
27670 status = dot11f_get_packed_iep2_p_beacon(pCtx, pSrc, &nNeeded);
27671 if (!DOT11F_SUCCEEDED(status))
27672 return status;
27673 if (nNeeded > nBuf)
27674 return DOT11F_BUFFER_OVERFLOW;
27675 (void)pCtx;
27676 if (pSrc->present) {
27677 do {
27678 nConsumedSoFar = *pnConsumed;
27679 *pBuf = 221;
27680 ++pBuf; --nBuf; ++(*pnConsumed);
27681 pIeLen = pBuf;
27682 ++pBuf; --nBuf; ++(*pnConsumed);
27683 *pBuf = 0x50;
27684 ++pBuf; --nBuf; ++(*pnConsumed);
27685 *pBuf = 0x6f;
27686 ++pBuf; --nBuf; ++(*pnConsumed);
27687 *pBuf = 0x9a;
27688 ++pBuf; --nBuf; ++(*pnConsumed);
27689 *pBuf = 0x9;
27690 ++pBuf; --nBuf; ++(*pnConsumed);
27691 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
27692 nConsumedNow = *pnConsumed;
27693 idxlast = idx;
27694 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
27695 pnConsumed,
27696 TLVS_P2PBeacon +
27697 idx, &idx);
27698 nConsumedNow = *pnConsumed - nConsumedNow;
27699 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
27700 pBuf += nConsumedNow;
27701 nBuf -= nConsumedNow;
27702 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
27703 }
27704 return status;
27705 } /* End dot11f_pack_ie_p2_p_beacon. */
27706
dot11f_pack_ie_p2_p_beacon_probe_res(tpAniSirGlobal pCtx,tDot11fIEP2PBeaconProbeRes * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)27707 uint32_t dot11f_pack_ie_p2_p_beacon_probe_res(tpAniSirGlobal pCtx,
27708 tDot11fIEP2PBeaconProbeRes *pSrc,
27709 uint8_t *pBuf,
27710 uint32_t nBuf,
27711 uint32_t *pnConsumed)
27712 {
27713 uint8_t *pIeLen = 0;
27714 uint32_t n, idx = 0, idxlast;
27715 uint32_t nConsumedSoFar, nConsumedNow;
27716 uint32_t status = DOT11F_PARSE_SUCCESS;
27717 uint32_t nNeeded = 0U;
27718 status = dot11f_get_packed_iep2_p_beacon_probe_res(pCtx, pSrc, &nNeeded);
27719 if (!DOT11F_SUCCEEDED(status))
27720 return status;
27721 if (nNeeded > nBuf)
27722 return DOT11F_BUFFER_OVERFLOW;
27723 (void)pCtx;
27724 if (pSrc->present) {
27725 do {
27726 nConsumedSoFar = *pnConsumed;
27727 *pBuf = 221;
27728 ++pBuf; --nBuf; ++(*pnConsumed);
27729 pIeLen = pBuf;
27730 ++pBuf; --nBuf; ++(*pnConsumed);
27731 *pBuf = 0x50;
27732 ++pBuf; --nBuf; ++(*pnConsumed);
27733 *pBuf = 0x6f;
27734 ++pBuf; --nBuf; ++(*pnConsumed);
27735 *pBuf = 0x9a;
27736 ++pBuf; --nBuf; ++(*pnConsumed);
27737 *pBuf = 0x9;
27738 ++pBuf; --nBuf; ++(*pnConsumed);
27739 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
27740 nConsumedNow = *pnConsumed;
27741 idxlast = idx;
27742 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
27743 pnConsumed,
27744 TLVS_P2PBeaconProbeRes +
27745 idx, &idx);
27746 nConsumedNow = *pnConsumed - nConsumedNow;
27747 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
27748 pBuf += nConsumedNow;
27749 nBuf -= nConsumedNow;
27750 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
27751 }
27752 return status;
27753 } /* End dot11f_pack_ie_p2_p_beacon_probe_res. */
27754
dot11f_pack_ie_p2_p_de_auth(tpAniSirGlobal pCtx,tDot11fIEP2PDeAuth * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)27755 uint32_t dot11f_pack_ie_p2_p_de_auth(tpAniSirGlobal pCtx,
27756 tDot11fIEP2PDeAuth *pSrc,
27757 uint8_t *pBuf,
27758 uint32_t nBuf,
27759 uint32_t *pnConsumed)
27760 {
27761 uint8_t *pIeLen = 0;
27762 uint32_t n, idx = 0, idxlast;
27763 uint32_t nConsumedSoFar, nConsumedNow;
27764 uint32_t status = DOT11F_PARSE_SUCCESS;
27765 uint32_t nNeeded = 0U;
27766 status = dot11f_get_packed_iep2_p_de_auth(pCtx, pSrc, &nNeeded);
27767 if (!DOT11F_SUCCEEDED(status))
27768 return status;
27769 if (nNeeded > nBuf)
27770 return DOT11F_BUFFER_OVERFLOW;
27771 (void)pCtx;
27772 if (pSrc->present) {
27773 do {
27774 nConsumedSoFar = *pnConsumed;
27775 *pBuf = 221;
27776 ++pBuf; --nBuf; ++(*pnConsumed);
27777 pIeLen = pBuf;
27778 ++pBuf; --nBuf; ++(*pnConsumed);
27779 *pBuf = 0x50;
27780 ++pBuf; --nBuf; ++(*pnConsumed);
27781 *pBuf = 0x6f;
27782 ++pBuf; --nBuf; ++(*pnConsumed);
27783 *pBuf = 0x9a;
27784 ++pBuf; --nBuf; ++(*pnConsumed);
27785 *pBuf = 0x9;
27786 ++pBuf; --nBuf; ++(*pnConsumed);
27787 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
27788 nConsumedNow = *pnConsumed;
27789 idxlast = idx;
27790 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
27791 pnConsumed,
27792 TLVS_P2PDeAuth +
27793 idx, &idx);
27794 nConsumedNow = *pnConsumed - nConsumedNow;
27795 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
27796 pBuf += nConsumedNow;
27797 nBuf -= nConsumedNow;
27798 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
27799 }
27800 return status;
27801 } /* End dot11f_pack_ie_p2_p_de_auth. */
27802
dot11f_pack_ie_p2_p_dis_assoc(tpAniSirGlobal pCtx,tDot11fIEP2PDisAssoc * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)27803 uint32_t dot11f_pack_ie_p2_p_dis_assoc(tpAniSirGlobal pCtx,
27804 tDot11fIEP2PDisAssoc *pSrc,
27805 uint8_t *pBuf,
27806 uint32_t nBuf,
27807 uint32_t *pnConsumed)
27808 {
27809 uint8_t *pIeLen = 0;
27810 uint32_t n, idx = 0, idxlast;
27811 uint32_t nConsumedSoFar, nConsumedNow;
27812 uint32_t status = DOT11F_PARSE_SUCCESS;
27813 uint32_t nNeeded = 0U;
27814 status = dot11f_get_packed_iep2_p_dis_assoc(pCtx, pSrc, &nNeeded);
27815 if (!DOT11F_SUCCEEDED(status))
27816 return status;
27817 if (nNeeded > nBuf)
27818 return DOT11F_BUFFER_OVERFLOW;
27819 (void)pCtx;
27820 if (pSrc->present) {
27821 do {
27822 nConsumedSoFar = *pnConsumed;
27823 *pBuf = 221;
27824 ++pBuf; --nBuf; ++(*pnConsumed);
27825 pIeLen = pBuf;
27826 ++pBuf; --nBuf; ++(*pnConsumed);
27827 *pBuf = 0x50;
27828 ++pBuf; --nBuf; ++(*pnConsumed);
27829 *pBuf = 0x6f;
27830 ++pBuf; --nBuf; ++(*pnConsumed);
27831 *pBuf = 0x9a;
27832 ++pBuf; --nBuf; ++(*pnConsumed);
27833 *pBuf = 0x9;
27834 ++pBuf; --nBuf; ++(*pnConsumed);
27835 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
27836 nConsumedNow = *pnConsumed;
27837 idxlast = idx;
27838 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
27839 pnConsumed,
27840 TLVS_P2PDisAssoc +
27841 idx, &idx);
27842 nConsumedNow = *pnConsumed - nConsumedNow;
27843 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
27844 pBuf += nConsumedNow;
27845 nBuf -= nConsumedNow;
27846 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
27847 }
27848 return status;
27849 } /* End dot11f_pack_ie_p2_p_dis_assoc. */
27850
dot11f_pack_ie_p2_pie_opaque(tpAniSirGlobal pCtx,tDot11fIEP2PIEOpaque * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)27851 uint32_t dot11f_pack_ie_p2_pie_opaque(tpAniSirGlobal pCtx,
27852 tDot11fIEP2PIEOpaque *pSrc,
27853 uint8_t *pBuf,
27854 uint32_t nBuf,
27855 uint32_t *pnConsumed)
27856 {
27857 uint8_t *pIeLen = 0;
27858 uint32_t nConsumedOnEntry = *pnConsumed;
27859 uint32_t nNeeded = 0U;
27860 nNeeded += pSrc->num_data;
27861 while (pSrc->present) {
27862 if (nNeeded > nBuf)
27863 return DOT11F_BUFFER_OVERFLOW;
27864 *pBuf = 221;
27865 ++pBuf; ++(*pnConsumed);
27866 pIeLen = pBuf;
27867 ++pBuf; ++(*pnConsumed);
27868 *pBuf = 0x50;
27869 ++pBuf; ++(*pnConsumed);
27870 *pBuf = 0x6f;
27871 ++pBuf; ++(*pnConsumed);
27872 *pBuf = 0x9a;
27873 ++pBuf; ++(*pnConsumed);
27874 *pBuf = 0x9;
27875 ++pBuf; ++(*pnConsumed);
27876 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->data), pSrc->num_data);
27877 *pnConsumed += pSrc->num_data;
27878 /* fieldsEndFlag = 1 */
27879 break;
27880 }
27881 (void)pCtx;
27882 if (pIeLen) {
27883 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
27884 }
27885 return DOT11F_PARSE_SUCCESS;
27886 } /* End dot11f_pack_ie_p2_pie_opaque. */
27887
dot11f_pack_ie_p2_p_probe_req(tpAniSirGlobal pCtx,tDot11fIEP2PProbeReq * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)27888 uint32_t dot11f_pack_ie_p2_p_probe_req(tpAniSirGlobal pCtx,
27889 tDot11fIEP2PProbeReq *pSrc,
27890 uint8_t *pBuf,
27891 uint32_t nBuf,
27892 uint32_t *pnConsumed)
27893 {
27894 uint8_t *pIeLen = 0;
27895 uint32_t n, idx = 0, idxlast;
27896 uint32_t nConsumedSoFar, nConsumedNow;
27897 uint32_t status = DOT11F_PARSE_SUCCESS;
27898 uint32_t nNeeded = 0U;
27899 status = dot11f_get_packed_iep2_p_probe_req(pCtx, pSrc, &nNeeded);
27900 if (!DOT11F_SUCCEEDED(status))
27901 return status;
27902 if (nNeeded > nBuf)
27903 return DOT11F_BUFFER_OVERFLOW;
27904 (void)pCtx;
27905 if (pSrc->present) {
27906 do {
27907 nConsumedSoFar = *pnConsumed;
27908 *pBuf = 221;
27909 ++pBuf; --nBuf; ++(*pnConsumed);
27910 pIeLen = pBuf;
27911 ++pBuf; --nBuf; ++(*pnConsumed);
27912 *pBuf = 0x50;
27913 ++pBuf; --nBuf; ++(*pnConsumed);
27914 *pBuf = 0x6f;
27915 ++pBuf; --nBuf; ++(*pnConsumed);
27916 *pBuf = 0x9a;
27917 ++pBuf; --nBuf; ++(*pnConsumed);
27918 *pBuf = 0x9;
27919 ++pBuf; --nBuf; ++(*pnConsumed);
27920 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
27921 nConsumedNow = *pnConsumed;
27922 idxlast = idx;
27923 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
27924 pnConsumed,
27925 TLVS_P2PProbeReq +
27926 idx, &idx);
27927 nConsumedNow = *pnConsumed - nConsumedNow;
27928 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
27929 pBuf += nConsumedNow;
27930 nBuf -= nConsumedNow;
27931 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
27932 }
27933 return status;
27934 } /* End dot11f_pack_ie_p2_p_probe_req. */
27935
dot11f_pack_ie_p2_p_probe_res(tpAniSirGlobal pCtx,tDot11fIEP2PProbeRes * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)27936 uint32_t dot11f_pack_ie_p2_p_probe_res(tpAniSirGlobal pCtx,
27937 tDot11fIEP2PProbeRes *pSrc,
27938 uint8_t *pBuf,
27939 uint32_t nBuf,
27940 uint32_t *pnConsumed)
27941 {
27942 uint8_t *pIeLen = 0;
27943 uint32_t n, idx = 0, idxlast;
27944 uint32_t nConsumedSoFar, nConsumedNow;
27945 uint32_t status = DOT11F_PARSE_SUCCESS;
27946 uint32_t nNeeded = 0U;
27947 status = dot11f_get_packed_iep2_p_probe_res(pCtx, pSrc, &nNeeded);
27948 if (!DOT11F_SUCCEEDED(status))
27949 return status;
27950 if (nNeeded > nBuf)
27951 return DOT11F_BUFFER_OVERFLOW;
27952 (void)pCtx;
27953 if (pSrc->present) {
27954 do {
27955 nConsumedSoFar = *pnConsumed;
27956 *pBuf = 221;
27957 ++pBuf; --nBuf; ++(*pnConsumed);
27958 pIeLen = pBuf;
27959 ++pBuf; --nBuf; ++(*pnConsumed);
27960 *pBuf = 0x50;
27961 ++pBuf; --nBuf; ++(*pnConsumed);
27962 *pBuf = 0x6f;
27963 ++pBuf; --nBuf; ++(*pnConsumed);
27964 *pBuf = 0x9a;
27965 ++pBuf; --nBuf; ++(*pnConsumed);
27966 *pBuf = 0x9;
27967 ++pBuf; --nBuf; ++(*pnConsumed);
27968 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
27969 nConsumedNow = *pnConsumed;
27970 idxlast = idx;
27971 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
27972 pnConsumed,
27973 TLVS_P2PProbeRes +
27974 idx, &idx);
27975 nConsumedNow = *pnConsumed - nConsumedNow;
27976 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
27977 pBuf += nConsumedNow;
27978 nBuf -= nConsumedNow;
27979 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
27980 }
27981 return status;
27982 } /* End dot11f_pack_ie_p2_p_probe_res. */
27983
dot11f_pack_ie_pti_control(tpAniSirGlobal pCtx,tDot11fIEPTIControl * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)27984 uint32_t dot11f_pack_ie_pti_control(tpAniSirGlobal pCtx,
27985 tDot11fIEPTIControl *pSrc,
27986 uint8_t *pBuf,
27987 uint32_t nBuf,
27988 uint32_t *pnConsumed)
27989 {
27990 uint8_t *pIeLen = 0;
27991 uint32_t nConsumedOnEntry = *pnConsumed;
27992 uint32_t nNeeded = 0U;
27993 nNeeded += 3;
27994 while (pSrc->present) {
27995 if (nNeeded > nBuf)
27996 return DOT11F_BUFFER_OVERFLOW;
27997 *pBuf = 105;
27998 ++pBuf; ++(*pnConsumed);
27999 pIeLen = pBuf;
28000 ++pBuf; ++(*pnConsumed);
28001 *pBuf = pSrc->tid;
28002 *pnConsumed += 1;
28003 pBuf += 1;
28004 frameshtons(pCtx, pBuf, pSrc->sequence_control, 0);
28005 *pnConsumed += 2;
28006 /* fieldsEndFlag = 1 */
28007 break;
28008 }
28009 (void)pCtx;
28010 if (pIeLen) {
28011 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
28012 }
28013 return DOT11F_PARSE_SUCCESS;
28014 } /* End dot11f_pack_ie_pti_control. */
28015
dot11f_pack_ie_pu_buffer_status(tpAniSirGlobal pCtx,tDot11fIEPUBufferStatus * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)28016 uint32_t dot11f_pack_ie_pu_buffer_status(tpAniSirGlobal pCtx,
28017 tDot11fIEPUBufferStatus *pSrc,
28018 uint8_t *pBuf,
28019 uint32_t nBuf,
28020 uint32_t *pnConsumed)
28021 {
28022 uint8_t *pIeLen = 0;
28023 uint32_t nConsumedOnEntry = *pnConsumed;
28024 uint32_t nNeeded = 0U;
28025 uint8_t tmp187__;
28026 nNeeded += 1;
28027 while (pSrc->present) {
28028 if (nNeeded > nBuf)
28029 return DOT11F_BUFFER_OVERFLOW;
28030 *pBuf = 106;
28031 ++pBuf; ++(*pnConsumed);
28032 pIeLen = pBuf;
28033 ++pBuf; ++(*pnConsumed);
28034 tmp187__ = 0U;
28035 tmp187__ |= (pSrc->ac_bk_traffic_aval << 0);
28036 tmp187__ |= (pSrc->ac_be_traffic_aval << 1);
28037 tmp187__ |= (pSrc->ac_vi_traffic_aval << 2);
28038 tmp187__ |= (pSrc->ac_vo_traffic_aval << 3);
28039 tmp187__ |= (pSrc->reserved << 4);
28040 if (unlikely(nBuf < 1))
28041 return DOT11F_INCOMPLETE_IE;
28042
28043 *pBuf = tmp187__;
28044 *pnConsumed += 1;
28045 /* fieldsEndFlag = 1 */
28046 nBuf -= 1 ;
28047 break;
28048 }
28049 (void)pCtx;
28050 if (pIeLen) {
28051 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
28052 }
28053 return DOT11F_PARSE_SUCCESS;
28054 } /* End dot11f_pack_ie_pu_buffer_status. */
28055
dot11f_pack_ie_power_caps(tpAniSirGlobal pCtx,tDot11fIEPowerCaps * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)28056 uint32_t dot11f_pack_ie_power_caps(tpAniSirGlobal pCtx,
28057 tDot11fIEPowerCaps *pSrc,
28058 uint8_t *pBuf,
28059 uint32_t nBuf,
28060 uint32_t *pnConsumed)
28061 {
28062 uint8_t *pIeLen = 0;
28063 uint32_t nConsumedOnEntry = *pnConsumed;
28064 uint32_t nNeeded = 0U;
28065 nNeeded += 2;
28066 while (pSrc->present) {
28067 if (nNeeded > nBuf)
28068 return DOT11F_BUFFER_OVERFLOW;
28069 *pBuf = 33;
28070 ++pBuf; ++(*pnConsumed);
28071 pIeLen = pBuf;
28072 ++pBuf; ++(*pnConsumed);
28073 *pBuf = pSrc->minTxPower;
28074 *pnConsumed += 1;
28075 pBuf += 1;
28076 *pBuf = pSrc->maxTxPower;
28077 *pnConsumed += 1;
28078 /* fieldsEndFlag = 1 */
28079 break;
28080 }
28081 (void)pCtx;
28082 if (pIeLen) {
28083 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
28084 }
28085 return DOT11F_PARSE_SUCCESS;
28086 } /* End dot11f_pack_ie_power_caps. */
28087
dot11f_pack_ie_power_constraints(tpAniSirGlobal pCtx,tDot11fIEPowerConstraints * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)28088 uint32_t dot11f_pack_ie_power_constraints(tpAniSirGlobal pCtx,
28089 tDot11fIEPowerConstraints *pSrc,
28090 uint8_t *pBuf,
28091 uint32_t nBuf,
28092 uint32_t *pnConsumed)
28093 {
28094 uint8_t *pIeLen = 0;
28095 uint32_t nConsumedOnEntry = *pnConsumed;
28096 uint32_t nNeeded = 0U;
28097 nNeeded += 1;
28098 while (pSrc->present) {
28099 if (nNeeded > nBuf)
28100 return DOT11F_BUFFER_OVERFLOW;
28101 *pBuf = 32;
28102 ++pBuf; ++(*pnConsumed);
28103 pIeLen = pBuf;
28104 ++pBuf; ++(*pnConsumed);
28105 *pBuf = pSrc->localPowerConstraints;
28106 *pnConsumed += 1;
28107 /* fieldsEndFlag = 1 */
28108 break;
28109 }
28110 (void)pCtx;
28111 if (pIeLen) {
28112 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
28113 }
28114 return DOT11F_PARSE_SUCCESS;
28115 } /* End dot11f_pack_ie_power_constraints. */
28116
dot11f_pack_ie_qbss_load(tpAniSirGlobal pCtx,tDot11fIEQBSSLoad * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)28117 uint32_t dot11f_pack_ie_qbss_load(tpAniSirGlobal pCtx,
28118 tDot11fIEQBSSLoad *pSrc,
28119 uint8_t *pBuf,
28120 uint32_t nBuf,
28121 uint32_t *pnConsumed)
28122 {
28123 uint8_t *pIeLen = 0;
28124 uint32_t nConsumedOnEntry = *pnConsumed;
28125 uint32_t nNeeded = 0U;
28126 nNeeded += 5;
28127 while (pSrc->present) {
28128 if (nNeeded > nBuf)
28129 return DOT11F_BUFFER_OVERFLOW;
28130 *pBuf = 11;
28131 ++pBuf; ++(*pnConsumed);
28132 pIeLen = pBuf;
28133 ++pBuf; ++(*pnConsumed);
28134 frameshtons(pCtx, pBuf, pSrc->stacount, 0);
28135 *pnConsumed += 2;
28136 pBuf += 2;
28137 *pBuf = pSrc->chautil;
28138 *pnConsumed += 1;
28139 pBuf += 1;
28140 frameshtons(pCtx, pBuf, pSrc->avail, 0);
28141 *pnConsumed += 2;
28142 /* fieldsEndFlag = 1 */
28143 break;
28144 }
28145 (void)pCtx;
28146 if (pIeLen) {
28147 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
28148 }
28149 return DOT11F_PARSE_SUCCESS;
28150 } /* End dot11f_pack_ie_qbss_load. */
28151
dot11f_pack_ie_QComVendorIE(tpAniSirGlobal pCtx,tDot11fIEQComVendorIE * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)28152 uint32_t dot11f_pack_ie_QComVendorIE(tpAniSirGlobal pCtx,
28153 tDot11fIEQComVendorIE *pSrc,
28154 uint8_t *pBuf,
28155 uint32_t nBuf,
28156 uint32_t *pnConsumed)
28157 {
28158 uint8_t *pIeLen = 0;
28159 uint32_t nConsumedOnEntry = *pnConsumed;
28160 uint32_t nNeeded = 0U;
28161 nNeeded += 2;
28162 while (pSrc->present) {
28163 if (nNeeded > nBuf)
28164 return DOT11F_BUFFER_OVERFLOW;
28165 *pBuf = 221;
28166 ++pBuf; ++(*pnConsumed);
28167 pIeLen = pBuf;
28168 ++pBuf; ++(*pnConsumed);
28169 *pBuf = 0x0;
28170 ++pBuf; ++(*pnConsumed);
28171 *pBuf = 0xa0;
28172 ++pBuf; ++(*pnConsumed);
28173 *pBuf = 0xc6;
28174 ++pBuf; ++(*pnConsumed);
28175 *pBuf = pSrc->type;
28176 *pnConsumed += 1;
28177 pBuf += 1;
28178 *pBuf = pSrc->channel;
28179 *pnConsumed += 1;
28180 /* fieldsEndFlag = 1 */
28181 break;
28182 }
28183 (void)pCtx;
28184 if (pIeLen) {
28185 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
28186 }
28187 return DOT11F_PARSE_SUCCESS;
28188 } /* End dot11f_pack_ie_QComVendorIE. */
28189
dot11f_pack_ie_qos_caps_ap(tpAniSirGlobal pCtx,tDot11fIEQOSCapsAp * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)28190 uint32_t dot11f_pack_ie_qos_caps_ap(tpAniSirGlobal pCtx,
28191 tDot11fIEQOSCapsAp *pSrc,
28192 uint8_t *pBuf,
28193 uint32_t nBuf,
28194 uint32_t *pnConsumed)
28195 {
28196 uint8_t *pIeLen = 0;
28197 uint32_t nConsumedOnEntry = *pnConsumed;
28198 uint32_t nNeeded = 0U;
28199 uint8_t tmp188__;
28200 nNeeded += 1;
28201 while (pSrc->present) {
28202 if (nNeeded > nBuf)
28203 return DOT11F_BUFFER_OVERFLOW;
28204 *pBuf = 46;
28205 ++pBuf; ++(*pnConsumed);
28206 pIeLen = pBuf;
28207 ++pBuf; ++(*pnConsumed);
28208 tmp188__ = 0U;
28209 tmp188__ |= (pSrc->count << 0);
28210 tmp188__ |= (pSrc->qack << 4);
28211 tmp188__ |= (pSrc->qreq << 5);
28212 tmp188__ |= (pSrc->txopreq << 6);
28213 tmp188__ |= (pSrc->reserved << 7);
28214 if (unlikely(nBuf < 1))
28215 return DOT11F_INCOMPLETE_IE;
28216
28217 *pBuf = tmp188__;
28218 *pnConsumed += 1;
28219 /* fieldsEndFlag = 1 */
28220 nBuf -= 1 ;
28221 break;
28222 }
28223 (void)pCtx;
28224 if (pIeLen) {
28225 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
28226 }
28227 return DOT11F_PARSE_SUCCESS;
28228 } /* End dot11f_pack_ie_qos_caps_ap. */
28229
dot11f_pack_ie_qos_caps_station(tpAniSirGlobal pCtx,tDot11fIEQOSCapsStation * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)28230 uint32_t dot11f_pack_ie_qos_caps_station(tpAniSirGlobal pCtx,
28231 tDot11fIEQOSCapsStation *pSrc,
28232 uint8_t *pBuf,
28233 uint32_t nBuf,
28234 uint32_t *pnConsumed)
28235 {
28236 uint8_t *pIeLen = 0;
28237 uint32_t nConsumedOnEntry = *pnConsumed;
28238 uint32_t nNeeded = 0U;
28239 uint8_t tmp189__;
28240 nNeeded += 1;
28241 while (pSrc->present) {
28242 if (nNeeded > nBuf)
28243 return DOT11F_BUFFER_OVERFLOW;
28244 *pBuf = 46;
28245 ++pBuf; ++(*pnConsumed);
28246 pIeLen = pBuf;
28247 ++pBuf; ++(*pnConsumed);
28248 tmp189__ = 0U;
28249 tmp189__ |= (pSrc->acvo_uapsd << 0);
28250 tmp189__ |= (pSrc->acvi_uapsd << 1);
28251 tmp189__ |= (pSrc->acbk_uapsd << 2);
28252 tmp189__ |= (pSrc->acbe_uapsd << 3);
28253 tmp189__ |= (pSrc->qack << 4);
28254 tmp189__ |= (pSrc->max_sp_length << 5);
28255 tmp189__ |= (pSrc->more_data_ack << 7);
28256 if (unlikely(nBuf < 1))
28257 return DOT11F_INCOMPLETE_IE;
28258
28259 *pBuf = tmp189__;
28260 *pnConsumed += 1;
28261 /* fieldsEndFlag = 1 */
28262 nBuf -= 1 ;
28263 break;
28264 }
28265 (void)pCtx;
28266 if (pIeLen) {
28267 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
28268 }
28269 return DOT11F_PARSE_SUCCESS;
28270 } /* End dot11f_pack_ie_qos_caps_station. */
28271
dot11f_pack_ie_qos_map_set(tpAniSirGlobal pCtx,tDot11fIEQosMapSet * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)28272 uint32_t dot11f_pack_ie_qos_map_set(tpAniSirGlobal pCtx,
28273 tDot11fIEQosMapSet *pSrc,
28274 uint8_t *pBuf,
28275 uint32_t nBuf,
28276 uint32_t *pnConsumed)
28277 {
28278 uint8_t *pIeLen = 0;
28279 uint32_t nConsumedOnEntry = *pnConsumed;
28280 uint32_t nNeeded = 0U;
28281 nNeeded += pSrc->num_dscp_exceptions;
28282 while (pSrc->present) {
28283 if (nNeeded > nBuf)
28284 return DOT11F_BUFFER_OVERFLOW;
28285 *pBuf = 110;
28286 ++pBuf; ++(*pnConsumed);
28287 pIeLen = pBuf;
28288 ++pBuf; ++(*pnConsumed);
28289 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->dscp_exceptions), pSrc->num_dscp_exceptions);
28290 *pnConsumed += pSrc->num_dscp_exceptions;
28291 /* fieldsEndFlag = 1 */
28292 break;
28293 }
28294 (void)pCtx;
28295 if (pIeLen) {
28296 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
28297 }
28298 return DOT11F_PARSE_SUCCESS;
28299 } /* End dot11f_pack_ie_qos_map_set. */
28300
dot11f_pack_ie_quiet(tpAniSirGlobal pCtx,tDot11fIEQuiet * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)28301 uint32_t dot11f_pack_ie_quiet(tpAniSirGlobal pCtx,
28302 tDot11fIEQuiet *pSrc,
28303 uint8_t *pBuf,
28304 uint32_t nBuf,
28305 uint32_t *pnConsumed)
28306 {
28307 uint8_t *pIeLen = 0;
28308 uint32_t nConsumedOnEntry = *pnConsumed;
28309 uint32_t nNeeded = 0U;
28310 nNeeded += 6;
28311 while (pSrc->present) {
28312 if (nNeeded > nBuf)
28313 return DOT11F_BUFFER_OVERFLOW;
28314 *pBuf = 40;
28315 ++pBuf; ++(*pnConsumed);
28316 pIeLen = pBuf;
28317 ++pBuf; ++(*pnConsumed);
28318 *pBuf = pSrc->count;
28319 *pnConsumed += 1;
28320 pBuf += 1;
28321 *pBuf = pSrc->period;
28322 *pnConsumed += 1;
28323 pBuf += 1;
28324 frameshtons(pCtx, pBuf, pSrc->duration, 0);
28325 *pnConsumed += 2;
28326 pBuf += 2;
28327 frameshtons(pCtx, pBuf, pSrc->offset, 0);
28328 *pnConsumed += 2;
28329 /* fieldsEndFlag = 1 */
28330 break;
28331 }
28332 (void)pCtx;
28333 if (pIeLen) {
28334 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
28335 }
28336 return DOT11F_PARSE_SUCCESS;
28337 } /* End dot11f_pack_ie_quiet. */
28338
dot11f_pack_ie_rcpiie(tpAniSirGlobal pCtx,tDot11fIERCPIIE * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)28339 uint32_t dot11f_pack_ie_rcpiie(tpAniSirGlobal pCtx,
28340 tDot11fIERCPIIE *pSrc,
28341 uint8_t *pBuf,
28342 uint32_t nBuf,
28343 uint32_t *pnConsumed)
28344 {
28345 uint8_t *pIeLen = 0;
28346 uint32_t nConsumedOnEntry = *pnConsumed;
28347 uint32_t nNeeded = 0U;
28348 nNeeded += 1;
28349 while (pSrc->present) {
28350 if (nNeeded > nBuf)
28351 return DOT11F_BUFFER_OVERFLOW;
28352 *pBuf = 53;
28353 ++pBuf; ++(*pnConsumed);
28354 pIeLen = pBuf;
28355 ++pBuf; ++(*pnConsumed);
28356 *pBuf = pSrc->rcpi;
28357 *pnConsumed += 1;
28358 /* fieldsEndFlag = 1 */
28359 break;
28360 }
28361 (void)pCtx;
28362 if (pIeLen) {
28363 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
28364 }
28365 return DOT11F_PARSE_SUCCESS;
28366 } /* End dot11f_pack_ie_rcpiie. */
28367
dot11f_pack_ie_ric_data_desc(tpAniSirGlobal pCtx,tDot11fIERICDataDesc * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)28368 uint32_t dot11f_pack_ie_ric_data_desc(tpAniSirGlobal pCtx,
28369 tDot11fIERICDataDesc *pSrc,
28370 uint8_t *pBuf,
28371 uint32_t nBuf,
28372 uint32_t *pnConsumed)
28373 {
28374 uint32_t nNeeded = 0U;
28375 uint32_t status = DOT11F_PARSE_SUCCESS;
28376 status = dot11f_get_packed_ieric_data_desc(pCtx, pSrc, &nNeeded);
28377 if (!DOT11F_SUCCEEDED(status))
28378 return status;
28379 while (pSrc->present) {
28380 if (nNeeded > nBuf)
28381 return DOT11F_BUFFER_OVERFLOW;
28382 status = pack_core(pCtx,
28383 (uint8_t *)pSrc,
28384 pBuf,
28385 nBuf,
28386 pnConsumed,
28387 FFS_RICDataDesc,
28388 IES_RICDataDesc);
28389 break;
28390 }
28391 (void)pCtx;
28392 return status;
28393 } /* End dot11f_pack_ie_ric_data_desc. */
28394
dot11f_pack_ie_rsn(tpAniSirGlobal pCtx,tDot11fIERSN * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)28395 uint32_t dot11f_pack_ie_rsn(tpAniSirGlobal pCtx,
28396 tDot11fIERSN *pSrc,
28397 uint8_t *pBuf,
28398 uint32_t nBuf,
28399 uint32_t *pnConsumed)
28400 {
28401 uint8_t *pIeLen = 0;
28402 uint32_t nConsumedOnEntry = *pnConsumed;
28403 uint32_t nNeeded = 0U;
28404 uint32_t status = DOT11F_PARSE_SUCCESS;
28405 status = dot11f_get_packed_iersn(pCtx, pSrc, &nNeeded);
28406 if (!DOT11F_SUCCEEDED(status))
28407 return status;
28408 while (pSrc->present) {
28409 if (nNeeded > nBuf)
28410 return DOT11F_BUFFER_OVERFLOW;
28411 *pBuf = 48;
28412 ++pBuf; ++(*pnConsumed);
28413 pIeLen = pBuf;
28414 ++pBuf; ++(*pnConsumed);
28415 frameshtons(pCtx, pBuf, pSrc->version, 0);
28416 *pnConsumed += 2;
28417 pBuf += 2;
28418 if (pSrc->gp_cipher_suite_present) {
28419 DOT11F_MEMCPY(pCtx, pBuf, pSrc->gp_cipher_suite, 4);
28420 *pnConsumed += 4;
28421 pBuf += 4;
28422 } else {
28423 break;
28424 }
28425 if (pSrc->pwise_cipher_suite_count) {
28426 frameshtons(pCtx, pBuf, pSrc->pwise_cipher_suite_count, 0);
28427 *pnConsumed += 2;
28428 pBuf += 2;
28429 } else {
28430 break;
28431 }
28432 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->pwise_cipher_suites), (pSrc->pwise_cipher_suite_count * 4));
28433 *pnConsumed += (pSrc->pwise_cipher_suite_count * 4);
28434 pBuf += (pSrc->pwise_cipher_suite_count * 4);
28435 if (pSrc->akm_suite_cnt) {
28436 frameshtons(pCtx, pBuf, pSrc->akm_suite_cnt, 0);
28437 *pnConsumed += 2;
28438 pBuf += 2;
28439 } else {
28440 break;
28441 }
28442 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->akm_suite), (pSrc->akm_suite_cnt * 4));
28443 *pnConsumed += (pSrc->akm_suite_cnt * 4);
28444 pBuf += (pSrc->akm_suite_cnt * 4);
28445 if (pSrc->RSN_Cap_present) {
28446 DOT11F_MEMCPY(pCtx, pBuf, pSrc->RSN_Cap, 2);
28447 *pnConsumed += 2;
28448 pBuf += 2;
28449 } else {
28450 break;
28451 }
28452 if (pSrc->pmkid_count) {
28453 frameshtons(pCtx, pBuf, pSrc->pmkid_count, 0);
28454 *pnConsumed += 2;
28455 pBuf += 2;
28456 } else {
28457 if (pSrc->gp_mgmt_cipher_suite_present) {
28458 frameshtons(pCtx, pBuf, pSrc->pmkid_count, 0);
28459 *pnConsumed += 2;
28460 pBuf += 2;
28461 }
28462 }
28463 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->pmkid), (pSrc->pmkid_count * 16));
28464 *pnConsumed += (pSrc->pmkid_count * 16);
28465 pBuf += (pSrc->pmkid_count * 16);
28466 if (pSrc->gp_mgmt_cipher_suite_present) {
28467 DOT11F_MEMCPY(pCtx, pBuf, pSrc->gp_mgmt_cipher_suite, 4);
28468 *pnConsumed += 4;
28469 /* fieldsEndFlag = 1 */
28470 } else {
28471 break;
28472 }
28473 break;
28474 }
28475 (void)pCtx;
28476 if (pIeLen) {
28477 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
28478 }
28479 return status;
28480 } /* End dot11f_pack_ie_rsn. */
28481
dot11f_pack_ie_rsniie(tpAniSirGlobal pCtx,tDot11fIERSNIIE * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)28482 uint32_t dot11f_pack_ie_rsniie(tpAniSirGlobal pCtx,
28483 tDot11fIERSNIIE *pSrc,
28484 uint8_t *pBuf,
28485 uint32_t nBuf,
28486 uint32_t *pnConsumed)
28487 {
28488 uint8_t *pIeLen = 0;
28489 uint32_t nConsumedOnEntry = *pnConsumed;
28490 uint32_t nNeeded = 0U;
28491 nNeeded += 1;
28492 while (pSrc->present) {
28493 if (nNeeded > nBuf)
28494 return DOT11F_BUFFER_OVERFLOW;
28495 *pBuf = 65;
28496 ++pBuf; ++(*pnConsumed);
28497 pIeLen = pBuf;
28498 ++pBuf; ++(*pnConsumed);
28499 *pBuf = pSrc->rsni;
28500 *pnConsumed += 1;
28501 /* fieldsEndFlag = 1 */
28502 break;
28503 }
28504 (void)pCtx;
28505 if (pIeLen) {
28506 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
28507 }
28508 return DOT11F_PARSE_SUCCESS;
28509 } /* End dot11f_pack_ie_rsniie. */
28510
dot11f_pack_ie_rsn_opaque(tpAniSirGlobal pCtx,tDot11fIERSNOpaque * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)28511 uint32_t dot11f_pack_ie_rsn_opaque(tpAniSirGlobal pCtx,
28512 tDot11fIERSNOpaque *pSrc,
28513 uint8_t *pBuf,
28514 uint32_t nBuf,
28515 uint32_t *pnConsumed)
28516 {
28517 uint8_t *pIeLen = 0;
28518 uint32_t nConsumedOnEntry = *pnConsumed;
28519 uint32_t nNeeded = 0U;
28520 nNeeded += pSrc->num_data;
28521 while (pSrc->present) {
28522 if (nNeeded > nBuf)
28523 return DOT11F_BUFFER_OVERFLOW;
28524 *pBuf = 48;
28525 ++pBuf; ++(*pnConsumed);
28526 pIeLen = pBuf;
28527 ++pBuf; ++(*pnConsumed);
28528 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->data), pSrc->num_data);
28529 *pnConsumed += pSrc->num_data;
28530 /* fieldsEndFlag = 1 */
28531 break;
28532 }
28533 (void)pCtx;
28534 if (pIeLen) {
28535 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
28536 }
28537 return DOT11F_PARSE_SUCCESS;
28538 } /* End dot11f_pack_ie_rsn_opaque. */
28539
dot11f_pack_ie_supp_channels(tpAniSirGlobal pCtx,tDot11fIESuppChannels * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)28540 uint32_t dot11f_pack_ie_supp_channels(tpAniSirGlobal pCtx,
28541 tDot11fIESuppChannels *pSrc,
28542 uint8_t *pBuf,
28543 uint32_t nBuf,
28544 uint32_t *pnConsumed)
28545 {
28546 uint8_t *pIeLen = 0;
28547 uint32_t nConsumedOnEntry = *pnConsumed;
28548 uint32_t nNeeded = 0U;
28549 nNeeded += pSrc->num_bands * 2;
28550 while (pSrc->present) {
28551 if (nNeeded > nBuf)
28552 return DOT11F_BUFFER_OVERFLOW;
28553 *pBuf = 36;
28554 ++pBuf; ++(*pnConsumed);
28555 pIeLen = pBuf;
28556 ++pBuf; ++(*pnConsumed);
28557 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->bands), (pSrc->num_bands * 2));
28558 *pnConsumed += (pSrc->num_bands * 2);
28559 /* fieldsEndFlag = 1 */
28560 break;
28561 }
28562 (void)pCtx;
28563 if (pIeLen) {
28564 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
28565 }
28566 return DOT11F_PARSE_SUCCESS;
28567 } /* End dot11f_pack_ie_supp_channels. */
28568
dot11f_pack_ie_supp_operating_classes(tpAniSirGlobal pCtx,tDot11fIESuppOperatingClasses * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)28569 uint32_t dot11f_pack_ie_supp_operating_classes(tpAniSirGlobal pCtx,
28570 tDot11fIESuppOperatingClasses *pSrc,
28571 uint8_t *pBuf,
28572 uint32_t nBuf,
28573 uint32_t *pnConsumed)
28574 {
28575 uint8_t *pIeLen = 0;
28576 uint32_t nConsumedOnEntry = *pnConsumed;
28577 uint32_t nNeeded = 0U;
28578 nNeeded += pSrc->num_classes;
28579 while (pSrc->present) {
28580 if (nNeeded > nBuf)
28581 return DOT11F_BUFFER_OVERFLOW;
28582 *pBuf = 59;
28583 ++pBuf; ++(*pnConsumed);
28584 pIeLen = pBuf;
28585 ++pBuf; ++(*pnConsumed);
28586 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->classes), pSrc->num_classes);
28587 *pnConsumed += pSrc->num_classes;
28588 /* fieldsEndFlag = 1 */
28589 break;
28590 }
28591 (void)pCtx;
28592 if (pIeLen) {
28593 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
28594 }
28595 return DOT11F_PARSE_SUCCESS;
28596 } /* End dot11f_pack_ie_supp_operating_classes. */
28597
dot11f_pack_ie_supp_rates(tpAniSirGlobal pCtx,tDot11fIESuppRates * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)28598 uint32_t dot11f_pack_ie_supp_rates(tpAniSirGlobal pCtx,
28599 tDot11fIESuppRates *pSrc,
28600 uint8_t *pBuf,
28601 uint32_t nBuf,
28602 uint32_t *pnConsumed)
28603 {
28604 uint8_t *pIeLen = 0;
28605 uint32_t nConsumedOnEntry = *pnConsumed;
28606 uint32_t nNeeded = 0U;
28607 nNeeded += pSrc->num_rates;
28608 while (pSrc->present) {
28609 if (nNeeded > nBuf)
28610 return DOT11F_BUFFER_OVERFLOW;
28611 *pBuf = 1;
28612 ++pBuf; ++(*pnConsumed);
28613 pIeLen = pBuf;
28614 ++pBuf; ++(*pnConsumed);
28615 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->rates), pSrc->num_rates);
28616 *pnConsumed += pSrc->num_rates;
28617 /* fieldsEndFlag = 1 */
28618 break;
28619 }
28620 (void)pCtx;
28621 if (pIeLen) {
28622 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
28623 }
28624 return DOT11F_PARSE_SUCCESS;
28625 } /* End dot11f_pack_ie_supp_rates. */
28626
dot11f_pack_ie_tim(tpAniSirGlobal pCtx,tDot11fIETIM * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)28627 uint32_t dot11f_pack_ie_tim(tpAniSirGlobal pCtx,
28628 tDot11fIETIM *pSrc,
28629 uint8_t *pBuf,
28630 uint32_t nBuf,
28631 uint32_t *pnConsumed)
28632 {
28633 uint8_t *pIeLen = 0;
28634 uint32_t nConsumedOnEntry = *pnConsumed;
28635 uint32_t nNeeded = 0U;
28636 nNeeded += (pSrc->num_vbmp + 3);
28637 while (pSrc->present) {
28638 if (nNeeded > nBuf)
28639 return DOT11F_BUFFER_OVERFLOW;
28640 *pBuf = 5;
28641 ++pBuf; ++(*pnConsumed);
28642 pIeLen = pBuf;
28643 ++pBuf; ++(*pnConsumed);
28644 *pBuf = pSrc->dtim_count;
28645 *pnConsumed += 1;
28646 pBuf += 1;
28647 *pBuf = pSrc->dtim_period;
28648 *pnConsumed += 1;
28649 pBuf += 1;
28650 *pBuf = pSrc->bmpctl;
28651 *pnConsumed += 1;
28652 pBuf += 1;
28653 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->vbmp), pSrc->num_vbmp);
28654 *pnConsumed += pSrc->num_vbmp;
28655 /* fieldsEndFlag = 1 */
28656 break;
28657 }
28658 (void)pCtx;
28659 if (pIeLen) {
28660 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
28661 }
28662 return DOT11F_PARSE_SUCCESS;
28663 } /* End dot11f_pack_ie_tim. */
28664
dot11f_pack_ie_tpc_report(tpAniSirGlobal pCtx,tDot11fIETPCReport * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)28665 uint32_t dot11f_pack_ie_tpc_report(tpAniSirGlobal pCtx,
28666 tDot11fIETPCReport *pSrc,
28667 uint8_t *pBuf,
28668 uint32_t nBuf,
28669 uint32_t *pnConsumed)
28670 {
28671 uint8_t *pIeLen = 0;
28672 uint32_t nConsumedOnEntry = *pnConsumed;
28673 uint32_t nNeeded = 0U;
28674 nNeeded += 2;
28675 while (pSrc->present) {
28676 if (nNeeded > nBuf)
28677 return DOT11F_BUFFER_OVERFLOW;
28678 *pBuf = 35;
28679 ++pBuf; ++(*pnConsumed);
28680 pIeLen = pBuf;
28681 ++pBuf; ++(*pnConsumed);
28682 *pBuf = pSrc->tx_power;
28683 *pnConsumed += 1;
28684 pBuf += 1;
28685 *pBuf = pSrc->link_margin;
28686 *pnConsumed += 1;
28687 /* fieldsEndFlag = 1 */
28688 break;
28689 }
28690 (void)pCtx;
28691 if (pIeLen) {
28692 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
28693 }
28694 return DOT11F_PARSE_SUCCESS;
28695 } /* End dot11f_pack_ie_tpc_report. */
28696
dot11f_pack_ie_tpc_request(tpAniSirGlobal pCtx,tDot11fIETPCRequest * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)28697 uint32_t dot11f_pack_ie_tpc_request(tpAniSirGlobal pCtx,
28698 tDot11fIETPCRequest *pSrc,
28699 uint8_t *pBuf,
28700 uint32_t nBuf,
28701 uint32_t *pnConsumed)
28702 {
28703 uint8_t *pIeLen = 0;
28704 uint32_t nConsumedOnEntry = *pnConsumed;
28705 uint32_t nNeeded = 0U;
28706 nNeeded += 0;
28707 while (pSrc->present) {
28708 if (nNeeded > nBuf)
28709 return DOT11F_BUFFER_OVERFLOW;
28710 *pBuf = 34;
28711 ++pBuf; ++(*pnConsumed);
28712 pIeLen = pBuf;
28713 ++pBuf; ++(*pnConsumed);
28714 break;
28715 }
28716 (void)pCtx;
28717 if (pIeLen) {
28718 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
28719 }
28720 return DOT11F_PARSE_SUCCESS;
28721 } /* End dot11f_pack_ie_tpc_request. */
28722
dot11f_pack_ie_time_advertisement(tpAniSirGlobal pCtx,tDot11fIETimeAdvertisement * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)28723 uint32_t dot11f_pack_ie_time_advertisement(tpAniSirGlobal pCtx,
28724 tDot11fIETimeAdvertisement *pSrc,
28725 uint8_t *pBuf,
28726 uint32_t nBuf,
28727 uint32_t *pnConsumed)
28728 {
28729 uint8_t *pIeLen = 0;
28730 uint32_t nConsumedOnEntry = *pnConsumed;
28731 uint32_t nNeeded = 0U;
28732 nNeeded += 16;
28733 while (pSrc->present) {
28734 if (nNeeded > nBuf)
28735 return DOT11F_BUFFER_OVERFLOW;
28736 *pBuf = 69;
28737 ++pBuf; ++(*pnConsumed);
28738 pIeLen = pBuf;
28739 ++pBuf; ++(*pnConsumed);
28740 *pBuf = pSrc->timing_capabilities;
28741 *pnConsumed += 1;
28742 pBuf += 1;
28743 DOT11F_MEMCPY(pCtx, pBuf, pSrc->time_value, 10);
28744 *pnConsumed += 10;
28745 pBuf += 10;
28746 DOT11F_MEMCPY(pCtx, pBuf, pSrc->time_error, 5);
28747 *pnConsumed += 5;
28748 /* fieldsEndFlag = 1 */
28749 break;
28750 }
28751 (void)pCtx;
28752 if (pIeLen) {
28753 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
28754 }
28755 return DOT11F_PARSE_SUCCESS;
28756 } /* End dot11f_pack_ie_time_advertisement. */
28757
dot11f_pack_ie_timeout_interval(tpAniSirGlobal pCtx,tDot11fIETimeoutInterval * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)28758 uint32_t dot11f_pack_ie_timeout_interval(tpAniSirGlobal pCtx,
28759 tDot11fIETimeoutInterval *pSrc,
28760 uint8_t *pBuf,
28761 uint32_t nBuf,
28762 uint32_t *pnConsumed)
28763 {
28764 uint8_t *pIeLen = 0;
28765 uint32_t nConsumedOnEntry = *pnConsumed;
28766 uint32_t nNeeded = 0U;
28767 nNeeded += 5;
28768 while (pSrc->present) {
28769 if (nNeeded > nBuf)
28770 return DOT11F_BUFFER_OVERFLOW;
28771 *pBuf = 56;
28772 ++pBuf; ++(*pnConsumed);
28773 pIeLen = pBuf;
28774 ++pBuf; ++(*pnConsumed);
28775 *pBuf = pSrc->timeoutType;
28776 *pnConsumed += 1;
28777 pBuf += 1;
28778 frameshtonl(pCtx, pBuf, pSrc->timeoutValue, 0);
28779 *pnConsumed += 4;
28780 /* fieldsEndFlag = 1 */
28781 break;
28782 }
28783 (void)pCtx;
28784 if (pIeLen) {
28785 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
28786 }
28787 return DOT11F_PARSE_SUCCESS;
28788 } /* End dot11f_pack_ie_timeout_interval. */
28789
dot11f_pack_ie_vht_ext_bss_load(tpAniSirGlobal pCtx,tDot11fIEVHTExtBssLoad * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)28790 uint32_t dot11f_pack_ie_vht_ext_bss_load(tpAniSirGlobal pCtx,
28791 tDot11fIEVHTExtBssLoad *pSrc,
28792 uint8_t *pBuf,
28793 uint32_t nBuf,
28794 uint32_t *pnConsumed)
28795 {
28796 uint8_t *pIeLen = 0;
28797 uint32_t nConsumedOnEntry = *pnConsumed;
28798 uint32_t nNeeded = 0U;
28799 nNeeded += 5;
28800 while (pSrc->present) {
28801 if (nNeeded > nBuf)
28802 return DOT11F_BUFFER_OVERFLOW;
28803 *pBuf = 193;
28804 ++pBuf; ++(*pnConsumed);
28805 pIeLen = pBuf;
28806 ++pBuf; ++(*pnConsumed);
28807 *pBuf = pSrc->muMIMOCapStaCount;
28808 *pnConsumed += 1;
28809 pBuf += 1;
28810 *pBuf = pSrc->ssUnderUtil;
28811 *pnConsumed += 1;
28812 pBuf += 1;
28813 *pBuf = pSrc->FortyMHzUtil;
28814 *pnConsumed += 1;
28815 pBuf += 1;
28816 *pBuf = pSrc->EightyMHzUtil;
28817 *pnConsumed += 1;
28818 pBuf += 1;
28819 *pBuf = pSrc->OneSixtyMHzUtil;
28820 *pnConsumed += 1;
28821 /* fieldsEndFlag = 1 */
28822 break;
28823 }
28824 (void)pCtx;
28825 if (pIeLen) {
28826 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
28827 }
28828 return DOT11F_PARSE_SUCCESS;
28829 } /* End dot11f_pack_ie_vht_ext_bss_load. */
28830
dot11f_pack_ie_vendor1_ie(tpAniSirGlobal pCtx,tDot11fIEVendor1IE * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)28831 uint32_t dot11f_pack_ie_vendor1_ie(tpAniSirGlobal pCtx,
28832 tDot11fIEVendor1IE *pSrc,
28833 uint8_t *pBuf,
28834 uint32_t nBuf,
28835 uint32_t *pnConsumed)
28836 {
28837 uint8_t *pIeLen = 0;
28838 uint32_t nConsumedOnEntry = *pnConsumed;
28839 uint32_t nNeeded = 0U;
28840 nNeeded += 0;
28841 while (pSrc->present) {
28842 if (nNeeded > nBuf)
28843 return DOT11F_BUFFER_OVERFLOW;
28844 *pBuf = 221;
28845 ++pBuf; ++(*pnConsumed);
28846 pIeLen = pBuf;
28847 ++pBuf; ++(*pnConsumed);
28848 *pBuf = 0x0;
28849 ++pBuf; ++(*pnConsumed);
28850 *pBuf = 0x10;
28851 ++pBuf; ++(*pnConsumed);
28852 *pBuf = 0x18;
28853 ++pBuf; ++(*pnConsumed);
28854 break;
28855 }
28856 (void)pCtx;
28857 if (pIeLen) {
28858 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
28859 }
28860 return DOT11F_PARSE_SUCCESS;
28861 } /* End dot11f_pack_ie_vendor1_ie. */
28862
dot11f_pack_ie_vendor3_ie(tpAniSirGlobal pCtx,tDot11fIEVendor3IE * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)28863 uint32_t dot11f_pack_ie_vendor3_ie(tpAniSirGlobal pCtx,
28864 tDot11fIEVendor3IE *pSrc,
28865 uint8_t *pBuf,
28866 uint32_t nBuf,
28867 uint32_t *pnConsumed)
28868 {
28869 uint8_t *pIeLen = 0;
28870 uint32_t nConsumedOnEntry = *pnConsumed;
28871 uint32_t nNeeded = 0U;
28872 nNeeded += 0;
28873 while (pSrc->present) {
28874 if (nNeeded > nBuf)
28875 return DOT11F_BUFFER_OVERFLOW;
28876 *pBuf = 221;
28877 ++pBuf; ++(*pnConsumed);
28878 pIeLen = pBuf;
28879 ++pBuf; ++(*pnConsumed);
28880 *pBuf = 0x0;
28881 ++pBuf; ++(*pnConsumed);
28882 *pBuf = 0x16;
28883 ++pBuf; ++(*pnConsumed);
28884 *pBuf = 0x32;
28885 ++pBuf; ++(*pnConsumed);
28886 break;
28887 }
28888 (void)pCtx;
28889 if (pIeLen) {
28890 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
28891 }
28892 return DOT11F_PARSE_SUCCESS;
28893 } /* End dot11f_pack_ie_vendor3_ie. */
28894
dot11f_pack_ie_wapi(tpAniSirGlobal pCtx,tDot11fIEWAPI * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)28895 uint32_t dot11f_pack_ie_wapi(tpAniSirGlobal pCtx,
28896 tDot11fIEWAPI *pSrc,
28897 uint8_t *pBuf,
28898 uint32_t nBuf,
28899 uint32_t *pnConsumed)
28900 {
28901 uint8_t *pIeLen = 0;
28902 uint32_t nConsumedOnEntry = *pnConsumed;
28903 uint32_t nNeeded = 0U;
28904 uint16_t tmp190__;
28905 uint32_t status = DOT11F_PARSE_SUCCESS;
28906 status = dot11f_get_packed_iewapi(pCtx, pSrc, &nNeeded);
28907 if (!DOT11F_SUCCEEDED(status))
28908 return status;
28909 while (pSrc->present) {
28910 if (nNeeded > nBuf)
28911 return DOT11F_BUFFER_OVERFLOW;
28912 *pBuf = 68;
28913 ++pBuf; ++(*pnConsumed);
28914 pIeLen = pBuf;
28915 ++pBuf; ++(*pnConsumed);
28916 frameshtons(pCtx, pBuf, pSrc->version, 0);
28917 *pnConsumed += 2;
28918 pBuf += 2;
28919 frameshtons(pCtx, pBuf, pSrc->akm_suite_count, 0);
28920 *pnConsumed += 2;
28921 pBuf += 2;
28922 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->akm_suites), (pSrc->akm_suite_count * 4));
28923 *pnConsumed += (pSrc->akm_suite_count * 4);
28924 pBuf += (pSrc->akm_suite_count * 4);
28925 frameshtons(pCtx, pBuf, pSrc->unicast_cipher_suite_count, 0);
28926 *pnConsumed += 2;
28927 pBuf += 2;
28928 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->unicast_cipher_suites), (pSrc->unicast_cipher_suite_count * 4));
28929 *pnConsumed += (pSrc->unicast_cipher_suite_count * 4);
28930 pBuf += (pSrc->unicast_cipher_suite_count * 4);
28931 DOT11F_MEMCPY(pCtx, pBuf, pSrc->multicast_cipher_suite, 4);
28932 *pnConsumed += 4;
28933 pBuf += 4;
28934 tmp190__ = 0U;
28935 tmp190__ |= (pSrc->preauth << 0);
28936 tmp190__ |= (pSrc->reserved << 1);
28937 if (unlikely(nBuf < 2))
28938 return DOT11F_INCOMPLETE_IE;
28939
28940 frameshtons(pCtx, pBuf, tmp190__, 0);
28941 *pnConsumed += 2;
28942 pBuf += 2;
28943 nBuf -= 2 ;
28944 if (pSrc->bkid_count) {
28945 frameshtons(pCtx, pBuf, pSrc->bkid_count, 0);
28946 *pnConsumed += 2;
28947 pBuf += 2;
28948 } else {
28949 break;
28950 }
28951 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->bkid), (pSrc->bkid_count * 16));
28952 *pnConsumed += (pSrc->bkid_count * 16);
28953 /* fieldsEndFlag = 1 */
28954 break;
28955 }
28956 (void)pCtx;
28957 if (pIeLen) {
28958 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
28959 }
28960 return status;
28961 } /* End dot11f_pack_ie_wapi. */
28962
dot11f_pack_ie_wapi_opaque(tpAniSirGlobal pCtx,tDot11fIEWAPIOpaque * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)28963 uint32_t dot11f_pack_ie_wapi_opaque(tpAniSirGlobal pCtx,
28964 tDot11fIEWAPIOpaque *pSrc,
28965 uint8_t *pBuf,
28966 uint32_t nBuf,
28967 uint32_t *pnConsumed)
28968 {
28969 uint8_t *pIeLen = 0;
28970 uint32_t nConsumedOnEntry = *pnConsumed;
28971 uint32_t nNeeded = 0U;
28972 nNeeded += pSrc->num_data;
28973 while (pSrc->present) {
28974 if (nNeeded > nBuf)
28975 return DOT11F_BUFFER_OVERFLOW;
28976 *pBuf = 68;
28977 ++pBuf; ++(*pnConsumed);
28978 pIeLen = pBuf;
28979 ++pBuf; ++(*pnConsumed);
28980 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->data), pSrc->num_data);
28981 *pnConsumed += pSrc->num_data;
28982 /* fieldsEndFlag = 1 */
28983 break;
28984 }
28985 (void)pCtx;
28986 if (pIeLen) {
28987 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
28988 }
28989 return DOT11F_PARSE_SUCCESS;
28990 } /* End dot11f_pack_ie_wapi_opaque. */
28991
dot11f_pack_ie_wfatpc(tpAniSirGlobal pCtx,tDot11fIEWFATPC * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)28992 uint32_t dot11f_pack_ie_wfatpc(tpAniSirGlobal pCtx,
28993 tDot11fIEWFATPC *pSrc,
28994 uint8_t *pBuf,
28995 uint32_t nBuf,
28996 uint32_t *pnConsumed)
28997 {
28998 uint8_t *pIeLen = 0;
28999 uint32_t nConsumedOnEntry = *pnConsumed;
29000 uint32_t nNeeded = 0U;
29001 nNeeded += 2;
29002 while (pSrc->present) {
29003 if (nNeeded > nBuf)
29004 return DOT11F_BUFFER_OVERFLOW;
29005 *pBuf = 221;
29006 ++pBuf; ++(*pnConsumed);
29007 pIeLen = pBuf;
29008 ++pBuf; ++(*pnConsumed);
29009 *pBuf = 0x0;
29010 ++pBuf; ++(*pnConsumed);
29011 *pBuf = 0x50;
29012 ++pBuf; ++(*pnConsumed);
29013 *pBuf = 0xf2;
29014 ++pBuf; ++(*pnConsumed);
29015 *pBuf = 0x8;
29016 ++pBuf; ++(*pnConsumed);
29017 *pBuf = 0x0;
29018 ++pBuf; ++(*pnConsumed);
29019 *pBuf = pSrc->txPower;
29020 *pnConsumed += 1;
29021 pBuf += 1;
29022 *pBuf = pSrc->linkMargin;
29023 *pnConsumed += 1;
29024 /* fieldsEndFlag = 1 */
29025 break;
29026 }
29027 (void)pCtx;
29028 if (pIeLen) {
29029 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
29030 }
29031 return DOT11F_PARSE_SUCCESS;
29032 } /* End dot11f_pack_ie_wfatpc. */
29033
dot11f_pack_ie_wfdie_opaque(tpAniSirGlobal pCtx,tDot11fIEWFDIEOpaque * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)29034 uint32_t dot11f_pack_ie_wfdie_opaque(tpAniSirGlobal pCtx,
29035 tDot11fIEWFDIEOpaque *pSrc,
29036 uint8_t *pBuf,
29037 uint32_t nBuf,
29038 uint32_t *pnConsumed)
29039 {
29040 uint8_t *pIeLen = 0;
29041 uint32_t nConsumedOnEntry = *pnConsumed;
29042 uint32_t nNeeded = 0U;
29043 nNeeded += pSrc->num_data;
29044 while (pSrc->present) {
29045 if (nNeeded > nBuf)
29046 return DOT11F_BUFFER_OVERFLOW;
29047 *pBuf = 221;
29048 ++pBuf; ++(*pnConsumed);
29049 pIeLen = pBuf;
29050 ++pBuf; ++(*pnConsumed);
29051 *pBuf = 0x50;
29052 ++pBuf; ++(*pnConsumed);
29053 *pBuf = 0x6f;
29054 ++pBuf; ++(*pnConsumed);
29055 *pBuf = 0x9a;
29056 ++pBuf; ++(*pnConsumed);
29057 *pBuf = 0xa;
29058 ++pBuf; ++(*pnConsumed);
29059 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->data), pSrc->num_data);
29060 *pnConsumed += pSrc->num_data;
29061 /* fieldsEndFlag = 1 */
29062 break;
29063 }
29064 (void)pCtx;
29065 if (pIeLen) {
29066 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
29067 }
29068 return DOT11F_PARSE_SUCCESS;
29069 } /* End dot11f_pack_ie_wfdie_opaque. */
29070
dot11f_pack_ie_wmm_caps(tpAniSirGlobal pCtx,tDot11fIEWMMCaps * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)29071 uint32_t dot11f_pack_ie_wmm_caps(tpAniSirGlobal pCtx,
29072 tDot11fIEWMMCaps *pSrc,
29073 uint8_t *pBuf,
29074 uint32_t nBuf,
29075 uint32_t *pnConsumed)
29076 {
29077 uint8_t *pIeLen = 0;
29078 uint32_t nConsumedOnEntry = *pnConsumed;
29079 uint32_t nNeeded = 0U;
29080 uint8_t tmp191__;
29081 nNeeded += 2;
29082 while (pSrc->present) {
29083 if (nNeeded > nBuf)
29084 return DOT11F_BUFFER_OVERFLOW;
29085 *pBuf = 221;
29086 ++pBuf; ++(*pnConsumed);
29087 pIeLen = pBuf;
29088 ++pBuf; ++(*pnConsumed);
29089 *pBuf = 0x0;
29090 ++pBuf; ++(*pnConsumed);
29091 *pBuf = 0x50;
29092 ++pBuf; ++(*pnConsumed);
29093 *pBuf = 0xf2;
29094 ++pBuf; ++(*pnConsumed);
29095 *pBuf = 0x2;
29096 ++pBuf; ++(*pnConsumed);
29097 *pBuf = 0x5;
29098 ++pBuf; ++(*pnConsumed);
29099 *pBuf = pSrc->version;
29100 *pnConsumed += 1;
29101 pBuf += 1;
29102 tmp191__ = 0U;
29103 tmp191__ |= (pSrc->reserved << 0);
29104 tmp191__ |= (pSrc->qack << 4);
29105 tmp191__ |= (pSrc->queue_request << 5);
29106 tmp191__ |= (pSrc->txop_request << 6);
29107 tmp191__ |= (pSrc->more_ack << 7);
29108 if (unlikely(nBuf < 1))
29109 return DOT11F_INCOMPLETE_IE;
29110
29111 *pBuf = tmp191__;
29112 *pnConsumed += 1;
29113 /* fieldsEndFlag = 1 */
29114 nBuf -= 1 ;
29115 break;
29116 }
29117 (void)pCtx;
29118 if (pIeLen) {
29119 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
29120 }
29121 return DOT11F_PARSE_SUCCESS;
29122 } /* End dot11f_pack_ie_wmm_caps. */
29123
dot11f_pack_ie_wmm_info_ap(tpAniSirGlobal pCtx,tDot11fIEWMMInfoAp * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)29124 uint32_t dot11f_pack_ie_wmm_info_ap(tpAniSirGlobal pCtx,
29125 tDot11fIEWMMInfoAp *pSrc,
29126 uint8_t *pBuf,
29127 uint32_t nBuf,
29128 uint32_t *pnConsumed)
29129 {
29130 uint8_t *pIeLen = 0;
29131 uint32_t nConsumedOnEntry = *pnConsumed;
29132 uint32_t nNeeded = 0U;
29133 uint8_t tmp192__;
29134 nNeeded += 2;
29135 while (pSrc->present) {
29136 if (nNeeded > nBuf)
29137 return DOT11F_BUFFER_OVERFLOW;
29138 *pBuf = 221;
29139 ++pBuf; ++(*pnConsumed);
29140 pIeLen = pBuf;
29141 ++pBuf; ++(*pnConsumed);
29142 *pBuf = 0x0;
29143 ++pBuf; ++(*pnConsumed);
29144 *pBuf = 0x50;
29145 ++pBuf; ++(*pnConsumed);
29146 *pBuf = 0xf2;
29147 ++pBuf; ++(*pnConsumed);
29148 *pBuf = 0x2;
29149 ++pBuf; ++(*pnConsumed);
29150 *pBuf = 0x0;
29151 ++pBuf; ++(*pnConsumed);
29152 *pBuf = pSrc->version;
29153 *pnConsumed += 1;
29154 pBuf += 1;
29155 tmp192__ = 0U;
29156 tmp192__ |= (pSrc->param_set_count << 0);
29157 tmp192__ |= (pSrc->reserved << 4);
29158 tmp192__ |= (pSrc->uapsd << 7);
29159 if (unlikely(nBuf < 1))
29160 return DOT11F_INCOMPLETE_IE;
29161
29162 *pBuf = tmp192__;
29163 *pnConsumed += 1;
29164 /* fieldsEndFlag = 1 */
29165 nBuf -= 1 ;
29166 break;
29167 }
29168 (void)pCtx;
29169 if (pIeLen) {
29170 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
29171 }
29172 return DOT11F_PARSE_SUCCESS;
29173 } /* End dot11f_pack_ie_wmm_info_ap. */
29174
dot11f_pack_ie_wmm_info_station(tpAniSirGlobal pCtx,tDot11fIEWMMInfoStation * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)29175 uint32_t dot11f_pack_ie_wmm_info_station(tpAniSirGlobal pCtx,
29176 tDot11fIEWMMInfoStation *pSrc,
29177 uint8_t *pBuf,
29178 uint32_t nBuf,
29179 uint32_t *pnConsumed)
29180 {
29181 uint8_t *pIeLen = 0;
29182 uint32_t nConsumedOnEntry = *pnConsumed;
29183 uint32_t nNeeded = 0U;
29184 uint8_t tmp193__;
29185 nNeeded += 2;
29186 while (pSrc->present) {
29187 if (nNeeded > nBuf)
29188 return DOT11F_BUFFER_OVERFLOW;
29189 *pBuf = 221;
29190 ++pBuf; ++(*pnConsumed);
29191 pIeLen = pBuf;
29192 ++pBuf; ++(*pnConsumed);
29193 *pBuf = 0x0;
29194 ++pBuf; ++(*pnConsumed);
29195 *pBuf = 0x50;
29196 ++pBuf; ++(*pnConsumed);
29197 *pBuf = 0xf2;
29198 ++pBuf; ++(*pnConsumed);
29199 *pBuf = 0x2;
29200 ++pBuf; ++(*pnConsumed);
29201 *pBuf = 0x0;
29202 ++pBuf; ++(*pnConsumed);
29203 *pBuf = pSrc->version;
29204 *pnConsumed += 1;
29205 pBuf += 1;
29206 tmp193__ = 0U;
29207 tmp193__ |= (pSrc->acvo_uapsd << 0);
29208 tmp193__ |= (pSrc->acvi_uapsd << 1);
29209 tmp193__ |= (pSrc->acbk_uapsd << 2);
29210 tmp193__ |= (pSrc->acbe_uapsd << 3);
29211 tmp193__ |= (pSrc->reserved1 << 4);
29212 tmp193__ |= (pSrc->max_sp_length << 5);
29213 tmp193__ |= (pSrc->reserved2 << 7);
29214 if (unlikely(nBuf < 1))
29215 return DOT11F_INCOMPLETE_IE;
29216
29217 *pBuf = tmp193__;
29218 *pnConsumed += 1;
29219 /* fieldsEndFlag = 1 */
29220 nBuf -= 1 ;
29221 break;
29222 }
29223 (void)pCtx;
29224 if (pIeLen) {
29225 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
29226 }
29227 return DOT11F_PARSE_SUCCESS;
29228 } /* End dot11f_pack_ie_wmm_info_station. */
29229
dot11f_pack_ie_wmm_params(tpAniSirGlobal pCtx,tDot11fIEWMMParams * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)29230 uint32_t dot11f_pack_ie_wmm_params(tpAniSirGlobal pCtx,
29231 tDot11fIEWMMParams *pSrc,
29232 uint8_t *pBuf,
29233 uint32_t nBuf,
29234 uint32_t *pnConsumed)
29235 {
29236 uint8_t *pIeLen = 0;
29237 uint32_t nConsumedOnEntry = *pnConsumed;
29238 uint32_t nNeeded = 0U;
29239 uint8_t tmp194__;
29240 uint8_t tmp195__;
29241 uint8_t tmp196__;
29242 uint8_t tmp197__;
29243 uint8_t tmp198__;
29244 uint8_t tmp199__;
29245 uint8_t tmp200__;
29246 uint8_t tmp201__;
29247 nNeeded += 19;
29248 while (pSrc->present) {
29249 if (nNeeded > nBuf)
29250 return DOT11F_BUFFER_OVERFLOW;
29251 *pBuf = 221;
29252 ++pBuf; ++(*pnConsumed);
29253 pIeLen = pBuf;
29254 ++pBuf; ++(*pnConsumed);
29255 *pBuf = 0x0;
29256 ++pBuf; ++(*pnConsumed);
29257 *pBuf = 0x50;
29258 ++pBuf; ++(*pnConsumed);
29259 *pBuf = 0xf2;
29260 ++pBuf; ++(*pnConsumed);
29261 *pBuf = 0x2;
29262 ++pBuf; ++(*pnConsumed);
29263 *pBuf = 0x1;
29264 ++pBuf; ++(*pnConsumed);
29265 *pBuf = pSrc->version;
29266 *pnConsumed += 1;
29267 pBuf += 1;
29268 *pBuf = pSrc->qosInfo;
29269 *pnConsumed += 1;
29270 pBuf += 1;
29271 *pBuf = pSrc->reserved2;
29272 *pnConsumed += 1;
29273 pBuf += 1;
29274 tmp194__ = 0U;
29275 tmp194__ |= (pSrc->acbe_aifsn << 0);
29276 tmp194__ |= (pSrc->acbe_acm << 4);
29277 tmp194__ |= (pSrc->acbe_aci << 5);
29278 tmp194__ |= (pSrc->unused1 << 7);
29279 if (unlikely(nBuf < 1))
29280 return DOT11F_INCOMPLETE_IE;
29281
29282 *pBuf = tmp194__;
29283 *pnConsumed += 1;
29284 pBuf += 1;
29285 nBuf -= 1 ;
29286 tmp195__ = 0U;
29287 tmp195__ |= (pSrc->acbe_acwmin << 0);
29288 tmp195__ |= (pSrc->acbe_acwmax << 4);
29289 if (unlikely(nBuf < 1))
29290 return DOT11F_INCOMPLETE_IE;
29291
29292 *pBuf = tmp195__;
29293 *pnConsumed += 1;
29294 pBuf += 1;
29295 nBuf -= 1 ;
29296 frameshtons(pCtx, pBuf, pSrc->acbe_txoplimit, 0);
29297 *pnConsumed += 2;
29298 pBuf += 2;
29299 tmp196__ = 0U;
29300 tmp196__ |= (pSrc->acbk_aifsn << 0);
29301 tmp196__ |= (pSrc->acbk_acm << 4);
29302 tmp196__ |= (pSrc->acbk_aci << 5);
29303 tmp196__ |= (pSrc->unused2 << 7);
29304 if (unlikely(nBuf < 1))
29305 return DOT11F_INCOMPLETE_IE;
29306
29307 *pBuf = tmp196__;
29308 *pnConsumed += 1;
29309 pBuf += 1;
29310 nBuf -= 1 ;
29311 tmp197__ = 0U;
29312 tmp197__ |= (pSrc->acbk_acwmin << 0);
29313 tmp197__ |= (pSrc->acbk_acwmax << 4);
29314 if (unlikely(nBuf < 1))
29315 return DOT11F_INCOMPLETE_IE;
29316
29317 *pBuf = tmp197__;
29318 *pnConsumed += 1;
29319 pBuf += 1;
29320 nBuf -= 1 ;
29321 frameshtons(pCtx, pBuf, pSrc->acbk_txoplimit, 0);
29322 *pnConsumed += 2;
29323 pBuf += 2;
29324 tmp198__ = 0U;
29325 tmp198__ |= (pSrc->acvi_aifsn << 0);
29326 tmp198__ |= (pSrc->acvi_acm << 4);
29327 tmp198__ |= (pSrc->acvi_aci << 5);
29328 tmp198__ |= (pSrc->unused3 << 7);
29329 if (unlikely(nBuf < 1))
29330 return DOT11F_INCOMPLETE_IE;
29331
29332 *pBuf = tmp198__;
29333 *pnConsumed += 1;
29334 pBuf += 1;
29335 nBuf -= 1 ;
29336 tmp199__ = 0U;
29337 tmp199__ |= (pSrc->acvi_acwmin << 0);
29338 tmp199__ |= (pSrc->acvi_acwmax << 4);
29339 if (unlikely(nBuf < 1))
29340 return DOT11F_INCOMPLETE_IE;
29341
29342 *pBuf = tmp199__;
29343 *pnConsumed += 1;
29344 pBuf += 1;
29345 nBuf -= 1 ;
29346 frameshtons(pCtx, pBuf, pSrc->acvi_txoplimit, 0);
29347 *pnConsumed += 2;
29348 pBuf += 2;
29349 tmp200__ = 0U;
29350 tmp200__ |= (pSrc->acvo_aifsn << 0);
29351 tmp200__ |= (pSrc->acvo_acm << 4);
29352 tmp200__ |= (pSrc->acvo_aci << 5);
29353 tmp200__ |= (pSrc->unused4 << 7);
29354 if (unlikely(nBuf < 1))
29355 return DOT11F_INCOMPLETE_IE;
29356
29357 *pBuf = tmp200__;
29358 *pnConsumed += 1;
29359 pBuf += 1;
29360 nBuf -= 1 ;
29361 tmp201__ = 0U;
29362 tmp201__ |= (pSrc->acvo_acwmin << 0);
29363 tmp201__ |= (pSrc->acvo_acwmax << 4);
29364 if (unlikely(nBuf < 1))
29365 return DOT11F_INCOMPLETE_IE;
29366
29367 *pBuf = tmp201__;
29368 *pnConsumed += 1;
29369 pBuf += 1;
29370 nBuf -= 1 ;
29371 frameshtons(pCtx, pBuf, pSrc->acvo_txoplimit, 0);
29372 *pnConsumed += 2;
29373 /* fieldsEndFlag = 1 */
29374 break;
29375 }
29376 (void)pCtx;
29377 if (pIeLen) {
29378 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
29379 }
29380 return DOT11F_PARSE_SUCCESS;
29381 } /* End dot11f_pack_ie_wmm_params. */
29382
dot11f_pack_ie_wpa(tpAniSirGlobal pCtx,tDot11fIEWPA * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)29383 uint32_t dot11f_pack_ie_wpa(tpAniSirGlobal pCtx,
29384 tDot11fIEWPA *pSrc,
29385 uint8_t *pBuf,
29386 uint32_t nBuf,
29387 uint32_t *pnConsumed)
29388 {
29389 uint8_t *pIeLen = 0;
29390 uint32_t nConsumedOnEntry = *pnConsumed;
29391 uint32_t nNeeded = 0U;
29392 uint32_t status = DOT11F_PARSE_SUCCESS;
29393 status = dot11f_get_packed_iewpa(pCtx, pSrc, &nNeeded);
29394 if (!DOT11F_SUCCEEDED(status))
29395 return status;
29396 while (pSrc->present) {
29397 if (nNeeded > nBuf)
29398 return DOT11F_BUFFER_OVERFLOW;
29399 *pBuf = 221;
29400 ++pBuf; ++(*pnConsumed);
29401 pIeLen = pBuf;
29402 ++pBuf; ++(*pnConsumed);
29403 *pBuf = 0x0;
29404 ++pBuf; ++(*pnConsumed);
29405 *pBuf = 0x50;
29406 ++pBuf; ++(*pnConsumed);
29407 *pBuf = 0xf2;
29408 ++pBuf; ++(*pnConsumed);
29409 *pBuf = 0x1;
29410 ++pBuf; ++(*pnConsumed);
29411 frameshtons(pCtx, pBuf, pSrc->version, 0);
29412 *pnConsumed += 2;
29413 pBuf += 2;
29414 if (pSrc->multicast_cipher_present) {
29415 DOT11F_MEMCPY(pCtx, pBuf, pSrc->multicast_cipher, 4);
29416 *pnConsumed += 4;
29417 pBuf += 4;
29418 } else {
29419 break;
29420 }
29421 if (pSrc->unicast_cipher_count) {
29422 frameshtons(pCtx, pBuf, pSrc->unicast_cipher_count, 0);
29423 *pnConsumed += 2;
29424 pBuf += 2;
29425 } else {
29426 break;
29427 }
29428 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->unicast_ciphers), (pSrc->unicast_cipher_count * 4));
29429 *pnConsumed += (pSrc->unicast_cipher_count * 4);
29430 pBuf += (pSrc->unicast_cipher_count * 4);
29431 if (pSrc->auth_suite_count) {
29432 frameshtons(pCtx, pBuf, pSrc->auth_suite_count, 0);
29433 *pnConsumed += 2;
29434 pBuf += 2;
29435 } else {
29436 break;
29437 }
29438 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->auth_suites), (pSrc->auth_suite_count * 4));
29439 *pnConsumed += (pSrc->auth_suite_count * 4);
29440 pBuf += (pSrc->auth_suite_count * 4);
29441 if (pSrc->caps) {
29442 frameshtons(pCtx, pBuf, pSrc->caps, 0);
29443 *pnConsumed += 2;
29444 /* fieldsEndFlag = 1 */
29445 } else {
29446 break;
29447 }
29448 break;
29449 }
29450 (void)pCtx;
29451 if (pIeLen) {
29452 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
29453 }
29454 return status;
29455 } /* End dot11f_pack_ie_wpa. */
29456
dot11f_pack_ie_wpa_opaque(tpAniSirGlobal pCtx,tDot11fIEWPAOpaque * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)29457 uint32_t dot11f_pack_ie_wpa_opaque(tpAniSirGlobal pCtx,
29458 tDot11fIEWPAOpaque *pSrc,
29459 uint8_t *pBuf,
29460 uint32_t nBuf,
29461 uint32_t *pnConsumed)
29462 {
29463 uint8_t *pIeLen = 0;
29464 uint32_t nConsumedOnEntry = *pnConsumed;
29465 uint32_t nNeeded = 0U;
29466 nNeeded += pSrc->num_data;
29467 while (pSrc->present) {
29468 if (nNeeded > nBuf)
29469 return DOT11F_BUFFER_OVERFLOW;
29470 *pBuf = 221;
29471 ++pBuf; ++(*pnConsumed);
29472 pIeLen = pBuf;
29473 ++pBuf; ++(*pnConsumed);
29474 *pBuf = 0x0;
29475 ++pBuf; ++(*pnConsumed);
29476 *pBuf = 0x50;
29477 ++pBuf; ++(*pnConsumed);
29478 *pBuf = 0xf2;
29479 ++pBuf; ++(*pnConsumed);
29480 *pBuf = 0x1;
29481 ++pBuf; ++(*pnConsumed);
29482 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->data), pSrc->num_data);
29483 *pnConsumed += pSrc->num_data;
29484 /* fieldsEndFlag = 1 */
29485 break;
29486 }
29487 (void)pCtx;
29488 if (pIeLen) {
29489 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
29490 }
29491 return DOT11F_PARSE_SUCCESS;
29492 } /* End dot11f_pack_ie_wpa_opaque. */
29493
dot11f_pack_ie_wsc(tpAniSirGlobal pCtx,tDot11fIEWSC * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)29494 uint32_t dot11f_pack_ie_wsc(tpAniSirGlobal pCtx,
29495 tDot11fIEWSC *pSrc,
29496 uint8_t *pBuf,
29497 uint32_t nBuf,
29498 uint32_t *pnConsumed)
29499 {
29500 uint8_t *pIeLen = 0;
29501 uint32_t n, idx = 0, idxlast;
29502 uint32_t nConsumedSoFar, nConsumedNow;
29503 uint32_t status = DOT11F_PARSE_SUCCESS;
29504 uint32_t nNeeded = 0U;
29505 status = dot11f_get_packed_iewsc(pCtx, pSrc, &nNeeded);
29506 if (!DOT11F_SUCCEEDED(status))
29507 return status;
29508 if (nNeeded > nBuf)
29509 return DOT11F_BUFFER_OVERFLOW;
29510 (void)pCtx;
29511 if (pSrc->present) {
29512 do {
29513 nConsumedSoFar = *pnConsumed;
29514 *pBuf = 221;
29515 ++pBuf; --nBuf; ++(*pnConsumed);
29516 pIeLen = pBuf;
29517 ++pBuf; --nBuf; ++(*pnConsumed);
29518 *pBuf = 0x0;
29519 ++pBuf; --nBuf; ++(*pnConsumed);
29520 *pBuf = 0x50;
29521 ++pBuf; --nBuf; ++(*pnConsumed);
29522 *pBuf = 0xf2;
29523 ++pBuf; --nBuf; ++(*pnConsumed);
29524 *pBuf = 0x4;
29525 ++pBuf; --nBuf; ++(*pnConsumed);
29526 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
29527 nConsumedNow = *pnConsumed;
29528 idxlast = idx;
29529 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
29530 pnConsumed,
29531 TLVS_WSC +
29532 idx, &idx);
29533 nConsumedNow = *pnConsumed - nConsumedNow;
29534 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
29535 pBuf += nConsumedNow;
29536 nBuf -= nConsumedNow;
29537 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
29538 }
29539 return status;
29540 } /* End dot11f_pack_ie_wsc. */
29541
dot11f_pack_ie_wsc_assoc_req(tpAniSirGlobal pCtx,tDot11fIEWscAssocReq * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)29542 uint32_t dot11f_pack_ie_wsc_assoc_req(tpAniSirGlobal pCtx,
29543 tDot11fIEWscAssocReq *pSrc,
29544 uint8_t *pBuf,
29545 uint32_t nBuf,
29546 uint32_t *pnConsumed)
29547 {
29548 uint8_t *pIeLen = 0;
29549 uint32_t n, idx = 0, idxlast;
29550 uint32_t nConsumedSoFar, nConsumedNow;
29551 uint32_t status = DOT11F_PARSE_SUCCESS;
29552 uint32_t nNeeded = 0U;
29553 status = dot11f_get_packed_ie_wsc_assoc_req(pCtx, pSrc, &nNeeded);
29554 if (!DOT11F_SUCCEEDED(status))
29555 return status;
29556 if (nNeeded > nBuf)
29557 return DOT11F_BUFFER_OVERFLOW;
29558 (void)pCtx;
29559 if (pSrc->present) {
29560 do {
29561 nConsumedSoFar = *pnConsumed;
29562 *pBuf = 221;
29563 ++pBuf; --nBuf; ++(*pnConsumed);
29564 pIeLen = pBuf;
29565 ++pBuf; --nBuf; ++(*pnConsumed);
29566 *pBuf = 0x0;
29567 ++pBuf; --nBuf; ++(*pnConsumed);
29568 *pBuf = 0x50;
29569 ++pBuf; --nBuf; ++(*pnConsumed);
29570 *pBuf = 0xf2;
29571 ++pBuf; --nBuf; ++(*pnConsumed);
29572 *pBuf = 0x4;
29573 ++pBuf; --nBuf; ++(*pnConsumed);
29574 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
29575 nConsumedNow = *pnConsumed;
29576 idxlast = idx;
29577 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
29578 pnConsumed,
29579 TLVS_WscAssocReq +
29580 idx, &idx);
29581 nConsumedNow = *pnConsumed - nConsumedNow;
29582 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
29583 pBuf += nConsumedNow;
29584 nBuf -= nConsumedNow;
29585 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
29586 }
29587 return status;
29588 } /* End dot11f_pack_ie_wsc_assoc_req. */
29589
dot11f_pack_ie_wsc_assoc_res(tpAniSirGlobal pCtx,tDot11fIEWscAssocRes * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)29590 uint32_t dot11f_pack_ie_wsc_assoc_res(tpAniSirGlobal pCtx,
29591 tDot11fIEWscAssocRes *pSrc,
29592 uint8_t *pBuf,
29593 uint32_t nBuf,
29594 uint32_t *pnConsumed)
29595 {
29596 uint8_t *pIeLen = 0;
29597 uint32_t n, idx = 0, idxlast;
29598 uint32_t nConsumedSoFar, nConsumedNow;
29599 uint32_t status = DOT11F_PARSE_SUCCESS;
29600 uint32_t nNeeded = 0U;
29601 status = dot11f_get_packed_ie_wsc_assoc_res(pCtx, pSrc, &nNeeded);
29602 if (!DOT11F_SUCCEEDED(status))
29603 return status;
29604 if (nNeeded > nBuf)
29605 return DOT11F_BUFFER_OVERFLOW;
29606 (void)pCtx;
29607 if (pSrc->present) {
29608 do {
29609 nConsumedSoFar = *pnConsumed;
29610 *pBuf = 221;
29611 ++pBuf; --nBuf; ++(*pnConsumed);
29612 pIeLen = pBuf;
29613 ++pBuf; --nBuf; ++(*pnConsumed);
29614 *pBuf = 0x0;
29615 ++pBuf; --nBuf; ++(*pnConsumed);
29616 *pBuf = 0x50;
29617 ++pBuf; --nBuf; ++(*pnConsumed);
29618 *pBuf = 0xf2;
29619 ++pBuf; --nBuf; ++(*pnConsumed);
29620 *pBuf = 0x4;
29621 ++pBuf; --nBuf; ++(*pnConsumed);
29622 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
29623 nConsumedNow = *pnConsumed;
29624 idxlast = idx;
29625 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
29626 pnConsumed,
29627 TLVS_WscAssocRes +
29628 idx, &idx);
29629 nConsumedNow = *pnConsumed - nConsumedNow;
29630 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
29631 pBuf += nConsumedNow;
29632 nBuf -= nConsumedNow;
29633 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
29634 }
29635 return status;
29636 } /* End dot11f_pack_ie_wsc_assoc_res. */
29637
dot11f_pack_ie_wsc_beacon(tpAniSirGlobal pCtx,tDot11fIEWscBeacon * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)29638 uint32_t dot11f_pack_ie_wsc_beacon(tpAniSirGlobal pCtx,
29639 tDot11fIEWscBeacon *pSrc,
29640 uint8_t *pBuf,
29641 uint32_t nBuf,
29642 uint32_t *pnConsumed)
29643 {
29644 uint8_t *pIeLen = 0;
29645 uint32_t n, idx = 0, idxlast;
29646 uint32_t nConsumedSoFar, nConsumedNow;
29647 uint32_t status = DOT11F_PARSE_SUCCESS;
29648 uint32_t nNeeded = 0U;
29649 status = dot11f_get_packed_ie_wsc_beacon(pCtx, pSrc, &nNeeded);
29650 if (!DOT11F_SUCCEEDED(status))
29651 return status;
29652 if (nNeeded > nBuf)
29653 return DOT11F_BUFFER_OVERFLOW;
29654 (void)pCtx;
29655 if (pSrc->present) {
29656 do {
29657 nConsumedSoFar = *pnConsumed;
29658 *pBuf = 221;
29659 ++pBuf; --nBuf; ++(*pnConsumed);
29660 pIeLen = pBuf;
29661 ++pBuf; --nBuf; ++(*pnConsumed);
29662 *pBuf = 0x0;
29663 ++pBuf; --nBuf; ++(*pnConsumed);
29664 *pBuf = 0x50;
29665 ++pBuf; --nBuf; ++(*pnConsumed);
29666 *pBuf = 0xf2;
29667 ++pBuf; --nBuf; ++(*pnConsumed);
29668 *pBuf = 0x4;
29669 ++pBuf; --nBuf; ++(*pnConsumed);
29670 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
29671 nConsumedNow = *pnConsumed;
29672 idxlast = idx;
29673 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
29674 pnConsumed,
29675 TLVS_WscBeacon +
29676 idx, &idx);
29677 nConsumedNow = *pnConsumed - nConsumedNow;
29678 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
29679 pBuf += nConsumedNow;
29680 nBuf -= nConsumedNow;
29681 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
29682 }
29683 return status;
29684 } /* End dot11f_pack_ie_wsc_beacon. */
29685
dot11f_pack_ie_wsc_beacon_probe_res(tpAniSirGlobal pCtx,tDot11fIEWscBeaconProbeRes * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)29686 uint32_t dot11f_pack_ie_wsc_beacon_probe_res(tpAniSirGlobal pCtx,
29687 tDot11fIEWscBeaconProbeRes *pSrc,
29688 uint8_t *pBuf,
29689 uint32_t nBuf,
29690 uint32_t *pnConsumed)
29691 {
29692 uint8_t *pIeLen = 0;
29693 uint32_t n, idx = 0, idxlast;
29694 uint32_t nConsumedSoFar, nConsumedNow;
29695 uint32_t status = DOT11F_PARSE_SUCCESS;
29696 uint32_t nNeeded = 0U;
29697 status = dot11f_get_packed_ie_wsc_beacon_probe_res(pCtx, pSrc, &nNeeded);
29698 if (!DOT11F_SUCCEEDED(status))
29699 return status;
29700 if (nNeeded > nBuf)
29701 return DOT11F_BUFFER_OVERFLOW;
29702 (void)pCtx;
29703 if (pSrc->present) {
29704 do {
29705 nConsumedSoFar = *pnConsumed;
29706 *pBuf = 221;
29707 ++pBuf; --nBuf; ++(*pnConsumed);
29708 pIeLen = pBuf;
29709 ++pBuf; --nBuf; ++(*pnConsumed);
29710 *pBuf = 0x0;
29711 ++pBuf; --nBuf; ++(*pnConsumed);
29712 *pBuf = 0x50;
29713 ++pBuf; --nBuf; ++(*pnConsumed);
29714 *pBuf = 0xf2;
29715 ++pBuf; --nBuf; ++(*pnConsumed);
29716 *pBuf = 0x4;
29717 ++pBuf; --nBuf; ++(*pnConsumed);
29718 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
29719 nConsumedNow = *pnConsumed;
29720 idxlast = idx;
29721 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
29722 pnConsumed,
29723 TLVS_WscBeaconProbeRes +
29724 idx, &idx);
29725 nConsumedNow = *pnConsumed - nConsumedNow;
29726 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
29727 pBuf += nConsumedNow;
29728 nBuf -= nConsumedNow;
29729 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
29730 }
29731 return status;
29732 } /* End dot11f_pack_ie_wsc_beacon_probe_res. */
29733
dot11f_pack_ie_wsc_ie_opaque(tpAniSirGlobal pCtx,tDot11fIEWscIEOpaque * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)29734 uint32_t dot11f_pack_ie_wsc_ie_opaque(tpAniSirGlobal pCtx,
29735 tDot11fIEWscIEOpaque *pSrc,
29736 uint8_t *pBuf,
29737 uint32_t nBuf,
29738 uint32_t *pnConsumed)
29739 {
29740 uint8_t *pIeLen = 0;
29741 uint32_t nConsumedOnEntry = *pnConsumed;
29742 uint32_t nNeeded = 0U;
29743 nNeeded += pSrc->num_data;
29744 while (pSrc->present) {
29745 if (nNeeded > nBuf)
29746 return DOT11F_BUFFER_OVERFLOW;
29747 *pBuf = 221;
29748 ++pBuf; ++(*pnConsumed);
29749 pIeLen = pBuf;
29750 ++pBuf; ++(*pnConsumed);
29751 *pBuf = 0x0;
29752 ++pBuf; ++(*pnConsumed);
29753 *pBuf = 0x50;
29754 ++pBuf; ++(*pnConsumed);
29755 *pBuf = 0xf2;
29756 ++pBuf; ++(*pnConsumed);
29757 *pBuf = 0x4;
29758 ++pBuf; ++(*pnConsumed);
29759 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->data), pSrc->num_data);
29760 *pnConsumed += pSrc->num_data;
29761 /* fieldsEndFlag = 1 */
29762 break;
29763 }
29764 (void)pCtx;
29765 if (pIeLen) {
29766 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
29767 }
29768 return DOT11F_PARSE_SUCCESS;
29769 } /* End dot11f_pack_ie_wsc_ie_opaque. */
29770
dot11f_pack_ie_wsc_probe_req(tpAniSirGlobal pCtx,tDot11fIEWscProbeReq * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)29771 uint32_t dot11f_pack_ie_wsc_probe_req(tpAniSirGlobal pCtx,
29772 tDot11fIEWscProbeReq *pSrc,
29773 uint8_t *pBuf,
29774 uint32_t nBuf,
29775 uint32_t *pnConsumed)
29776 {
29777 uint8_t *pIeLen = 0;
29778 uint32_t n, idx = 0, idxlast;
29779 uint32_t nConsumedSoFar, nConsumedNow;
29780 uint32_t status = DOT11F_PARSE_SUCCESS;
29781 uint32_t nNeeded = 0U;
29782 status = dot11f_get_packed_ie_wsc_probe_req(pCtx, pSrc, &nNeeded);
29783 if (!DOT11F_SUCCEEDED(status))
29784 return status;
29785 if (nNeeded > nBuf)
29786 return DOT11F_BUFFER_OVERFLOW;
29787 (void)pCtx;
29788 if (pSrc->present) {
29789 do {
29790 nConsumedSoFar = *pnConsumed;
29791 *pBuf = 221;
29792 ++pBuf; --nBuf; ++(*pnConsumed);
29793 pIeLen = pBuf;
29794 ++pBuf; --nBuf; ++(*pnConsumed);
29795 *pBuf = 0x0;
29796 ++pBuf; --nBuf; ++(*pnConsumed);
29797 *pBuf = 0x50;
29798 ++pBuf; --nBuf; ++(*pnConsumed);
29799 *pBuf = 0xf2;
29800 ++pBuf; --nBuf; ++(*pnConsumed);
29801 *pBuf = 0x4;
29802 ++pBuf; --nBuf; ++(*pnConsumed);
29803 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
29804 nConsumedNow = *pnConsumed;
29805 idxlast = idx;
29806 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
29807 pnConsumed,
29808 TLVS_WscProbeReq +
29809 idx, &idx);
29810 nConsumedNow = *pnConsumed - nConsumedNow;
29811 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
29812 pBuf += nConsumedNow;
29813 nBuf -= nConsumedNow;
29814 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
29815 }
29816 return status;
29817 } /* End dot11f_pack_ie_wsc_probe_req. */
29818
dot11f_pack_ie_wsc_probe_res(tpAniSirGlobal pCtx,tDot11fIEWscProbeRes * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)29819 uint32_t dot11f_pack_ie_wsc_probe_res(tpAniSirGlobal pCtx,
29820 tDot11fIEWscProbeRes *pSrc,
29821 uint8_t *pBuf,
29822 uint32_t nBuf,
29823 uint32_t *pnConsumed)
29824 {
29825 uint8_t *pIeLen = 0;
29826 uint32_t n, idx = 0, idxlast;
29827 uint32_t nConsumedSoFar, nConsumedNow;
29828 uint32_t status = DOT11F_PARSE_SUCCESS;
29829 uint32_t nNeeded = 0U;
29830 status = dot11f_get_packed_ie_wsc_probe_res(pCtx, pSrc, &nNeeded);
29831 if (!DOT11F_SUCCEEDED(status))
29832 return status;
29833 if (nNeeded > nBuf)
29834 return DOT11F_BUFFER_OVERFLOW;
29835 (void)pCtx;
29836 if (pSrc->present) {
29837 do {
29838 nConsumedSoFar = *pnConsumed;
29839 *pBuf = 221;
29840 ++pBuf; --nBuf; ++(*pnConsumed);
29841 pIeLen = pBuf;
29842 ++pBuf; --nBuf; ++(*pnConsumed);
29843 *pBuf = 0x0;
29844 ++pBuf; --nBuf; ++(*pnConsumed);
29845 *pBuf = 0x50;
29846 ++pBuf; --nBuf; ++(*pnConsumed);
29847 *pBuf = 0xf2;
29848 ++pBuf; --nBuf; ++(*pnConsumed);
29849 *pBuf = 0x4;
29850 ++pBuf; --nBuf; ++(*pnConsumed);
29851 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
29852 nConsumedNow = *pnConsumed;
29853 idxlast = idx;
29854 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
29855 pnConsumed,
29856 TLVS_WscProbeRes +
29857 idx, &idx);
29858 nConsumedNow = *pnConsumed - nConsumedNow;
29859 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
29860 pBuf += nConsumedNow;
29861 nBuf -= nConsumedNow;
29862 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
29863 }
29864 return status;
29865 } /* End dot11f_pack_ie_wsc_probe_res. */
29866
dot11f_pack_ie_wsc_reassoc_res(tpAniSirGlobal pCtx,tDot11fIEWscReassocRes * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)29867 uint32_t dot11f_pack_ie_wsc_reassoc_res(tpAniSirGlobal pCtx,
29868 tDot11fIEWscReassocRes *pSrc,
29869 uint8_t *pBuf,
29870 uint32_t nBuf,
29871 uint32_t *pnConsumed)
29872 {
29873 uint8_t *pIeLen = 0;
29874 uint32_t n, idx = 0, idxlast;
29875 uint32_t nConsumedSoFar, nConsumedNow;
29876 uint32_t status = DOT11F_PARSE_SUCCESS;
29877 uint32_t nNeeded = 0U;
29878 status = dot11f_get_packed_ie_wsc_reassoc_res(pCtx, pSrc, &nNeeded);
29879 if (!DOT11F_SUCCEEDED(status))
29880 return status;
29881 if (nNeeded > nBuf)
29882 return DOT11F_BUFFER_OVERFLOW;
29883 (void)pCtx;
29884 if (pSrc->present) {
29885 do {
29886 nConsumedSoFar = *pnConsumed;
29887 *pBuf = 221;
29888 ++pBuf; --nBuf; ++(*pnConsumed);
29889 pIeLen = pBuf;
29890 ++pBuf; --nBuf; ++(*pnConsumed);
29891 *pBuf = 0x0;
29892 ++pBuf; --nBuf; ++(*pnConsumed);
29893 *pBuf = 0x50;
29894 ++pBuf; --nBuf; ++(*pnConsumed);
29895 *pBuf = 0xf2;
29896 ++pBuf; --nBuf; ++(*pnConsumed);
29897 *pBuf = 0x4;
29898 ++pBuf; --nBuf; ++(*pnConsumed);
29899 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
29900 nConsumedNow = *pnConsumed;
29901 idxlast = idx;
29902 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
29903 pnConsumed,
29904 TLVS_WscReassocRes +
29905 idx, &idx);
29906 nConsumedNow = *pnConsumed - nConsumedNow;
29907 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
29908 pBuf += nConsumedNow;
29909 nBuf -= nConsumedNow;
29910 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
29911 }
29912 return status;
29913 } /* End dot11f_pack_ie_wsc_reassoc_res. */
29914
dot11f_pack_ie_addba_extn_element(tpAniSirGlobal pCtx,tDot11fIEaddba_extn_element * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)29915 uint32_t dot11f_pack_ie_addba_extn_element(tpAniSirGlobal pCtx,
29916 tDot11fIEaddba_extn_element *pSrc,
29917 uint8_t *pBuf,
29918 uint32_t nBuf,
29919 uint32_t *pnConsumed)
29920 {
29921 uint8_t *pIeLen = 0;
29922 uint32_t nConsumedOnEntry = *pnConsumed;
29923 uint32_t nNeeded = 0U;
29924 uint8_t tmp202__;
29925 nNeeded += 1;
29926 while (pSrc->present) {
29927 if (nNeeded > nBuf)
29928 return DOT11F_BUFFER_OVERFLOW;
29929 *pBuf = 159;
29930 ++pBuf; ++(*pnConsumed);
29931 pIeLen = pBuf;
29932 ++pBuf; ++(*pnConsumed);
29933 tmp202__ = 0U;
29934 tmp202__ |= (pSrc->no_fragmentation << 0);
29935 tmp202__ |= (pSrc->he_frag_operation << 1);
29936 tmp202__ |= (pSrc->reserved << 3);
29937 tmp202__ |= (pSrc->extd_buff_size << 5);
29938 if (unlikely(nBuf < 1))
29939 return DOT11F_INCOMPLETE_IE;
29940
29941 *pBuf = tmp202__;
29942 *pnConsumed += 1;
29943 /* fieldsEndFlag = 1 */
29944 nBuf -= 1 ;
29945 break;
29946 }
29947 (void)pCtx;
29948 if (pIeLen) {
29949 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
29950 }
29951 return DOT11F_PARSE_SUCCESS;
29952 } /* End dot11f_pack_ie_addba_extn_element. */
29953
dot11f_pack_ie_bss_color_change(tpAniSirGlobal pCtx,tDot11fIEbss_color_change * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)29954 uint32_t dot11f_pack_ie_bss_color_change(tpAniSirGlobal pCtx,
29955 tDot11fIEbss_color_change *pSrc,
29956 uint8_t *pBuf,
29957 uint32_t nBuf,
29958 uint32_t *pnConsumed)
29959 {
29960 uint8_t *pIeLen = 0;
29961 uint32_t nConsumedOnEntry = *pnConsumed;
29962 uint32_t nNeeded = 0U;
29963 uint8_t tmp203__;
29964 nNeeded += 2;
29965 while (pSrc->present) {
29966 if (nNeeded > nBuf)
29967 return DOT11F_BUFFER_OVERFLOW;
29968 *pBuf = 255;
29969 ++pBuf; ++(*pnConsumed);
29970 pIeLen = pBuf;
29971 ++pBuf; ++(*pnConsumed);
29972 *pBuf = 42;
29973 ++pBuf; ++(*pnConsumed);
29974 *pBuf = pSrc->countdown;
29975 *pnConsumed += 1;
29976 pBuf += 1;
29977 tmp203__ = 0U;
29978 tmp203__ |= (pSrc->new_color << 0);
29979 tmp203__ |= (pSrc->reserved << 6);
29980 if (unlikely(nBuf < 1))
29981 return DOT11F_INCOMPLETE_IE;
29982
29983 *pBuf = tmp203__;
29984 *pnConsumed += 1;
29985 /* fieldsEndFlag = 1 */
29986 nBuf -= 1 ;
29987 break;
29988 }
29989 (void)pCtx;
29990 if (pIeLen) {
29991 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
29992 }
29993 return DOT11F_PARSE_SUCCESS;
29994 } /* End dot11f_pack_ie_bss_color_change. */
29995
dot11f_pack_ie_bss_max_idle_period(tpAniSirGlobal pCtx,tDot11fIEbss_max_idle_period * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)29996 uint32_t dot11f_pack_ie_bss_max_idle_period(tpAniSirGlobal pCtx,
29997 tDot11fIEbss_max_idle_period *pSrc,
29998 uint8_t *pBuf,
29999 uint32_t nBuf,
30000 uint32_t *pnConsumed)
30001 {
30002 uint8_t *pIeLen = 0;
30003 uint32_t nConsumedOnEntry = *pnConsumed;
30004 uint32_t nNeeded = 0U;
30005 uint8_t tmp204__;
30006 nNeeded += 3;
30007 while (pSrc->present) {
30008 if (nNeeded > nBuf)
30009 return DOT11F_BUFFER_OVERFLOW;
30010 *pBuf = 90;
30011 ++pBuf; ++(*pnConsumed);
30012 pIeLen = pBuf;
30013 ++pBuf; ++(*pnConsumed);
30014 frameshtons(pCtx, pBuf, pSrc->max_idle_period, 0);
30015 *pnConsumed += 2;
30016 pBuf += 2;
30017 tmp204__ = 0U;
30018 tmp204__ |= (pSrc->prot_keep_alive_reqd << 0);
30019 tmp204__ |= (pSrc->reserved << 1);
30020 if (unlikely(nBuf < 1))
30021 return DOT11F_INCOMPLETE_IE;
30022
30023 *pBuf = tmp204__;
30024 *pnConsumed += 1;
30025 /* fieldsEndFlag = 1 */
30026 nBuf -= 1 ;
30027 break;
30028 }
30029 (void)pCtx;
30030 if (pIeLen) {
30031 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
30032 }
30033 return DOT11F_PARSE_SUCCESS;
30034 } /* End dot11f_pack_ie_bss_max_idle_period. */
30035
dot11f_pack_ie_descriptor_element(tpAniSirGlobal pCtx,tDot11fIEdescriptor_element * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)30036 uint32_t dot11f_pack_ie_descriptor_element(tpAniSirGlobal pCtx,
30037 tDot11fIEdescriptor_element *pSrc,
30038 uint8_t *pBuf,
30039 uint32_t nBuf,
30040 uint32_t *pnConsumed)
30041 {
30042 uint8_t *pIeLen = 0;
30043 uint32_t nConsumedOnEntry = *pnConsumed;
30044 uint32_t nNeeded = 0U;
30045 uint32_t status = DOT11F_PARSE_SUCCESS;
30046 status = dot11f_get_packed_ie_descriptor_element(pCtx, pSrc, &nNeeded);
30047 if (!DOT11F_SUCCEEDED(status))
30048 return status;
30049 while (pSrc->present) {
30050 if (nNeeded > nBuf)
30051 return DOT11F_BUFFER_OVERFLOW;
30052 *pBuf = 255;
30053 ++pBuf; --nBuf; ++(*pnConsumed);
30054 pIeLen = pBuf;
30055 ++pBuf; --nBuf; ++(*pnConsumed);
30056 *pBuf = 88;
30057 ++pBuf; --nBuf; ++(*pnConsumed);
30058 *pBuf = pSrc->request_type;
30059 *pnConsumed += 1;
30060 pBuf += 1;
30061 frameshtons(pCtx, pBuf, pSrc->user_priority_control, 0);
30062 *pnConsumed += 2;
30063 pBuf += 2;
30064 frameshtonl(pCtx, pBuf, pSrc->stream_timeout, 0);
30065 *pnConsumed += 4;
30066 pBuf += 4;
30067 status = pack_core(pCtx,
30068 (uint8_t *)pSrc,
30069 pBuf,
30070 nBuf,
30071 pnConsumed,
30072 FFS_descriptor_element,
30073 IES_descriptor_element);
30074 break;
30075 }
30076 (void)pCtx;
30077 if (pIeLen) {
30078 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
30079 }
30080 return status;
30081 } /* End dot11f_pack_ie_descriptor_element. */
30082
dot11f_pack_ie_dh_parameter_element(tpAniSirGlobal pCtx,tDot11fIEdh_parameter_element * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)30083 uint32_t dot11f_pack_ie_dh_parameter_element(tpAniSirGlobal pCtx,
30084 tDot11fIEdh_parameter_element *pSrc,
30085 uint8_t *pBuf,
30086 uint32_t nBuf,
30087 uint32_t *pnConsumed)
30088 {
30089 uint8_t *pIeLen = 0;
30090 uint32_t nConsumedOnEntry = *pnConsumed;
30091 uint32_t nNeeded = 0U;
30092 nNeeded += (pSrc->num_public_key + 2);
30093 while (pSrc->present) {
30094 if (nNeeded > nBuf)
30095 return DOT11F_BUFFER_OVERFLOW;
30096 *pBuf = 255;
30097 ++pBuf; ++(*pnConsumed);
30098 pIeLen = pBuf;
30099 ++pBuf; ++(*pnConsumed);
30100 *pBuf = 32;
30101 ++pBuf; ++(*pnConsumed);
30102 DOT11F_MEMCPY(pCtx, pBuf, pSrc->group, 2);
30103 *pnConsumed += 2;
30104 pBuf += 2;
30105 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->public_key), pSrc->num_public_key);
30106 *pnConsumed += pSrc->num_public_key;
30107 /* fieldsEndFlag = 1 */
30108 break;
30109 }
30110 (void)pCtx;
30111 if (pIeLen) {
30112 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
30113 }
30114 return DOT11F_PARSE_SUCCESS;
30115 } /* End dot11f_pack_ie_dh_parameter_element. */
30116
dot11f_pack_ie_eht_cap(tpAniSirGlobal pCtx,tDot11fIEeht_cap * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)30117 uint32_t dot11f_pack_ie_eht_cap(tpAniSirGlobal pCtx,
30118 tDot11fIEeht_cap *pSrc,
30119 uint8_t *pBuf,
30120 uint32_t nBuf,
30121 uint32_t *pnConsumed)
30122 {
30123 uint8_t *pIeLen = 0;
30124 uint32_t nConsumedOnEntry = *pnConsumed;
30125 uint32_t nNeeded = 0U;
30126 uint16_t tmp205__;
30127 uint32_t tmp206__;
30128 uint32_t tmp207__;
30129 uint8_t tmp208__;
30130 uint32_t tmp209__;
30131 uint32_t tmp210__;
30132 uint32_t tmp211__;
30133 uint8_t tmp212__;
30134 uint32_t status = DOT11F_PARSE_SUCCESS;
30135 status = dot11f_get_packed_ie_eht_cap(pCtx, pSrc, &nNeeded);
30136 if (!DOT11F_SUCCEEDED(status))
30137 return status;
30138 while (pSrc->present) {
30139 if (nNeeded > nBuf)
30140 return DOT11F_BUFFER_OVERFLOW;
30141 *pBuf = 255;
30142 ++pBuf; ++(*pnConsumed);
30143 pIeLen = pBuf;
30144 ++pBuf; ++(*pnConsumed);
30145 *pBuf = 108;
30146 ++pBuf; ++(*pnConsumed);
30147 tmp205__ = 0U;
30148 tmp205__ |= (pSrc->epcs_pri_access << 0);
30149 tmp205__ |= (pSrc->eht_om_ctl << 1);
30150 tmp205__ |= (pSrc->triggered_txop_sharing_mode1 << 2);
30151 tmp205__ |= (pSrc->triggered_txop_sharing_mode2 << 3);
30152 tmp205__ |= (pSrc->restricted_twt << 4);
30153 tmp205__ |= (pSrc->scs_traffic_desc << 5);
30154 tmp205__ |= (pSrc->max_mpdu_len << 6);
30155 tmp205__ |= (pSrc->max_a_mpdu_len_exponent_ext << 8);
30156 tmp205__ |= (pSrc->eht_trs_support << 9);
30157 tmp205__ |= (pSrc->txop_return_support_txop_share_m2 << 10);
30158 tmp205__ |= (pSrc->two_bqrs_support << 11);
30159 tmp205__ |= (pSrc->eht_link_adaptation_support << 12);
30160 tmp205__ |= (pSrc->reserved << 14);
30161 if (unlikely(nBuf < 2))
30162 return DOT11F_INCOMPLETE_IE;
30163
30164 frameshtons(pCtx, pBuf, tmp205__, 0);
30165 *pnConsumed += 2;
30166 pBuf += 2;
30167 nBuf -= 2 ;
30168 tmp206__ = 0U;
30169 tmp206__ |= (pSrc->reserved2 << 0);
30170 tmp206__ |= (pSrc->support_320mhz_6ghz << 1);
30171 tmp206__ |= (pSrc->ru_242tone_wt_20mhz << 2);
30172 tmp206__ |= (pSrc->ndp_4x_eht_ltf_3dot2_us_gi << 3);
30173 tmp206__ |= (pSrc->partial_bw_mu_mimo << 4);
30174 tmp206__ |= (pSrc->su_beamformer << 5);
30175 tmp206__ |= (pSrc->su_beamformee << 6);
30176 tmp206__ |= (pSrc->bfee_ss_le_80mhz << 7);
30177 tmp206__ |= (pSrc->bfee_ss_160mhz << 10);
30178 tmp206__ |= (pSrc->bfee_ss_320mhz << 13);
30179 tmp206__ |= (pSrc->num_sounding_dim_le_80mhz << 16);
30180 tmp206__ |= (pSrc->num_sounding_dim_160mhz << 19);
30181 tmp206__ |= (pSrc->num_sounding_dim_320mhz << 22);
30182 tmp206__ |= (pSrc->ng_16_su_feedback << 25);
30183 tmp206__ |= (pSrc->ng_16_mu_feedback << 26);
30184 tmp206__ |= (pSrc->cb_sz_4_2_su_feedback << 27);
30185 tmp206__ |= (pSrc->cb_sz_7_5_su_feedback << 28);
30186 tmp206__ |= (pSrc->trig_su_bforming_feedback << 29);
30187 tmp206__ |= (pSrc->trig_mu_bforming_partial_bw_feedback << 30);
30188 tmp206__ |= (pSrc->triggered_cqi_feedback << 31);
30189 if (unlikely(nBuf < 4))
30190 return DOT11F_INCOMPLETE_IE;
30191
30192 frameshtonl(pCtx, pBuf, tmp206__, 0);
30193 *pnConsumed += 4;
30194 pBuf += 4;
30195 nBuf -= 4 ;
30196 tmp207__ = 0U;
30197 tmp207__ |= (pSrc->partial_bw_dl_mu_mimo << 0);
30198 tmp207__ |= (pSrc->psr_based_sr << 1);
30199 tmp207__ |= (pSrc->power_boost_factor << 2);
30200 tmp207__ |= (pSrc->eht_mu_ppdu_4x_ltf_0_8_us_gi << 3);
30201 tmp207__ |= (pSrc->max_nc << 4);
30202 tmp207__ |= (pSrc->non_trig_cqi_feedback << 8);
30203 tmp207__ |= (pSrc->tx_1024_4096_qam_lt_242_tone_ru << 9);
30204 tmp207__ |= (pSrc->rx_1024_4096_qam_lt_242_tone_ru << 10);
30205 tmp207__ |= (pSrc->ppet_present << 11);
30206 tmp207__ |= (pSrc->common_nominal_pkt_padding << 12);
30207 tmp207__ |= (pSrc->max_num_eht_ltf << 14);
30208 tmp207__ |= (pSrc->mcs_15 << 19);
30209 tmp207__ |= (pSrc->eht_dup_6ghz << 23);
30210 tmp207__ |= (pSrc->op_sta_rx_ndp_wider_bw_20mhz << 24);
30211 tmp207__ |= (pSrc->non_ofdma_ul_mu_mimo_le_80mhz << 25);
30212 tmp207__ |= (pSrc->non_ofdma_ul_mu_mimo_160mhz << 26);
30213 tmp207__ |= (pSrc->non_ofdma_ul_mu_mimo_320mhz << 27);
30214 tmp207__ |= (pSrc->mu_bformer_le_80mhz << 28);
30215 tmp207__ |= (pSrc->mu_bformer_160mhz << 29);
30216 tmp207__ |= (pSrc->mu_bformer_320mhz << 30);
30217 tmp207__ |= (pSrc->tb_sounding_feedback_rl << 31);
30218 if (unlikely(nBuf < 4))
30219 return DOT11F_INCOMPLETE_IE;
30220
30221 frameshtonl(pCtx, pBuf, tmp207__, 0);
30222 *pnConsumed += 4;
30223 pBuf += 4;
30224 nBuf -= 4 ;
30225 tmp208__ = 0U;
30226 tmp208__ |= (pSrc->rx_1k_qam_in_wider_bw_dl_ofdma << 0);
30227 tmp208__ |= (pSrc->rx_4k_qam_in_wider_bw_dl_ofdma << 1);
30228 tmp208__ |= (pSrc->limited_cap_support_20mhz << 2);
30229 tmp208__ |= (pSrc->triggered_mu_bf_full_bw_fb_and_dl_mumimo << 3);
30230 tmp208__ |= (pSrc->mru_support_20mhz << 4);
30231 tmp208__ |= (pSrc->reserved3 << 5);
30232 if (unlikely(nBuf < 1))
30233 return DOT11F_INCOMPLETE_IE;
30234
30235 *pBuf = tmp208__;
30236 *pnConsumed += 1;
30237 pBuf += 1;
30238 nBuf -= 1 ;
30239 tmp209__ = 0U;
30240 tmp209__ |= (pSrc->bw_20_rx_max_nss_for_mcs_0_to_7 << 0);
30241 tmp209__ |= (pSrc->bw_20_tx_max_nss_for_mcs_0_to_7 << 4);
30242 tmp209__ |= (pSrc->bw_20_rx_max_nss_for_mcs_8_and_9 << 8);
30243 tmp209__ |= (pSrc->bw_20_tx_max_nss_for_mcs_8_and_9 << 12);
30244 tmp209__ |= (pSrc->bw_20_rx_max_nss_for_mcs_10_and_11 << 16);
30245 tmp209__ |= (pSrc->bw_20_tx_max_nss_for_mcs_10_and_11 << 20);
30246 tmp209__ |= (pSrc->bw_20_rx_max_nss_for_mcs_12_and_13 << 24);
30247 tmp209__ |= (pSrc->bw_20_tx_max_nss_for_mcs_12_and_13 << 28);
30248 if (unlikely(nBuf < 4))
30249 return DOT11F_INCOMPLETE_IE;
30250
30251 frameshtonl(pCtx, pBuf, tmp209__, 0);
30252 *pnConsumed += 4;
30253 pBuf += 4;
30254 nBuf -= 4 ;
30255 tmp210__ = 0U;
30256 tmp210__ |= (pSrc->bw_le_80_rx_max_nss_for_mcs_0_to_9 << 0);
30257 tmp210__ |= (pSrc->bw_le_80_tx_max_nss_for_mcs_0_to_9 << 4);
30258 tmp210__ |= (pSrc->bw_le_80_rx_max_nss_for_mcs_10_and_11 << 8);
30259 tmp210__ |= (pSrc->bw_le_80_tx_max_nss_for_mcs_10_and_11 << 12);
30260 tmp210__ |= (pSrc->bw_le_80_rx_max_nss_for_mcs_12_and_13 << 16);
30261 tmp210__ |= (pSrc->bw_le_80_tx_max_nss_for_mcs_12_and_13 << 20);
30262 tmp210__ |= (pSrc->bw_160_rx_max_nss_for_mcs_0_to_9 << 24);
30263 tmp210__ |= (pSrc->bw_160_tx_max_nss_for_mcs_0_to_9 << 28);
30264 if (unlikely(nBuf < 4))
30265 return DOT11F_INCOMPLETE_IE;
30266
30267 frameshtonl(pCtx, pBuf, tmp210__, 0);
30268 *pnConsumed += 4;
30269 pBuf += 4;
30270 nBuf -= 4 ;
30271 tmp211__ = 0U;
30272 tmp211__ |= (pSrc->bw_160_rx_max_nss_for_mcs_10_and_11 << 0);
30273 tmp211__ |= (pSrc->bw_160_tx_max_nss_for_mcs_10_and_11 << 4);
30274 tmp211__ |= (pSrc->bw_160_rx_max_nss_for_mcs_12_and_13 << 8);
30275 tmp211__ |= (pSrc->bw_160_tx_max_nss_for_mcs_12_and_13 << 12);
30276 tmp211__ |= (pSrc->bw_320_rx_max_nss_for_mcs_0_to_9 << 16);
30277 tmp211__ |= (pSrc->bw_320_tx_max_nss_for_mcs_0_to_9 << 20);
30278 tmp211__ |= (pSrc->bw_320_rx_max_nss_for_mcs_10_and_11 << 24);
30279 tmp211__ |= (pSrc->bw_320_tx_max_nss_for_mcs_10_and_11 << 28);
30280 if (unlikely(nBuf < 4))
30281 return DOT11F_INCOMPLETE_IE;
30282
30283 frameshtonl(pCtx, pBuf, tmp211__, 0);
30284 *pnConsumed += 4;
30285 pBuf += 4;
30286 nBuf -= 4 ;
30287 tmp212__ = 0U;
30288 tmp212__ |= (pSrc->bw_320_rx_max_nss_for_mcs_12_and_13 << 0);
30289 tmp212__ |= (pSrc->bw_320_tx_max_nss_for_mcs_12_and_13 << 4);
30290 if (unlikely(nBuf < 1))
30291 return DOT11F_INCOMPLETE_IE;
30292
30293 *pBuf = tmp212__;
30294 *pnConsumed += 1;
30295 pBuf += 1;
30296 nBuf -= 1 ;
30297 if (pSrc->ppet_present) {
30298 switch (pSrc->ppet_present) {
30299 case 1:
30300 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->ppet.ppe_threshold.ppe_th), pSrc->ppet.ppe_threshold.num_ppe_th);
30301 *pnConsumed += pSrc->ppet.ppe_threshold.num_ppe_th;
30302 /* fieldsEndFlag = 1 */
30303 break;
30304 }
30305 } else {
30306 break;
30307 }
30308 break;
30309 }
30310 (void)pCtx;
30311 if (pIeLen) {
30312 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
30313 }
30314 return status;
30315 } /* End dot11f_pack_ie_eht_cap. */
30316
dot11f_pack_ie_eht_op(tpAniSirGlobal pCtx,tDot11fIEeht_op * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)30317 uint32_t dot11f_pack_ie_eht_op(tpAniSirGlobal pCtx,
30318 tDot11fIEeht_op *pSrc,
30319 uint8_t *pBuf,
30320 uint32_t nBuf,
30321 uint32_t *pnConsumed)
30322 {
30323 uint8_t *pIeLen = 0;
30324 uint32_t nConsumedOnEntry = *pnConsumed;
30325 uint32_t nNeeded = 0U;
30326 uint8_t tmp213__;
30327 uint32_t tmp214__;
30328 uint8_t tmp215__;
30329 nNeeded += (pSrc->disabled_sub_chan_bitmap_present * 2 + 8);
30330 while (pSrc->present) {
30331 if (nNeeded > nBuf)
30332 return DOT11F_BUFFER_OVERFLOW;
30333 *pBuf = 255;
30334 ++pBuf; ++(*pnConsumed);
30335 pIeLen = pBuf;
30336 ++pBuf; ++(*pnConsumed);
30337 *pBuf = 106;
30338 ++pBuf; ++(*pnConsumed);
30339 tmp213__ = 0U;
30340 tmp213__ |= (pSrc->eht_op_information_present << 0);
30341 tmp213__ |= (pSrc->disabled_sub_chan_bitmap_present << 1);
30342 tmp213__ |= (pSrc->eht_default_pe_duration << 2);
30343 tmp213__ |= (pSrc->group_addr_bu_indication_limit << 3);
30344 tmp213__ |= (pSrc->group_addr_bu_indication_exponent << 4);
30345 tmp213__ |= (pSrc->reserved << 6);
30346 if (unlikely(nBuf < 1))
30347 return DOT11F_INCOMPLETE_IE;
30348
30349 *pBuf = tmp213__;
30350 *pnConsumed += 1;
30351 pBuf += 1;
30352 nBuf -= 1 ;
30353 tmp214__ = 0U;
30354 tmp214__ |= (pSrc->basic_rx_max_nss_for_mcs_0_to_7 << 0);
30355 tmp214__ |= (pSrc->basic_tx_max_nss_for_mcs_0_to_7 << 4);
30356 tmp214__ |= (pSrc->basic_rx_max_nss_for_mcs_8_and_9 << 8);
30357 tmp214__ |= (pSrc->basic_tx_max_nss_for_mcs_8_and_9 << 12);
30358 tmp214__ |= (pSrc->basic_rx_max_nss_for_mcs_10_and_11 << 16);
30359 tmp214__ |= (pSrc->basic_tx_max_nss_for_mcs_10_and_11 << 20);
30360 tmp214__ |= (pSrc->basic_rx_max_nss_for_mcs_12_and_13 << 24);
30361 tmp214__ |= (pSrc->basic_tx_max_nss_for_mcs_12_and_13 << 28);
30362 if (unlikely(nBuf < 4))
30363 return DOT11F_INCOMPLETE_IE;
30364
30365 frameshtonl(pCtx, pBuf, tmp214__, 0);
30366 *pnConsumed += 4;
30367 pBuf += 4;
30368 nBuf -= 4 ;
30369 tmp215__ = 0U;
30370 tmp215__ |= (pSrc->channel_width << 0);
30371 tmp215__ |= (pSrc->reserved_1 << 3);
30372 if (unlikely(nBuf < 1))
30373 return DOT11F_INCOMPLETE_IE;
30374
30375 *pBuf = tmp215__;
30376 *pnConsumed += 1;
30377 pBuf += 1;
30378 nBuf -= 1 ;
30379 *pBuf = pSrc->ccfs0;
30380 *pnConsumed += 1;
30381 pBuf += 1;
30382 *pBuf = pSrc->ccfs1;
30383 *pnConsumed += 1;
30384 pBuf += 1;
30385 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->disabled_sub_chan_bitmap), (pSrc->disabled_sub_chan_bitmap_present * 2));
30386 *pnConsumed += (pSrc->disabled_sub_chan_bitmap_present * 2);
30387 /* fieldsEndFlag = 1 */
30388 break;
30389 }
30390 (void)pCtx;
30391 if (pIeLen) {
30392 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
30393 }
30394 return DOT11F_PARSE_SUCCESS;
30395 } /* End dot11f_pack_ie_eht_op. */
30396
dot11f_pack_ie_esp_information(tpAniSirGlobal pCtx,tDot11fIEesp_information * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)30397 uint32_t dot11f_pack_ie_esp_information(tpAniSirGlobal pCtx,
30398 tDot11fIEesp_information *pSrc,
30399 uint8_t *pBuf,
30400 uint32_t nBuf,
30401 uint32_t *pnConsumed)
30402 {
30403 uint8_t *pIeLen = 0;
30404 uint32_t nConsumedOnEntry = *pnConsumed;
30405 uint32_t nNeeded = 0U;
30406 nNeeded += pSrc->num_data;
30407 while (pSrc->present) {
30408 if (nNeeded > nBuf)
30409 return DOT11F_BUFFER_OVERFLOW;
30410 *pBuf = 255;
30411 ++pBuf; ++(*pnConsumed);
30412 pIeLen = pBuf;
30413 ++pBuf; ++(*pnConsumed);
30414 *pBuf = 11;
30415 ++pBuf; ++(*pnConsumed);
30416 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->data), pSrc->num_data);
30417 *pnConsumed += pSrc->num_data;
30418 /* fieldsEndFlag = 1 */
30419 break;
30420 }
30421 (void)pCtx;
30422 if (pIeLen) {
30423 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
30424 }
30425 return DOT11F_PARSE_SUCCESS;
30426 } /* End dot11f_pack_ie_esp_information. */
30427
dot11f_pack_ie_ext_chan_switch_ann(tpAniSirGlobal pCtx,tDot11fIEext_chan_switch_ann * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)30428 uint32_t dot11f_pack_ie_ext_chan_switch_ann(tpAniSirGlobal pCtx,
30429 tDot11fIEext_chan_switch_ann *pSrc,
30430 uint8_t *pBuf,
30431 uint32_t nBuf,
30432 uint32_t *pnConsumed)
30433 {
30434 uint8_t *pIeLen = 0;
30435 uint32_t nConsumedOnEntry = *pnConsumed;
30436 uint32_t nNeeded = 0U;
30437 nNeeded += 4;
30438 while (pSrc->present) {
30439 if (nNeeded > nBuf)
30440 return DOT11F_BUFFER_OVERFLOW;
30441 *pBuf = 60;
30442 ++pBuf; ++(*pnConsumed);
30443 pIeLen = pBuf;
30444 ++pBuf; ++(*pnConsumed);
30445 *pBuf = pSrc->switch_mode;
30446 *pnConsumed += 1;
30447 pBuf += 1;
30448 *pBuf = pSrc->new_reg_class;
30449 *pnConsumed += 1;
30450 pBuf += 1;
30451 *pBuf = pSrc->new_channel;
30452 *pnConsumed += 1;
30453 pBuf += 1;
30454 *pBuf = pSrc->switch_count;
30455 *pnConsumed += 1;
30456 /* fieldsEndFlag = 1 */
30457 break;
30458 }
30459 (void)pCtx;
30460 if (pIeLen) {
30461 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
30462 }
30463 return DOT11F_PARSE_SUCCESS;
30464 } /* End dot11f_pack_ie_ext_chan_switch_ann. */
30465
dot11f_pack_ie_fils_assoc_delay_info(tpAniSirGlobal pCtx,tDot11fIEfils_assoc_delay_info * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)30466 uint32_t dot11f_pack_ie_fils_assoc_delay_info(tpAniSirGlobal pCtx,
30467 tDot11fIEfils_assoc_delay_info *pSrc,
30468 uint8_t *pBuf,
30469 uint32_t nBuf,
30470 uint32_t *pnConsumed)
30471 {
30472 uint8_t *pIeLen = 0;
30473 uint32_t nConsumedOnEntry = *pnConsumed;
30474 uint32_t nNeeded = 0U;
30475 nNeeded += 1;
30476 while (pSrc->present) {
30477 if (nNeeded > nBuf)
30478 return DOT11F_BUFFER_OVERFLOW;
30479 *pBuf = 255;
30480 ++pBuf; ++(*pnConsumed);
30481 pIeLen = pBuf;
30482 ++pBuf; ++(*pnConsumed);
30483 *pBuf = 1;
30484 ++pBuf; ++(*pnConsumed);
30485 *pBuf = pSrc->assoc_delay_info;
30486 *pnConsumed += 1;
30487 /* fieldsEndFlag = 1 */
30488 break;
30489 }
30490 (void)pCtx;
30491 if (pIeLen) {
30492 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
30493 }
30494 return DOT11F_PARSE_SUCCESS;
30495 } /* End dot11f_pack_ie_fils_assoc_delay_info. */
30496
dot11f_pack_ie_fils_hlp_container(tpAniSirGlobal pCtx,tDot11fIEfils_hlp_container * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)30497 uint32_t dot11f_pack_ie_fils_hlp_container(tpAniSirGlobal pCtx,
30498 tDot11fIEfils_hlp_container *pSrc,
30499 uint8_t *pBuf,
30500 uint32_t nBuf,
30501 uint32_t *pnConsumed)
30502 {
30503 uint8_t *pIeLen = 0;
30504 uint32_t nConsumedOnEntry = *pnConsumed;
30505 uint32_t nNeeded = 0U;
30506 nNeeded += (pSrc->num_hlp_packet + 12);
30507 while (pSrc->present) {
30508 if (nNeeded > nBuf)
30509 return DOT11F_BUFFER_OVERFLOW;
30510 *pBuf = 255;
30511 ++pBuf; ++(*pnConsumed);
30512 pIeLen = pBuf;
30513 ++pBuf; ++(*pnConsumed);
30514 *pBuf = 5;
30515 ++pBuf; ++(*pnConsumed);
30516 DOT11F_MEMCPY(pCtx, pBuf, pSrc->dest_mac, 6);
30517 *pnConsumed += 6;
30518 pBuf += 6;
30519 DOT11F_MEMCPY(pCtx, pBuf, pSrc->src_mac, 6);
30520 *pnConsumed += 6;
30521 pBuf += 6;
30522 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->hlp_packet), pSrc->num_hlp_packet);
30523 *pnConsumed += pSrc->num_hlp_packet;
30524 /* fieldsEndFlag = 1 */
30525 break;
30526 }
30527 (void)pCtx;
30528 if (pIeLen) {
30529 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
30530 }
30531 return DOT11F_PARSE_SUCCESS;
30532 } /* End dot11f_pack_ie_fils_hlp_container. */
30533
dot11f_pack_ie_fils_indication(tpAniSirGlobal pCtx,tDot11fIEfils_indication * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)30534 uint32_t dot11f_pack_ie_fils_indication(tpAniSirGlobal pCtx,
30535 tDot11fIEfils_indication *pSrc,
30536 uint8_t *pBuf,
30537 uint32_t nBuf,
30538 uint32_t *pnConsumed)
30539 {
30540 uint8_t *pIeLen = 0;
30541 uint32_t nConsumedOnEntry = *pnConsumed;
30542 uint32_t nNeeded = 0U;
30543 uint16_t tmp216__;
30544 nNeeded += (pSrc->num_variable_data + 2);
30545 while (pSrc->present) {
30546 if (nNeeded > nBuf)
30547 return DOT11F_BUFFER_OVERFLOW;
30548 *pBuf = 240;
30549 ++pBuf; ++(*pnConsumed);
30550 pIeLen = pBuf;
30551 ++pBuf; ++(*pnConsumed);
30552 tmp216__ = 0U;
30553 tmp216__ |= (pSrc->public_key_identifiers_cnt << 0);
30554 tmp216__ |= (pSrc->realm_identifiers_cnt << 3);
30555 tmp216__ |= (pSrc->is_ip_config_supported << 6);
30556 tmp216__ |= (pSrc->is_cache_id_present << 7);
30557 tmp216__ |= (pSrc->is_hessid_present << 8);
30558 tmp216__ |= (pSrc->is_fils_sk_auth_supported << 9);
30559 tmp216__ |= (pSrc->is_fils_sk_auth_pfs_supported << 10);
30560 tmp216__ |= (pSrc->is_pk_auth_supported << 11);
30561 tmp216__ |= (pSrc->reserved << 12);
30562 if (unlikely(nBuf < 2))
30563 return DOT11F_INCOMPLETE_IE;
30564
30565 frameshtons(pCtx, pBuf, tmp216__, 0);
30566 *pnConsumed += 2;
30567 pBuf += 2;
30568 nBuf -= 2 ;
30569 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->variable_data), pSrc->num_variable_data);
30570 *pnConsumed += pSrc->num_variable_data;
30571 /* fieldsEndFlag = 1 */
30572 break;
30573 }
30574 (void)pCtx;
30575 if (pIeLen) {
30576 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
30577 }
30578 return DOT11F_PARSE_SUCCESS;
30579 } /* End dot11f_pack_ie_fils_indication. */
30580
dot11f_pack_ie_fils_kde(tpAniSirGlobal pCtx,tDot11fIEfils_kde * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)30581 uint32_t dot11f_pack_ie_fils_kde(tpAniSirGlobal pCtx,
30582 tDot11fIEfils_kde *pSrc,
30583 uint8_t *pBuf,
30584 uint32_t nBuf,
30585 uint32_t *pnConsumed)
30586 {
30587 uint8_t *pIeLen = 0;
30588 uint32_t nConsumedOnEntry = *pnConsumed;
30589 uint32_t nNeeded = 0U;
30590 nNeeded += (pSrc->num_kde_list + 8);
30591 while (pSrc->present) {
30592 if (nNeeded > nBuf)
30593 return DOT11F_BUFFER_OVERFLOW;
30594 *pBuf = 255;
30595 ++pBuf; ++(*pnConsumed);
30596 pIeLen = pBuf;
30597 ++pBuf; ++(*pnConsumed);
30598 *pBuf = 7;
30599 ++pBuf; ++(*pnConsumed);
30600 DOT11F_MEMCPY(pCtx, pBuf, pSrc->key_rsc, 8);
30601 *pnConsumed += 8;
30602 pBuf += 8;
30603 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->kde_list), pSrc->num_kde_list);
30604 *pnConsumed += pSrc->num_kde_list;
30605 /* fieldsEndFlag = 1 */
30606 break;
30607 }
30608 (void)pCtx;
30609 if (pIeLen) {
30610 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
30611 }
30612 return DOT11F_PARSE_SUCCESS;
30613 } /* End dot11f_pack_ie_fils_kde. */
30614
dot11f_pack_ie_fils_key_confirmation(tpAniSirGlobal pCtx,tDot11fIEfils_key_confirmation * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)30615 uint32_t dot11f_pack_ie_fils_key_confirmation(tpAniSirGlobal pCtx,
30616 tDot11fIEfils_key_confirmation *pSrc,
30617 uint8_t *pBuf,
30618 uint32_t nBuf,
30619 uint32_t *pnConsumed)
30620 {
30621 uint8_t *pIeLen = 0;
30622 uint32_t nConsumedOnEntry = *pnConsumed;
30623 uint32_t nNeeded = 0U;
30624 nNeeded += pSrc->num_key_auth;
30625 while (pSrc->present) {
30626 if (nNeeded > nBuf)
30627 return DOT11F_BUFFER_OVERFLOW;
30628 *pBuf = 255;
30629 ++pBuf; ++(*pnConsumed);
30630 pIeLen = pBuf;
30631 ++pBuf; ++(*pnConsumed);
30632 *pBuf = 3;
30633 ++pBuf; ++(*pnConsumed);
30634 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->key_auth), pSrc->num_key_auth);
30635 *pnConsumed += pSrc->num_key_auth;
30636 /* fieldsEndFlag = 1 */
30637 break;
30638 }
30639 (void)pCtx;
30640 if (pIeLen) {
30641 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
30642 }
30643 return DOT11F_PARSE_SUCCESS;
30644 } /* End dot11f_pack_ie_fils_key_confirmation. */
30645
dot11f_pack_ie_fils_nonce(tpAniSirGlobal pCtx,tDot11fIEfils_nonce * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)30646 uint32_t dot11f_pack_ie_fils_nonce(tpAniSirGlobal pCtx,
30647 tDot11fIEfils_nonce *pSrc,
30648 uint8_t *pBuf,
30649 uint32_t nBuf,
30650 uint32_t *pnConsumed)
30651 {
30652 uint8_t *pIeLen = 0;
30653 uint32_t nConsumedOnEntry = *pnConsumed;
30654 uint32_t nNeeded = 0U;
30655 nNeeded += 16;
30656 while (pSrc->present) {
30657 if (nNeeded > nBuf)
30658 return DOT11F_BUFFER_OVERFLOW;
30659 *pBuf = 255;
30660 ++pBuf; ++(*pnConsumed);
30661 pIeLen = pBuf;
30662 ++pBuf; ++(*pnConsumed);
30663 *pBuf = 13;
30664 ++pBuf; ++(*pnConsumed);
30665 DOT11F_MEMCPY(pCtx, pBuf, pSrc->nonce, 16);
30666 *pnConsumed += 16;
30667 /* fieldsEndFlag = 1 */
30668 break;
30669 }
30670 (void)pCtx;
30671 if (pIeLen) {
30672 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
30673 }
30674 return DOT11F_PARSE_SUCCESS;
30675 } /* End dot11f_pack_ie_fils_nonce. */
30676
dot11f_pack_ie_fils_public_key(tpAniSirGlobal pCtx,tDot11fIEfils_public_key * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)30677 uint32_t dot11f_pack_ie_fils_public_key(tpAniSirGlobal pCtx,
30678 tDot11fIEfils_public_key *pSrc,
30679 uint8_t *pBuf,
30680 uint32_t nBuf,
30681 uint32_t *pnConsumed)
30682 {
30683 uint8_t *pIeLen = 0;
30684 uint32_t nConsumedOnEntry = *pnConsumed;
30685 uint32_t nNeeded = 0U;
30686 nNeeded += (pSrc->num_public_key + 1);
30687 while (pSrc->present) {
30688 if (nNeeded > nBuf)
30689 return DOT11F_BUFFER_OVERFLOW;
30690 *pBuf = 255;
30691 ++pBuf; ++(*pnConsumed);
30692 pIeLen = pBuf;
30693 ++pBuf; ++(*pnConsumed);
30694 *pBuf = 12;
30695 ++pBuf; ++(*pnConsumed);
30696 *pBuf = pSrc->key_type;
30697 *pnConsumed += 1;
30698 pBuf += 1;
30699 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->public_key), pSrc->num_public_key);
30700 *pnConsumed += pSrc->num_public_key;
30701 /* fieldsEndFlag = 1 */
30702 break;
30703 }
30704 (void)pCtx;
30705 if (pIeLen) {
30706 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
30707 }
30708 return DOT11F_PARSE_SUCCESS;
30709 } /* End dot11f_pack_ie_fils_public_key. */
30710
dot11f_pack_ie_fils_session(tpAniSirGlobal pCtx,tDot11fIEfils_session * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)30711 uint32_t dot11f_pack_ie_fils_session(tpAniSirGlobal pCtx,
30712 tDot11fIEfils_session *pSrc,
30713 uint8_t *pBuf,
30714 uint32_t nBuf,
30715 uint32_t *pnConsumed)
30716 {
30717 uint8_t *pIeLen = 0;
30718 uint32_t nConsumedOnEntry = *pnConsumed;
30719 uint32_t nNeeded = 0U;
30720 nNeeded += 8;
30721 while (pSrc->present) {
30722 if (nNeeded > nBuf)
30723 return DOT11F_BUFFER_OVERFLOW;
30724 *pBuf = 255;
30725 ++pBuf; ++(*pnConsumed);
30726 pIeLen = pBuf;
30727 ++pBuf; ++(*pnConsumed);
30728 *pBuf = 4;
30729 ++pBuf; ++(*pnConsumed);
30730 DOT11F_MEMCPY(pCtx, pBuf, pSrc->session, 8);
30731 *pnConsumed += 8;
30732 /* fieldsEndFlag = 1 */
30733 break;
30734 }
30735 (void)pCtx;
30736 if (pIeLen) {
30737 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
30738 }
30739 return DOT11F_PARSE_SUCCESS;
30740 } /* End dot11f_pack_ie_fils_session. */
30741
dot11f_pack_ie_fils_wrapped_data(tpAniSirGlobal pCtx,tDot11fIEfils_wrapped_data * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)30742 uint32_t dot11f_pack_ie_fils_wrapped_data(tpAniSirGlobal pCtx,
30743 tDot11fIEfils_wrapped_data *pSrc,
30744 uint8_t *pBuf,
30745 uint32_t nBuf,
30746 uint32_t *pnConsumed)
30747 {
30748 uint8_t *pIeLen = 0;
30749 uint32_t nConsumedOnEntry = *pnConsumed;
30750 uint32_t nNeeded = 0U;
30751 nNeeded += pSrc->num_wrapped_data;
30752 while (pSrc->present) {
30753 if (nNeeded > nBuf)
30754 return DOT11F_BUFFER_OVERFLOW;
30755 *pBuf = 255;
30756 ++pBuf; ++(*pnConsumed);
30757 pIeLen = pBuf;
30758 ++pBuf; ++(*pnConsumed);
30759 *pBuf = 8;
30760 ++pBuf; ++(*pnConsumed);
30761 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->wrapped_data), pSrc->num_wrapped_data);
30762 *pnConsumed += pSrc->num_wrapped_data;
30763 /* fieldsEndFlag = 1 */
30764 break;
30765 }
30766 (void)pCtx;
30767 if (pIeLen) {
30768 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
30769 }
30770 return DOT11F_PARSE_SUCCESS;
30771 } /* End dot11f_pack_ie_fils_wrapped_data. */
30772
dot11f_pack_ie_fragment_ie(tpAniSirGlobal pCtx,tDot11fIEfragment_ie * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)30773 uint32_t dot11f_pack_ie_fragment_ie(tpAniSirGlobal pCtx,
30774 tDot11fIEfragment_ie *pSrc,
30775 uint8_t *pBuf,
30776 uint32_t nBuf,
30777 uint32_t *pnConsumed)
30778 {
30779 uint8_t *pIeLen = 0;
30780 uint32_t nConsumedOnEntry = *pnConsumed;
30781 uint32_t nNeeded = 0U;
30782 nNeeded += pSrc->num_data;
30783 while (pSrc->present) {
30784 if (nNeeded > nBuf)
30785 return DOT11F_BUFFER_OVERFLOW;
30786 *pBuf = 242;
30787 ++pBuf; ++(*pnConsumed);
30788 pIeLen = pBuf;
30789 ++pBuf; ++(*pnConsumed);
30790 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->data), pSrc->num_data);
30791 *pnConsumed += pSrc->num_data;
30792 /* fieldsEndFlag = 1 */
30793 break;
30794 }
30795 (void)pCtx;
30796 if (pIeLen) {
30797 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
30798 }
30799 return DOT11F_PARSE_SUCCESS;
30800 } /* End dot11f_pack_ie_fragment_ie. */
30801
dot11f_pack_ie_he_6ghz_band_cap(tpAniSirGlobal pCtx,tDot11fIEhe_6ghz_band_cap * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)30802 uint32_t dot11f_pack_ie_he_6ghz_band_cap(tpAniSirGlobal pCtx,
30803 tDot11fIEhe_6ghz_band_cap *pSrc,
30804 uint8_t *pBuf,
30805 uint32_t nBuf,
30806 uint32_t *pnConsumed)
30807 {
30808 uint8_t *pIeLen = 0;
30809 uint32_t nConsumedOnEntry = *pnConsumed;
30810 uint32_t nNeeded = 0U;
30811 uint16_t tmp217__;
30812 nNeeded += 2;
30813 while (pSrc->present) {
30814 if (nNeeded > nBuf)
30815 return DOT11F_BUFFER_OVERFLOW;
30816 *pBuf = 255;
30817 ++pBuf; ++(*pnConsumed);
30818 pIeLen = pBuf;
30819 ++pBuf; ++(*pnConsumed);
30820 *pBuf = 59;
30821 ++pBuf; ++(*pnConsumed);
30822 tmp217__ = 0U;
30823 tmp217__ |= (pSrc->min_mpdu_start_spacing << 0);
30824 tmp217__ |= (pSrc->max_ampdu_len_exp << 3);
30825 tmp217__ |= (pSrc->max_mpdu_len << 6);
30826 tmp217__ |= (pSrc->sm_pow_save << 9);
30827 tmp217__ |= (pSrc->rd_responder << 11);
30828 tmp217__ |= (pSrc->rx_ant_pattern_consistency << 12);
30829 tmp217__ |= (pSrc->tx_ant_pattern_consistency << 13);
30830 tmp217__ |= (pSrc->reserved << 14);
30831 if (unlikely(nBuf < 2))
30832 return DOT11F_INCOMPLETE_IE;
30833
30834 frameshtons(pCtx, pBuf, tmp217__, 0);
30835 *pnConsumed += 2;
30836 /* fieldsEndFlag = 1 */
30837 nBuf -= 2 ;
30838 break;
30839 }
30840 (void)pCtx;
30841 if (pIeLen) {
30842 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
30843 }
30844 return DOT11F_PARSE_SUCCESS;
30845 } /* End dot11f_pack_ie_he_6ghz_band_cap. */
30846
dot11f_pack_ie_he_cap(tpAniSirGlobal pCtx,tDot11fIEhe_cap * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)30847 uint32_t dot11f_pack_ie_he_cap(tpAniSirGlobal pCtx,
30848 tDot11fIEhe_cap *pSrc,
30849 uint8_t *pBuf,
30850 uint32_t nBuf,
30851 uint32_t *pnConsumed)
30852 {
30853 uint8_t *pIeLen = 0;
30854 uint32_t nConsumedOnEntry = *pnConsumed;
30855 uint32_t nNeeded = 0U;
30856 uint32_t tmp218__;
30857 uint16_t tmp219__;
30858 uint32_t tmp220__;
30859 uint32_t tmp221__;
30860 uint16_t tmp222__;
30861 uint32_t status = DOT11F_PARSE_SUCCESS;
30862 status = dot11f_get_packed_ie_he_cap(pCtx, pSrc, &nNeeded);
30863 if (!DOT11F_SUCCEEDED(status))
30864 return status;
30865 while (pSrc->present) {
30866 if (nNeeded > nBuf)
30867 return DOT11F_BUFFER_OVERFLOW;
30868 *pBuf = 255;
30869 ++pBuf; ++(*pnConsumed);
30870 pIeLen = pBuf;
30871 ++pBuf; ++(*pnConsumed);
30872 *pBuf = 35;
30873 ++pBuf; ++(*pnConsumed);
30874 tmp218__ = 0U;
30875 tmp218__ |= (pSrc->htc_he << 0);
30876 tmp218__ |= (pSrc->twt_request << 1);
30877 tmp218__ |= (pSrc->twt_responder << 2);
30878 tmp218__ |= (pSrc->fragmentation << 3);
30879 tmp218__ |= (pSrc->max_num_frag_msdu_amsdu_exp << 5);
30880 tmp218__ |= (pSrc->min_frag_size << 8);
30881 tmp218__ |= (pSrc->trigger_frm_mac_pad << 10);
30882 tmp218__ |= (pSrc->multi_tid_aggr_rx_supp << 12);
30883 tmp218__ |= (pSrc->he_link_adaptation << 15);
30884 tmp218__ |= (pSrc->all_ack << 17);
30885 tmp218__ |= (pSrc->trigd_rsp_sched << 18);
30886 tmp218__ |= (pSrc->a_bsr << 19);
30887 tmp218__ |= (pSrc->broadcast_twt << 20);
30888 tmp218__ |= (pSrc->ba_32bit_bitmap << 21);
30889 tmp218__ |= (pSrc->mu_cascade << 22);
30890 tmp218__ |= (pSrc->ack_enabled_multitid << 23);
30891 tmp218__ |= (pSrc->reserved << 24);
30892 tmp218__ |= (pSrc->omi_a_ctrl << 25);
30893 tmp218__ |= (pSrc->ofdma_ra << 26);
30894 tmp218__ |= (pSrc->max_ampdu_len_exp_ext << 27);
30895 tmp218__ |= (pSrc->amsdu_frag << 29);
30896 tmp218__ |= (pSrc->flex_twt_sched << 30);
30897 tmp218__ |= (pSrc->rx_ctrl_frame << 31);
30898 if (unlikely(nBuf < 4))
30899 return DOT11F_INCOMPLETE_IE;
30900
30901 frameshtonl(pCtx, pBuf, tmp218__, 0);
30902 *pnConsumed += 4;
30903 pBuf += 4;
30904 nBuf -= 4 ;
30905 tmp219__ = 0U;
30906 tmp219__ |= (pSrc->bsrp_ampdu_aggr << 0);
30907 tmp219__ |= (pSrc->qtp << 1);
30908 tmp219__ |= (pSrc->a_bqr << 2);
30909 tmp219__ |= (pSrc->spatial_reuse_param_rspder << 3);
30910 tmp219__ |= (pSrc->ndp_feedback_supp << 4);
30911 tmp219__ |= (pSrc->ops_supp << 5);
30912 tmp219__ |= (pSrc->amsdu_in_ampdu << 6);
30913 tmp219__ |= (pSrc->multi_tid_aggr_tx_supp << 7);
30914 tmp219__ |= (pSrc->he_sub_ch_sel_tx_supp << 10);
30915 tmp219__ |= (pSrc->ul_2x996_tone_ru_supp << 11);
30916 tmp219__ |= (pSrc->om_ctrl_ul_mu_data_dis_rx << 12);
30917 tmp219__ |= (pSrc->he_dynamic_smps << 13);
30918 tmp219__ |= (pSrc->punctured_sounding_supp << 14);
30919 tmp219__ |= (pSrc->ht_vht_trg_frm_rx_supp << 15);
30920 if (unlikely(nBuf < 2))
30921 return DOT11F_INCOMPLETE_IE;
30922
30923 frameshtons(pCtx, pBuf, tmp219__, 0);
30924 *pnConsumed += 2;
30925 pBuf += 2;
30926 nBuf -= 2 ;
30927 tmp220__ = 0U;
30928 tmp220__ |= (pSrc->reserved2 << 0);
30929 tmp220__ |= (pSrc->chan_width_0 << 1);
30930 tmp220__ |= (pSrc->chan_width_1 << 2);
30931 tmp220__ |= (pSrc->chan_width_2 << 3);
30932 tmp220__ |= (pSrc->chan_width_3 << 4);
30933 tmp220__ |= (pSrc->chan_width_4 << 5);
30934 tmp220__ |= (pSrc->chan_width_5 << 6);
30935 tmp220__ |= (pSrc->chan_width_6 << 7);
30936 tmp220__ |= (pSrc->rx_pream_puncturing << 8);
30937 tmp220__ |= (pSrc->device_class << 12);
30938 tmp220__ |= (pSrc->ldpc_coding << 13);
30939 tmp220__ |= (pSrc->he_1x_ltf_800_gi_ppdu << 14);
30940 tmp220__ |= (pSrc->midamble_tx_rx_max_nsts << 15);
30941 tmp220__ |= (pSrc->he_4x_ltf_3200_gi_ndp << 17);
30942 tmp220__ |= (pSrc->tb_ppdu_tx_stbc_lt_80mhz << 18);
30943 tmp220__ |= (pSrc->rx_stbc_lt_80mhz << 19);
30944 tmp220__ |= (pSrc->doppler << 20);
30945 tmp220__ |= (pSrc->ul_mu << 22);
30946 tmp220__ |= (pSrc->dcm_enc_tx << 24);
30947 tmp220__ |= (pSrc->dcm_enc_rx << 27);
30948 tmp220__ |= (pSrc->ul_he_mu << 30);
30949 tmp220__ |= (pSrc->su_beamformer << 31);
30950 if (unlikely(nBuf < 4))
30951 return DOT11F_INCOMPLETE_IE;
30952
30953 frameshtonl(pCtx, pBuf, tmp220__, 0);
30954 *pnConsumed += 4;
30955 pBuf += 4;
30956 nBuf -= 4 ;
30957 tmp221__ = 0U;
30958 tmp221__ |= (pSrc->su_beamformee << 0);
30959 tmp221__ |= (pSrc->mu_beamformer << 1);
30960 tmp221__ |= (pSrc->bfee_sts_lt_80 << 2);
30961 tmp221__ |= (pSrc->bfee_sts_gt_80 << 5);
30962 tmp221__ |= (pSrc->num_sounding_lt_80 << 8);
30963 tmp221__ |= (pSrc->num_sounding_gt_80 << 11);
30964 tmp221__ |= (pSrc->su_feedback_tone16 << 14);
30965 tmp221__ |= (pSrc->mu_feedback_tone16 << 15);
30966 tmp221__ |= (pSrc->codebook_su << 16);
30967 tmp221__ |= (pSrc->codebook_mu << 17);
30968 tmp221__ |= (pSrc->beamforming_feedback << 18);
30969 tmp221__ |= (pSrc->he_er_su_ppdu << 21);
30970 tmp221__ |= (pSrc->dl_mu_mimo_part_bw << 22);
30971 tmp221__ |= (pSrc->ppet_present << 23);
30972 tmp221__ |= (pSrc->srp << 24);
30973 tmp221__ |= (pSrc->power_boost << 25);
30974 tmp221__ |= (pSrc->he_ltf_800_gi_4x << 26);
30975 tmp221__ |= (pSrc->max_nc << 27);
30976 tmp221__ |= (pSrc->tb_ppdu_tx_stbc_gt_80mhz << 30);
30977 tmp221__ |= (pSrc->rx_stbc_gt_80mhz << 31);
30978 if (unlikely(nBuf < 4))
30979 return DOT11F_INCOMPLETE_IE;
30980
30981 frameshtonl(pCtx, pBuf, tmp221__, 0);
30982 *pnConsumed += 4;
30983 pBuf += 4;
30984 nBuf -= 4 ;
30985 tmp222__ = 0U;
30986 tmp222__ |= (pSrc->er_he_ltf_800_gi_4x << 0);
30987 tmp222__ |= (pSrc->he_ppdu_20_in_40Mhz_2G << 1);
30988 tmp222__ |= (pSrc->he_ppdu_20_in_160_80p80Mhz << 2);
30989 tmp222__ |= (pSrc->he_ppdu_80_in_160_80p80Mhz << 3);
30990 tmp222__ |= (pSrc->er_1x_he_ltf_gi << 4);
30991 tmp222__ |= (pSrc->midamble_tx_rx_1x_he_ltf << 5);
30992 tmp222__ |= (pSrc->dcm_max_bw << 6);
30993 tmp222__ |= (pSrc->longer_than_16_he_sigb_ofdm_sym << 8);
30994 tmp222__ |= (pSrc->non_trig_cqi_feedback << 9);
30995 tmp222__ |= (pSrc->tx_1024_qam_lt_242_tone_ru << 10);
30996 tmp222__ |= (pSrc->rx_1024_qam_lt_242_tone_ru << 11);
30997 tmp222__ |= (pSrc->rx_full_bw_su_he_mu_compress_sigb << 12);
30998 tmp222__ |= (pSrc->rx_full_bw_su_he_mu_non_cmpr_sigb << 13);
30999 tmp222__ |= (pSrc->reserved3 << 14);
31000 if (unlikely(nBuf < 2))
31001 return DOT11F_INCOMPLETE_IE;
31002
31003 frameshtons(pCtx, pBuf, tmp222__, 0);
31004 *pnConsumed += 2;
31005 pBuf += 2;
31006 nBuf -= 2 ;
31007 *pBuf = pSrc->reserved4;
31008 *pnConsumed += 1;
31009 pBuf += 1;
31010 frameshtons(pCtx, pBuf, pSrc->rx_he_mcs_map_lt_80, 0);
31011 *pnConsumed += 2;
31012 pBuf += 2;
31013 frameshtons(pCtx, pBuf, pSrc->tx_he_mcs_map_lt_80, 0);
31014 *pnConsumed += 2;
31015 pBuf += 2;
31016 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->rx_he_mcs_map_160), (pSrc->chan_width_2 * 2));
31017 *pnConsumed += (pSrc->chan_width_2 * 2);
31018 pBuf += (pSrc->chan_width_2 * 2);
31019 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->tx_he_mcs_map_160), (pSrc->chan_width_2 * 2));
31020 *pnConsumed += (pSrc->chan_width_2 * 2);
31021 pBuf += (pSrc->chan_width_2 * 2);
31022 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->rx_he_mcs_map_80_80), (pSrc->chan_width_3 * 2));
31023 *pnConsumed += (pSrc->chan_width_3 * 2);
31024 pBuf += (pSrc->chan_width_3 * 2);
31025 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->tx_he_mcs_map_80_80), (pSrc->chan_width_3 * 2));
31026 *pnConsumed += (pSrc->chan_width_3 * 2);
31027 pBuf += (pSrc->chan_width_3 * 2);
31028 if (pSrc->ppet_present) {
31029 switch (pSrc->ppet_present) {
31030 case 1:
31031 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->ppet.ppe_threshold.ppe_th), pSrc->ppet.ppe_threshold.num_ppe_th);
31032 *pnConsumed += pSrc->ppet.ppe_threshold.num_ppe_th;
31033 /* fieldsEndFlag = 1 */
31034 break;
31035 }
31036 } else {
31037 break;
31038 }
31039 break;
31040 }
31041 (void)pCtx;
31042 if (pIeLen) {
31043 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
31044 }
31045 return status;
31046 } /* End dot11f_pack_ie_he_cap. */
31047
dot11f_pack_ie_he_op(tpAniSirGlobal pCtx,tDot11fIEhe_op * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)31048 uint32_t dot11f_pack_ie_he_op(tpAniSirGlobal pCtx,
31049 tDot11fIEhe_op *pSrc,
31050 uint8_t *pBuf,
31051 uint32_t nBuf,
31052 uint32_t *pnConsumed)
31053 {
31054 uint8_t *pIeLen = 0;
31055 uint32_t nConsumedOnEntry = *pnConsumed;
31056 uint32_t nNeeded = 0U;
31057 uint16_t tmp223__;
31058 uint8_t tmp224__;
31059 uint8_t tmp225__;
31060 uint8_t tmp226__;
31061 uint32_t status = DOT11F_PARSE_SUCCESS;
31062 status = dot11f_get_packed_ie_he_op(pCtx, pSrc, &nNeeded);
31063 if (!DOT11F_SUCCEEDED(status))
31064 return status;
31065 while (pSrc->present) {
31066 if (nNeeded > nBuf)
31067 return DOT11F_BUFFER_OVERFLOW;
31068 *pBuf = 255;
31069 ++pBuf; ++(*pnConsumed);
31070 pIeLen = pBuf;
31071 ++pBuf; ++(*pnConsumed);
31072 *pBuf = 36;
31073 ++pBuf; ++(*pnConsumed);
31074 tmp223__ = 0U;
31075 tmp223__ |= (pSrc->default_pe << 0);
31076 tmp223__ |= (pSrc->twt_required << 3);
31077 tmp223__ |= (pSrc->txop_rts_threshold << 4);
31078 tmp223__ |= (pSrc->vht_oper_present << 14);
31079 tmp223__ |= (pSrc->co_located_bss << 15);
31080 if (unlikely(nBuf < 2))
31081 return DOT11F_INCOMPLETE_IE;
31082
31083 frameshtons(pCtx, pBuf, tmp223__, 0);
31084 *pnConsumed += 2;
31085 pBuf += 2;
31086 nBuf -= 2 ;
31087 tmp224__ = 0U;
31088 tmp224__ |= (pSrc->er_su_disable << 0);
31089 tmp224__ |= (pSrc->oper_info_6g_present << 1);
31090 tmp224__ |= (pSrc->reserved2 << 2);
31091 if (unlikely(nBuf < 1))
31092 return DOT11F_INCOMPLETE_IE;
31093
31094 *pBuf = tmp224__;
31095 *pnConsumed += 1;
31096 pBuf += 1;
31097 nBuf -= 1 ;
31098 tmp225__ = 0U;
31099 tmp225__ |= (pSrc->bss_color << 0);
31100 tmp225__ |= (pSrc->partial_bss_col << 6);
31101 tmp225__ |= (pSrc->bss_col_disabled << 7);
31102 if (unlikely(nBuf < 1))
31103 return DOT11F_INCOMPLETE_IE;
31104
31105 *pBuf = tmp225__;
31106 *pnConsumed += 1;
31107 pBuf += 1;
31108 nBuf -= 1 ;
31109 DOT11F_MEMCPY(pCtx, pBuf, pSrc->basic_mcs_nss, 2);
31110 *pnConsumed += 2;
31111 pBuf += 2;
31112 if (pSrc->vht_oper_present) {
31113 switch (pSrc->vht_oper_present) {
31114 case 1:
31115 *pBuf = pSrc->vht_oper.info.chan_width;
31116 *pnConsumed += 1;
31117 pBuf += 1;
31118 *pBuf = pSrc->vht_oper.info.center_freq_seg0;
31119 *pnConsumed += 1;
31120 pBuf += 1;
31121 *pBuf = pSrc->vht_oper.info.center_freq_seg1;
31122 *pnConsumed += 1;
31123 pBuf += 1;
31124 break;
31125 }
31126 }
31127 if (pSrc->co_located_bss) {
31128 switch (pSrc->co_located_bss) {
31129 case 1:
31130 *pBuf = pSrc->maxbssid_ind.info.data;
31131 *pnConsumed += 1;
31132 pBuf += 1;
31133 break;
31134 }
31135 }
31136 if (pSrc->oper_info_6g_present) {
31137 switch (pSrc->oper_info_6g_present) {
31138 case 1:
31139 *pBuf = pSrc->oper_info_6g.info.primary_ch;
31140 *pnConsumed += 1;
31141 pBuf += 1;
31142 tmp226__ = 0U;
31143 tmp226__ |= (pSrc->oper_info_6g.info.ch_width << 0);
31144 tmp226__ |= (pSrc->oper_info_6g.info.dup_bcon << 2);
31145 tmp226__ |= (pSrc->oper_info_6g.info.reg_info << 3);
31146 tmp226__ |= (pSrc->oper_info_6g.info.reserved << 6);
31147 if (unlikely(nBuf < 1))
31148 return DOT11F_INCOMPLETE_IE;
31149
31150 *pBuf = tmp226__;
31151 *pnConsumed += 1;
31152 pBuf += 1;
31153 nBuf -= 1 ;
31154 *pBuf = pSrc->oper_info_6g.info.center_freq_seg0;
31155 *pnConsumed += 1;
31156 pBuf += 1;
31157 *pBuf = pSrc->oper_info_6g.info.center_freq_seg1;
31158 *pnConsumed += 1;
31159 pBuf += 1;
31160 *pBuf = pSrc->oper_info_6g.info.min_rate;
31161 *pnConsumed += 1;
31162 /* fieldsEndFlag = 1 */
31163 break;
31164 }
31165 }
31166 break;
31167 }
31168 (void)pCtx;
31169 if (pIeLen) {
31170 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
31171 }
31172 return status;
31173 } /* End dot11f_pack_ie_he_op. */
31174
dot11f_pack_ie_hs20vendor_ie(tpAniSirGlobal pCtx,tDot11fIEhs20vendor_ie * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)31175 uint32_t dot11f_pack_ie_hs20vendor_ie(tpAniSirGlobal pCtx,
31176 tDot11fIEhs20vendor_ie *pSrc,
31177 uint8_t *pBuf,
31178 uint32_t nBuf,
31179 uint32_t *pnConsumed)
31180 {
31181 uint8_t *pIeLen = 0;
31182 uint32_t nConsumedOnEntry = *pnConsumed;
31183 uint32_t nNeeded = 0U;
31184 uint8_t tmp227__;
31185 uint32_t status = DOT11F_PARSE_SUCCESS;
31186 status = dot11f_get_packed_ie_hs20vendor_ie(pCtx, pSrc, &nNeeded);
31187 if (!DOT11F_SUCCEEDED(status))
31188 return status;
31189 while (pSrc->present) {
31190 if (nNeeded > nBuf)
31191 return DOT11F_BUFFER_OVERFLOW;
31192 *pBuf = 221;
31193 ++pBuf; ++(*pnConsumed);
31194 pIeLen = pBuf;
31195 ++pBuf; ++(*pnConsumed);
31196 *pBuf = 0x50;
31197 ++pBuf; ++(*pnConsumed);
31198 *pBuf = 0x6f;
31199 ++pBuf; ++(*pnConsumed);
31200 *pBuf = 0x9a;
31201 ++pBuf; ++(*pnConsumed);
31202 *pBuf = 0x10;
31203 ++pBuf; ++(*pnConsumed);
31204 tmp227__ = 0U;
31205 tmp227__ |= (pSrc->dgaf_dis << 0);
31206 tmp227__ |= (pSrc->hs_id_present << 1);
31207 tmp227__ |= (pSrc->reserved << 3);
31208 tmp227__ |= (pSrc->release_num << 4);
31209 if (unlikely(nBuf < 1))
31210 return DOT11F_INCOMPLETE_IE;
31211
31212 *pBuf = tmp227__;
31213 *pnConsumed += 1;
31214 pBuf += 1;
31215 nBuf -= 1 ;
31216 if (pSrc->hs_id_present) {
31217 switch (pSrc->hs_id_present) {
31218 case 1:
31219 frameshtons(pCtx, pBuf, pSrc->hs_id.pps_mo.pps_mo_id, 0);
31220 *pnConsumed += 2;
31221 /* fieldsEndFlag = 1 */
31222 break;
31223 case 2:
31224 frameshtons(pCtx, pBuf, pSrc->hs_id.anqp_domain.anqp_domain_id, 0);
31225 *pnConsumed += 2;
31226 /* fieldsEndFlag = 1 */
31227 break;
31228 }
31229 } else {
31230 break;
31231 }
31232 break;
31233 }
31234 (void)pCtx;
31235 if (pIeLen) {
31236 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
31237 }
31238 return status;
31239 } /* End dot11f_pack_ie_hs20vendor_ie. */
31240
dot11f_pack_ie_ht2040_bss_coexistence(tpAniSirGlobal pCtx,tDot11fIEht2040_bss_coexistence * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)31241 uint32_t dot11f_pack_ie_ht2040_bss_coexistence(tpAniSirGlobal pCtx,
31242 tDot11fIEht2040_bss_coexistence *pSrc,
31243 uint8_t *pBuf,
31244 uint32_t nBuf,
31245 uint32_t *pnConsumed)
31246 {
31247 uint8_t *pIeLen = 0;
31248 uint32_t nConsumedOnEntry = *pnConsumed;
31249 uint32_t nNeeded = 0U;
31250 uint8_t tmp228__;
31251 nNeeded += 1;
31252 while (pSrc->present) {
31253 if (nNeeded > nBuf)
31254 return DOT11F_BUFFER_OVERFLOW;
31255 *pBuf = 72;
31256 ++pBuf; ++(*pnConsumed);
31257 pIeLen = pBuf;
31258 ++pBuf; ++(*pnConsumed);
31259 tmp228__ = 0U;
31260 tmp228__ |= (pSrc->info_request << 0);
31261 tmp228__ |= (pSrc->forty_mhz_intolerant << 1);
31262 tmp228__ |= (pSrc->twenty_mhz_bsswidth_req << 2);
31263 tmp228__ |= (pSrc->obss_scan_exemption_req << 3);
31264 tmp228__ |= (pSrc->obss_scan_exemption_grant << 4);
31265 tmp228__ |= (pSrc->unused << 5);
31266 if (unlikely(nBuf < 1))
31267 return DOT11F_INCOMPLETE_IE;
31268
31269 *pBuf = tmp228__;
31270 *pnConsumed += 1;
31271 /* fieldsEndFlag = 1 */
31272 nBuf -= 1 ;
31273 break;
31274 }
31275 (void)pCtx;
31276 if (pIeLen) {
31277 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
31278 }
31279 return DOT11F_PARSE_SUCCESS;
31280 } /* End dot11f_pack_ie_ht2040_bss_coexistence. */
31281
dot11f_pack_ie_ht2040_bss_intolerant_report(tpAniSirGlobal pCtx,tDot11fIEht2040_bss_intolerant_report * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)31282 uint32_t dot11f_pack_ie_ht2040_bss_intolerant_report(tpAniSirGlobal pCtx,
31283 tDot11fIEht2040_bss_intolerant_report *pSrc,
31284 uint8_t *pBuf,
31285 uint32_t nBuf,
31286 uint32_t *pnConsumed)
31287 {
31288 uint8_t *pIeLen = 0;
31289 uint32_t nConsumedOnEntry = *pnConsumed;
31290 uint32_t nNeeded = 0U;
31291 nNeeded += (pSrc->num_channel_list + 1);
31292 while (pSrc->present) {
31293 if (nNeeded > nBuf)
31294 return DOT11F_BUFFER_OVERFLOW;
31295 *pBuf = 73;
31296 ++pBuf; ++(*pnConsumed);
31297 pIeLen = pBuf;
31298 ++pBuf; ++(*pnConsumed);
31299 *pBuf = pSrc->operating_class;
31300 *pnConsumed += 1;
31301 pBuf += 1;
31302 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->channel_list), pSrc->num_channel_list);
31303 *pnConsumed += pSrc->num_channel_list;
31304 /* fieldsEndFlag = 1 */
31305 break;
31306 }
31307 (void)pCtx;
31308 if (pIeLen) {
31309 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
31310 }
31311 return DOT11F_PARSE_SUCCESS;
31312 } /* End dot11f_pack_ie_ht2040_bss_intolerant_report. */
31313
dot11f_pack_ie_max_chan_switch_time(tpAniSirGlobal pCtx,tDot11fIEmax_chan_switch_time * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)31314 uint32_t dot11f_pack_ie_max_chan_switch_time(tpAniSirGlobal pCtx,
31315 tDot11fIEmax_chan_switch_time *pSrc,
31316 uint8_t *pBuf,
31317 uint32_t nBuf,
31318 uint32_t *pnConsumed)
31319 {
31320 uint8_t *pIeLen = 0;
31321 uint32_t nConsumedOnEntry = *pnConsumed;
31322 uint32_t nNeeded = 0U;
31323 nNeeded += 3;
31324 while (pSrc->present) {
31325 if (nNeeded > nBuf)
31326 return DOT11F_BUFFER_OVERFLOW;
31327 *pBuf = 255;
31328 ++pBuf; ++(*pnConsumed);
31329 pIeLen = pBuf;
31330 ++pBuf; ++(*pnConsumed);
31331 *pBuf = 52;
31332 ++pBuf; ++(*pnConsumed);
31333 DOT11F_MEMCPY(pCtx, pBuf, pSrc->switch_time, 3);
31334 *pnConsumed += 3;
31335 /* fieldsEndFlag = 1 */
31336 break;
31337 }
31338 (void)pCtx;
31339 if (pIeLen) {
31340 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
31341 }
31342 return DOT11F_PARSE_SUCCESS;
31343 } /* End dot11f_pack_ie_max_chan_switch_time. */
31344
dot11f_pack_ie_mlo_ie(tpAniSirGlobal pCtx,tDot11fIEmlo_ie * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)31345 uint32_t dot11f_pack_ie_mlo_ie(tpAniSirGlobal pCtx,
31346 tDot11fIEmlo_ie *pSrc,
31347 uint8_t *pBuf,
31348 uint32_t nBuf,
31349 uint32_t *pnConsumed)
31350 {
31351 uint8_t *pIeLen = 0;
31352 uint32_t nConsumedOnEntry = *pnConsumed;
31353 uint32_t nNeeded = 0U;
31354 nNeeded += pSrc->num_data;
31355 while (pSrc->present) {
31356 if (nNeeded > nBuf)
31357 return DOT11F_BUFFER_OVERFLOW;
31358 *pBuf = 255;
31359 ++pBuf; ++(*pnConsumed);
31360 pIeLen = pBuf;
31361 ++pBuf; ++(*pnConsumed);
31362 *pBuf = 107;
31363 ++pBuf; ++(*pnConsumed);
31364 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->data), pSrc->num_data);
31365 *pnConsumed += pSrc->num_data;
31366 /* fieldsEndFlag = 1 */
31367 break;
31368 }
31369 (void)pCtx;
31370 if (pIeLen) {
31371 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
31372 }
31373 return DOT11F_PARSE_SUCCESS;
31374 } /* End dot11f_pack_ie_mlo_ie. */
31375
dot11f_pack_ie_mu_edca_param_set(tpAniSirGlobal pCtx,tDot11fIEmu_edca_param_set * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)31376 uint32_t dot11f_pack_ie_mu_edca_param_set(tpAniSirGlobal pCtx,
31377 tDot11fIEmu_edca_param_set *pSrc,
31378 uint8_t *pBuf,
31379 uint32_t nBuf,
31380 uint32_t *pnConsumed)
31381 {
31382 uint8_t *pIeLen = 0;
31383 uint32_t nConsumedOnEntry = *pnConsumed;
31384 uint32_t nNeeded = 0U;
31385 uint8_t tmp229__;
31386 uint8_t tmp230__;
31387 uint8_t tmp231__;
31388 uint8_t tmp232__;
31389 uint8_t tmp233__;
31390 uint8_t tmp234__;
31391 uint8_t tmp235__;
31392 uint8_t tmp236__;
31393 nNeeded += 13;
31394 while (pSrc->present) {
31395 if (nNeeded > nBuf)
31396 return DOT11F_BUFFER_OVERFLOW;
31397 *pBuf = 255;
31398 ++pBuf; ++(*pnConsumed);
31399 pIeLen = pBuf;
31400 ++pBuf; ++(*pnConsumed);
31401 *pBuf = 38;
31402 ++pBuf; ++(*pnConsumed);
31403 *pBuf = pSrc->qos;
31404 *pnConsumed += 1;
31405 pBuf += 1;
31406 tmp229__ = 0U;
31407 tmp229__ |= (pSrc->acbe_aifsn << 0);
31408 tmp229__ |= (pSrc->acbe_acm << 4);
31409 tmp229__ |= (pSrc->acbe_aci << 5);
31410 tmp229__ |= (pSrc->unused1 << 7);
31411 if (unlikely(nBuf < 1))
31412 return DOT11F_INCOMPLETE_IE;
31413
31414 *pBuf = tmp229__;
31415 *pnConsumed += 1;
31416 pBuf += 1;
31417 nBuf -= 1 ;
31418 tmp230__ = 0U;
31419 tmp230__ |= (pSrc->acbe_acwmin << 0);
31420 tmp230__ |= (pSrc->acbe_acwmax << 4);
31421 if (unlikely(nBuf < 1))
31422 return DOT11F_INCOMPLETE_IE;
31423
31424 *pBuf = tmp230__;
31425 *pnConsumed += 1;
31426 pBuf += 1;
31427 nBuf -= 1 ;
31428 *pBuf = pSrc->acbe_muedca_timer;
31429 *pnConsumed += 1;
31430 pBuf += 1;
31431 tmp231__ = 0U;
31432 tmp231__ |= (pSrc->acbk_aifsn << 0);
31433 tmp231__ |= (pSrc->acbk_acm << 4);
31434 tmp231__ |= (pSrc->acbk_aci << 5);
31435 tmp231__ |= (pSrc->unused2 << 7);
31436 if (unlikely(nBuf < 1))
31437 return DOT11F_INCOMPLETE_IE;
31438
31439 *pBuf = tmp231__;
31440 *pnConsumed += 1;
31441 pBuf += 1;
31442 nBuf -= 1 ;
31443 tmp232__ = 0U;
31444 tmp232__ |= (pSrc->acbk_acwmin << 0);
31445 tmp232__ |= (pSrc->acbk_acwmax << 4);
31446 if (unlikely(nBuf < 1))
31447 return DOT11F_INCOMPLETE_IE;
31448
31449 *pBuf = tmp232__;
31450 *pnConsumed += 1;
31451 pBuf += 1;
31452 nBuf -= 1 ;
31453 *pBuf = pSrc->acbk_muedca_timer;
31454 *pnConsumed += 1;
31455 pBuf += 1;
31456 tmp233__ = 0U;
31457 tmp233__ |= (pSrc->acvi_aifsn << 0);
31458 tmp233__ |= (pSrc->acvi_acm << 4);
31459 tmp233__ |= (pSrc->acvi_aci << 5);
31460 tmp233__ |= (pSrc->unused3 << 7);
31461 if (unlikely(nBuf < 1))
31462 return DOT11F_INCOMPLETE_IE;
31463
31464 *pBuf = tmp233__;
31465 *pnConsumed += 1;
31466 pBuf += 1;
31467 nBuf -= 1 ;
31468 tmp234__ = 0U;
31469 tmp234__ |= (pSrc->acvi_acwmin << 0);
31470 tmp234__ |= (pSrc->acvi_acwmax << 4);
31471 if (unlikely(nBuf < 1))
31472 return DOT11F_INCOMPLETE_IE;
31473
31474 *pBuf = tmp234__;
31475 *pnConsumed += 1;
31476 pBuf += 1;
31477 nBuf -= 1 ;
31478 *pBuf = pSrc->acvi_muedca_timer;
31479 *pnConsumed += 1;
31480 pBuf += 1;
31481 tmp235__ = 0U;
31482 tmp235__ |= (pSrc->acvo_aifsn << 0);
31483 tmp235__ |= (pSrc->acvo_acm << 4);
31484 tmp235__ |= (pSrc->acvo_aci << 5);
31485 tmp235__ |= (pSrc->unused4 << 7);
31486 if (unlikely(nBuf < 1))
31487 return DOT11F_INCOMPLETE_IE;
31488
31489 *pBuf = tmp235__;
31490 *pnConsumed += 1;
31491 pBuf += 1;
31492 nBuf -= 1 ;
31493 tmp236__ = 0U;
31494 tmp236__ |= (pSrc->acvo_acwmin << 0);
31495 tmp236__ |= (pSrc->acvo_acwmax << 4);
31496 if (unlikely(nBuf < 1))
31497 return DOT11F_INCOMPLETE_IE;
31498
31499 *pBuf = tmp236__;
31500 *pnConsumed += 1;
31501 pBuf += 1;
31502 nBuf -= 1 ;
31503 *pBuf = pSrc->acvo_muedca_timer;
31504 *pnConsumed += 1;
31505 /* fieldsEndFlag = 1 */
31506 break;
31507 }
31508 (void)pCtx;
31509 if (pIeLen) {
31510 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
31511 }
31512 return DOT11F_PARSE_SUCCESS;
31513 } /* End dot11f_pack_ie_mu_edca_param_set. */
31514
dot11f_pack_ie_non_inheritance(tpAniSirGlobal pCtx,tDot11fIEnon_inheritance * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)31515 uint32_t dot11f_pack_ie_non_inheritance(tpAniSirGlobal pCtx,
31516 tDot11fIEnon_inheritance *pSrc,
31517 uint8_t *pBuf,
31518 uint32_t nBuf,
31519 uint32_t *pnConsumed)
31520 {
31521 uint8_t *pIeLen = 0;
31522 uint32_t nConsumedOnEntry = *pnConsumed;
31523 uint32_t nNeeded = 0U;
31524 nNeeded += pSrc->num_data;
31525 while (pSrc->present) {
31526 if (nNeeded > nBuf)
31527 return DOT11F_BUFFER_OVERFLOW;
31528 *pBuf = 255;
31529 ++pBuf; ++(*pnConsumed);
31530 pIeLen = pBuf;
31531 ++pBuf; ++(*pnConsumed);
31532 *pBuf = 56;
31533 ++pBuf; ++(*pnConsumed);
31534 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->data), pSrc->num_data);
31535 *pnConsumed += pSrc->num_data;
31536 /* fieldsEndFlag = 1 */
31537 break;
31538 }
31539 (void)pCtx;
31540 if (pIeLen) {
31541 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
31542 }
31543 return DOT11F_PARSE_SUCCESS;
31544 } /* End dot11f_pack_ie_non_inheritance. */
31545
dot11f_pack_ie_oci(tpAniSirGlobal pCtx,tDot11fIEoci * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)31546 uint32_t dot11f_pack_ie_oci(tpAniSirGlobal pCtx,
31547 tDot11fIEoci *pSrc,
31548 uint8_t *pBuf,
31549 uint32_t nBuf,
31550 uint32_t *pnConsumed)
31551 {
31552 uint8_t *pIeLen = 0;
31553 uint32_t nConsumedOnEntry = *pnConsumed;
31554 uint32_t nNeeded = 0U;
31555 nNeeded += 3;
31556 while (pSrc->present) {
31557 if (nNeeded > nBuf)
31558 return DOT11F_BUFFER_OVERFLOW;
31559 *pBuf = 255;
31560 ++pBuf; ++(*pnConsumed);
31561 pIeLen = pBuf;
31562 ++pBuf; ++(*pnConsumed);
31563 *pBuf = 54;
31564 ++pBuf; ++(*pnConsumed);
31565 *pBuf = pSrc->op_class;
31566 *pnConsumed += 1;
31567 pBuf += 1;
31568 *pBuf = pSrc->prim_ch_num;
31569 *pnConsumed += 1;
31570 pBuf += 1;
31571 *pBuf = pSrc->freq_seg_1_ch_num;
31572 *pnConsumed += 1;
31573 /* fieldsEndFlag = 1 */
31574 break;
31575 }
31576 (void)pCtx;
31577 if (pIeLen) {
31578 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
31579 }
31580 return DOT11F_PARSE_SUCCESS;
31581 } /* End dot11f_pack_ie_oci. */
31582
dot11f_pack_ie_osen_ie(tpAniSirGlobal pCtx,tDot11fIEosen_ie * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)31583 uint32_t dot11f_pack_ie_osen_ie(tpAniSirGlobal pCtx,
31584 tDot11fIEosen_ie *pSrc,
31585 uint8_t *pBuf,
31586 uint32_t nBuf,
31587 uint32_t *pnConsumed)
31588 {
31589 uint8_t *pIeLen = 0;
31590 uint32_t nConsumedOnEntry = *pnConsumed;
31591 uint32_t nNeeded = 0U;
31592 nNeeded += pSrc->num_data;
31593 while (pSrc->present) {
31594 if (nNeeded > nBuf)
31595 return DOT11F_BUFFER_OVERFLOW;
31596 *pBuf = 221;
31597 ++pBuf; ++(*pnConsumed);
31598 pIeLen = pBuf;
31599 ++pBuf; ++(*pnConsumed);
31600 *pBuf = 0x50;
31601 ++pBuf; ++(*pnConsumed);
31602 *pBuf = 0x6f;
31603 ++pBuf; ++(*pnConsumed);
31604 *pBuf = 0x9a;
31605 ++pBuf; ++(*pnConsumed);
31606 *pBuf = 0x12;
31607 ++pBuf; ++(*pnConsumed);
31608 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->data), pSrc->num_data);
31609 *pnConsumed += pSrc->num_data;
31610 /* fieldsEndFlag = 1 */
31611 break;
31612 }
31613 (void)pCtx;
31614 if (pIeLen) {
31615 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
31616 }
31617 return DOT11F_PARSE_SUCCESS;
31618 } /* End dot11f_pack_ie_osen_ie. */
31619
dot11f_pack_ie_qcn_ie(tpAniSirGlobal pCtx,tDot11fIEqcn_ie * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)31620 uint32_t dot11f_pack_ie_qcn_ie(tpAniSirGlobal pCtx,
31621 tDot11fIEqcn_ie *pSrc,
31622 uint8_t *pBuf,
31623 uint32_t nBuf,
31624 uint32_t *pnConsumed)
31625 {
31626 uint8_t *pIeLen = 0;
31627 uint32_t n, idx = 0, idxlast;
31628 uint32_t nConsumedSoFar, nConsumedNow;
31629 uint32_t status = DOT11F_PARSE_SUCCESS;
31630 uint32_t nNeeded = 0U;
31631 status = dot11f_get_packed_ie_qcn_ie(pCtx, pSrc, &nNeeded);
31632 if (!DOT11F_SUCCEEDED(status))
31633 return status;
31634 if (nNeeded > nBuf)
31635 return DOT11F_BUFFER_OVERFLOW;
31636 (void)pCtx;
31637 if (pSrc->present) {
31638 do {
31639 nConsumedSoFar = *pnConsumed;
31640 *pBuf = 221;
31641 ++pBuf; --nBuf; ++(*pnConsumed);
31642 pIeLen = pBuf;
31643 ++pBuf; --nBuf; ++(*pnConsumed);
31644 *pBuf = 0x8c;
31645 ++pBuf; --nBuf; ++(*pnConsumed);
31646 *pBuf = 0xfd;
31647 ++pBuf; --nBuf; ++(*pnConsumed);
31648 *pBuf = 0xf0;
31649 ++pBuf; --nBuf; ++(*pnConsumed);
31650 *pBuf = 0x1;
31651 ++pBuf; --nBuf; ++(*pnConsumed);
31652 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
31653 nConsumedNow = *pnConsumed;
31654 idxlast = idx;
31655 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
31656 pnConsumed,
31657 TLVS_qcn_ie +
31658 idx, &idx);
31659 nConsumedNow = *pnConsumed - nConsumedNow;
31660 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
31661 pBuf += nConsumedNow;
31662 nBuf -= nConsumedNow;
31663 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
31664 }
31665 return status;
31666 } /* End dot11f_pack_ie_qcn_ie. */
31667
dot11f_pack_ie_reduced_neighbor_report(tpAniSirGlobal pCtx,tDot11fIEreduced_neighbor_report * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)31668 uint32_t dot11f_pack_ie_reduced_neighbor_report(tpAniSirGlobal pCtx,
31669 tDot11fIEreduced_neighbor_report *pSrc,
31670 uint8_t *pBuf,
31671 uint32_t nBuf,
31672 uint32_t *pnConsumed)
31673 {
31674 uint8_t *pIeLen = 0;
31675 uint32_t nConsumedOnEntry = *pnConsumed;
31676 uint32_t nNeeded = 0U;
31677 uint16_t tmp237__;
31678 uint16_t tmp238__;
31679 uint32_t status = DOT11F_PARSE_SUCCESS;
31680 status = dot11f_get_packed_ie_reduced_neighbor_report(pCtx, pSrc, &nNeeded);
31681 if (!DOT11F_SUCCEEDED(status))
31682 return status;
31683 while (pSrc->present) {
31684 if (nNeeded > nBuf)
31685 return DOT11F_BUFFER_OVERFLOW;
31686 *pBuf = 201;
31687 ++pBuf; ++(*pnConsumed);
31688 pIeLen = pBuf;
31689 ++pBuf; ++(*pnConsumed);
31690 tmp237__ = 0U;
31691 tmp237__ |= (pSrc->tbtt_type << 0);
31692 tmp237__ |= (pSrc->filtered_neighbor_ap << 2);
31693 tmp237__ |= (pSrc->reserved << 3);
31694 tmp237__ |= (pSrc->tbtt_info_count << 4);
31695 tmp237__ |= (pSrc->tbtt_info_len << 8);
31696 if (unlikely(nBuf < 2))
31697 return DOT11F_INCOMPLETE_IE;
31698
31699 frameshtons(pCtx, pBuf, tmp237__, 0);
31700 *pnConsumed += 2;
31701 pBuf += 2;
31702 nBuf -= 2 ;
31703 *pBuf = pSrc->op_class;
31704 *pnConsumed += 1;
31705 pBuf += 1;
31706 *pBuf = pSrc->channel_num;
31707 *pnConsumed += 1;
31708 pBuf += 1;
31709 switch (pSrc->tbtt_info_len) {
31710 case 1:
31711 *pBuf = pSrc->tbtt_info.tbtt_info_1.tbtt_offset;
31712 *pnConsumed += 1;
31713 /* fieldsEndFlag = 1 */
31714 break;
31715 case 2:
31716 *pBuf = pSrc->tbtt_info.tbtt_info_2.tbtt_offset;
31717 *pnConsumed += 1;
31718 pBuf += 1;
31719 *pBuf = pSrc->tbtt_info.tbtt_info_2.bss_params;
31720 *pnConsumed += 1;
31721 /* fieldsEndFlag = 1 */
31722 break;
31723 case 5:
31724 *pBuf = pSrc->tbtt_info.tbtt_info_5.tbtt_offset;
31725 *pnConsumed += 1;
31726 pBuf += 1;
31727 frameshtonl(pCtx, pBuf, pSrc->tbtt_info.tbtt_info_5.short_ssid, 0);
31728 *pnConsumed += 4;
31729 /* fieldsEndFlag = 1 */
31730 break;
31731 case 6:
31732 *pBuf = pSrc->tbtt_info.tbtt_info_6.tbtt_offset;
31733 *pnConsumed += 1;
31734 pBuf += 1;
31735 frameshtonl(pCtx, pBuf, pSrc->tbtt_info.tbtt_info_6.short_ssid, 0);
31736 *pnConsumed += 4;
31737 pBuf += 4;
31738 *pBuf = pSrc->tbtt_info.tbtt_info_6.bss_params;
31739 *pnConsumed += 1;
31740 /* fieldsEndFlag = 1 */
31741 break;
31742 case 7:
31743 *pBuf = pSrc->tbtt_info.tbtt_info_7.tbtt_offset;
31744 *pnConsumed += 1;
31745 pBuf += 1;
31746 DOT11F_MEMCPY(pCtx, pBuf, pSrc->tbtt_info.tbtt_info_7.bssid, 6);
31747 *pnConsumed += 6;
31748 /* fieldsEndFlag = 1 */
31749 break;
31750 case 8:
31751 *pBuf = pSrc->tbtt_info.tbtt_info_8.tbtt_offset;
31752 *pnConsumed += 1;
31753 pBuf += 1;
31754 DOT11F_MEMCPY(pCtx, pBuf, pSrc->tbtt_info.tbtt_info_8.bssid, 6);
31755 *pnConsumed += 6;
31756 pBuf += 6;
31757 *pBuf = pSrc->tbtt_info.tbtt_info_8.bss_params;
31758 *pnConsumed += 1;
31759 /* fieldsEndFlag = 1 */
31760 break;
31761 case 9:
31762 *pBuf = pSrc->tbtt_info.tbtt_info_9.tbtt_offset;
31763 *pnConsumed += 1;
31764 pBuf += 1;
31765 DOT11F_MEMCPY(pCtx, pBuf, pSrc->tbtt_info.tbtt_info_9.bssid, 6);
31766 *pnConsumed += 6;
31767 pBuf += 6;
31768 *pBuf = pSrc->tbtt_info.tbtt_info_9.bss_params;
31769 *pnConsumed += 1;
31770 pBuf += 1;
31771 *pBuf = pSrc->tbtt_info.tbtt_info_9.psd_20mhz;
31772 *pnConsumed += 1;
31773 /* fieldsEndFlag = 1 */
31774 break;
31775 case 11:
31776 *pBuf = pSrc->tbtt_info.tbtt_info_11.tbtt_offset;
31777 *pnConsumed += 1;
31778 pBuf += 1;
31779 DOT11F_MEMCPY(pCtx, pBuf, pSrc->tbtt_info.tbtt_info_11.bssid, 6);
31780 *pnConsumed += 6;
31781 pBuf += 6;
31782 frameshtonl(pCtx, pBuf, pSrc->tbtt_info.tbtt_info_11.short_ssid, 0);
31783 *pnConsumed += 4;
31784 /* fieldsEndFlag = 1 */
31785 break;
31786 case 12:
31787 *pBuf = pSrc->tbtt_info.tbtt_info_12.tbtt_offset;
31788 *pnConsumed += 1;
31789 pBuf += 1;
31790 DOT11F_MEMCPY(pCtx, pBuf, pSrc->tbtt_info.tbtt_info_12.bssid, 6);
31791 *pnConsumed += 6;
31792 pBuf += 6;
31793 frameshtonl(pCtx, pBuf, pSrc->tbtt_info.tbtt_info_12.short_ssid, 0);
31794 *pnConsumed += 4;
31795 pBuf += 4;
31796 *pBuf = pSrc->tbtt_info.tbtt_info_12.bss_params;
31797 *pnConsumed += 1;
31798 /* fieldsEndFlag = 1 */
31799 break;
31800 case 13:
31801 *pBuf = pSrc->tbtt_info.tbtt_info_13.tbtt_offset;
31802 *pnConsumed += 1;
31803 pBuf += 1;
31804 DOT11F_MEMCPY(pCtx, pBuf, pSrc->tbtt_info.tbtt_info_13.bssid, 6);
31805 *pnConsumed += 6;
31806 pBuf += 6;
31807 frameshtonl(pCtx, pBuf, pSrc->tbtt_info.tbtt_info_13.short_ssid, 0);
31808 *pnConsumed += 4;
31809 pBuf += 4;
31810 *pBuf = pSrc->tbtt_info.tbtt_info_13.bss_params;
31811 *pnConsumed += 1;
31812 pBuf += 1;
31813 *pBuf = pSrc->tbtt_info.tbtt_info_13.psd_20mhz;
31814 *pnConsumed += 1;
31815 /* fieldsEndFlag = 1 */
31816 break;
31817 case 16:
31818 *pBuf = pSrc->tbtt_info.tbtt_info_16.tbtt_offset;
31819 *pnConsumed += 1;
31820 pBuf += 1;
31821 DOT11F_MEMCPY(pCtx, pBuf, pSrc->tbtt_info.tbtt_info_16.bssid, 6);
31822 *pnConsumed += 6;
31823 pBuf += 6;
31824 frameshtonl(pCtx, pBuf, pSrc->tbtt_info.tbtt_info_16.short_ssid, 0);
31825 *pnConsumed += 4;
31826 pBuf += 4;
31827 *pBuf = pSrc->tbtt_info.tbtt_info_16.bss_params;
31828 *pnConsumed += 1;
31829 pBuf += 1;
31830 *pBuf = pSrc->tbtt_info.tbtt_info_16.psd_20mhz;
31831 *pnConsumed += 1;
31832 pBuf += 1;
31833 *pBuf = pSrc->tbtt_info.tbtt_info_16.mld_id;
31834 *pnConsumed += 1;
31835 pBuf += 1;
31836 tmp238__ = 0U;
31837 tmp238__ |= (pSrc->tbtt_info.tbtt_info_16.link_id << 0);
31838 tmp238__ |= (pSrc->tbtt_info.tbtt_info_16.bss_param_change_cnt << 4);
31839 tmp238__ |= (pSrc->tbtt_info.tbtt_info_16.all_updates_included << 12);
31840 tmp238__ |= (pSrc->tbtt_info.tbtt_info_16.reserved << 13);
31841 if (unlikely(nBuf < 2))
31842 return DOT11F_INCOMPLETE_IE;
31843
31844 frameshtons(pCtx, pBuf, tmp238__, 0);
31845 *pnConsumed += 2;
31846 /* fieldsEndFlag = 1 */
31847 nBuf -= 2 ;
31848 break;
31849 }
31850 break;
31851 }
31852 (void)pCtx;
31853 if (pIeLen) {
31854 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
31855 }
31856 return status;
31857 } /* End dot11f_pack_ie_reduced_neighbor_report. */
31858
dot11f_pack_ie_roaming_consortium_sel(tpAniSirGlobal pCtx,tDot11fIEroaming_consortium_sel * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)31859 uint32_t dot11f_pack_ie_roaming_consortium_sel(tpAniSirGlobal pCtx,
31860 tDot11fIEroaming_consortium_sel *pSrc,
31861 uint8_t *pBuf,
31862 uint32_t nBuf,
31863 uint32_t *pnConsumed)
31864 {
31865 uint8_t *pIeLen = 0;
31866 uint32_t nConsumedOnEntry = *pnConsumed;
31867 uint32_t nNeeded = 0U;
31868 nNeeded += pSrc->num_data;
31869 while (pSrc->present) {
31870 if (nNeeded > nBuf)
31871 return DOT11F_BUFFER_OVERFLOW;
31872 *pBuf = 221;
31873 ++pBuf; ++(*pnConsumed);
31874 pIeLen = pBuf;
31875 ++pBuf; ++(*pnConsumed);
31876 *pBuf = 0x50;
31877 ++pBuf; ++(*pnConsumed);
31878 *pBuf = 0x6f;
31879 ++pBuf; ++(*pnConsumed);
31880 *pBuf = 0x9a;
31881 ++pBuf; ++(*pnConsumed);
31882 *pBuf = 0x1d;
31883 ++pBuf; ++(*pnConsumed);
31884 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->data), pSrc->num_data);
31885 *pnConsumed += pSrc->num_data;
31886 /* fieldsEndFlag = 1 */
31887 break;
31888 }
31889 (void)pCtx;
31890 if (pIeLen) {
31891 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
31892 }
31893 return DOT11F_PARSE_SUCCESS;
31894 } /* End dot11f_pack_ie_roaming_consortium_sel. */
31895
dot11f_pack_ie_sec_chan_offset_ele(tpAniSirGlobal pCtx,tDot11fIEsec_chan_offset_ele * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)31896 uint32_t dot11f_pack_ie_sec_chan_offset_ele(tpAniSirGlobal pCtx,
31897 tDot11fIEsec_chan_offset_ele *pSrc,
31898 uint8_t *pBuf,
31899 uint32_t nBuf,
31900 uint32_t *pnConsumed)
31901 {
31902 uint8_t *pIeLen = 0;
31903 uint32_t nConsumedOnEntry = *pnConsumed;
31904 uint32_t nNeeded = 0U;
31905 nNeeded += 1;
31906 while (pSrc->present) {
31907 if (nNeeded > nBuf)
31908 return DOT11F_BUFFER_OVERFLOW;
31909 *pBuf = 62;
31910 ++pBuf; ++(*pnConsumed);
31911 pIeLen = pBuf;
31912 ++pBuf; ++(*pnConsumed);
31913 *pBuf = pSrc->secondaryChannelOffset;
31914 *pnConsumed += 1;
31915 /* fieldsEndFlag = 1 */
31916 break;
31917 }
31918 (void)pCtx;
31919 if (pIeLen) {
31920 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
31921 }
31922 return DOT11F_PARSE_SUCCESS;
31923 } /* End dot11f_pack_ie_sec_chan_offset_ele. */
31924
dot11f_pack_ie_spatial_reuse(tpAniSirGlobal pCtx,tDot11fIEspatial_reuse * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)31925 uint32_t dot11f_pack_ie_spatial_reuse(tpAniSirGlobal pCtx,
31926 tDot11fIEspatial_reuse *pSrc,
31927 uint8_t *pBuf,
31928 uint32_t nBuf,
31929 uint32_t *pnConsumed)
31930 {
31931 uint8_t *pIeLen = 0;
31932 uint32_t nConsumedOnEntry = *pnConsumed;
31933 uint32_t nNeeded = 0U;
31934 uint8_t tmp239__;
31935 uint32_t status = DOT11F_PARSE_SUCCESS;
31936 status = dot11f_get_packed_ie_spatial_reuse(pCtx, pSrc, &nNeeded);
31937 if (!DOT11F_SUCCEEDED(status))
31938 return status;
31939 while (pSrc->present) {
31940 if (nNeeded > nBuf)
31941 return DOT11F_BUFFER_OVERFLOW;
31942 *pBuf = 255;
31943 ++pBuf; ++(*pnConsumed);
31944 pIeLen = pBuf;
31945 ++pBuf; ++(*pnConsumed);
31946 *pBuf = 39;
31947 ++pBuf; ++(*pnConsumed);
31948 tmp239__ = 0U;
31949 tmp239__ |= (pSrc->psr_disallow << 0);
31950 tmp239__ |= (pSrc->non_srg_pd_sr_disallow << 1);
31951 tmp239__ |= (pSrc->non_srg_offset_present << 2);
31952 tmp239__ |= (pSrc->srg_info_present << 3);
31953 tmp239__ |= (pSrc->sr_value15_allow << 4);
31954 tmp239__ |= (pSrc->reserved << 5);
31955 if (unlikely(nBuf < 1))
31956 return DOT11F_INCOMPLETE_IE;
31957
31958 *pBuf = tmp239__;
31959 *pnConsumed += 1;
31960 pBuf += 1;
31961 nBuf -= 1 ;
31962 if (pSrc->non_srg_offset_present) {
31963 switch (pSrc->non_srg_offset_present) {
31964 case 1:
31965 *pBuf = pSrc->non_srg_offset.info.non_srg_pd_max_offset;
31966 *pnConsumed += 1;
31967 pBuf += 1;
31968 break;
31969 }
31970 } else {
31971 break;
31972 }
31973 if (pSrc->srg_info_present) {
31974 switch (pSrc->srg_info_present) {
31975 case 1:
31976 *pBuf = pSrc->srg_info.info.srg_pd_min_offset;
31977 *pnConsumed += 1;
31978 pBuf += 1;
31979 *pBuf = pSrc->srg_info.info.srg_pd_max_offset;
31980 *pnConsumed += 1;
31981 pBuf += 1;
31982 DOT11F_MEMCPY(pCtx, pBuf, pSrc->srg_info.info.srg_color, 8);
31983 *pnConsumed += 8;
31984 pBuf += 8;
31985 DOT11F_MEMCPY(pCtx, pBuf, pSrc->srg_info.info.srg_partial_bssid, 8);
31986 *pnConsumed += 8;
31987 /* fieldsEndFlag = 1 */
31988 break;
31989 }
31990 } else {
31991 break;
31992 }
31993 break;
31994 }
31995 (void)pCtx;
31996 if (pIeLen) {
31997 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
31998 }
31999 return status;
32000 } /* End dot11f_pack_ie_spatial_reuse. */
32001
dot11f_pack_ie_t2lm_ie(tpAniSirGlobal pCtx,tDot11fIEt2lm_ie * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32002 uint32_t dot11f_pack_ie_t2lm_ie(tpAniSirGlobal pCtx,
32003 tDot11fIEt2lm_ie *pSrc,
32004 uint8_t *pBuf,
32005 uint32_t nBuf,
32006 uint32_t *pnConsumed)
32007 {
32008 uint8_t *pIeLen = 0;
32009 uint32_t nConsumedOnEntry = *pnConsumed;
32010 uint32_t nNeeded = 0U;
32011 nNeeded += pSrc->num_data;
32012 while (pSrc->present) {
32013 if (nNeeded > nBuf)
32014 return DOT11F_BUFFER_OVERFLOW;
32015 *pBuf = 255;
32016 ++pBuf; ++(*pnConsumed);
32017 pIeLen = pBuf;
32018 ++pBuf; ++(*pnConsumed);
32019 *pBuf = 109;
32020 ++pBuf; ++(*pnConsumed);
32021 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->data), pSrc->num_data);
32022 *pnConsumed += pSrc->num_data;
32023 /* fieldsEndFlag = 1 */
32024 break;
32025 }
32026 (void)pCtx;
32027 if (pIeLen) {
32028 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
32029 }
32030 return DOT11F_PARSE_SUCCESS;
32031 } /* End dot11f_pack_ie_t2lm_ie. */
32032
dot11f_pack_ie_vendor_vht_ie(tpAniSirGlobal pCtx,tDot11fIEvendor_vht_ie * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32033 uint32_t dot11f_pack_ie_vendor_vht_ie(tpAniSirGlobal pCtx,
32034 tDot11fIEvendor_vht_ie *pSrc,
32035 uint8_t *pBuf,
32036 uint32_t nBuf,
32037 uint32_t *pnConsumed)
32038 {
32039 uint8_t *pIeLen = 0;
32040 uint32_t nConsumedOnEntry = *pnConsumed;
32041 uint32_t nNeeded = 0U;
32042 uint32_t status = DOT11F_PARSE_SUCCESS;
32043 status = dot11f_get_packed_ie_vendor_vht_ie(pCtx, pSrc, &nNeeded);
32044 if (!DOT11F_SUCCEEDED(status))
32045 return status;
32046 while (pSrc->present) {
32047 if (nNeeded > nBuf)
32048 return DOT11F_BUFFER_OVERFLOW;
32049 *pBuf = 221;
32050 ++pBuf; --nBuf; ++(*pnConsumed);
32051 pIeLen = pBuf;
32052 ++pBuf; --nBuf; ++(*pnConsumed);
32053 *pBuf = 0x0;
32054 ++pBuf; --nBuf; ++(*pnConsumed);
32055 *pBuf = 0x90;
32056 ++pBuf; --nBuf; ++(*pnConsumed);
32057 *pBuf = 0x4c;
32058 ++pBuf; --nBuf; ++(*pnConsumed);
32059 *pBuf = 0x4;
32060 ++pBuf; --nBuf; ++(*pnConsumed);
32061 *pBuf = pSrc->sub_type;
32062 *pnConsumed += 1;
32063 pBuf += 1;
32064 status = pack_core(pCtx,
32065 (uint8_t *)pSrc,
32066 pBuf,
32067 nBuf,
32068 pnConsumed,
32069 FFS_vendor_vht_ie,
32070 IES_vendor_vht_ie);
32071 break;
32072 }
32073 (void)pCtx;
32074 if (pIeLen) {
32075 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
32076 }
32077 return status;
32078 } /* End dot11f_pack_ie_vendor_vht_ie. */
32079
dot11f_pack_add_ts_request(tpAniSirGlobal pCtx,tDot11fAddTSRequest * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32080 uint32_t dot11f_pack_add_ts_request(tpAniSirGlobal pCtx,
32081 tDot11fAddTSRequest *pFrm,
32082 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32083 {
32084 uint32_t i = 0;
32085 uint32_t status = 0;
32086 (void)i;
32087 *pnConsumed = 0U;
32088 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32089 FFS_AddTSRequest, IES_AddTSRequest);
32090
32091 return status;
32092
32093 } /* End dot11f_unpack_add_ts_request. */
32094
dot11f_pack_add_ts_response(tpAniSirGlobal pCtx,tDot11fAddTSResponse * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32095 uint32_t dot11f_pack_add_ts_response(tpAniSirGlobal pCtx,
32096 tDot11fAddTSResponse *pFrm,
32097 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32098 {
32099 uint32_t i = 0;
32100 uint32_t status = 0;
32101 (void)i;
32102 *pnConsumed = 0U;
32103 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32104 FFS_AddTSResponse, IES_AddTSResponse);
32105
32106 return status;
32107
32108 } /* End dot11f_unpack_add_ts_response. */
32109
dot11f_pack_assoc_request(tpAniSirGlobal pCtx,tDot11fAssocRequest * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32110 uint32_t dot11f_pack_assoc_request(tpAniSirGlobal pCtx,
32111 tDot11fAssocRequest *pFrm,
32112 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32113 {
32114 uint32_t i = 0;
32115 uint32_t status = 0;
32116 (void)i;
32117 *pnConsumed = 0U;
32118 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32119 FFS_AssocRequest, IES_AssocRequest);
32120
32121 return status;
32122
32123 } /* End dot11f_unpack_assoc_request. */
32124
dot11f_pack_assoc_response(tpAniSirGlobal pCtx,tDot11fAssocResponse * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32125 uint32_t dot11f_pack_assoc_response(tpAniSirGlobal pCtx,
32126 tDot11fAssocResponse *pFrm,
32127 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32128 {
32129 uint32_t i = 0;
32130 uint32_t status = 0;
32131 (void)i;
32132 *pnConsumed = 0U;
32133 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32134 FFS_AssocResponse, IES_AssocResponse);
32135
32136 return status;
32137
32138 } /* End dot11f_unpack_assoc_response. */
32139
dot11f_pack_authentication(tpAniSirGlobal pCtx,tDot11fAuthentication * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32140 uint32_t dot11f_pack_authentication(tpAniSirGlobal pCtx,
32141 tDot11fAuthentication *pFrm,
32142 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32143 {
32144 uint32_t i = 0;
32145 uint32_t status = 0;
32146 (void)i;
32147 *pnConsumed = 0U;
32148 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32149 FFS_Authentication, IES_Authentication);
32150
32151 return status;
32152
32153 } /* End dot11f_unpack_authentication. */
32154
dot11f_pack_beacon(tpAniSirGlobal pCtx,tDot11fBeacon * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32155 uint32_t dot11f_pack_beacon(tpAniSirGlobal pCtx,
32156 tDot11fBeacon *pFrm,
32157 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32158 {
32159 uint32_t i = 0;
32160 uint32_t status = 0;
32161 (void)i;
32162 *pnConsumed = 0U;
32163 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32164 FFS_Beacon, IES_Beacon);
32165
32166 return status;
32167
32168 } /* End dot11f_unpack_beacon. */
32169
dot11f_pack_beacon1(tpAniSirGlobal pCtx,tDot11fBeacon1 * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32170 uint32_t dot11f_pack_beacon1(tpAniSirGlobal pCtx,
32171 tDot11fBeacon1 *pFrm,
32172 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32173 {
32174 uint32_t i = 0;
32175 uint32_t status = 0;
32176 (void)i;
32177 *pnConsumed = 0U;
32178 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32179 FFS_Beacon1, IES_Beacon1);
32180
32181 return status;
32182
32183 } /* End dot11f_unpack_beacon1. */
32184
dot11f_pack_beacon2(tpAniSirGlobal pCtx,tDot11fBeacon2 * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32185 uint32_t dot11f_pack_beacon2(tpAniSirGlobal pCtx,
32186 tDot11fBeacon2 *pFrm,
32187 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32188 {
32189 uint32_t i = 0;
32190 uint32_t status = 0;
32191 (void)i;
32192 *pnConsumed = 0U;
32193 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32194 FFS_Beacon2, IES_Beacon2);
32195
32196 return status;
32197
32198 } /* End dot11f_unpack_beacon2. */
32199
dot11f_pack_beacon_i_es(tpAniSirGlobal pCtx,tDot11fBeaconIEs * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32200 uint32_t dot11f_pack_beacon_i_es(tpAniSirGlobal pCtx,
32201 tDot11fBeaconIEs *pFrm,
32202 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32203 {
32204 uint32_t i = 0;
32205 uint32_t status = 0;
32206 (void)i;
32207 *pnConsumed = 0U;
32208 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32209 FFS_BeaconIEs, IES_BeaconIEs);
32210
32211 return status;
32212
32213 } /* End dot11f_unpack_beacon_i_es. */
32214
dot11f_pack_channel_switch(tpAniSirGlobal pCtx,tDot11fChannelSwitch * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32215 uint32_t dot11f_pack_channel_switch(tpAniSirGlobal pCtx,
32216 tDot11fChannelSwitch *pFrm,
32217 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32218 {
32219 uint32_t i = 0;
32220 uint32_t status = 0;
32221 (void)i;
32222 *pnConsumed = 0U;
32223 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32224 FFS_ChannelSwitch, IES_ChannelSwitch);
32225
32226 return status;
32227
32228 } /* End dot11f_unpack_channel_switch. */
32229
dot11f_pack_de_auth(tpAniSirGlobal pCtx,tDot11fDeAuth * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32230 uint32_t dot11f_pack_de_auth(tpAniSirGlobal pCtx,
32231 tDot11fDeAuth *pFrm,
32232 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32233 {
32234 uint32_t i = 0;
32235 uint32_t status = 0;
32236 (void)i;
32237 *pnConsumed = 0U;
32238 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32239 FFS_DeAuth, IES_DeAuth);
32240
32241 return status;
32242
32243 } /* End dot11f_unpack_de_auth. */
32244
dot11f_pack_del_ts(tpAniSirGlobal pCtx,tDot11fDelTS * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32245 uint32_t dot11f_pack_del_ts(tpAniSirGlobal pCtx,
32246 tDot11fDelTS *pFrm,
32247 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32248 {
32249 uint32_t i = 0;
32250 uint32_t status = 0;
32251 (void)i;
32252 *pnConsumed = 0U;
32253 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32254 FFS_DelTS, IES_DelTS);
32255
32256 return status;
32257
32258 } /* End dot11f_unpack_del_ts. */
32259
dot11f_pack_disassociation(tpAniSirGlobal pCtx,tDot11fDisassociation * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32260 uint32_t dot11f_pack_disassociation(tpAniSirGlobal pCtx,
32261 tDot11fDisassociation *pFrm,
32262 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32263 {
32264 uint32_t i = 0;
32265 uint32_t status = 0;
32266 (void)i;
32267 *pnConsumed = 0U;
32268 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32269 FFS_Disassociation, IES_Disassociation);
32270
32271 return status;
32272
32273 } /* End dot11f_unpack_disassociation. */
32274
dot11f_pack_link_measurement_report(tpAniSirGlobal pCtx,tDot11fLinkMeasurementReport * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32275 uint32_t dot11f_pack_link_measurement_report(tpAniSirGlobal pCtx,
32276 tDot11fLinkMeasurementReport *pFrm,
32277 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32278 {
32279 uint32_t i = 0;
32280 uint32_t status = 0;
32281 (void)i;
32282 *pnConsumed = 0U;
32283 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32284 FFS_LinkMeasurementReport, IES_LinkMeasurementReport);
32285
32286 return status;
32287
32288 } /* End dot11f_unpack_link_measurement_report. */
32289
dot11f_pack_link_measurement_request(tpAniSirGlobal pCtx,tDot11fLinkMeasurementRequest * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32290 uint32_t dot11f_pack_link_measurement_request(tpAniSirGlobal pCtx,
32291 tDot11fLinkMeasurementRequest *pFrm,
32292 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32293 {
32294 uint32_t i = 0;
32295 uint32_t status = 0;
32296 (void)i;
32297 *pnConsumed = 0U;
32298 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32299 FFS_LinkMeasurementRequest, IES_LinkMeasurementRequest);
32300
32301 return status;
32302
32303 } /* End dot11f_unpack_link_measurement_request. */
32304
dot11f_pack_measurement_report(tpAniSirGlobal pCtx,tDot11fMeasurementReport * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32305 uint32_t dot11f_pack_measurement_report(tpAniSirGlobal pCtx,
32306 tDot11fMeasurementReport *pFrm,
32307 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32308 {
32309 uint32_t i = 0;
32310 uint32_t status = 0;
32311 (void)i;
32312 *pnConsumed = 0U;
32313 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32314 FFS_MeasurementReport, IES_MeasurementReport);
32315
32316 return status;
32317
32318 } /* End dot11f_unpack_measurement_report. */
32319
dot11f_pack_measurement_request(tpAniSirGlobal pCtx,tDot11fMeasurementRequest * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32320 uint32_t dot11f_pack_measurement_request(tpAniSirGlobal pCtx,
32321 tDot11fMeasurementRequest *pFrm,
32322 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32323 {
32324 uint32_t i = 0;
32325 uint32_t status = 0;
32326 (void)i;
32327 *pnConsumed = 0U;
32328 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32329 FFS_MeasurementRequest, IES_MeasurementRequest);
32330
32331 return status;
32332
32333 } /* End dot11f_unpack_measurement_request. */
32334
dot11f_pack_neighbor_report_request(tpAniSirGlobal pCtx,tDot11fNeighborReportRequest * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32335 uint32_t dot11f_pack_neighbor_report_request(tpAniSirGlobal pCtx,
32336 tDot11fNeighborReportRequest *pFrm,
32337 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32338 {
32339 uint32_t i = 0;
32340 uint32_t status = 0;
32341 (void)i;
32342 *pnConsumed = 0U;
32343 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32344 FFS_NeighborReportRequest, IES_NeighborReportRequest);
32345
32346 return status;
32347
32348 } /* End dot11f_unpack_neighbor_report_request. */
32349
dot11f_pack_neighbor_report_response(tpAniSirGlobal pCtx,tDot11fNeighborReportResponse * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32350 uint32_t dot11f_pack_neighbor_report_response(tpAniSirGlobal pCtx,
32351 tDot11fNeighborReportResponse *pFrm,
32352 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32353 {
32354 uint32_t i = 0;
32355 uint32_t status = 0;
32356 (void)i;
32357 *pnConsumed = 0U;
32358 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32359 FFS_NeighborReportResponse, IES_NeighborReportResponse);
32360
32361 return status;
32362
32363 } /* End dot11f_unpack_neighbor_report_response. */
32364
dot11f_pack_operating_mode(tpAniSirGlobal pCtx,tDot11fOperatingMode * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32365 uint32_t dot11f_pack_operating_mode(tpAniSirGlobal pCtx,
32366 tDot11fOperatingMode *pFrm,
32367 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32368 {
32369 uint32_t i = 0;
32370 uint32_t status = 0;
32371 (void)i;
32372 *pnConsumed = 0U;
32373 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32374 FFS_OperatingMode, IES_OperatingMode);
32375
32376 return status;
32377
32378 } /* End dot11f_unpack_operating_mode. */
32379
dot11f_pack_probe_request(tpAniSirGlobal pCtx,tDot11fProbeRequest * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32380 uint32_t dot11f_pack_probe_request(tpAniSirGlobal pCtx,
32381 tDot11fProbeRequest *pFrm,
32382 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32383 {
32384 uint32_t i = 0;
32385 uint32_t status = 0;
32386 (void)i;
32387 *pnConsumed = 0U;
32388 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32389 FFS_ProbeRequest, IES_ProbeRequest);
32390
32391 return status;
32392
32393 } /* End dot11f_unpack_probe_request. */
32394
dot11f_pack_probe_response(tpAniSirGlobal pCtx,tDot11fProbeResponse * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32395 uint32_t dot11f_pack_probe_response(tpAniSirGlobal pCtx,
32396 tDot11fProbeResponse *pFrm,
32397 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32398 {
32399 uint32_t i = 0;
32400 uint32_t status = 0;
32401 (void)i;
32402 *pnConsumed = 0U;
32403 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32404 FFS_ProbeResponse, IES_ProbeResponse);
32405
32406 return status;
32407
32408 } /* End dot11f_unpack_probe_response. */
32409
dot11f_pack_qos_map_configure(tpAniSirGlobal pCtx,tDot11fQosMapConfigure * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32410 uint32_t dot11f_pack_qos_map_configure(tpAniSirGlobal pCtx,
32411 tDot11fQosMapConfigure *pFrm,
32412 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32413 {
32414 uint32_t i = 0;
32415 uint32_t status = 0;
32416 (void)i;
32417 *pnConsumed = 0U;
32418 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32419 FFS_QosMapConfigure, IES_QosMapConfigure);
32420
32421 return status;
32422
32423 } /* End dot11f_unpack_qos_map_configure. */
32424
dot11f_pack_radio_measurement_report(tpAniSirGlobal pCtx,tDot11fRadioMeasurementReport * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32425 uint32_t dot11f_pack_radio_measurement_report(tpAniSirGlobal pCtx,
32426 tDot11fRadioMeasurementReport *pFrm,
32427 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32428 {
32429 uint32_t i = 0;
32430 uint32_t status = 0;
32431 (void)i;
32432 *pnConsumed = 0U;
32433 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32434 FFS_RadioMeasurementReport, IES_RadioMeasurementReport);
32435
32436 return status;
32437
32438 } /* End dot11f_unpack_radio_measurement_report. */
32439
dot11f_pack_radio_measurement_request(tpAniSirGlobal pCtx,tDot11fRadioMeasurementRequest * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32440 uint32_t dot11f_pack_radio_measurement_request(tpAniSirGlobal pCtx,
32441 tDot11fRadioMeasurementRequest *pFrm,
32442 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32443 {
32444 uint32_t i = 0;
32445 uint32_t status = 0;
32446 (void)i;
32447 *pnConsumed = 0U;
32448 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32449 FFS_RadioMeasurementRequest, IES_RadioMeasurementRequest);
32450
32451 return status;
32452
32453 } /* End dot11f_unpack_radio_measurement_request. */
32454
dot11f_pack_re_assoc_request(tpAniSirGlobal pCtx,tDot11fReAssocRequest * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32455 uint32_t dot11f_pack_re_assoc_request(tpAniSirGlobal pCtx,
32456 tDot11fReAssocRequest *pFrm,
32457 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32458 {
32459 uint32_t i = 0;
32460 uint32_t status = 0;
32461 (void)i;
32462 *pnConsumed = 0U;
32463 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32464 FFS_ReAssocRequest, IES_ReAssocRequest);
32465
32466 return status;
32467
32468 } /* End dot11f_unpack_re_assoc_request. */
32469
dot11f_pack_re_assoc_response(tpAniSirGlobal pCtx,tDot11fReAssocResponse * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32470 uint32_t dot11f_pack_re_assoc_response(tpAniSirGlobal pCtx,
32471 tDot11fReAssocResponse *pFrm,
32472 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32473 {
32474 uint32_t i = 0;
32475 uint32_t status = 0;
32476 (void)i;
32477 *pnConsumed = 0U;
32478 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32479 FFS_ReAssocResponse, IES_ReAssocResponse);
32480
32481 return status;
32482
32483 } /* End dot11f_unpack_re_assoc_response. */
32484
dot11f_pack_sm_power_save(tpAniSirGlobal pCtx,tDot11fSMPowerSave * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32485 uint32_t dot11f_pack_sm_power_save(tpAniSirGlobal pCtx,
32486 tDot11fSMPowerSave *pFrm,
32487 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32488 {
32489 uint32_t i = 0;
32490 uint32_t status = 0;
32491 (void)i;
32492 *pnConsumed = 0U;
32493 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32494 FFS_SMPowerSave, IES_SMPowerSave);
32495
32496 return status;
32497
32498 } /* End dot11f_unpack_sm_power_save. */
32499
dot11f_pack_sa_query_req(tpAniSirGlobal pCtx,tDot11fSaQueryReq * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32500 uint32_t dot11f_pack_sa_query_req(tpAniSirGlobal pCtx,
32501 tDot11fSaQueryReq *pFrm,
32502 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32503 {
32504 uint32_t i = 0;
32505 uint32_t status = 0;
32506 (void)i;
32507 *pnConsumed = 0U;
32508 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32509 FFS_SaQueryReq, IES_SaQueryReq);
32510
32511 return status;
32512
32513 } /* End dot11f_unpack_sa_query_req. */
32514
dot11f_pack_sa_query_rsp(tpAniSirGlobal pCtx,tDot11fSaQueryRsp * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32515 uint32_t dot11f_pack_sa_query_rsp(tpAniSirGlobal pCtx,
32516 tDot11fSaQueryRsp *pFrm,
32517 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32518 {
32519 uint32_t i = 0;
32520 uint32_t status = 0;
32521 (void)i;
32522 *pnConsumed = 0U;
32523 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32524 FFS_SaQueryRsp, IES_SaQueryRsp);
32525
32526 return status;
32527
32528 } /* End dot11f_unpack_sa_query_rsp. */
32529
dot11f_pack_tdls_dis_req(tpAniSirGlobal pCtx,tDot11fTDLSDisReq * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32530 uint32_t dot11f_pack_tdls_dis_req(tpAniSirGlobal pCtx,
32531 tDot11fTDLSDisReq *pFrm,
32532 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32533 {
32534 uint32_t i = 0;
32535 uint32_t status = 0;
32536 (void)i;
32537 *pnConsumed = 0U;
32538 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32539 FFS_TDLSDisReq, IES_TDLSDisReq);
32540
32541 return status;
32542
32543 } /* End dot11f_unpack_tdls_dis_req. */
32544
dot11f_pack_tdls_dis_rsp(tpAniSirGlobal pCtx,tDot11fTDLSDisRsp * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32545 uint32_t dot11f_pack_tdls_dis_rsp(tpAniSirGlobal pCtx,
32546 tDot11fTDLSDisRsp *pFrm,
32547 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32548 {
32549 uint32_t i = 0;
32550 uint32_t status = 0;
32551 (void)i;
32552 *pnConsumed = 0U;
32553 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32554 FFS_TDLSDisRsp, IES_TDLSDisRsp);
32555
32556 return status;
32557
32558 } /* End dot11f_unpack_tdls_dis_rsp. */
32559
dot11f_pack_tdls_peer_traffic_ind(tpAniSirGlobal pCtx,tDot11fTDLSPeerTrafficInd * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32560 uint32_t dot11f_pack_tdls_peer_traffic_ind(tpAniSirGlobal pCtx,
32561 tDot11fTDLSPeerTrafficInd *pFrm,
32562 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32563 {
32564 uint32_t i = 0;
32565 uint32_t status = 0;
32566 (void)i;
32567 *pnConsumed = 0U;
32568 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32569 FFS_TDLSPeerTrafficInd, IES_TDLSPeerTrafficInd);
32570
32571 return status;
32572
32573 } /* End dot11f_unpack_tdls_peer_traffic_ind. */
32574
dot11f_pack_tdls_peer_traffic_rsp(tpAniSirGlobal pCtx,tDot11fTDLSPeerTrafficRsp * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32575 uint32_t dot11f_pack_tdls_peer_traffic_rsp(tpAniSirGlobal pCtx,
32576 tDot11fTDLSPeerTrafficRsp *pFrm,
32577 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32578 {
32579 uint32_t i = 0;
32580 uint32_t status = 0;
32581 (void)i;
32582 *pnConsumed = 0U;
32583 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32584 FFS_TDLSPeerTrafficRsp, IES_TDLSPeerTrafficRsp);
32585
32586 return status;
32587
32588 } /* End dot11f_unpack_tdls_peer_traffic_rsp. */
32589
dot11f_pack_tdls_setup_cnf(tpAniSirGlobal pCtx,tDot11fTDLSSetupCnf * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32590 uint32_t dot11f_pack_tdls_setup_cnf(tpAniSirGlobal pCtx,
32591 tDot11fTDLSSetupCnf *pFrm,
32592 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32593 {
32594 uint32_t i = 0;
32595 uint32_t status = 0;
32596 (void)i;
32597 *pnConsumed = 0U;
32598 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32599 FFS_TDLSSetupCnf, IES_TDLSSetupCnf);
32600
32601 return status;
32602
32603 } /* End dot11f_unpack_tdls_setup_cnf. */
32604
dot11f_pack_tdls_setup_req(tpAniSirGlobal pCtx,tDot11fTDLSSetupReq * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32605 uint32_t dot11f_pack_tdls_setup_req(tpAniSirGlobal pCtx,
32606 tDot11fTDLSSetupReq *pFrm,
32607 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32608 {
32609 uint32_t i = 0;
32610 uint32_t status = 0;
32611 (void)i;
32612 *pnConsumed = 0U;
32613 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32614 FFS_TDLSSetupReq, IES_TDLSSetupReq);
32615
32616 return status;
32617
32618 } /* End dot11f_unpack_tdls_setup_req. */
32619
dot11f_pack_tdls_setup_rsp(tpAniSirGlobal pCtx,tDot11fTDLSSetupRsp * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32620 uint32_t dot11f_pack_tdls_setup_rsp(tpAniSirGlobal pCtx,
32621 tDot11fTDLSSetupRsp *pFrm,
32622 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32623 {
32624 uint32_t i = 0;
32625 uint32_t status = 0;
32626 (void)i;
32627 *pnConsumed = 0U;
32628 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32629 FFS_TDLSSetupRsp, IES_TDLSSetupRsp);
32630
32631 return status;
32632
32633 } /* End dot11f_unpack_tdls_setup_rsp. */
32634
dot11f_pack_tdls_teardown(tpAniSirGlobal pCtx,tDot11fTDLSTeardown * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32635 uint32_t dot11f_pack_tdls_teardown(tpAniSirGlobal pCtx,
32636 tDot11fTDLSTeardown *pFrm,
32637 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32638 {
32639 uint32_t i = 0;
32640 uint32_t status = 0;
32641 (void)i;
32642 *pnConsumed = 0U;
32643 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32644 FFS_TDLSTeardown, IES_TDLSTeardown);
32645
32646 return status;
32647
32648 } /* End dot11f_unpack_tdls_teardown. */
32649
dot11f_pack_tpc_report(tpAniSirGlobal pCtx,tDot11fTPCReport * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32650 uint32_t dot11f_pack_tpc_report(tpAniSirGlobal pCtx,
32651 tDot11fTPCReport *pFrm,
32652 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32653 {
32654 uint32_t i = 0;
32655 uint32_t status = 0;
32656 (void)i;
32657 *pnConsumed = 0U;
32658 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32659 FFS_TPCReport, IES_TPCReport);
32660
32661 return status;
32662
32663 } /* End dot11f_unpack_tpc_report. */
32664
dot11f_pack_tpc_request(tpAniSirGlobal pCtx,tDot11fTPCRequest * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32665 uint32_t dot11f_pack_tpc_request(tpAniSirGlobal pCtx,
32666 tDot11fTPCRequest *pFrm,
32667 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32668 {
32669 uint32_t i = 0;
32670 uint32_t status = 0;
32671 (void)i;
32672 *pnConsumed = 0U;
32673 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32674 FFS_TPCRequest, IES_TPCRequest);
32675
32676 return status;
32677
32678 } /* End dot11f_unpack_tpc_request. */
32679
dot11f_pack_timing_advertisement_frame(tpAniSirGlobal pCtx,tDot11fTimingAdvertisementFrame * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32680 uint32_t dot11f_pack_timing_advertisement_frame(tpAniSirGlobal pCtx,
32681 tDot11fTimingAdvertisementFrame *pFrm,
32682 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32683 {
32684 uint32_t i = 0;
32685 uint32_t status = 0;
32686 (void)i;
32687 *pnConsumed = 0U;
32688 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32689 FFS_TimingAdvertisementFrame, IES_TimingAdvertisementFrame);
32690
32691 return status;
32692
32693 } /* End dot11f_unpack_timing_advertisement_frame. */
32694
dot11f_pack_vht_gid_management_action_frame(tpAniSirGlobal pCtx,tDot11fVHTGidManagementActionFrame * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32695 uint32_t dot11f_pack_vht_gid_management_action_frame(tpAniSirGlobal pCtx,
32696 tDot11fVHTGidManagementActionFrame *pFrm,
32697 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32698 {
32699 uint32_t i = 0;
32700 uint32_t status = 0;
32701 (void)i;
32702 *pnConsumed = 0U;
32703 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32704 FFS_VHTGidManagementActionFrame, IES_VHTGidManagementActionFrame);
32705
32706 return status;
32707
32708 } /* End dot11f_unpack_vht_gid_management_action_frame. */
32709
dot11f_pack_wmm_add_ts_request(tpAniSirGlobal pCtx,tDot11fWMMAddTSRequest * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32710 uint32_t dot11f_pack_wmm_add_ts_request(tpAniSirGlobal pCtx,
32711 tDot11fWMMAddTSRequest *pFrm,
32712 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32713 {
32714 uint32_t i = 0;
32715 uint32_t status = 0;
32716 (void)i;
32717 *pnConsumed = 0U;
32718 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32719 FFS_WMMAddTSRequest, IES_WMMAddTSRequest);
32720
32721 return status;
32722
32723 } /* End dot11f_unpack_wmm_add_ts_request. */
32724
dot11f_pack_wmm_add_ts_response(tpAniSirGlobal pCtx,tDot11fWMMAddTSResponse * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32725 uint32_t dot11f_pack_wmm_add_ts_response(tpAniSirGlobal pCtx,
32726 tDot11fWMMAddTSResponse *pFrm,
32727 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32728 {
32729 uint32_t i = 0;
32730 uint32_t status = 0;
32731 (void)i;
32732 *pnConsumed = 0U;
32733 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32734 FFS_WMMAddTSResponse, IES_WMMAddTSResponse);
32735
32736 return status;
32737
32738 } /* End dot11f_unpack_wmm_add_ts_response. */
32739
dot11f_pack_wmm_del_ts(tpAniSirGlobal pCtx,tDot11fWMMDelTS * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32740 uint32_t dot11f_pack_wmm_del_ts(tpAniSirGlobal pCtx,
32741 tDot11fWMMDelTS *pFrm,
32742 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32743 {
32744 uint32_t i = 0;
32745 uint32_t status = 0;
32746 (void)i;
32747 *pnConsumed = 0U;
32748 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32749 FFS_WMMDelTS, IES_WMMDelTS);
32750
32751 return status;
32752
32753 } /* End dot11f_unpack_wmm_del_ts. */
32754
dot11f_pack_addba_req(tpAniSirGlobal pCtx,tDot11faddba_req * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32755 uint32_t dot11f_pack_addba_req(tpAniSirGlobal pCtx,
32756 tDot11faddba_req *pFrm,
32757 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32758 {
32759 uint32_t i = 0;
32760 uint32_t status = 0;
32761 (void)i;
32762 *pnConsumed = 0U;
32763 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32764 FFS_addba_req, IES_addba_req);
32765
32766 return status;
32767
32768 } /* End dot11f_unpack_addba_req. */
32769
dot11f_pack_addba_rsp(tpAniSirGlobal pCtx,tDot11faddba_rsp * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32770 uint32_t dot11f_pack_addba_rsp(tpAniSirGlobal pCtx,
32771 tDot11faddba_rsp *pFrm,
32772 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32773 {
32774 uint32_t i = 0;
32775 uint32_t status = 0;
32776 (void)i;
32777 *pnConsumed = 0U;
32778 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32779 FFS_addba_rsp, IES_addba_rsp);
32780
32781 return status;
32782
32783 } /* End dot11f_unpack_addba_rsp. */
32784
dot11f_pack_delba_req(tpAniSirGlobal pCtx,tDot11fdelba_req * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32785 uint32_t dot11f_pack_delba_req(tpAniSirGlobal pCtx,
32786 tDot11fdelba_req *pFrm,
32787 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32788 {
32789 uint32_t i = 0;
32790 uint32_t status = 0;
32791 (void)i;
32792 *pnConsumed = 0U;
32793 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32794 FFS_delba_req, IES_delba_req);
32795
32796 return status;
32797
32798 } /* End dot11f_unpack_delba_req. */
32799
dot11f_pack_epcs_neg_req(tpAniSirGlobal pCtx,tDot11fepcs_neg_req * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32800 uint32_t dot11f_pack_epcs_neg_req(tpAniSirGlobal pCtx,
32801 tDot11fepcs_neg_req *pFrm,
32802 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32803 {
32804 uint32_t i = 0;
32805 uint32_t status = 0;
32806 (void)i;
32807 *pnConsumed = 0U;
32808 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32809 FFS_epcs_neg_req, IES_epcs_neg_req);
32810
32811 return status;
32812
32813 } /* End dot11f_unpack_epcs_neg_req. */
32814
dot11f_pack_epcs_neg_rsp(tpAniSirGlobal pCtx,tDot11fepcs_neg_rsp * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32815 uint32_t dot11f_pack_epcs_neg_rsp(tpAniSirGlobal pCtx,
32816 tDot11fepcs_neg_rsp *pFrm,
32817 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32818 {
32819 uint32_t i = 0;
32820 uint32_t status = 0;
32821 (void)i;
32822 *pnConsumed = 0U;
32823 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32824 FFS_epcs_neg_rsp, IES_epcs_neg_rsp);
32825
32826 return status;
32827
32828 } /* End dot11f_unpack_epcs_neg_rsp. */
32829
dot11f_pack_epcs_teardown(tpAniSirGlobal pCtx,tDot11fepcs_teardown * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32830 uint32_t dot11f_pack_epcs_teardown(tpAniSirGlobal pCtx,
32831 tDot11fepcs_teardown *pFrm,
32832 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32833 {
32834 uint32_t i = 0;
32835 uint32_t status = 0;
32836 (void)i;
32837 *pnConsumed = 0U;
32838 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32839 FFS_epcs_teardown, IES_epcs_teardown);
32840
32841 return status;
32842
32843 } /* End dot11f_unpack_epcs_teardown. */
32844
dot11f_pack_ext_channel_switch_action_frame(tpAniSirGlobal pCtx,tDot11fext_channel_switch_action_frame * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32845 uint32_t dot11f_pack_ext_channel_switch_action_frame(tpAniSirGlobal pCtx,
32846 tDot11fext_channel_switch_action_frame *pFrm,
32847 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32848 {
32849 uint32_t i = 0;
32850 uint32_t status = 0;
32851 (void)i;
32852 *pnConsumed = 0U;
32853 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32854 FFS_ext_channel_switch_action_frame, IES_ext_channel_switch_action_frame);
32855
32856 return status;
32857
32858 } /* End dot11f_unpack_ext_channel_switch_action_frame. */
32859
dot11f_pack_ht2040_bss_coexistence_mgmt_action_frame(tpAniSirGlobal pCtx,tDot11fht2040_bss_coexistence_mgmt_action_frame * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32860 uint32_t dot11f_pack_ht2040_bss_coexistence_mgmt_action_frame(tpAniSirGlobal pCtx,
32861 tDot11fht2040_bss_coexistence_mgmt_action_frame *pFrm,
32862 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32863 {
32864 uint32_t i = 0;
32865 uint32_t status = 0;
32866 (void)i;
32867 *pnConsumed = 0U;
32868 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32869 FFS_ht2040_bss_coexistence_mgmt_action_frame, IES_ht2040_bss_coexistence_mgmt_action_frame);
32870
32871 return status;
32872
32873 } /* End dot11f_unpack_ht2040_bss_coexistence_mgmt_action_frame. */
32874
dot11f_pack_mscs_request_action_frame(tpAniSirGlobal pCtx,tDot11fmscs_request_action_frame * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32875 uint32_t dot11f_pack_mscs_request_action_frame(tpAniSirGlobal pCtx,
32876 tDot11fmscs_request_action_frame *pFrm,
32877 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32878 {
32879 uint32_t i = 0;
32880 uint32_t status = 0;
32881 (void)i;
32882 *pnConsumed = 0U;
32883 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32884 FFS_mscs_request_action_frame, IES_mscs_request_action_frame);
32885
32886 return status;
32887
32888 } /* End dot11f_unpack_mscs_request_action_frame. */
32889
dot11f_pack_p2p_oper_chan_change_confirm(tpAniSirGlobal pCtx,tDot11fp2p_oper_chan_change_confirm * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32890 uint32_t dot11f_pack_p2p_oper_chan_change_confirm(tpAniSirGlobal pCtx,
32891 tDot11fp2p_oper_chan_change_confirm *pFrm,
32892 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32893 {
32894 uint32_t i = 0;
32895 uint32_t status = 0;
32896 (void)i;
32897 *pnConsumed = 0U;
32898 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32899 FFS_p2p_oper_chan_change_confirm, IES_p2p_oper_chan_change_confirm);
32900
32901 return status;
32902
32903 } /* End dot11f_unpack_p2p_oper_chan_change_confirm. */
32904
dot11f_pack_t2lm_neg_req(tpAniSirGlobal pCtx,tDot11ft2lm_neg_req * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32905 uint32_t dot11f_pack_t2lm_neg_req(tpAniSirGlobal pCtx,
32906 tDot11ft2lm_neg_req *pFrm,
32907 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32908 {
32909 uint32_t i = 0;
32910 uint32_t status = 0;
32911 (void)i;
32912 *pnConsumed = 0U;
32913 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32914 FFS_t2lm_neg_req, IES_t2lm_neg_req);
32915
32916 return status;
32917
32918 } /* End dot11f_unpack_t2lm_neg_req. */
32919
dot11f_pack_t2lm_neg_rsp(tpAniSirGlobal pCtx,tDot11ft2lm_neg_rsp * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32920 uint32_t dot11f_pack_t2lm_neg_rsp(tpAniSirGlobal pCtx,
32921 tDot11ft2lm_neg_rsp *pFrm,
32922 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32923 {
32924 uint32_t i = 0;
32925 uint32_t status = 0;
32926 (void)i;
32927 *pnConsumed = 0U;
32928 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32929 FFS_t2lm_neg_rsp, IES_t2lm_neg_rsp);
32930
32931 return status;
32932
32933 } /* End dot11f_unpack_t2lm_neg_rsp. */
32934
dot11f_pack_t2lm_teardown(tpAniSirGlobal pCtx,tDot11ft2lm_teardown * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32935 uint32_t dot11f_pack_t2lm_teardown(tpAniSirGlobal pCtx,
32936 tDot11ft2lm_teardown *pFrm,
32937 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32938 {
32939 uint32_t i = 0;
32940 uint32_t status = 0;
32941 (void)i;
32942 *pnConsumed = 0U;
32943 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32944 FFS_t2lm_teardown, IES_t2lm_teardown);
32945
32946 return status;
32947
32948 } /* End dot11f_unpack_t2lm_teardown. */
32949
dot11f_pack_vendor_action_frame(tpAniSirGlobal pCtx,tDot11fvendor_action_frame * pFrm,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed)32950 uint32_t dot11f_pack_vendor_action_frame(tpAniSirGlobal pCtx,
32951 tDot11fvendor_action_frame *pFrm,
32952 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
32953 {
32954 uint32_t i = 0;
32955 uint32_t status = 0;
32956 (void)i;
32957 *pnConsumed = 0U;
32958 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
32959 FFS_vendor_action_frame, IES_vendor_action_frame);
32960
32961 return status;
32962
32963 } /* End dot11f_unpack_vendor_action_frame. */
32964
pack_core(tpAniSirGlobal pCtx,uint8_t * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed,const tFFDefn FFs[],const tIEDefn IEs[])32965 static uint32_t pack_core(tpAniSirGlobal pCtx,
32966 uint8_t *pSrc,
32967 uint8_t *pBuf,
32968 uint32_t nBuf,
32969 uint32_t *pnConsumed,
32970 const tFFDefn FFs[],
32971 const tIEDefn IEs[])
32972 {
32973 const tFFDefn *pFf;
32974 const tIEDefn *pIe;
32975 tFRAMES_BOOL *pfFound;
32976 uint8_t *pBufRemaining;
32977 uint16_t i;
32978 uint32_t nBufRemaining, status, len;
32979 uint32_t countOffset = 0;
32980
32981 (void)pCtx; /* Shutup the compiler if we have no FFs nor IEs... */
32982 i = 0;
32983
32984 DOT11F_PARAMETER_CHECK2(pSrc, pBuf, nBuf, pnConsumed);
32985
32986 status = DOT11F_PARSE_SUCCESS;
32987 pBufRemaining = pBuf;
32988 nBufRemaining = nBuf;
32989
32990 pFf = &(FFs[0]);
32991 while (pFf->size) {
32992 if (pFf->size > nBufRemaining) {
32993 FRAMES_LOG3(pCtx, FRLOGE, FRFL("The Fixed Field %s req"
32994 "uires %d bytes, but there are only %d remaining.\n"),
32995 pFf->name, pFf->size, nBufRemaining);
32996 return DOT11F_BUFFER_OVERFLOW;
32997 }
32998
32999 switch (pFf->sig) {
33000 case SigFfAID:
33001 dot11f_pack_ff_aid(
33002 pCtx, (tDot11fFfAID *)
33003 (pSrc + pFf->offset), pBufRemaining);
33004 break;
33005 case SigFfAction:
33006 dot11f_pack_ff_action(
33007 pCtx, (tDot11fFfAction *)
33008 (pSrc + pFf->offset), pBufRemaining);
33009 break;
33010 case SigFfAuthAlgo:
33011 dot11f_pack_ff_auth_algo(
33012 pCtx, (tDot11fFfAuthAlgo *)
33013 (pSrc + pFf->offset), pBufRemaining);
33014 break;
33015 case SigFfAuthSeqNo:
33016 dot11f_pack_ff_auth_seq_no(
33017 pCtx, (tDot11fFfAuthSeqNo *)
33018 (pSrc + pFf->offset), pBufRemaining);
33019 break;
33020 case SigFfBeaconInterval:
33021 dot11f_pack_ff_beacon_interval(
33022 pCtx, (tDot11fFfBeaconInterval *)
33023 (pSrc + pFf->offset), pBufRemaining);
33024 break;
33025 case SigFfCapabilities:
33026 dot11f_pack_ff_capabilities(
33027 pCtx, (tDot11fFfCapabilities *)
33028 (pSrc + pFf->offset), pBufRemaining);
33029 break;
33030 case SigFfCategory:
33031 dot11f_pack_ff_category(
33032 pCtx, (tDot11fFfCategory *)
33033 (pSrc + pFf->offset), pBufRemaining);
33034 break;
33035 case SigFfCurrentAPAddress:
33036 dot11f_pack_ff_current_ap_address(
33037 pCtx, (tDot11fFfCurrentAPAddress *)
33038 (pSrc + pFf->offset), pBufRemaining);
33039 break;
33040 case SigFfDialogToken:
33041 dot11f_pack_ff_dialog_token(
33042 pCtx, (tDot11fFfDialogToken *)
33043 (pSrc + pFf->offset), pBufRemaining);
33044 break;
33045 case SigFfLinkMargin:
33046 dot11f_pack_ff_link_margin(
33047 pCtx, (tDot11fFfLinkMargin *)
33048 (pSrc + pFf->offset), pBufRemaining);
33049 break;
33050 case SigFfListenInterval:
33051 dot11f_pack_ff_listen_interval(
33052 pCtx, (tDot11fFfListenInterval *)
33053 (pSrc + pFf->offset), pBufRemaining);
33054 break;
33055 case SigFfMaxTxPower:
33056 dot11f_pack_ff_max_tx_power(
33057 pCtx, (tDot11fFfMaxTxPower *)
33058 (pSrc + pFf->offset), pBufRemaining);
33059 break;
33060 case SigFfNumOfRepetitions:
33061 dot11f_pack_ff_num_of_repetitions(
33062 pCtx, (tDot11fFfNumOfRepetitions *)
33063 (pSrc + pFf->offset), pBufRemaining);
33064 break;
33065 case SigFfOperatingMode:
33066 dot11f_pack_ff_operating_mode(
33067 pCtx, (tDot11fFfOperatingMode *)
33068 (pSrc + pFf->offset), pBufRemaining);
33069 break;
33070 case SigFfRCPI:
33071 dot11f_pack_ff_rcpi(
33072 pCtx, (tDot11fFfRCPI *)
33073 (pSrc + pFf->offset), pBufRemaining);
33074 break;
33075 case SigFfRSNI:
33076 dot11f_pack_ff_rsni(
33077 pCtx, (tDot11fFfRSNI *)
33078 (pSrc + pFf->offset), pBufRemaining);
33079 break;
33080 case SigFfReason:
33081 dot11f_pack_ff_reason(
33082 pCtx, (tDot11fFfReason *)
33083 (pSrc + pFf->offset), pBufRemaining);
33084 break;
33085 case SigFfRxAntennaId:
33086 dot11f_pack_ff_rx_antenna_id(
33087 pCtx, (tDot11fFfRxAntennaId *)
33088 (pSrc + pFf->offset), pBufRemaining);
33089 break;
33090 case SigFfSMPowerModeSet:
33091 dot11f_pack_ff_sm_power_mode_set(
33092 pCtx, (tDot11fFfSMPowerModeSet *)
33093 (pSrc + pFf->offset), pBufRemaining);
33094 break;
33095 case SigFfStatus:
33096 dot11f_pack_ff_status(
33097 pCtx, (tDot11fFfStatus *)
33098 (pSrc + pFf->offset), pBufRemaining);
33099 break;
33100 case SigFfStatusCode:
33101 dot11f_pack_ff_status_code(
33102 pCtx, (tDot11fFfStatusCode *)
33103 (pSrc + pFf->offset), pBufRemaining);
33104 break;
33105 case SigFfTPCEleID:
33106 dot11f_pack_ff_tpc_ele_id(
33107 pCtx, (tDot11fFfTPCEleID *)
33108 (pSrc + pFf->offset), pBufRemaining);
33109 break;
33110 case SigFfTPCEleLen:
33111 dot11f_pack_ff_tpc_ele_len(
33112 pCtx, (tDot11fFfTPCEleLen *)
33113 (pSrc + pFf->offset), pBufRemaining);
33114 break;
33115 case SigFfTSInfo:
33116 dot11f_pack_ff_ts_info(
33117 pCtx, (tDot11fFfTSInfo *)
33118 (pSrc + pFf->offset), pBufRemaining);
33119 break;
33120 case SigFfTimeStamp:
33121 dot11f_pack_ff_time_stamp(
33122 pCtx, (tDot11fFfTimeStamp *)
33123 (pSrc + pFf->offset), pBufRemaining);
33124 break;
33125 case SigFfTransactionId:
33126 dot11f_pack_ff_transaction_id(
33127 pCtx, (tDot11fFfTransactionId *)
33128 (pSrc + pFf->offset), pBufRemaining);
33129 break;
33130 case SigFfTxAntennaId:
33131 dot11f_pack_ff_tx_antenna_id(
33132 pCtx, (tDot11fFfTxAntennaId *)
33133 (pSrc + pFf->offset), pBufRemaining);
33134 break;
33135 case SigFfTxPower:
33136 dot11f_pack_ff_tx_power(
33137 pCtx, (tDot11fFfTxPower *)
33138 (pSrc + pFf->offset), pBufRemaining);
33139 break;
33140 case SigFfVhtMembershipStatusArray:
33141 dot11f_pack_ff_vht_membership_status_array(
33142 pCtx, (tDot11fFfVhtMembershipStatusArray *)
33143 (pSrc + pFf->offset), pBufRemaining);
33144 break;
33145 case SigFfVhtUserPositionArray:
33146 dot11f_pack_ff_vht_user_position_array(
33147 pCtx, (tDot11fFfVhtUserPositionArray *)
33148 (pSrc + pFf->offset), pBufRemaining);
33149 break;
33150 case SigFfaddba_param_set:
33151 dot11f_pack_ff_addba_param_set(
33152 pCtx, (tDot11fFfaddba_param_set *)
33153 (pSrc + pFf->offset), pBufRemaining);
33154 break;
33155 case SigFfba_start_seq_ctrl:
33156 dot11f_pack_ff_ba_start_seq_ctrl(
33157 pCtx, (tDot11fFfba_start_seq_ctrl *)
33158 (pSrc + pFf->offset), pBufRemaining);
33159 break;
33160 case SigFfba_timeout:
33161 dot11f_pack_ff_ba_timeout(
33162 pCtx, (tDot11fFfba_timeout *)
33163 (pSrc + pFf->offset), pBufRemaining);
33164 break;
33165 case SigFfdelba_param_set:
33166 dot11f_pack_ff_delba_param_set(
33167 pCtx, (tDot11fFfdelba_param_set *)
33168 (pSrc + pFf->offset), pBufRemaining);
33169 break;
33170 case SigFfext_chan_switch_ann_action:
33171 dot11f_pack_ff_ext_chan_switch_ann_action(
33172 pCtx, (tDot11fFfext_chan_switch_ann_action *)
33173 (pSrc + pFf->offset), pBufRemaining);
33174 break;
33175 case SigFfp2p_action_oui:
33176 dot11f_pack_ff_p2p_action_oui(
33177 pCtx, (tDot11fFfp2p_action_oui *)
33178 (pSrc + pFf->offset), pBufRemaining);
33179 break;
33180 case SigFfp2p_action_subtype:
33181 dot11f_pack_ff_p2p_action_subtype(
33182 pCtx, (tDot11fFfp2p_action_subtype *)
33183 (pSrc + pFf->offset), pBufRemaining);
33184 break;
33185 case SigFfvendor_action_subtype:
33186 dot11f_pack_ff_vendor_action_subtype(
33187 pCtx, (tDot11fFfvendor_action_subtype *)
33188 (pSrc + pFf->offset), pBufRemaining);
33189 break;
33190 case SigFfvendor_oui:
33191 dot11f_pack_ff_vendor_oui(
33192 pCtx, (tDot11fFfvendor_oui *)
33193 (pSrc + pFf->offset), pBufRemaining);
33194 break;
33195 default:
33196 FRAMES_LOG1(pCtx, FRLOGE, FRFL("INTERNAL ERROR-- I don"
33197 "'t know about the Fixed Field %d; this is most l"
33198 "ikely a bug in 'framesg'.\n"), pFf->sig);
33199 return DOT11F_INTERNAL_ERROR;
33200 }
33201
33202 pBufRemaining += pFf->size;
33203 nBufRemaining -= pFf->size;
33204 *pnConsumed += pFf->size;
33205 ++pFf;
33206
33207 }
33208
33209 pIe = &(IEs[0]);
33210 while (0xff != pIe->eid || pIe->extn_eid) {
33211 pfFound = (tFRAMES_BOOL *)(pSrc + pIe->offset +
33212 pIe->presenceOffset);
33213 if (*pfFound && pIe->minSize > nBufRemaining) {
33214 FRAMES_LOG3(pCtx, FRLOGE, FRFL("The IE %s takes at le"
33215 "ast %d bytes, but there are only %d left in the b"
33216 "uffer.\n"), pIe->name, pIe->minSize, nBufRemaining);
33217 return DOT11F_BUFFER_OVERFLOW;
33218 }
33219
33220
33221 countOffset = ((0 == pIe->arraybound) ? 1 : *(uint16_t *)(pSrc + pIe->countOffset));
33222 for (i = 0; i < countOffset; ++i) {
33223 len = 0U;
33224 switch (pIe->sig) {
33225 case SigIeGTK:
33226 status |=
33227 dot11f_pack_ie_gtk(
33228 pCtx, (tDot11fIEGTK *)
33229 (pSrc + pIe->offset +
33230 sizeof(tDot11fIEGTK) * i),
33231 pBufRemaining, nBufRemaining, &len);
33232 break;
33233 case SigIeIGTK:
33234 status |=
33235 dot11f_pack_ie_igtk(
33236 pCtx, (tDot11fIEIGTK *)
33237 (pSrc + pIe->offset +
33238 sizeof(tDot11fIEIGTK) * i),
33239 pBufRemaining, nBufRemaining, &len);
33240 break;
33241 case SigIeR0KH_ID:
33242 status |=
33243 dot11f_pack_ie_r0_kh_id(
33244 pCtx, (tDot11fIER0KH_ID *)
33245 (pSrc + pIe->offset +
33246 sizeof(tDot11fIER0KH_ID) * i),
33247 pBufRemaining, nBufRemaining, &len);
33248 break;
33249 case SigIeR1KH_ID:
33250 status |=
33251 dot11f_pack_ie_r1_kh_id(
33252 pCtx, (tDot11fIER1KH_ID *)
33253 (pSrc + pIe->offset +
33254 sizeof(tDot11fIER1KH_ID) * i),
33255 pBufRemaining, nBufRemaining, &len);
33256 break;
33257 case SigIeAPChannelReport:
33258 status |=
33259 dot11f_pack_ie_ap_channel_report(
33260 pCtx, (tDot11fIEAPChannelReport *)
33261 (pSrc + pIe->offset +
33262 sizeof(tDot11fIEAPChannelReport) * i),
33263 pBufRemaining, nBufRemaining, &len);
33264 break;
33265 case SigIeBcnReportingDetail:
33266 status |=
33267 dot11f_pack_ie_bcn_reporting_detail(
33268 pCtx, (tDot11fIEBcnReportingDetail *)
33269 (pSrc + pIe->offset +
33270 sizeof(tDot11fIEBcnReportingDetail) * i),
33271 pBufRemaining, nBufRemaining, &len);
33272 break;
33273 case SigIeBeaconReportFrmBody:
33274 status |=
33275 dot11f_pack_ie_beacon_report_frm_body(
33276 pCtx, (tDot11fIEBeaconReportFrmBody *)
33277 (pSrc + pIe->offset +
33278 sizeof(tDot11fIEBeaconReportFrmBody) * i),
33279 pBufRemaining, nBufRemaining, &len);
33280 break;
33281 case SigIeCondensedCountryStr:
33282 status |=
33283 dot11f_pack_ie_condensed_country_str(
33284 pCtx, (tDot11fIECondensedCountryStr *)
33285 (pSrc + pIe->offset +
33286 sizeof(tDot11fIECondensedCountryStr) * i),
33287 pBufRemaining, nBufRemaining, &len);
33288 break;
33289 case SigIeExtRequestedInfo:
33290 status |=
33291 dot11f_pack_ie_ExtRequestedInfo(
33292 pCtx, (tDot11fIEExtRequestedInfo *)
33293 (pSrc + pIe->offset +
33294 sizeof(tDot11fIEExtRequestedInfo) * i),
33295 pBufRemaining, nBufRemaining, &len);
33296 break;
33297 case SigIeMeasurementPilot:
33298 status |=
33299 dot11f_pack_ie_measurement_pilot(
33300 pCtx, (tDot11fIEMeasurementPilot *)
33301 (pSrc + pIe->offset +
33302 sizeof(tDot11fIEMeasurementPilot) * i),
33303 pBufRemaining, nBufRemaining, &len);
33304 break;
33305 case SigIeMultiBssid:
33306 status |=
33307 dot11f_pack_ie_multi_bssid(
33308 pCtx, (tDot11fIEMultiBssid *)
33309 (pSrc + pIe->offset +
33310 sizeof(tDot11fIEMultiBssid) * i),
33311 pBufRemaining, nBufRemaining, &len);
33312 break;
33313 case SigIeRICData:
33314 status |=
33315 dot11f_pack_ie_ric_data(
33316 pCtx, (tDot11fIERICData *)
33317 (pSrc + pIe->offset +
33318 sizeof(tDot11fIERICData) * i),
33319 pBufRemaining, nBufRemaining, &len);
33320 break;
33321 case SigIeRICDescriptor:
33322 status |=
33323 dot11f_pack_ie_ric_descriptor(
33324 pCtx, (tDot11fIERICDescriptor *)
33325 (pSrc + pIe->offset +
33326 sizeof(tDot11fIERICDescriptor) * i),
33327 pBufRemaining, nBufRemaining, &len);
33328 break;
33329 case SigIeRRMEnabledCap:
33330 status |=
33331 dot11f_pack_ie_rrm_enabled_cap(
33332 pCtx, (tDot11fIERRMEnabledCap *)
33333 (pSrc + pIe->offset +
33334 sizeof(tDot11fIERRMEnabledCap) * i),
33335 pBufRemaining, nBufRemaining, &len);
33336 break;
33337 case SigIeRequestedInfo:
33338 status |=
33339 dot11f_pack_ie_requested_info(
33340 pCtx, (tDot11fIERequestedInfo *)
33341 (pSrc + pIe->offset +
33342 sizeof(tDot11fIERequestedInfo) * i),
33343 pBufRemaining, nBufRemaining, &len);
33344 break;
33345 case SigIeSSID:
33346 status |=
33347 dot11f_pack_ie_ssid(
33348 pCtx, (tDot11fIESSID *)
33349 (pSrc + pIe->offset +
33350 sizeof(tDot11fIESSID) * i),
33351 pBufRemaining, nBufRemaining, &len);
33352 break;
33353 case SigIeSchedule:
33354 status |=
33355 dot11f_pack_ie_schedule(
33356 pCtx, (tDot11fIESchedule *)
33357 (pSrc + pIe->offset +
33358 sizeof(tDot11fIESchedule) * i),
33359 pBufRemaining, nBufRemaining, &len);
33360 break;
33361 case SigIeTCLAS:
33362 status |=
33363 dot11f_pack_ie_tclas(
33364 pCtx, (tDot11fIETCLAS *)
33365 (pSrc + pIe->offset +
33366 sizeof(tDot11fIETCLAS) * i),
33367 pBufRemaining, nBufRemaining, &len);
33368 break;
33369 case SigIeTCLASSPROC:
33370 status |=
33371 dot11f_pack_ie_tclassproc(
33372 pCtx, (tDot11fIETCLASSPROC *)
33373 (pSrc + pIe->offset +
33374 sizeof(tDot11fIETCLASSPROC) * i),
33375 pBufRemaining, nBufRemaining, &len);
33376 break;
33377 case SigIeTSDelay:
33378 status |=
33379 dot11f_pack_ie_ts_delay(
33380 pCtx, (tDot11fIETSDelay *)
33381 (pSrc + pIe->offset +
33382 sizeof(tDot11fIETSDelay) * i),
33383 pBufRemaining, nBufRemaining, &len);
33384 break;
33385 case SigIeTSFInfo:
33386 status |=
33387 dot11f_pack_ie_tsf_info(
33388 pCtx, (tDot11fIETSFInfo *)
33389 (pSrc + pIe->offset +
33390 sizeof(tDot11fIETSFInfo) * i),
33391 pBufRemaining, nBufRemaining, &len);
33392 break;
33393 case SigIeTSPEC:
33394 status |=
33395 dot11f_pack_ie_tspec(
33396 pCtx, (tDot11fIETSPEC *)
33397 (pSrc + pIe->offset +
33398 sizeof(tDot11fIETSPEC) * i),
33399 pBufRemaining, nBufRemaining, &len);
33400 break;
33401 case SigIeVHTCaps:
33402 status |=
33403 dot11f_pack_ie_vht_caps(
33404 pCtx, (tDot11fIEVHTCaps *)
33405 (pSrc + pIe->offset +
33406 sizeof(tDot11fIEVHTCaps) * i),
33407 pBufRemaining, nBufRemaining, &len);
33408 break;
33409 case SigIeVHTOperation:
33410 status |=
33411 dot11f_pack_ie_vht_operation(
33412 pCtx, (tDot11fIEVHTOperation *)
33413 (pSrc + pIe->offset +
33414 sizeof(tDot11fIEVHTOperation) * i),
33415 pBufRemaining, nBufRemaining, &len);
33416 break;
33417 case SigIeWMMSchedule:
33418 status |=
33419 dot11f_pack_ie_wmm_schedule(
33420 pCtx, (tDot11fIEWMMSchedule *)
33421 (pSrc + pIe->offset +
33422 sizeof(tDot11fIEWMMSchedule) * i),
33423 pBufRemaining, nBufRemaining, &len);
33424 break;
33425 case SigIeWMMTCLAS:
33426 status |=
33427 dot11f_pack_ie_wmmtclas(
33428 pCtx, (tDot11fIEWMMTCLAS *)
33429 (pSrc + pIe->offset +
33430 sizeof(tDot11fIEWMMTCLAS) * i),
33431 pBufRemaining, nBufRemaining, &len);
33432 break;
33433 case SigIeWMMTCLASPROC:
33434 status |=
33435 dot11f_pack_ie_wmmtclasproc(
33436 pCtx, (tDot11fIEWMMTCLASPROC *)
33437 (pSrc + pIe->offset +
33438 sizeof(tDot11fIEWMMTCLASPROC) * i),
33439 pBufRemaining, nBufRemaining, &len);
33440 break;
33441 case SigIeWMMTSDelay:
33442 status |=
33443 dot11f_pack_ie_wmmts_delay(
33444 pCtx, (tDot11fIEWMMTSDelay *)
33445 (pSrc + pIe->offset +
33446 sizeof(tDot11fIEWMMTSDelay) * i),
33447 pBufRemaining, nBufRemaining, &len);
33448 break;
33449 case SigIeWMMTSPEC:
33450 status |=
33451 dot11f_pack_ie_wmmtspec(
33452 pCtx, (tDot11fIEWMMTSPEC *)
33453 (pSrc + pIe->offset +
33454 sizeof(tDot11fIEWMMTSPEC) * i),
33455 pBufRemaining, nBufRemaining, &len);
33456 break;
33457 case SigIeWiderBWChanSwitchAnn:
33458 status |=
33459 dot11f_pack_ie_wider_bw_chan_switch_ann(
33460 pCtx, (tDot11fIEWiderBWChanSwitchAnn *)
33461 (pSrc + pIe->offset +
33462 sizeof(tDot11fIEWiderBWChanSwitchAnn) * i),
33463 pBufRemaining, nBufRemaining, &len);
33464 break;
33465 case SigIeazimuth_req:
33466 status |=
33467 dot11f_pack_ie_azimuth_req(
33468 pCtx, (tDot11fIEazimuth_req *)
33469 (pSrc + pIe->offset +
33470 sizeof(tDot11fIEazimuth_req) * i),
33471 pBufRemaining, nBufRemaining, &len);
33472 break;
33473 case SigIebeacon_report_frm_body_fragment_id:
33474 status |=
33475 dot11f_pack_ie_beacon_report_frm_body_fragment_id(
33476 pCtx, (tDot11fIEbeacon_report_frm_body_fragment_id *)
33477 (pSrc + pIe->offset +
33478 sizeof(tDot11fIEbeacon_report_frm_body_fragment_id) * i),
33479 pBufRemaining, nBufRemaining, &len);
33480 break;
33481 case SigIebw_ind_element:
33482 status |=
33483 dot11f_pack_ie_bw_ind_element(
33484 pCtx, (tDot11fIEbw_ind_element *)
33485 (pSrc + pIe->offset +
33486 sizeof(tDot11fIEbw_ind_element) * i),
33487 pBufRemaining, nBufRemaining, &len);
33488 break;
33489 case SigIebw_indication:
33490 status |=
33491 dot11f_pack_ie_bw_indication(
33492 pCtx, (tDot11fIEbw_indication *)
33493 (pSrc + pIe->offset +
33494 sizeof(tDot11fIEbw_indication) * i),
33495 pBufRemaining, nBufRemaining, &len);
33496 break;
33497 case SigIelast_beacon_report_indication:
33498 status |=
33499 dot11f_pack_ie_last_beacon_report_indication(
33500 pCtx, (tDot11fIElast_beacon_report_indication *)
33501 (pSrc + pIe->offset +
33502 sizeof(tDot11fIElast_beacon_report_indication) * i),
33503 pBufRemaining, nBufRemaining, &len);
33504 break;
33505 case SigIemax_age:
33506 status |=
33507 dot11f_pack_ie_max_age(
33508 pCtx, (tDot11fIEmax_age *)
33509 (pSrc + pIe->offset +
33510 sizeof(tDot11fIEmax_age) * i),
33511 pBufRemaining, nBufRemaining, &len);
33512 break;
33513 case SigIemscs_status:
33514 status |=
33515 dot11f_pack_ie_mscs_status(
33516 pCtx, (tDot11fIEmscs_status *)
33517 (pSrc + pIe->offset +
33518 sizeof(tDot11fIEmscs_status) * i),
33519 pBufRemaining, nBufRemaining, &len);
33520 break;
33521 case SigIeneighbor_rpt:
33522 status |=
33523 dot11f_pack_ie_neighbor_rpt(
33524 pCtx, (tDot11fIEneighbor_rpt *)
33525 (pSrc + pIe->offset +
33526 sizeof(tDot11fIEneighbor_rpt) * i),
33527 pBufRemaining, nBufRemaining, &len);
33528 break;
33529 case SigIereporting_reason:
33530 status |=
33531 dot11f_pack_ie_reporting_reason(
33532 pCtx, (tDot11fIEreporting_reason *)
33533 (pSrc + pIe->offset +
33534 sizeof(tDot11fIEreporting_reason) * i),
33535 pBufRemaining, nBufRemaining, &len);
33536 break;
33537 case SigIereq_mac_addr:
33538 status |=
33539 dot11f_pack_ie_req_mac_addr(
33540 pCtx, (tDot11fIEreq_mac_addr *)
33541 (pSrc + pIe->offset +
33542 sizeof(tDot11fIEreq_mac_addr) * i),
33543 pBufRemaining, nBufRemaining, &len);
33544 break;
33545 case SigIerrm_reporting:
33546 status |=
33547 dot11f_pack_ie_rrm_reporting(
33548 pCtx, (tDot11fIErrm_reporting *)
33549 (pSrc + pIe->offset +
33550 sizeof(tDot11fIErrm_reporting) * i),
33551 pBufRemaining, nBufRemaining, &len);
33552 break;
33553 case SigIetclas_mask:
33554 status |=
33555 dot11f_pack_ie_tclas_mask(
33556 pCtx, (tDot11fIEtclas_mask *)
33557 (pSrc + pIe->offset +
33558 sizeof(tDot11fIEtclas_mask) * i),
33559 pBufRemaining, nBufRemaining, &len);
33560 break;
33561 case SigIetgt_mac_addr:
33562 status |=
33563 dot11f_pack_ie_tgt_mac_addr(
33564 pCtx, (tDot11fIEtgt_mac_addr *)
33565 (pSrc + pIe->offset +
33566 sizeof(tDot11fIEtgt_mac_addr) * i),
33567 pBufRemaining, nBufRemaining, &len);
33568 break;
33569 case SigIetransmit_power_env:
33570 status |=
33571 dot11f_pack_ie_transmit_power_env(
33572 pCtx, (tDot11fIEtransmit_power_env *)
33573 (pSrc + pIe->offset +
33574 sizeof(tDot11fIEtransmit_power_env) * i),
33575 pBufRemaining, nBufRemaining, &len);
33576 break;
33577 case SigIewide_bw_chan_switch:
33578 status |=
33579 dot11f_pack_ie_wide_bw_chan_switch(
33580 pCtx, (tDot11fIEwide_bw_chan_switch *)
33581 (pSrc + pIe->offset +
33582 sizeof(tDot11fIEwide_bw_chan_switch) * i),
33583 pBufRemaining, nBufRemaining, &len);
33584 break;
33585 case SigIeAID:
33586 status |=
33587 dot11f_pack_ie_aid(
33588 pCtx, (tDot11fIEAID *)
33589 (pSrc + pIe->offset +
33590 sizeof(tDot11fIEAID) * i),
33591 pBufRemaining, nBufRemaining, &len);
33592 break;
33593 case SigIeCFParams:
33594 status |=
33595 dot11f_pack_ie_cf_params(
33596 pCtx, (tDot11fIECFParams *)
33597 (pSrc + pIe->offset +
33598 sizeof(tDot11fIECFParams) * i),
33599 pBufRemaining, nBufRemaining, &len);
33600 break;
33601 case SigIeChallengeText:
33602 status |=
33603 dot11f_pack_ie_challenge_text(
33604 pCtx, (tDot11fIEChallengeText *)
33605 (pSrc + pIe->offset +
33606 sizeof(tDot11fIEChallengeText) * i),
33607 pBufRemaining, nBufRemaining, &len);
33608 break;
33609 case SigIeChanSwitchAnn:
33610 status |=
33611 dot11f_pack_ie_chan_switch_ann(
33612 pCtx, (tDot11fIEChanSwitchAnn *)
33613 (pSrc + pIe->offset +
33614 sizeof(tDot11fIEChanSwitchAnn) * i),
33615 pBufRemaining, nBufRemaining, &len);
33616 break;
33617 case SigIeChannelSwitchWrapper:
33618 status |=
33619 dot11f_pack_ie_channel_switch_wrapper(
33620 pCtx, (tDot11fIEChannelSwitchWrapper *)
33621 (pSrc + pIe->offset +
33622 sizeof(tDot11fIEChannelSwitchWrapper) * i),
33623 pBufRemaining, nBufRemaining, &len);
33624 break;
33625 case SigIeCountry:
33626 status |=
33627 dot11f_pack_ie_country(
33628 pCtx, (tDot11fIECountry *)
33629 (pSrc + pIe->offset +
33630 sizeof(tDot11fIECountry) * i),
33631 pBufRemaining, nBufRemaining, &len);
33632 break;
33633 case SigIeDSParams:
33634 status |=
33635 dot11f_pack_ie_ds_params(
33636 pCtx, (tDot11fIEDSParams *)
33637 (pSrc + pIe->offset +
33638 sizeof(tDot11fIEDSParams) * i),
33639 pBufRemaining, nBufRemaining, &len);
33640 break;
33641 case SigIeEDCAParamSet:
33642 status |=
33643 dot11f_pack_ie_edca_param_set(
33644 pCtx, (tDot11fIEEDCAParamSet *)
33645 (pSrc + pIe->offset +
33646 sizeof(tDot11fIEEDCAParamSet) * i),
33647 pBufRemaining, nBufRemaining, &len);
33648 break;
33649 case SigIeERPInfo:
33650 status |=
33651 dot11f_pack_ie_erp_info(
33652 pCtx, (tDot11fIEERPInfo *)
33653 (pSrc + pIe->offset +
33654 sizeof(tDot11fIEERPInfo) * i),
33655 pBufRemaining, nBufRemaining, &len);
33656 break;
33657 case SigIeESECckmOpaque:
33658 status |=
33659 dot11f_pack_ie_ese_cckm_opaque(
33660 pCtx, (tDot11fIEESECckmOpaque *)
33661 (pSrc + pIe->offset +
33662 sizeof(tDot11fIEESECckmOpaque) * i),
33663 pBufRemaining, nBufRemaining, &len);
33664 break;
33665 case SigIeESERadMgmtCap:
33666 status |=
33667 dot11f_pack_ie_ese_rad_mgmt_cap(
33668 pCtx, (tDot11fIEESERadMgmtCap *)
33669 (pSrc + pIe->offset +
33670 sizeof(tDot11fIEESERadMgmtCap) * i),
33671 pBufRemaining, nBufRemaining, &len);
33672 break;
33673 case SigIeESETrafStrmMet:
33674 status |=
33675 dot11f_pack_ie_ese_traf_strm_met(
33676 pCtx, (tDot11fIEESETrafStrmMet *)
33677 (pSrc + pIe->offset +
33678 sizeof(tDot11fIEESETrafStrmMet) * i),
33679 pBufRemaining, nBufRemaining, &len);
33680 break;
33681 case SigIeESETrafStrmRateSet:
33682 status |=
33683 dot11f_pack_ie_ese_traf_strm_rate_set(
33684 pCtx, (tDot11fIEESETrafStrmRateSet *)
33685 (pSrc + pIe->offset +
33686 sizeof(tDot11fIEESETrafStrmRateSet) * i),
33687 pBufRemaining, nBufRemaining, &len);
33688 break;
33689 case SigIeESETxmitPower:
33690 status |=
33691 dot11f_pack_ie_ese_txmit_power(
33692 pCtx, (tDot11fIEESETxmitPower *)
33693 (pSrc + pIe->offset +
33694 sizeof(tDot11fIEESETxmitPower) * i),
33695 pBufRemaining, nBufRemaining, &len);
33696 break;
33697 case SigIeESEVersion:
33698 status |=
33699 dot11f_pack_ie_ese_version(
33700 pCtx, (tDot11fIEESEVersion *)
33701 (pSrc + pIe->offset +
33702 sizeof(tDot11fIEESEVersion) * i),
33703 pBufRemaining, nBufRemaining, &len);
33704 break;
33705 case SigIeExtCap:
33706 status |=
33707 dot11f_pack_ie_ext_cap(
33708 pCtx, (tDot11fIEExtCap *)
33709 (pSrc + pIe->offset +
33710 sizeof(tDot11fIEExtCap) * i),
33711 pBufRemaining, nBufRemaining, &len);
33712 break;
33713 case SigIeExtSuppRates:
33714 status |=
33715 dot11f_pack_ie_ext_supp_rates(
33716 pCtx, (tDot11fIEExtSuppRates *)
33717 (pSrc + pIe->offset +
33718 sizeof(tDot11fIEExtSuppRates) * i),
33719 pBufRemaining, nBufRemaining, &len);
33720 break;
33721 case SigIeFHParamSet:
33722 status |=
33723 dot11f_pack_ie_fh_param_set(
33724 pCtx, (tDot11fIEFHParamSet *)
33725 (pSrc + pIe->offset +
33726 sizeof(tDot11fIEFHParamSet) * i),
33727 pBufRemaining, nBufRemaining, &len);
33728 break;
33729 case SigIeFHParams:
33730 status |=
33731 dot11f_pack_ie_fh_params(
33732 pCtx, (tDot11fIEFHParams *)
33733 (pSrc + pIe->offset +
33734 sizeof(tDot11fIEFHParams) * i),
33735 pBufRemaining, nBufRemaining, &len);
33736 break;
33737 case SigIeFHPattTable:
33738 status |=
33739 dot11f_pack_ie_fh_patt_table(
33740 pCtx, (tDot11fIEFHPattTable *)
33741 (pSrc + pIe->offset +
33742 sizeof(tDot11fIEFHPattTable) * i),
33743 pBufRemaining, nBufRemaining, &len);
33744 break;
33745 case SigIeFTInfo:
33746 status |=
33747 dot11f_pack_ie_ft_info(
33748 pCtx, (tDot11fIEFTInfo *)
33749 (pSrc + pIe->offset +
33750 sizeof(tDot11fIEFTInfo) * i),
33751 pBufRemaining, nBufRemaining, &len);
33752 break;
33753 case SigIeHTCaps:
33754 status |=
33755 dot11f_pack_ie_ht_caps(
33756 pCtx, (tDot11fIEHTCaps *)
33757 (pSrc + pIe->offset +
33758 sizeof(tDot11fIEHTCaps) * i),
33759 pBufRemaining, nBufRemaining, &len);
33760 break;
33761 case SigIeHTInfo:
33762 status |=
33763 dot11f_pack_ie_ht_info(
33764 pCtx, (tDot11fIEHTInfo *)
33765 (pSrc + pIe->offset +
33766 sizeof(tDot11fIEHTInfo) * i),
33767 pBufRemaining, nBufRemaining, &len);
33768 break;
33769 case SigIeLinkIdentifier:
33770 status |=
33771 dot11f_pack_ie_link_identifier(
33772 pCtx, (tDot11fIELinkIdentifier *)
33773 (pSrc + pIe->offset +
33774 sizeof(tDot11fIELinkIdentifier) * i),
33775 pBufRemaining, nBufRemaining, &len);
33776 break;
33777 case SigIeMBO_IE:
33778 status |=
33779 dot11f_pack_ie_MBO_IE(
33780 pCtx, (tDot11fIEMBO_IE *)
33781 (pSrc + pIe->offset +
33782 sizeof(tDot11fIEMBO_IE) * i),
33783 pBufRemaining, nBufRemaining, &len);
33784 break;
33785 case SigIeMeasurementReport:
33786 status |=
33787 dot11f_pack_ie_measurement_report(
33788 pCtx, (tDot11fIEMeasurementReport *)
33789 (pSrc + pIe->offset +
33790 sizeof(tDot11fIEMeasurementReport) * i),
33791 pBufRemaining, nBufRemaining, &len);
33792 break;
33793 case SigIeMeasurementRequest:
33794 status |=
33795 dot11f_pack_ie_measurement_request(
33796 pCtx, (tDot11fIEMeasurementRequest *)
33797 (pSrc + pIe->offset +
33798 sizeof(tDot11fIEMeasurementRequest) * i),
33799 pBufRemaining, nBufRemaining, &len);
33800 break;
33801 case SigIeMobilityDomain:
33802 status |=
33803 dot11f_pack_ie_mobility_domain(
33804 pCtx, (tDot11fIEMobilityDomain *)
33805 (pSrc + pIe->offset +
33806 sizeof(tDot11fIEMobilityDomain) * i),
33807 pBufRemaining, nBufRemaining, &len);
33808 break;
33809 case SigIeNeighborReport:
33810 status |=
33811 dot11f_pack_ie_neighbor_report(
33812 pCtx, (tDot11fIENeighborReport *)
33813 (pSrc + pIe->offset +
33814 sizeof(tDot11fIENeighborReport) * i),
33815 pBufRemaining, nBufRemaining, &len);
33816 break;
33817 case SigIeOBSSScanParameters:
33818 status |=
33819 dot11f_pack_ie_obss_scan_parameters(
33820 pCtx, (tDot11fIEOBSSScanParameters *)
33821 (pSrc + pIe->offset +
33822 sizeof(tDot11fIEOBSSScanParameters) * i),
33823 pBufRemaining, nBufRemaining, &len);
33824 break;
33825 case SigIeOperatingMode:
33826 status |=
33827 dot11f_pack_ie_operating_mode(
33828 pCtx, (tDot11fIEOperatingMode *)
33829 (pSrc + pIe->offset +
33830 sizeof(tDot11fIEOperatingMode) * i),
33831 pBufRemaining, nBufRemaining, &len);
33832 break;
33833 case SigIeP2PAssocReq:
33834 status |=
33835 dot11f_pack_ie_p2_p_assoc_req(
33836 pCtx, (tDot11fIEP2PAssocReq *)
33837 (pSrc + pIe->offset +
33838 sizeof(tDot11fIEP2PAssocReq) * i),
33839 pBufRemaining, nBufRemaining, &len);
33840 break;
33841 case SigIeP2PAssocRes:
33842 status |=
33843 dot11f_pack_ie_p2_p_assoc_res(
33844 pCtx, (tDot11fIEP2PAssocRes *)
33845 (pSrc + pIe->offset +
33846 sizeof(tDot11fIEP2PAssocRes) * i),
33847 pBufRemaining, nBufRemaining, &len);
33848 break;
33849 case SigIeP2PBeacon:
33850 status |=
33851 dot11f_pack_ie_p2_p_beacon(
33852 pCtx, (tDot11fIEP2PBeacon *)
33853 (pSrc + pIe->offset +
33854 sizeof(tDot11fIEP2PBeacon) * i),
33855 pBufRemaining, nBufRemaining, &len);
33856 break;
33857 case SigIeP2PBeaconProbeRes:
33858 status |=
33859 dot11f_pack_ie_p2_p_beacon_probe_res(
33860 pCtx, (tDot11fIEP2PBeaconProbeRes *)
33861 (pSrc + pIe->offset +
33862 sizeof(tDot11fIEP2PBeaconProbeRes) * i),
33863 pBufRemaining, nBufRemaining, &len);
33864 break;
33865 case SigIeP2PDeAuth:
33866 status |=
33867 dot11f_pack_ie_p2_p_de_auth(
33868 pCtx, (tDot11fIEP2PDeAuth *)
33869 (pSrc + pIe->offset +
33870 sizeof(tDot11fIEP2PDeAuth) * i),
33871 pBufRemaining, nBufRemaining, &len);
33872 break;
33873 case SigIeP2PDisAssoc:
33874 status |=
33875 dot11f_pack_ie_p2_p_dis_assoc(
33876 pCtx, (tDot11fIEP2PDisAssoc *)
33877 (pSrc + pIe->offset +
33878 sizeof(tDot11fIEP2PDisAssoc) * i),
33879 pBufRemaining, nBufRemaining, &len);
33880 break;
33881 case SigIeP2PIEOpaque:
33882 status |=
33883 dot11f_pack_ie_p2_pie_opaque(
33884 pCtx, (tDot11fIEP2PIEOpaque *)
33885 (pSrc + pIe->offset +
33886 sizeof(tDot11fIEP2PIEOpaque) * i),
33887 pBufRemaining, nBufRemaining, &len);
33888 break;
33889 case SigIeP2PProbeReq:
33890 status |=
33891 dot11f_pack_ie_p2_p_probe_req(
33892 pCtx, (tDot11fIEP2PProbeReq *)
33893 (pSrc + pIe->offset +
33894 sizeof(tDot11fIEP2PProbeReq) * i),
33895 pBufRemaining, nBufRemaining, &len);
33896 break;
33897 case SigIeP2PProbeRes:
33898 status |=
33899 dot11f_pack_ie_p2_p_probe_res(
33900 pCtx, (tDot11fIEP2PProbeRes *)
33901 (pSrc + pIe->offset +
33902 sizeof(tDot11fIEP2PProbeRes) * i),
33903 pBufRemaining, nBufRemaining, &len);
33904 break;
33905 case SigIePTIControl:
33906 status |=
33907 dot11f_pack_ie_pti_control(
33908 pCtx, (tDot11fIEPTIControl *)
33909 (pSrc + pIe->offset +
33910 sizeof(tDot11fIEPTIControl) * i),
33911 pBufRemaining, nBufRemaining, &len);
33912 break;
33913 case SigIePUBufferStatus:
33914 status |=
33915 dot11f_pack_ie_pu_buffer_status(
33916 pCtx, (tDot11fIEPUBufferStatus *)
33917 (pSrc + pIe->offset +
33918 sizeof(tDot11fIEPUBufferStatus) * i),
33919 pBufRemaining, nBufRemaining, &len);
33920 break;
33921 case SigIePowerCaps:
33922 status |=
33923 dot11f_pack_ie_power_caps(
33924 pCtx, (tDot11fIEPowerCaps *)
33925 (pSrc + pIe->offset +
33926 sizeof(tDot11fIEPowerCaps) * i),
33927 pBufRemaining, nBufRemaining, &len);
33928 break;
33929 case SigIePowerConstraints:
33930 status |=
33931 dot11f_pack_ie_power_constraints(
33932 pCtx, (tDot11fIEPowerConstraints *)
33933 (pSrc + pIe->offset +
33934 sizeof(tDot11fIEPowerConstraints) * i),
33935 pBufRemaining, nBufRemaining, &len);
33936 break;
33937 case SigIeQBSSLoad:
33938 status |=
33939 dot11f_pack_ie_qbss_load(
33940 pCtx, (tDot11fIEQBSSLoad *)
33941 (pSrc + pIe->offset +
33942 sizeof(tDot11fIEQBSSLoad) * i),
33943 pBufRemaining, nBufRemaining, &len);
33944 break;
33945 case SigIeQComVendorIE:
33946 status |=
33947 dot11f_pack_ie_QComVendorIE(
33948 pCtx, (tDot11fIEQComVendorIE *)
33949 (pSrc + pIe->offset +
33950 sizeof(tDot11fIEQComVendorIE) * i),
33951 pBufRemaining, nBufRemaining, &len);
33952 break;
33953 case SigIeQOSCapsAp:
33954 status |=
33955 dot11f_pack_ie_qos_caps_ap(
33956 pCtx, (tDot11fIEQOSCapsAp *)
33957 (pSrc + pIe->offset +
33958 sizeof(tDot11fIEQOSCapsAp) * i),
33959 pBufRemaining, nBufRemaining, &len);
33960 break;
33961 case SigIeQOSCapsStation:
33962 status |=
33963 dot11f_pack_ie_qos_caps_station(
33964 pCtx, (tDot11fIEQOSCapsStation *)
33965 (pSrc + pIe->offset +
33966 sizeof(tDot11fIEQOSCapsStation) * i),
33967 pBufRemaining, nBufRemaining, &len);
33968 break;
33969 case SigIeQosMapSet:
33970 status |=
33971 dot11f_pack_ie_qos_map_set(
33972 pCtx, (tDot11fIEQosMapSet *)
33973 (pSrc + pIe->offset +
33974 sizeof(tDot11fIEQosMapSet) * i),
33975 pBufRemaining, nBufRemaining, &len);
33976 break;
33977 case SigIeQuiet:
33978 status |=
33979 dot11f_pack_ie_quiet(
33980 pCtx, (tDot11fIEQuiet *)
33981 (pSrc + pIe->offset +
33982 sizeof(tDot11fIEQuiet) * i),
33983 pBufRemaining, nBufRemaining, &len);
33984 break;
33985 case SigIeRCPIIE:
33986 status |=
33987 dot11f_pack_ie_rcpiie(
33988 pCtx, (tDot11fIERCPIIE *)
33989 (pSrc + pIe->offset +
33990 sizeof(tDot11fIERCPIIE) * i),
33991 pBufRemaining, nBufRemaining, &len);
33992 break;
33993 case SigIeRICDataDesc:
33994 status |=
33995 dot11f_pack_ie_ric_data_desc(
33996 pCtx, (tDot11fIERICDataDesc *)
33997 (pSrc + pIe->offset +
33998 sizeof(tDot11fIERICDataDesc) * i),
33999 pBufRemaining, nBufRemaining, &len);
34000 break;
34001 case SigIeRSN:
34002 status |=
34003 dot11f_pack_ie_rsn(
34004 pCtx, (tDot11fIERSN *)
34005 (pSrc + pIe->offset +
34006 sizeof(tDot11fIERSN) * i),
34007 pBufRemaining, nBufRemaining, &len);
34008 break;
34009 case SigIeRSNIIE:
34010 status |=
34011 dot11f_pack_ie_rsniie(
34012 pCtx, (tDot11fIERSNIIE *)
34013 (pSrc + pIe->offset +
34014 sizeof(tDot11fIERSNIIE) * i),
34015 pBufRemaining, nBufRemaining, &len);
34016 break;
34017 case SigIeRSNOpaque:
34018 status |=
34019 dot11f_pack_ie_rsn_opaque(
34020 pCtx, (tDot11fIERSNOpaque *)
34021 (pSrc + pIe->offset +
34022 sizeof(tDot11fIERSNOpaque) * i),
34023 pBufRemaining, nBufRemaining, &len);
34024 break;
34025 case SigIeSuppChannels:
34026 status |=
34027 dot11f_pack_ie_supp_channels(
34028 pCtx, (tDot11fIESuppChannels *)
34029 (pSrc + pIe->offset +
34030 sizeof(tDot11fIESuppChannels) * i),
34031 pBufRemaining, nBufRemaining, &len);
34032 break;
34033 case SigIeSuppOperatingClasses:
34034 status |=
34035 dot11f_pack_ie_supp_operating_classes(
34036 pCtx, (tDot11fIESuppOperatingClasses *)
34037 (pSrc + pIe->offset +
34038 sizeof(tDot11fIESuppOperatingClasses) * i),
34039 pBufRemaining, nBufRemaining, &len);
34040 break;
34041 case SigIeSuppRates:
34042 status |=
34043 dot11f_pack_ie_supp_rates(
34044 pCtx, (tDot11fIESuppRates *)
34045 (pSrc + pIe->offset +
34046 sizeof(tDot11fIESuppRates) * i),
34047 pBufRemaining, nBufRemaining, &len);
34048 break;
34049 case SigIeTIM:
34050 status |=
34051 dot11f_pack_ie_tim(
34052 pCtx, (tDot11fIETIM *)
34053 (pSrc + pIe->offset +
34054 sizeof(tDot11fIETIM) * i),
34055 pBufRemaining, nBufRemaining, &len);
34056 break;
34057 case SigIeTPCReport:
34058 status |=
34059 dot11f_pack_ie_tpc_report(
34060 pCtx, (tDot11fIETPCReport *)
34061 (pSrc + pIe->offset +
34062 sizeof(tDot11fIETPCReport) * i),
34063 pBufRemaining, nBufRemaining, &len);
34064 break;
34065 case SigIeTPCRequest:
34066 status |=
34067 dot11f_pack_ie_tpc_request(
34068 pCtx, (tDot11fIETPCRequest *)
34069 (pSrc + pIe->offset +
34070 sizeof(tDot11fIETPCRequest) * i),
34071 pBufRemaining, nBufRemaining, &len);
34072 break;
34073 case SigIeTimeAdvertisement:
34074 status |=
34075 dot11f_pack_ie_time_advertisement(
34076 pCtx, (tDot11fIETimeAdvertisement *)
34077 (pSrc + pIe->offset +
34078 sizeof(tDot11fIETimeAdvertisement) * i),
34079 pBufRemaining, nBufRemaining, &len);
34080 break;
34081 case SigIeTimeoutInterval:
34082 status |=
34083 dot11f_pack_ie_timeout_interval(
34084 pCtx, (tDot11fIETimeoutInterval *)
34085 (pSrc + pIe->offset +
34086 sizeof(tDot11fIETimeoutInterval) * i),
34087 pBufRemaining, nBufRemaining, &len);
34088 break;
34089 case SigIeVHTExtBssLoad:
34090 status |=
34091 dot11f_pack_ie_vht_ext_bss_load(
34092 pCtx, (tDot11fIEVHTExtBssLoad *)
34093 (pSrc + pIe->offset +
34094 sizeof(tDot11fIEVHTExtBssLoad) * i),
34095 pBufRemaining, nBufRemaining, &len);
34096 break;
34097 case SigIeVendor1IE:
34098 status |=
34099 dot11f_pack_ie_vendor1_ie(
34100 pCtx, (tDot11fIEVendor1IE *)
34101 (pSrc + pIe->offset +
34102 sizeof(tDot11fIEVendor1IE) * i),
34103 pBufRemaining, nBufRemaining, &len);
34104 break;
34105 case SigIeVendor3IE:
34106 status |=
34107 dot11f_pack_ie_vendor3_ie(
34108 pCtx, (tDot11fIEVendor3IE *)
34109 (pSrc + pIe->offset +
34110 sizeof(tDot11fIEVendor3IE) * i),
34111 pBufRemaining, nBufRemaining, &len);
34112 break;
34113 case SigIeWAPI:
34114 status |=
34115 dot11f_pack_ie_wapi(
34116 pCtx, (tDot11fIEWAPI *)
34117 (pSrc + pIe->offset +
34118 sizeof(tDot11fIEWAPI) * i),
34119 pBufRemaining, nBufRemaining, &len);
34120 break;
34121 case SigIeWAPIOpaque:
34122 status |=
34123 dot11f_pack_ie_wapi_opaque(
34124 pCtx, (tDot11fIEWAPIOpaque *)
34125 (pSrc + pIe->offset +
34126 sizeof(tDot11fIEWAPIOpaque) * i),
34127 pBufRemaining, nBufRemaining, &len);
34128 break;
34129 case SigIeWFATPC:
34130 status |=
34131 dot11f_pack_ie_wfatpc(
34132 pCtx, (tDot11fIEWFATPC *)
34133 (pSrc + pIe->offset +
34134 sizeof(tDot11fIEWFATPC) * i),
34135 pBufRemaining, nBufRemaining, &len);
34136 break;
34137 case SigIeWFDIEOpaque:
34138 status |=
34139 dot11f_pack_ie_wfdie_opaque(
34140 pCtx, (tDot11fIEWFDIEOpaque *)
34141 (pSrc + pIe->offset +
34142 sizeof(tDot11fIEWFDIEOpaque) * i),
34143 pBufRemaining, nBufRemaining, &len);
34144 break;
34145 case SigIeWMMCaps:
34146 status |=
34147 dot11f_pack_ie_wmm_caps(
34148 pCtx, (tDot11fIEWMMCaps *)
34149 (pSrc + pIe->offset +
34150 sizeof(tDot11fIEWMMCaps) * i),
34151 pBufRemaining, nBufRemaining, &len);
34152 break;
34153 case SigIeWMMInfoAp:
34154 status |=
34155 dot11f_pack_ie_wmm_info_ap(
34156 pCtx, (tDot11fIEWMMInfoAp *)
34157 (pSrc + pIe->offset +
34158 sizeof(tDot11fIEWMMInfoAp) * i),
34159 pBufRemaining, nBufRemaining, &len);
34160 break;
34161 case SigIeWMMInfoStation:
34162 status |=
34163 dot11f_pack_ie_wmm_info_station(
34164 pCtx, (tDot11fIEWMMInfoStation *)
34165 (pSrc + pIe->offset +
34166 sizeof(tDot11fIEWMMInfoStation) * i),
34167 pBufRemaining, nBufRemaining, &len);
34168 break;
34169 case SigIeWMMParams:
34170 status |=
34171 dot11f_pack_ie_wmm_params(
34172 pCtx, (tDot11fIEWMMParams *)
34173 (pSrc + pIe->offset +
34174 sizeof(tDot11fIEWMMParams) * i),
34175 pBufRemaining, nBufRemaining, &len);
34176 break;
34177 case SigIeWPA:
34178 status |=
34179 dot11f_pack_ie_wpa(
34180 pCtx, (tDot11fIEWPA *)
34181 (pSrc + pIe->offset +
34182 sizeof(tDot11fIEWPA) * i),
34183 pBufRemaining, nBufRemaining, &len);
34184 break;
34185 case SigIeWPAOpaque:
34186 status |=
34187 dot11f_pack_ie_wpa_opaque(
34188 pCtx, (tDot11fIEWPAOpaque *)
34189 (pSrc + pIe->offset +
34190 sizeof(tDot11fIEWPAOpaque) * i),
34191 pBufRemaining, nBufRemaining, &len);
34192 break;
34193 case SigIeWSC:
34194 status |=
34195 dot11f_pack_ie_wsc(
34196 pCtx, (tDot11fIEWSC *)
34197 (pSrc + pIe->offset +
34198 sizeof(tDot11fIEWSC) * i),
34199 pBufRemaining, nBufRemaining, &len);
34200 break;
34201 case SigIeWscAssocReq:
34202 status |=
34203 dot11f_pack_ie_wsc_assoc_req(
34204 pCtx, (tDot11fIEWscAssocReq *)
34205 (pSrc + pIe->offset +
34206 sizeof(tDot11fIEWscAssocReq) * i),
34207 pBufRemaining, nBufRemaining, &len);
34208 break;
34209 case SigIeWscAssocRes:
34210 status |=
34211 dot11f_pack_ie_wsc_assoc_res(
34212 pCtx, (tDot11fIEWscAssocRes *)
34213 (pSrc + pIe->offset +
34214 sizeof(tDot11fIEWscAssocRes) * i),
34215 pBufRemaining, nBufRemaining, &len);
34216 break;
34217 case SigIeWscBeacon:
34218 status |=
34219 dot11f_pack_ie_wsc_beacon(
34220 pCtx, (tDot11fIEWscBeacon *)
34221 (pSrc + pIe->offset +
34222 sizeof(tDot11fIEWscBeacon) * i),
34223 pBufRemaining, nBufRemaining, &len);
34224 break;
34225 case SigIeWscBeaconProbeRes:
34226 status |=
34227 dot11f_pack_ie_wsc_beacon_probe_res(
34228 pCtx, (tDot11fIEWscBeaconProbeRes *)
34229 (pSrc + pIe->offset +
34230 sizeof(tDot11fIEWscBeaconProbeRes) * i),
34231 pBufRemaining, nBufRemaining, &len);
34232 break;
34233 case SigIeWscIEOpaque:
34234 status |=
34235 dot11f_pack_ie_wsc_ie_opaque(
34236 pCtx, (tDot11fIEWscIEOpaque *)
34237 (pSrc + pIe->offset +
34238 sizeof(tDot11fIEWscIEOpaque) * i),
34239 pBufRemaining, nBufRemaining, &len);
34240 break;
34241 case SigIeWscProbeReq:
34242 status |=
34243 dot11f_pack_ie_wsc_probe_req(
34244 pCtx, (tDot11fIEWscProbeReq *)
34245 (pSrc + pIe->offset +
34246 sizeof(tDot11fIEWscProbeReq) * i),
34247 pBufRemaining, nBufRemaining, &len);
34248 break;
34249 case SigIeWscProbeRes:
34250 status |=
34251 dot11f_pack_ie_wsc_probe_res(
34252 pCtx, (tDot11fIEWscProbeRes *)
34253 (pSrc + pIe->offset +
34254 sizeof(tDot11fIEWscProbeRes) * i),
34255 pBufRemaining, nBufRemaining, &len);
34256 break;
34257 case SigIeWscReassocRes:
34258 status |=
34259 dot11f_pack_ie_wsc_reassoc_res(
34260 pCtx, (tDot11fIEWscReassocRes *)
34261 (pSrc + pIe->offset +
34262 sizeof(tDot11fIEWscReassocRes) * i),
34263 pBufRemaining, nBufRemaining, &len);
34264 break;
34265 case SigIeaddba_extn_element:
34266 status |=
34267 dot11f_pack_ie_addba_extn_element(
34268 pCtx, (tDot11fIEaddba_extn_element *)
34269 (pSrc + pIe->offset +
34270 sizeof(tDot11fIEaddba_extn_element) * i),
34271 pBufRemaining, nBufRemaining, &len);
34272 break;
34273 case SigIebss_color_change:
34274 status |=
34275 dot11f_pack_ie_bss_color_change(
34276 pCtx, (tDot11fIEbss_color_change *)
34277 (pSrc + pIe->offset +
34278 sizeof(tDot11fIEbss_color_change) * i),
34279 pBufRemaining, nBufRemaining, &len);
34280 break;
34281 case SigIebss_max_idle_period:
34282 status |=
34283 dot11f_pack_ie_bss_max_idle_period(
34284 pCtx, (tDot11fIEbss_max_idle_period *)
34285 (pSrc + pIe->offset +
34286 sizeof(tDot11fIEbss_max_idle_period) * i),
34287 pBufRemaining, nBufRemaining, &len);
34288 break;
34289 case SigIedescriptor_element:
34290 status |=
34291 dot11f_pack_ie_descriptor_element(
34292 pCtx, (tDot11fIEdescriptor_element *)
34293 (pSrc + pIe->offset +
34294 sizeof(tDot11fIEdescriptor_element) * i),
34295 pBufRemaining, nBufRemaining, &len);
34296 break;
34297 case SigIedh_parameter_element:
34298 status |=
34299 dot11f_pack_ie_dh_parameter_element(
34300 pCtx, (tDot11fIEdh_parameter_element *)
34301 (pSrc + pIe->offset +
34302 sizeof(tDot11fIEdh_parameter_element) * i),
34303 pBufRemaining, nBufRemaining, &len);
34304 break;
34305 case SigIeeht_cap:
34306 status |=
34307 dot11f_pack_ie_eht_cap(
34308 pCtx, (tDot11fIEeht_cap *)
34309 (pSrc + pIe->offset +
34310 sizeof(tDot11fIEeht_cap) * i),
34311 pBufRemaining, nBufRemaining, &len);
34312 break;
34313 case SigIeeht_op:
34314 status |=
34315 dot11f_pack_ie_eht_op(
34316 pCtx, (tDot11fIEeht_op *)
34317 (pSrc + pIe->offset +
34318 sizeof(tDot11fIEeht_op) * i),
34319 pBufRemaining, nBufRemaining, &len);
34320 break;
34321 case SigIeesp_information:
34322 status |=
34323 dot11f_pack_ie_esp_information(
34324 pCtx, (tDot11fIEesp_information *)
34325 (pSrc + pIe->offset +
34326 sizeof(tDot11fIEesp_information) * i),
34327 pBufRemaining, nBufRemaining, &len);
34328 break;
34329 case SigIeext_chan_switch_ann:
34330 status |=
34331 dot11f_pack_ie_ext_chan_switch_ann(
34332 pCtx, (tDot11fIEext_chan_switch_ann *)
34333 (pSrc + pIe->offset +
34334 sizeof(tDot11fIEext_chan_switch_ann) * i),
34335 pBufRemaining, nBufRemaining, &len);
34336 break;
34337 case SigIefils_assoc_delay_info:
34338 status |=
34339 dot11f_pack_ie_fils_assoc_delay_info(
34340 pCtx, (tDot11fIEfils_assoc_delay_info *)
34341 (pSrc + pIe->offset +
34342 sizeof(tDot11fIEfils_assoc_delay_info) * i),
34343 pBufRemaining, nBufRemaining, &len);
34344 break;
34345 case SigIefils_hlp_container:
34346 status |=
34347 dot11f_pack_ie_fils_hlp_container(
34348 pCtx, (tDot11fIEfils_hlp_container *)
34349 (pSrc + pIe->offset +
34350 sizeof(tDot11fIEfils_hlp_container) * i),
34351 pBufRemaining, nBufRemaining, &len);
34352 break;
34353 case SigIefils_indication:
34354 status |=
34355 dot11f_pack_ie_fils_indication(
34356 pCtx, (tDot11fIEfils_indication *)
34357 (pSrc + pIe->offset +
34358 sizeof(tDot11fIEfils_indication) * i),
34359 pBufRemaining, nBufRemaining, &len);
34360 break;
34361 case SigIefils_kde:
34362 status |=
34363 dot11f_pack_ie_fils_kde(
34364 pCtx, (tDot11fIEfils_kde *)
34365 (pSrc + pIe->offset +
34366 sizeof(tDot11fIEfils_kde) * i),
34367 pBufRemaining, nBufRemaining, &len);
34368 break;
34369 case SigIefils_key_confirmation:
34370 status |=
34371 dot11f_pack_ie_fils_key_confirmation(
34372 pCtx, (tDot11fIEfils_key_confirmation *)
34373 (pSrc + pIe->offset +
34374 sizeof(tDot11fIEfils_key_confirmation) * i),
34375 pBufRemaining, nBufRemaining, &len);
34376 break;
34377 case SigIefils_nonce:
34378 status |=
34379 dot11f_pack_ie_fils_nonce(
34380 pCtx, (tDot11fIEfils_nonce *)
34381 (pSrc + pIe->offset +
34382 sizeof(tDot11fIEfils_nonce) * i),
34383 pBufRemaining, nBufRemaining, &len);
34384 break;
34385 case SigIefils_public_key:
34386 status |=
34387 dot11f_pack_ie_fils_public_key(
34388 pCtx, (tDot11fIEfils_public_key *)
34389 (pSrc + pIe->offset +
34390 sizeof(tDot11fIEfils_public_key) * i),
34391 pBufRemaining, nBufRemaining, &len);
34392 break;
34393 case SigIefils_session:
34394 status |=
34395 dot11f_pack_ie_fils_session(
34396 pCtx, (tDot11fIEfils_session *)
34397 (pSrc + pIe->offset +
34398 sizeof(tDot11fIEfils_session) * i),
34399 pBufRemaining, nBufRemaining, &len);
34400 break;
34401 case SigIefils_wrapped_data:
34402 status |=
34403 dot11f_pack_ie_fils_wrapped_data(
34404 pCtx, (tDot11fIEfils_wrapped_data *)
34405 (pSrc + pIe->offset +
34406 sizeof(tDot11fIEfils_wrapped_data) * i),
34407 pBufRemaining, nBufRemaining, &len);
34408 break;
34409 case SigIefragment_ie:
34410 status |=
34411 dot11f_pack_ie_fragment_ie(
34412 pCtx, (tDot11fIEfragment_ie *)
34413 (pSrc + pIe->offset +
34414 sizeof(tDot11fIEfragment_ie) * i),
34415 pBufRemaining, nBufRemaining, &len);
34416 break;
34417 case SigIehe_6ghz_band_cap:
34418 status |=
34419 dot11f_pack_ie_he_6ghz_band_cap(
34420 pCtx, (tDot11fIEhe_6ghz_band_cap *)
34421 (pSrc + pIe->offset +
34422 sizeof(tDot11fIEhe_6ghz_band_cap) * i),
34423 pBufRemaining, nBufRemaining, &len);
34424 break;
34425 case SigIehe_cap:
34426 status |=
34427 dot11f_pack_ie_he_cap(
34428 pCtx, (tDot11fIEhe_cap *)
34429 (pSrc + pIe->offset +
34430 sizeof(tDot11fIEhe_cap) * i),
34431 pBufRemaining, nBufRemaining, &len);
34432 break;
34433 case SigIehe_op:
34434 status |=
34435 dot11f_pack_ie_he_op(
34436 pCtx, (tDot11fIEhe_op *)
34437 (pSrc + pIe->offset +
34438 sizeof(tDot11fIEhe_op) * i),
34439 pBufRemaining, nBufRemaining, &len);
34440 break;
34441 case SigIehs20vendor_ie:
34442 status |=
34443 dot11f_pack_ie_hs20vendor_ie(
34444 pCtx, (tDot11fIEhs20vendor_ie *)
34445 (pSrc + pIe->offset +
34446 sizeof(tDot11fIEhs20vendor_ie) * i),
34447 pBufRemaining, nBufRemaining, &len);
34448 break;
34449 case SigIeht2040_bss_coexistence:
34450 status |=
34451 dot11f_pack_ie_ht2040_bss_coexistence(
34452 pCtx, (tDot11fIEht2040_bss_coexistence *)
34453 (pSrc + pIe->offset +
34454 sizeof(tDot11fIEht2040_bss_coexistence) * i),
34455 pBufRemaining, nBufRemaining, &len);
34456 break;
34457 case SigIeht2040_bss_intolerant_report:
34458 status |=
34459 dot11f_pack_ie_ht2040_bss_intolerant_report(
34460 pCtx, (tDot11fIEht2040_bss_intolerant_report *)
34461 (pSrc + pIe->offset +
34462 sizeof(tDot11fIEht2040_bss_intolerant_report) * i),
34463 pBufRemaining, nBufRemaining, &len);
34464 break;
34465 case SigIemax_chan_switch_time:
34466 status |=
34467 dot11f_pack_ie_max_chan_switch_time(
34468 pCtx, (tDot11fIEmax_chan_switch_time *)
34469 (pSrc + pIe->offset +
34470 sizeof(tDot11fIEmax_chan_switch_time) * i),
34471 pBufRemaining, nBufRemaining, &len);
34472 break;
34473 case SigIemlo_ie:
34474 status |=
34475 dot11f_pack_ie_mlo_ie(
34476 pCtx, (tDot11fIEmlo_ie *)
34477 (pSrc + pIe->offset +
34478 sizeof(tDot11fIEmlo_ie) * i),
34479 pBufRemaining, nBufRemaining, &len);
34480 break;
34481 case SigIemu_edca_param_set:
34482 status |=
34483 dot11f_pack_ie_mu_edca_param_set(
34484 pCtx, (tDot11fIEmu_edca_param_set *)
34485 (pSrc + pIe->offset +
34486 sizeof(tDot11fIEmu_edca_param_set) * i),
34487 pBufRemaining, nBufRemaining, &len);
34488 break;
34489 case SigIenon_inheritance:
34490 status |=
34491 dot11f_pack_ie_non_inheritance(
34492 pCtx, (tDot11fIEnon_inheritance *)
34493 (pSrc + pIe->offset +
34494 sizeof(tDot11fIEnon_inheritance) * i),
34495 pBufRemaining, nBufRemaining, &len);
34496 break;
34497 case SigIeoci:
34498 status |=
34499 dot11f_pack_ie_oci(
34500 pCtx, (tDot11fIEoci *)
34501 (pSrc + pIe->offset +
34502 sizeof(tDot11fIEoci) * i),
34503 pBufRemaining, nBufRemaining, &len);
34504 break;
34505 case SigIeosen_ie:
34506 status |=
34507 dot11f_pack_ie_osen_ie(
34508 pCtx, (tDot11fIEosen_ie *)
34509 (pSrc + pIe->offset +
34510 sizeof(tDot11fIEosen_ie) * i),
34511 pBufRemaining, nBufRemaining, &len);
34512 break;
34513 case SigIeqcn_ie:
34514 status |=
34515 dot11f_pack_ie_qcn_ie(
34516 pCtx, (tDot11fIEqcn_ie *)
34517 (pSrc + pIe->offset +
34518 sizeof(tDot11fIEqcn_ie) * i),
34519 pBufRemaining, nBufRemaining, &len);
34520 break;
34521 case SigIereduced_neighbor_report:
34522 status |=
34523 dot11f_pack_ie_reduced_neighbor_report(
34524 pCtx, (tDot11fIEreduced_neighbor_report *)
34525 (pSrc + pIe->offset +
34526 sizeof(tDot11fIEreduced_neighbor_report) * i),
34527 pBufRemaining, nBufRemaining, &len);
34528 break;
34529 case SigIeroaming_consortium_sel:
34530 status |=
34531 dot11f_pack_ie_roaming_consortium_sel(
34532 pCtx, (tDot11fIEroaming_consortium_sel *)
34533 (pSrc + pIe->offset +
34534 sizeof(tDot11fIEroaming_consortium_sel) * i),
34535 pBufRemaining, nBufRemaining, &len);
34536 break;
34537 case SigIesec_chan_offset_ele:
34538 status |=
34539 dot11f_pack_ie_sec_chan_offset_ele(
34540 pCtx, (tDot11fIEsec_chan_offset_ele *)
34541 (pSrc + pIe->offset +
34542 sizeof(tDot11fIEsec_chan_offset_ele) * i),
34543 pBufRemaining, nBufRemaining, &len);
34544 break;
34545 case SigIespatial_reuse:
34546 status |=
34547 dot11f_pack_ie_spatial_reuse(
34548 pCtx, (tDot11fIEspatial_reuse *)
34549 (pSrc + pIe->offset +
34550 sizeof(tDot11fIEspatial_reuse) * i),
34551 pBufRemaining, nBufRemaining, &len);
34552 break;
34553 case SigIet2lm_ie:
34554 status |=
34555 dot11f_pack_ie_t2lm_ie(
34556 pCtx, (tDot11fIEt2lm_ie *)
34557 (pSrc + pIe->offset +
34558 sizeof(tDot11fIEt2lm_ie) * i),
34559 pBufRemaining, nBufRemaining, &len);
34560 break;
34561 case SigIevendor_vht_ie:
34562 status |=
34563 dot11f_pack_ie_vendor_vht_ie(
34564 pCtx, (tDot11fIEvendor_vht_ie *)
34565 (pSrc + pIe->offset +
34566 sizeof(tDot11fIEvendor_vht_ie) * i),
34567 pBufRemaining, nBufRemaining, &len);
34568 break;
34569 default:
34570 FRAMES_LOG1(pCtx, FRLOGE, FRFL("INTERNAL ERROR-- I don"
34571 "'t know about the IE %d; this is most likely a b"
34572 "ug in 'framesc'.\n"), pFf->sig);
34573 return DOT11F_INTERNAL_ERROR;
34574 }
34575
34576 pBufRemaining += len;
34577 nBufRemaining -= len;
34578 *pnConsumed += len;
34579 }
34580
34581 ++pIe;
34582
34583 }
34584
34585 return status;
34586
34587 }
34588
pack_tlv_core(tpAniSirGlobal pCtx,uint8_t * pSrc,uint8_t * pBuf,uint32_t nBuf,uint32_t * pnConsumed,const tTLVDefn TLVs[],uint32_t * pidx)34589 static uint32_t pack_tlv_core(tpAniSirGlobal pCtx,
34590 uint8_t *pSrc,
34591 uint8_t *pBuf,
34592 uint32_t nBuf,
34593 uint32_t *pnConsumed,
34594 const tTLVDefn TLVs[],
34595 uint32_t *pidx)
34596 {
34597 const tTLVDefn *pTlv;
34598 tFRAMES_BOOL *pfFound;
34599 uint8_t *pBufRemaining;
34600 uint32_t nBufRemaining, status, len;
34601
34602 DOT11F_PARAMETER_CHECK2(pSrc, pBuf, nBuf, pnConsumed);
34603
34604 (void)pCtx;
34605 status = DOT11F_PARSE_SUCCESS;
34606 pBufRemaining = pBuf;
34607 nBufRemaining = nBuf;
34608
34609 pTlv = &(TLVs[0]);
34610 while (0xffff != pTlv->id) {
34611 pfFound = (tFRAMES_BOOL *)(pSrc + pTlv->offset +
34612 pTlv->presenceOffset);
34613 if (*pfFound && pTlv->minSize > nBufRemaining) {
34614 FRAMES_LOG3(pCtx, FRLOGE, FRFL("The TLV %s takes at least"
34615 " %d bytes, but there are only %d left in the buffer."
34616 "\n"), pTlv->name, pTlv->minSize, nBufRemaining);
34617 return DOT11F_BUFFER_OVERFLOW;
34618 }
34619
34620 len = 0U;
34621
34622 if (*pfFound) {
34623 switch (pTlv->sig) {
34624 case SigTlvAuthorizedMACs:
34625 status |=
34626 dot11f_pack_tlv_authorized_ma_cs(
34627 pCtx, (tDot11fTLVAuthorizedMACs *)
34628 (pSrc + pTlv->offset), pBufRemaining,
34629 nBufRemaining, &len);
34630 break;
34631 case SigTlvRequestToEnroll:
34632 status |=
34633 dot11f_pack_tlv_request_to_enroll(
34634 pCtx, (tDot11fTLVRequestToEnroll *)
34635 (pSrc + pTlv->offset), pBufRemaining,
34636 nBufRemaining, &len);
34637 break;
34638 case SigTlvVersion2:
34639 status |=
34640 dot11f_pack_tlv_version2(
34641 pCtx, (tDot11fTLVVersion2 *)
34642 (pSrc + pTlv->offset), pBufRemaining,
34643 nBufRemaining, &len);
34644 break;
34645 case SigTlvAPSetupLocked:
34646 status |=
34647 dot11f_pack_tlv_ap_setup_locked(
34648 pCtx, (tDot11fTLVAPSetupLocked *)
34649 (pSrc + pTlv->offset), pBufRemaining,
34650 nBufRemaining, &len);
34651 break;
34652 case SigTlvAssociationState:
34653 status |=
34654 dot11f_pack_tlv_association_state(
34655 pCtx, (tDot11fTLVAssociationState *)
34656 (pSrc + pTlv->offset), pBufRemaining,
34657 nBufRemaining, &len);
34658 break;
34659 case SigTlvConfigMethods:
34660 status |=
34661 dot11f_pack_tlv_config_methods(
34662 pCtx, (tDot11fTLVConfigMethods *)
34663 (pSrc + pTlv->offset), pBufRemaining,
34664 nBufRemaining, &len);
34665 break;
34666 case SigTlvConfigurationError:
34667 status |=
34668 dot11f_pack_tlv_configuration_error(
34669 pCtx, (tDot11fTLVConfigurationError *)
34670 (pSrc + pTlv->offset), pBufRemaining,
34671 nBufRemaining, &len);
34672 break;
34673 case SigTlvDeviceName:
34674 status |=
34675 dot11f_pack_tlv_device_name(
34676 pCtx, (tDot11fTLVDeviceName *)
34677 (pSrc + pTlv->offset), pBufRemaining,
34678 nBufRemaining, &len);
34679 break;
34680 case SigTlvDevicePasswordID:
34681 status |=
34682 dot11f_pack_tlv_device_password_id(
34683 pCtx, (tDot11fTLVDevicePasswordID *)
34684 (pSrc + pTlv->offset), pBufRemaining,
34685 nBufRemaining, &len);
34686 break;
34687 case SigTlvExtendedListenTiming:
34688 status |=
34689 dot11f_pack_tlv_extended_listen_timing(
34690 pCtx, (tDot11fTLVExtendedListenTiming *)
34691 (pSrc + pTlv->offset), pBufRemaining,
34692 nBufRemaining, &len);
34693 break;
34694 case SigTlvListenChannel:
34695 status |=
34696 dot11f_pack_tlv_listen_channel(
34697 pCtx, (tDot11fTLVListenChannel *)
34698 (pSrc + pTlv->offset), pBufRemaining,
34699 nBufRemaining, &len);
34700 break;
34701 case SigTlvManufacturer:
34702 status |=
34703 dot11f_pack_tlv_manufacturer(
34704 pCtx, (tDot11fTLVManufacturer *)
34705 (pSrc + pTlv->offset), pBufRemaining,
34706 nBufRemaining, &len);
34707 break;
34708 case SigTlvMinorReasonCode:
34709 status |=
34710 dot11f_pack_tlv_minor_reason_code(
34711 pCtx, (tDot11fTLVMinorReasonCode *)
34712 (pSrc + pTlv->offset), pBufRemaining,
34713 nBufRemaining, &len);
34714 break;
34715 case SigTlvModelName:
34716 status |=
34717 dot11f_pack_tlv_model_name(
34718 pCtx, (tDot11fTLVModelName *)
34719 (pSrc + pTlv->offset), pBufRemaining,
34720 nBufRemaining, &len);
34721 break;
34722 case SigTlvModelNumber:
34723 status |=
34724 dot11f_pack_tlv_model_number(
34725 pCtx, (tDot11fTLVModelNumber *)
34726 (pSrc + pTlv->offset), pBufRemaining,
34727 nBufRemaining, &len);
34728 break;
34729 case SigTlvNoticeOfAbsence:
34730 status |=
34731 dot11f_pack_tlv_notice_of_absence(
34732 pCtx, (tDot11fTLVNoticeOfAbsence *)
34733 (pSrc + pTlv->offset), pBufRemaining,
34734 nBufRemaining, &len);
34735 break;
34736 case SigTlvOperatingChannel:
34737 status |=
34738 dot11f_pack_tlv_operating_channel(
34739 pCtx, (tDot11fTLVOperatingChannel *)
34740 (pSrc + pTlv->offset), pBufRemaining,
34741 nBufRemaining, &len);
34742 break;
34743 case SigTlvP2PCapability:
34744 status |=
34745 dot11f_pack_tlv_p2_p_capability(
34746 pCtx, (tDot11fTLVP2PCapability *)
34747 (pSrc + pTlv->offset), pBufRemaining,
34748 nBufRemaining, &len);
34749 break;
34750 case SigTlvP2PDeviceId:
34751 status |=
34752 dot11f_pack_tlv_p2_p_device_id(
34753 pCtx, (tDot11fTLVP2PDeviceId *)
34754 (pSrc + pTlv->offset), pBufRemaining,
34755 nBufRemaining, &len);
34756 break;
34757 case SigTlvP2PDeviceInfo:
34758 status |=
34759 dot11f_pack_tlv_p2_p_device_info(
34760 pCtx, (tDot11fTLVP2PDeviceInfo *)
34761 (pSrc + pTlv->offset), pBufRemaining,
34762 nBufRemaining, &len);
34763 break;
34764 case SigTlvP2PGroupInfo:
34765 status |=
34766 dot11f_pack_tlv_p2_p_group_info(
34767 pCtx, (tDot11fTLVP2PGroupInfo *)
34768 (pSrc + pTlv->offset), pBufRemaining,
34769 nBufRemaining, &len);
34770 break;
34771 case SigTlvP2PStatus:
34772 status |=
34773 dot11f_pack_tlv_p2_p_status(
34774 pCtx, (tDot11fTLVP2PStatus *)
34775 (pSrc + pTlv->offset), pBufRemaining,
34776 nBufRemaining, &len);
34777 break;
34778 case SigTlvPrimaryDeviceType:
34779 status |=
34780 dot11f_pack_tlv_primary_device_type(
34781 pCtx, (tDot11fTLVPrimaryDeviceType *)
34782 (pSrc + pTlv->offset), pBufRemaining,
34783 nBufRemaining, &len);
34784 break;
34785 case SigTlvRFBands:
34786 status |=
34787 dot11f_pack_tlv_rf_bands(
34788 pCtx, (tDot11fTLVRFBands *)
34789 (pSrc + pTlv->offset), pBufRemaining,
34790 nBufRemaining, &len);
34791 break;
34792 case SigTlvRequestDeviceType:
34793 status |=
34794 dot11f_pack_tlv_request_device_type(
34795 pCtx, (tDot11fTLVRequestDeviceType *)
34796 (pSrc + pTlv->offset), pBufRemaining,
34797 nBufRemaining, &len);
34798 break;
34799 case SigTlvRequestType:
34800 status |=
34801 dot11f_pack_tlv_request_type(
34802 pCtx, (tDot11fTLVRequestType *)
34803 (pSrc + pTlv->offset), pBufRemaining,
34804 nBufRemaining, &len);
34805 break;
34806 case SigTlvResponseType:
34807 status |=
34808 dot11f_pack_tlv_response_type(
34809 pCtx, (tDot11fTLVResponseType *)
34810 (pSrc + pTlv->offset), pBufRemaining,
34811 nBufRemaining, &len);
34812 break;
34813 case SigTlvSelectedRegistrar:
34814 status |=
34815 dot11f_pack_tlv_selected_registrar(
34816 pCtx, (tDot11fTLVSelectedRegistrar *)
34817 (pSrc + pTlv->offset), pBufRemaining,
34818 nBufRemaining, &len);
34819 break;
34820 case SigTlvSelectedRegistrarConfigMethods:
34821 status |=
34822 dot11f_pack_tlv_selected_registrar_config_methods(
34823 pCtx, (tDot11fTLVSelectedRegistrarConfigMethods *)
34824 (pSrc + pTlv->offset), pBufRemaining,
34825 nBufRemaining, &len);
34826 break;
34827 case SigTlvSerialNumber:
34828 status |=
34829 dot11f_pack_tlv_serial_number(
34830 pCtx, (tDot11fTLVSerialNumber *)
34831 (pSrc + pTlv->offset), pBufRemaining,
34832 nBufRemaining, &len);
34833 break;
34834 case SigTlvUUID_E:
34835 status |=
34836 dot11f_pack_tlv_uuid_e(
34837 pCtx, (tDot11fTLVUUID_E *)
34838 (pSrc + pTlv->offset), pBufRemaining,
34839 nBufRemaining, &len);
34840 break;
34841 case SigTlvUUID_R:
34842 status |=
34843 dot11f_pack_tlv_uuid_r(
34844 pCtx, (tDot11fTLVUUID_R *)
34845 (pSrc + pTlv->offset), pBufRemaining,
34846 nBufRemaining, &len);
34847 break;
34848 case SigTlvVendorExtension:
34849 status |=
34850 dot11f_pack_tlv_vendor_extension(
34851 pCtx, (tDot11fTLVVendorExtension *)
34852 (pSrc + pTlv->offset), pBufRemaining,
34853 nBufRemaining, &len);
34854 break;
34855 case SigTlvVersion:
34856 status |=
34857 dot11f_pack_tlv_version(
34858 pCtx, (tDot11fTLVVersion *)
34859 (pSrc + pTlv->offset), pBufRemaining,
34860 nBufRemaining, &len);
34861 break;
34862 case SigTlvWPSState:
34863 status |=
34864 dot11f_pack_tlv_wps_state(
34865 pCtx, (tDot11fTLVWPSState *)
34866 (pSrc + pTlv->offset), pBufRemaining,
34867 nBufRemaining, &len);
34868 break;
34869 case SigTlvassoc_disallowed:
34870 status |=
34871 dot11f_pack_tlv_assoc_disallowed(
34872 pCtx, (tDot11fTLVassoc_disallowed *)
34873 (pSrc + pTlv->offset), pBufRemaining,
34874 nBufRemaining, &len);
34875 break;
34876 case SigTlvassoc_retry_delay:
34877 status |=
34878 dot11f_pack_tlv_assoc_retry_delay(
34879 pCtx, (tDot11fTLVassoc_retry_delay *)
34880 (pSrc + pTlv->offset), pBufRemaining,
34881 nBufRemaining, &len);
34882 break;
34883 case SigTlvcellular_data_cap:
34884 status |=
34885 dot11f_pack_tlv_cellular_data_cap(
34886 pCtx, (tDot11fTLVcellular_data_cap *)
34887 (pSrc + pTlv->offset), pBufRemaining,
34888 nBufRemaining, &len);
34889 break;
34890 case SigTlvcellular_data_con_pref:
34891 status |=
34892 dot11f_pack_tlv_cellular_data_con_pref(
34893 pCtx, (tDot11fTLVcellular_data_con_pref *)
34894 (pSrc + pTlv->offset), pBufRemaining,
34895 nBufRemaining, &len);
34896 break;
34897 case SigTlvecsa_target_tsf_info_attr:
34898 status |=
34899 dot11f_pack_tlv_ecsa_target_tsf_info_attr(
34900 pCtx, (tDot11fTLVecsa_target_tsf_info_attr *)
34901 (pSrc + pTlv->offset), pBufRemaining,
34902 nBufRemaining, &len);
34903 break;
34904 case SigTlvedca_pifs_param_attr:
34905 status |=
34906 dot11f_pack_tlv_edca_pifs_param_attr(
34907 pCtx, (tDot11fTLVedca_pifs_param_attr *)
34908 (pSrc + pTlv->offset), pBufRemaining,
34909 nBufRemaining, &len);
34910 break;
34911 case SigTlvhe_2xltf_160mhz_supp:
34912 status |=
34913 dot11f_pack_tlv_he_2xltf_160mhz_supp(
34914 pCtx, (tDot11fTLVhe_2xltf_160mhz_supp *)
34915 (pSrc + pTlv->offset), pBufRemaining,
34916 nBufRemaining, &len);
34917 break;
34918 case SigTlvhe_400ns_sgi_attr:
34919 status |=
34920 dot11f_pack_tlv_he_400ns_sgi_attr(
34921 pCtx, (tDot11fTLVhe_400ns_sgi_attr *)
34922 (pSrc + pTlv->offset), pBufRemaining,
34923 nBufRemaining, &len);
34924 break;
34925 case SigTlvhe_dl_mumimo_attr:
34926 status |=
34927 dot11f_pack_tlv_he_dl_mumimo_attr(
34928 pCtx, (tDot11fTLVhe_dl_mumimo_attr *)
34929 (pSrc + pTlv->offset), pBufRemaining,
34930 nBufRemaining, &len);
34931 break;
34932 case SigTlvhe_dl_ofdma_attr:
34933 status |=
34934 dot11f_pack_tlv_he_dl_ofdma_attr(
34935 pCtx, (tDot11fTLVhe_dl_ofdma_attr *)
34936 (pSrc + pTlv->offset), pBufRemaining,
34937 nBufRemaining, &len);
34938 break;
34939 case SigTlvhe_mcs13_attr:
34940 status |=
34941 dot11f_pack_tlv_he_mcs13_attr(
34942 pCtx, (tDot11fTLVhe_mcs13_attr *)
34943 (pSrc + pTlv->offset), pBufRemaining,
34944 nBufRemaining, &len);
34945 break;
34946 case SigTlvmbo_ap_cap:
34947 status |=
34948 dot11f_pack_tlv_mbo_ap_cap(
34949 pCtx, (tDot11fTLVmbo_ap_cap *)
34950 (pSrc + pTlv->offset), pBufRemaining,
34951 nBufRemaining, &len);
34952 break;
34953 case SigTlvnon_prefferd_chan_rep:
34954 status |=
34955 dot11f_pack_tlv_non_prefferd_chan_rep(
34956 pCtx, (tDot11fTLVnon_prefferd_chan_rep *)
34957 (pSrc + pTlv->offset), pBufRemaining,
34958 nBufRemaining, &len);
34959 break;
34960 case SigTlvoce_cap:
34961 status |=
34962 dot11f_pack_tlv_oce_cap(
34963 pCtx, (tDot11fTLVoce_cap *)
34964 (pSrc + pTlv->offset), pBufRemaining,
34965 nBufRemaining, &len);
34966 break;
34967 case SigTlvqcn_version:
34968 status |=
34969 dot11f_pack_tlv_qcn_version(
34970 pCtx, (tDot11fTLVqcn_version *)
34971 (pSrc + pTlv->offset), pBufRemaining,
34972 nBufRemaining, &len);
34973 break;
34974 case SigTlvreduced_wan_metrics:
34975 status |=
34976 dot11f_pack_tlv_reduced_wan_metrics(
34977 pCtx, (tDot11fTLVreduced_wan_metrics *)
34978 (pSrc + pTlv->offset), pBufRemaining,
34979 nBufRemaining, &len);
34980 break;
34981 case SigTlvrssi_assoc_rej:
34982 status |=
34983 dot11f_pack_tlv_rssi_assoc_rej(
34984 pCtx, (tDot11fTLVrssi_assoc_rej *)
34985 (pSrc + pTlv->offset), pBufRemaining,
34986 nBufRemaining, &len);
34987 break;
34988 case SigTlvtrans_reasonp_attr:
34989 status |=
34990 dot11f_pack_tlv_trans_reasonp_attr(
34991 pCtx, (tDot11fTLVtrans_reasonp_attr *)
34992 (pSrc + pTlv->offset), pBufRemaining,
34993 nBufRemaining, &len);
34994 break;
34995 case SigTlvtrans_rejectp_attr:
34996 status |=
34997 dot11f_pack_tlv_trans_rejectp_attr(
34998 pCtx, (tDot11fTLVtrans_rejectp_attr *)
34999 (pSrc + pTlv->offset), pBufRemaining,
35000 nBufRemaining, &len);
35001 break;
35002 case SigTlvtransition_reason:
35003 status |=
35004 dot11f_pack_tlv_transition_reason(
35005 pCtx, (tDot11fTLVtransition_reason *)
35006 (pSrc + pTlv->offset), pBufRemaining,
35007 nBufRemaining, &len);
35008 break;
35009 case SigTlvtransition_reject_reason:
35010 status |=
35011 dot11f_pack_tlv_transition_reject_reason(
35012 pCtx, (tDot11fTLVtransition_reject_reason *)
35013 (pSrc + pTlv->offset), pBufRemaining,
35014 nBufRemaining, &len);
35015 break;
35016 case SigTlvvht_mcs11_attr:
35017 status |=
35018 dot11f_pack_tlv_vht_mcs11_attr(
35019 pCtx, (tDot11fTLVvht_mcs11_attr *)
35020 (pSrc + pTlv->offset), pBufRemaining,
35021 nBufRemaining, &len);
35022 break;
35023 case SigTlvP2PInterface:
35024 status |=
35025 dot11f_pack_tlv_p2_p_interface(
35026 pCtx, (tDot11fTLVP2PInterface *)
35027 (pSrc + pTlv->offset), pBufRemaining,
35028 nBufRemaining, &len);
35029 break;
35030 case SigTlvP2PManageability:
35031 status |=
35032 dot11f_pack_tlv_p2_p_manageability(
35033 pCtx, (tDot11fTLVP2PManageability *)
35034 (pSrc + pTlv->offset), pBufRemaining,
35035 nBufRemaining, &len);
35036 break;
35037 default:
35038 FRAMES_LOG1(pCtx, FRLOGE, FRFL("INTERNAL ERROR-- I don't "
35039 "know about the TLV %d; this is most likely a bug in "
35040 "'framesc'.\n"), pTlv->sig);
35041 return DOT11F_INTERNAL_ERROR;
35042 }
35043
35044 } /* End if on *pfFound */
35045 pBufRemaining += len;
35046 nBufRemaining -= len;
35047 *pnConsumed += len;
35048 ++pTlv;
35049 if (len)
35050 ++*pidx;
35051 }
35052
35053 return status;
35054
35055 }
35056