xref: /wlan-driver/qcacld-3.0/core/mac/src/sys/legacy/src/utils/src/dot11f.c (revision 5113495b16420b49004c444715d2daae2066e7dc)
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