blob: 0336105b067f302429e73a776088bfa316920f26 [file] [log] [blame]
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001/*
Abhishek Singh7dcb85b2017-12-27 15:15:01 +05302 * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003 *
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004 * Permission to use, copy, modify, and/or distribute this software for
5 * any purpose with or without fee is hereby granted, provided that the
6 * above copyright notice and this permission notice appear in all
7 * copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
14 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16 * PERFORMANCE OF THIS SOFTWARE.
17 */
18
19/*
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080020 * \file dot11f.c
21 *
22 * \brief Structures, functions & definitions for
23 * working with 802.11 Frames
24 *
25 *
26 * This file was automatically generated by 'framesc'
Vignesh Viswanathan7813a3d2018-08-27 19:09:00 +053027 * Mon Aug 27 19:08:28 2018 from the following file(s):
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080028 *
29 * dot11f.frms
30 *
31 * PLEASE DON'T EDIT THIS FILE BY HAND!
32 *
33 */
34
35#if !defined ANI_OS_TYPE_OSX && !defined ANI_OS_TYPE_LINUX && !defined ANI_OS_TYPE_ANDROID
36#include <memory.h> /* For memcpy */
37#include <stdio.h> /* For _vsnprintf */
38#include <stddef.h> /* For offsetof */
39#endif
40
41#include <ani_global.h>
42#include <utils_api.h>
43#include "dot11fdefs.h"
44#include "dot11f.h"
45
46#if defined(_MSC_VER)
47#pragma warning (disable:4244)
48#pragma warning (disable:4505)
49#pragma warning (disable:4702)
50#pragma warning (disable:4996)/* ... was declared deprecated */
51#endif /* Microsoft C/C++ */
52
53typedef unsigned char tFRAMES_BOOL;
54typedef void (*pfnGeneric_t)(void);
55
56typedef struct sFFDefn {
57 const char *name;
58 uint32_t offset;
59 uint16_t sig;
60 uint8_t size;
61} tFFDefn;
62
63typedef struct sIEDefn {
64 uint32_t offset;
65 uint32_t presenceOffset;
66 uint32_t countOffset;
67 const char *name;
68 uint16_t arraybound;
69 uint16_t minSize;
70 uint16_t maxSize;
71 uint16_t sig;
72 unsigned char oui[5];
73 unsigned char noui;
74 uint8_t eid;
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053075 uint8_t extn_eid;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080076 tFRAMES_BOOL fMandatory;
77} tIEDefn;
78
79#if !defined(countof)
80#define countof(x) (sizeof((x)) / sizeof((x)[0]))
81#endif
82
83#if !defined(DOT11F_MEMCPY)
84#define DOT11F_MEMCPY(ctx, dst, src, len) \
85 memcpy((dst), (src), (len))
86#endif
87
88#if !defined(DOT11F_MEMCMP)
89#define DOT11F_MEMCMP(ctx, lhs, rhs, len) \
90 memcmp((lhs), (rhs), (len))
91#endif
92
93#ifndef DOT11F_HAVE_LOG_SEVERITIES
94#define FRLOG_OFF (0)
95#define FRLOGP (1)
96#define FRLOGE (2)
97#define FRLOGW (3)
98#define FRLOG1 (4)
99#define FRLOG2 (5)
100#define FRLOG3 (6)
101#define FRLOG4 (7)
102#endif
103
104#define FRFL(x) x
105
106#define FRAMES_LOG0(ctx, sev, fmt)
107#define FRAMES_LOG1(ctx, sev, fmt, p1)
108#define FRAMES_LOG2(ctx, sev, fmt, p1, p2)
109#define FRAMES_LOG3(ctx, sev, fmt, p1, p2, p3)
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +0530110#define FRAMES_LOG4(ctx, sev, fmt, p1, p2, p3, p4)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800111#define FRAMES_DUMP(ctx, sev, p, n)
112#ifndef FRAMES_SEV_FOR_FRAME
113#define FRAMES_SEV_FOR_FRAME(ctx, sig) FRLOG3
114#endif
115
116#if defined(DOT11F_ENABLE_DBG_BREAK) && defined (WIN32)
117#define FRAMES_DBG_BREAK() { _asm int 3 }
118#else
119#define FRAMES_DBG_BREAK()
120#endif
121
122#if !defined(DOT11F_PARAMETER_CHECK)
123#if defined (DOT11F_HAVE_WIN32_API)
124
125#define DOT11F_PARAMETER_CHECK(pBuf, nBuf, pFrm, nFrm) \
Naveen Rawat4f149b32018-01-16 10:56:45 -0800126 do { \
127 if (!pBuf || IsBadReadPtr(pBuf, nBuf))\
128 return DOT11F_BAD_INPUT_BUFFER; \
129 if (!pFrm || IsBadWritePtr(pFrm, nFrm))\
130 return DOT11F_BAD_OUTPUT_BUFFER; \
131 } while (0)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800132
133#define DOT11F_PARAMETER_CHECK2(pSrc, pBuf, nBuf, pnConsumed) \
Naveen Rawat4f149b32018-01-16 10:56:45 -0800134 do { \
135 if (!pSrc || IsBadReadPtr(pSrc, 4))\
136 eturn DOT11F_BAD_INPUT_BUFFER; \
137 if (!pBuf || IsBadWritePtr(pBuf, nBuf))\
138 return DOT11F_BAD_OUTPUT_BUFFER; \
139 if (!nBuf)\
140 return DOT11F_BAD_OUTPUT_BUFFER; \
141 if (IsBadWritePtr(pnConsumed, 4))\
142 return DOT11F_BAD_OUTPUT_BUFFER; \
143 } while (0)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800144
145#else
146
147#define DOT11F_PARAMETER_CHECK(pBuf, nBuf, pFrm, nFrm) \
148 if (!pBuf)\
149 return DOT11F_BAD_INPUT_BUFFER; \
150 if (!pFrm)\
151 return DOT11F_BAD_OUTPUT_BUFFER \
152
153#define DOT11F_PARAMETER_CHECK2(pSrc, pBuf, nBuf, pnConsumed) \
154 if (!pSrc)\
155 return DOT11F_BAD_INPUT_BUFFER; \
156 if (!pBuf)\
157 return DOT11F_BAD_OUTPUT_BUFFER; \
158 if (!nBuf)\
159 return DOT11F_BAD_OUTPUT_BUFFER; \
160 if (!pnConsumed)\
161 return DOT11F_BAD_OUTPUT_BUFFER \
162
163#endif
164#endif
165
166static void framesntohs(tpAniSirGlobal pCtx,
167 uint16_t *pOut,
168 uint8_t *pIn,
169 tFRAMES_BOOL fMsb)
170{
171 (void)pCtx;
172#if defined (DOT11F_LITTLE_ENDIAN_HOST)
173 if (!fMsb)
174 DOT11F_MEMCPY(pCtx, (uint16_t *)pOut, pIn, 2);
175 else
176 *pOut = (uint16_t)(*pIn << 8) | *(pIn + 1);
177#else
178 if (!fMsb)
179 *pOut = (uint16_t)(*pIn | (*(pIn + 1) << 8));
180 else
181 DOT11F_MEMCPY(pCtx, (uint16_t *)pOut, pIn, 2);
182#endif
183}
184
185static void framesntohl(tpAniSirGlobal pCtx,
186 uint32_t *pOut,
187 uint8_t *pIn,
188 tFRAMES_BOOL fMsb)
189{
190 (void)pCtx;
191#if defined (DOT11F_LITTLE_ENDIAN_HOST)
192 if (!fMsb)
193 DOT11F_MEMCPY(pCtx, (uint32_t *)pOut, pIn, 4);
194 else
195 *pOut = (uint32_t)(*pIn << 24) |
196 (*(pIn + 1) << 16) |
197 (*(pIn + 2) << 8) |
198 (*(pIn + 3));
199#else
200 if (!fMsb)
201 *pOut = (uint32_t)(*(pIn + 3) << 24) |
202 (*(pIn + 2) << 16) |
203 (*(pIn + 1) << 8) |
204 (*(pIn));
205else
206 *pOut = *(uint32_t *)pIn;
207#endif
208}
209
210static void framesntohq(tpAniSirGlobal pCtx,
211 tDOT11F_U64 *pOut,
212 uint8_t *pIn,
213 tFRAMES_BOOL fMsb)
214{
215#if defined (DOT11F_LITTLE_ENDIAN_HOST)
216 framesntohl(pCtx, &((*pOut)[0]), pIn, fMsb);
217 framesntohl(pCtx, &((*pOut)[1]), pIn + 4, fMsb);
218#else
219 framesntohl(pCtx, &((*pOut)[1]), pIn, fMsb);
220 framesntohl(pCtx, &((*pOut)[0]), pIn + 4, fMsb);
221#endif
222}
223
224static void frameshtons(tpAniSirGlobal pCtx,
225 uint8_t *pOut,
226 uint16_t pIn,
227 tFRAMES_BOOL fMsb)
228{
229 (void)pCtx;
230#if defined (DOT11F_LITTLE_ENDIAN_HOST)
231 if (!fMsb) {
232 DOT11F_MEMCPY(pCtx, pOut, &pIn, 2);
233 } else {
234 *pOut = (pIn & 0xff00) >> 8;
235 *(pOut + 1) = pIn & 0xff;
236 }
237#else
238 if (!fMsb) {
239 *pOut = pIn & 0xff;
240 *(pOut + 1) = (pIn & 0xff00) >> 8;
241 } else {
242 DOT11F_MEMCPY(pCtx, pOut, &pIn, 2);
243 }
244#endif
245}
246
247static void frameshtonl(tpAniSirGlobal pCtx,
248 uint8_t *pOut,
249 uint32_t pIn,
250 tFRAMES_BOOL fMsb)
251{
252 (void)pCtx;
253#if defined (DOT11F_LITTLE_ENDIAN_HOST)
254 if (!fMsb) {
255 DOT11F_MEMCPY(pCtx, pOut, &pIn, 4);
256 } else {
257 *pOut = (pIn & 0xff000000) >> 24;
258 *(pOut + 1) = (pIn & 0x00ff0000) >> 16;
259 *(pOut + 2) = (pIn & 0x0000ff00) >> 8;
260 *(pOut + 3) = (pIn & 0x000000ff);
261 }
262#else
263 if (!fMsb) {
264 *pOut = (pIn & 0x000000ff);
265 *(pOut + 1) = (pIn & 0x0000ff00) >> 8;
266 *(pOut + 2) = (pIn & 0x00ff0000) >> 16;
267 *(pOut + 3) = (pIn & 0xff000000) >> 24;
268 } else {
269 DOT11F_MEMCPY(pCtx, pOut, &pIn, 4);
270 }
271#endif
272}
273
274static void frameshtonq(tpAniSirGlobal pCtx,
275 uint8_t *pOut,
276 tDOT11F_U64 pIn,
277 tFRAMES_BOOL fMsb)
278{
279#if defined (DOT11F_LITTLE_ENDIAN_HOST)
280 frameshtonl(pCtx, pOut, pIn[0], fMsb);
281 frameshtonl(pCtx, pOut + 4, pIn[1], fMsb);
282#else
283 frameshtonl(pCtx, pOut + 4, pIn[1], fMsb);
284 frameshtonl(pCtx, pOut, pIn[0], fMsb);
285#endif
286}
287
288static const tIEDefn *find_ie_defn(tpAniSirGlobal pCtx,
289 uint8_t *pBuf,
290 uint32_t nBuf,
291 const tIEDefn IEs[])
292{
293 const tIEDefn *pIe;
294 (void)pCtx;
295
296 pIe = &(IEs[0]);
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +0530297 while (0xff != pIe->eid || pIe->extn_eid) {
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800298 if (*pBuf == pIe->eid) {
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +0530299 if (pIe->eid == 0xff) {
Vignesh Viswanathan053efa32018-05-10 17:29:56 +0530300 if ((nBuf > 2) &&
301 (*(pBuf + 2)) == pIe->extn_eid)
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +0530302 return pIe;
303 } else {
304 if (0 == pIe->noui)
305 return pIe;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800306
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +0530307 if ((nBuf > (uint32_t)(pIe->noui + 2)) &&
308 (!DOT11F_MEMCMP(pCtx, pBuf + 2, pIe->oui,
309 pIe->noui)))
310 return pIe;
311 }
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800312 }
313
314 ++pIe;
315 }
316
317 return NULL;
318}
319
320static uint32_t get_container_ies_len(tpAniSirGlobal pCtx,
321 uint8_t *pBuf,
322 uint32_t nBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -0700323 uint8_t *pnConsumed,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800324 const tIEDefn IEs[])
325{
326 const tIEDefn *pIe, *pIeFirst;
327 uint8_t *pBufRemaining = pBuf;
Naveen Rawat27f1c542017-08-17 11:39:01 -0700328 uint32_t len = 0;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800329 (void)pCtx;
330
331 pIeFirst = &(IEs[0]);
332
333 if (*pBufRemaining != pIeFirst->eid)
334 return DOT11F_INTERNAL_ERROR;
335 len += *(pBufRemaining+1);
336 pBufRemaining += len + 2;
337 len += 2;
338 while (len < nBuf) {
Vignesh Viswanathanac6f2c32017-12-13 10:11:09 +0530339 pIe = find_ie_defn(pCtx, pBufRemaining, nBuf - len, IEs);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800340 if (NULL == pIe)
341 break;
342 if (pIe->eid == pIeFirst->eid)
343 break;
344 len += *(pBufRemaining + 1) + 2;
345 pBufRemaining += *(pBufRemaining + 1) + 2;
346 }
347
Vignesh Viswanathanac6f2c32017-12-13 10:11:09 +0530348 if ((len > 0xFF) || (len > nBuf))
Naveen Rawatb6eeed22017-10-20 13:52:07 -0700349 return DOT11F_INTERNAL_ERROR;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800350 *pnConsumed = len;
351 return DOT11F_PARSE_SUCCESS;
352
353}
354
355
356static uint32_t unpack_core(tpAniSirGlobal pCtx,
357 uint8_t *pBuf,
358 uint32_t nBuf,
359 const tFFDefn FFs[],
360 const tIEDefn IEs[],
361 uint8_t *pFrm,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +0530362 size_t nFrm,
363 bool append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800364static uint32_t pack_core(tpAniSirGlobal pCtx,
365 uint8_t *pSrc,
366 uint8_t *pBuf,
367 uint32_t nBuf,
368 uint32_t *pnConsumed,
369 const tFFDefn FFs[],
370 const tIEDefn IEs[]);
371static uint32_t get_packed_size_core(tpAniSirGlobal pCtx,
372 uint8_t *pFrm,
373 uint32_t *pnNeeded,
374 const tIEDefn IEs[]);
375
Krishna Kumaar Natarajan7ee45232016-08-29 17:13:47 -0700376static uint32_t dot11f_unpack_tlv_common_func(tpAniSirGlobal pCtx,
377 uint8_t *pBuf, uint16_t tlvlen,
378 uint8_t *pDstPresent, uint8_t *pDstField)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800379{
380 uint32_t status = DOT11F_PARSE_SUCCESS;
381 (void)tlvlen; /* Shutup the compiler */
382
383 *pDstPresent = 1;
384 *pDstField = *pBuf;
385 (void)pCtx;
386 return status;
387} /* End dot11f_unpack_tlv_common_func. */
388
Krishna Kumaar Natarajan7ee45232016-08-29 17:13:47 -0700389static uint32_t dot11f_unpack_tlv_common_func2(tpAniSirGlobal pCtx,
390 uint8_t *pBuf, uint16_t tlvlen,
391 uint8_t *pDstPresent, uint16_t *pDstState)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800392{
393 uint32_t status = DOT11F_PARSE_SUCCESS;
394 (void)tlvlen; /* Shutup the compiler */
395
396 *pDstPresent = 1;
397 framesntohs(pCtx, pDstState, pBuf, 1);
398 (void)pCtx;
399 return status;
400
401} /* End dot11f_unpack_tlv_common_func2. */
402
Ankit Guptaf42c3c22016-10-06 15:27:10 -0700403static void dot11f_unpack_ff_common_func(tpAniSirGlobal pCtx,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800404 uint8_t *pBuf, uint16_t *pDstField)
405{
406 framesntohs(pCtx, pDstField, pBuf, 0);
407 (void)pCtx;
408} /* End dot11f_unpack_ff_common_func. */
409
Ankit Guptaf42c3c22016-10-06 15:27:10 -0700410static uint32_t dot11f_unpack_ie_common_func(tpAniSirGlobal pCtx, uint8_t *pBuf,
Naveen Rawat4f149b32018-01-16 10:56:45 -0800411 uint8_t ielen, uint8_t *pDstPresent,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800412 uint8_t *pDstField)
413{
414 uint32_t status = DOT11F_PARSE_SUCCESS;
415 (void)ielen;
416 (void)pBuf;
417 if ((*pDstPresent))
418 status = DOT11F_DUPLICATE_IE;
419 *pDstPresent = 1;
420 *pDstField = *pBuf;
421 (void)pCtx;
422
423 return status;
424} /* End dot11f_unpack_ie_common_func */
425
426typedef struct sTLVDefn {
427 uint32_t offset;
428 uint32_t presenceOffset;
429 const char *name;
430 uint16_t sig;
431 uint32_t id;
432 uint32_t pec;
433 uint32_t minSize;
434 uint32_t maxSize;
435 uint8_t fMandatory;
436 uint8_t sType;
437 uint8_t sLen;
438 uint8_t fMsb;
439} tTLVDefn;
440
441static const tTLVDefn *find_tlv_defn(tpAniSirGlobal pCtx,
442 uint8_t *pBuf,
443 uint32_t nBuf,
444 const tTLVDefn TLVs[])
445{
446 const tTLVDefn *pTlv;
447 uint32_t pec;
448 uint16_t id;
449
450 pTlv = &(TLVs[0]);
451 (void)pCtx;
452 if (pTlv->sType == 2)
453 framesntohs(pCtx, &id, pBuf, 1);
454 else
455 id = *pBuf;
456
457 while (0xffff != pTlv->id) {
458 if (id == pTlv->id) {
459 if (0 == pTlv->pec)
460 return pTlv;
461
462 if (nBuf > 5) {
463 pec = ((*(pBuf + 4)) << 16) |
464 ((*(pBuf + 5)) << 8) |
465 *(pBuf + 6);
466 if (pec == pTlv->pec)
467 return pTlv;
468 }
469 }
470
471 ++pTlv;
472 }
473
474 return NULL;
475}
476
477static uint32_t unpack_tlv_core(tpAniSirGlobal pCtx,
478 uint8_t *pBuf,
479 uint32_t nBuf,
480 const tTLVDefn TLVs[],
481 uint8_t *pFrm,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +0530482 size_t nFrm);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800483static uint32_t pack_tlv_core(tpAniSirGlobal pCtx,
484 uint8_t *pSrc,
485 uint8_t *pBuf,
486 uint32_t nBuf,
487 uint32_t *pnConsumed,
488 const tTLVDefn TLVs[],
489 uint32_t *pidx);
490static uint32_t get_packed_size_tlv_core(tpAniSirGlobal pCtx,
491 uint8_t *pFrm,
492 uint32_t *pnNeeded,
493 const tTLVDefn TLVs[]);
494
495#define SigFfAID (0x0001)
496
497void dot11f_unpack_ff_action(tpAniSirGlobal pCtx,
498 uint8_t *pBuf,
499 tDot11fFfAction *pDst)
500{
501 pDst->action = *pBuf;
502 (void)pCtx;
503} /* End dot11f_unpack_ff_action. */
504
505#define SigFfAction (0x0002)
506
507#define SigFfAuthAlgo (0x0003)
508
509#define SigFfAuthSeqNo (0x0004)
510
511#define SigFfBeaconInterval (0x0005)
512
513void dot11f_unpack_ff_capabilities(tpAniSirGlobal pCtx,
514 uint8_t *pBuf,
515 tDot11fFfCapabilities *pDst)
516{
517 uint16_t tmp0__;
518 framesntohs(pCtx, &tmp0__, pBuf, 0);
519 pDst->ess = tmp0__ >> 0 & 0x1;
520 pDst->ibss = tmp0__ >> 1 & 0x1;
521 pDst->cfPollable = tmp0__ >> 2 & 0x1;
522 pDst->cfPollReq = tmp0__ >> 3 & 0x1;
523 pDst->privacy = tmp0__ >> 4 & 0x1;
524 pDst->shortPreamble = tmp0__ >> 5 & 0x1;
525 pDst->pbcc = tmp0__ >> 6 & 0x1;
526 pDst->channelAgility = tmp0__ >> 7 & 0x1;
527 pDst->spectrumMgt = tmp0__ >> 8 & 0x1;
528 pDst->qos = tmp0__ >> 9 & 0x1;
529 pDst->shortSlotTime = tmp0__ >> 10 & 0x1;
530 pDst->apsd = tmp0__ >> 11 & 0x1;
531 pDst->rrm = tmp0__ >> 12 & 0x1;
532 pDst->dsssOfdm = tmp0__ >> 13 & 0x1;
533 pDst->delayedBA = tmp0__ >> 14 & 0x1;
534 pDst->immediateBA = tmp0__ >> 15 & 0x1;
535 (void)pCtx;
536} /* End dot11f_unpack_ff_capabilities. */
537
538#define SigFfCapabilities (0x0006)
539
540void dot11f_unpack_ff_category(tpAniSirGlobal pCtx,
541 uint8_t *pBuf,
542 tDot11fFfCategory *pDst)
543{
544 pDst->category = *pBuf;
545 (void)pCtx;
546} /* End dot11f_unpack_ff_category. */
547
548#define SigFfCategory (0x0007)
549
550void dot11f_unpack_ff_current_ap_address(tpAniSirGlobal pCtx,
551 uint8_t *pBuf,
552 tDot11fFfCurrentAPAddress *pDst)
553{
554 DOT11F_MEMCPY(pCtx, pDst->mac, pBuf, 6);
555 (void)pCtx;
556} /* End dot11f_unpack_ff_current_ap_address. */
557
558#define SigFfCurrentAPAddress (0x0008)
559
560void dot11f_unpack_ff_dialog_token(tpAniSirGlobal pCtx,
561 uint8_t *pBuf,
562 tDot11fFfDialogToken *pDst)
563{
564 pDst->token = *pBuf;
565 (void)pCtx;
566} /* End dot11f_unpack_ff_dialog_token. */
567
568#define SigFfDialogToken (0x0009)
569
570void dot11f_unpack_ff_link_margin(tpAniSirGlobal pCtx,
571 uint8_t *pBuf,
572 tDot11fFfLinkMargin *pDst)
573{
574 pDst->linkMargin = *pBuf;
575 (void)pCtx;
576} /* End dot11f_unpack_ff_link_margin. */
577
578#define SigFfLinkMargin (0x000a)
579
580#define SigFfListenInterval (0x000b)
581
582void dot11f_unpack_ff_max_tx_power(tpAniSirGlobal pCtx,
583 uint8_t *pBuf,
584 tDot11fFfMaxTxPower *pDst)
585{
586 pDst->maxTxPower = *pBuf;
587 (void)pCtx;
588} /* End dot11f_unpack_ff_max_tx_power. */
589
590#define SigFfMaxTxPower (0x000c)
591
592void dot11f_unpack_ff_num_of_repetitions(tpAniSirGlobal pCtx,
593 uint8_t *pBuf,
594 tDot11fFfNumOfRepetitions *pDst)
595{
596 framesntohs(pCtx, &pDst->repetitions, pBuf, 0);
597 (void)pCtx;
598} /* End dot11f_unpack_ff_num_of_repetitions. */
599
600#define SigFfNumOfRepetitions (0x000d)
601
602void dot11f_unpack_ff_operating_mode(tpAniSirGlobal pCtx,
603 uint8_t *pBuf,
604 tDot11fFfOperatingMode *pDst)
605{
606 uint8_t tmp1__;
607 tmp1__ = *pBuf;
608 pDst->chanWidth = tmp1__ >> 0 & 0x3;
609 pDst->reserved = tmp1__ >> 2 & 0x3;
610 pDst->rxNSS = tmp1__ >> 4 & 0x7;
611 pDst->rxNSSType = tmp1__ >> 7 & 0x1;
612 (void)pCtx;
613} /* End dot11f_unpack_ff_operating_mode. */
614
615#define SigFfOperatingMode (0x000e)
616
617void dot11f_unpack_ff_rcpi(tpAniSirGlobal pCtx,
618 uint8_t *pBuf,
619 tDot11fFfRCPI *pDst)
620{
621 pDst->rcpi = *pBuf;
622 (void)pCtx;
623} /* End dot11f_unpack_ff_rcpi. */
624
625#define SigFfRCPI (0x000f)
626
627void dot11f_unpack_ff_rsni(tpAniSirGlobal pCtx,
628 uint8_t *pBuf,
629 tDot11fFfRSNI *pDst)
630{
631 pDst->rsni = *pBuf;
632 (void)pCtx;
633} /* End dot11f_unpack_ff_rsni. */
634
635#define SigFfRSNI (0x0010)
636
637#define SigFfReason (0x0011)
638
639void dot11f_unpack_ff_rx_antenna_id(tpAniSirGlobal pCtx,
640 uint8_t *pBuf,
641 tDot11fFfRxAntennaId *pDst)
642{
643 pDst->antennaId = *pBuf;
644 (void)pCtx;
645} /* End dot11f_unpack_ff_rx_antenna_id. */
646
647#define SigFfRxAntennaId (0x0012)
648
649void dot11f_unpack_ff_sm_power_mode_set(tpAniSirGlobal pCtx,
650 uint8_t *pBuf,
651 tDot11fFfSMPowerModeSet *pDst)
652{
653 uint8_t tmp2__;
654 tmp2__ = *pBuf;
655 pDst->PowerSave_En = tmp2__ >> 0 & 0x1;
656 pDst->Mode = tmp2__ >> 1 & 0x1;
657 pDst->reserved = tmp2__ >> 2 & 0x3f;
658 (void)pCtx;
659} /* End dot11f_unpack_ff_sm_power_mode_set. */
660
661#define SigFfSMPowerModeSet (0x0013)
662
663#define SigFfStatus (0x0014)
664
665void dot11f_unpack_ff_status_code(tpAniSirGlobal pCtx,
666 uint8_t *pBuf,
667 tDot11fFfStatusCode *pDst)
668{
669 pDst->statusCode = *pBuf;
670 (void)pCtx;
671} /* End dot11f_unpack_ff_status_code. */
672
673#define SigFfStatusCode (0x0015)
674
675void dot11f_unpack_ff_tpc_ele_id(tpAniSirGlobal pCtx,
676 uint8_t *pBuf,
677 tDot11fFfTPCEleID *pDst)
678{
679 pDst->TPCId = *pBuf;
680 (void)pCtx;
681} /* End dot11f_unpack_ff_tpc_ele_id. */
682
683#define SigFfTPCEleID (0x0016)
684
685void dot11f_unpack_ff_tpc_ele_len(tpAniSirGlobal pCtx,
686 uint8_t *pBuf,
687 tDot11fFfTPCEleLen *pDst)
688{
689 pDst->TPCLen = *pBuf;
690 (void)pCtx;
691} /* End dot11f_unpack_ff_tpc_ele_len. */
692
693#define SigFfTPCEleLen (0x0017)
694
695void dot11f_unpack_ff_ts_info(tpAniSirGlobal pCtx,
696 uint8_t *pBuf,
697 tDot11fFfTSInfo *pDst)
698{
699 uint32_t tmp3__;
700 framesntohl(pCtx, &tmp3__, pBuf, 0);
701 pDst->traffic_type = tmp3__ >> 0 & 0x1;
702 pDst->tsid = tmp3__ >> 1 & 0xf;
703 pDst->direction = tmp3__ >> 5 & 0x3;
704 pDst->access_policy = tmp3__ >> 7 & 0x3;
705 pDst->aggregation = tmp3__ >> 9 & 0x1;
706 pDst->psb = tmp3__ >> 10 & 0x1;
707 pDst->user_priority = tmp3__ >> 11 & 0x7;
708 pDst->tsinfo_ack_pol = tmp3__ >> 14 & 0x3;
709 pDst->schedule = tmp3__ >> 16 & 0x1;
710 pDst->unused = tmp3__ >> 17 & 0x7fff;
711 (void)pCtx;
712} /* End dot11f_unpack_ff_ts_info. */
713
714#define SigFfTSInfo (0x0018)
715
716void dot11f_unpack_ff_time_stamp(tpAniSirGlobal pCtx,
717 uint8_t *pBuf,
718 tDot11fFfTimeStamp *pDst)
719{
720 framesntohq(pCtx, &pDst->timestamp, pBuf, 0);
721 (void)pCtx;
722} /* End dot11f_unpack_ff_time_stamp. */
723
724#define SigFfTimeStamp (0x0019)
725
726void dot11f_unpack_ff_transaction_id(tpAniSirGlobal pCtx,
727 uint8_t *pBuf,
728 tDot11fFfTransactionId *pDst)
729{
730 DOT11F_MEMCPY(pCtx, pDst->transId, pBuf, 2);
731 (void)pCtx;
732} /* End dot11f_unpack_ff_transaction_id. */
733
734#define SigFfTransactionId (0x001a)
735
736void dot11f_unpack_ff_tx_antenna_id(tpAniSirGlobal pCtx,
737 uint8_t *pBuf,
738 tDot11fFfTxAntennaId *pDst)
739{
740 pDst->antennaId = *pBuf;
741 (void)pCtx;
742} /* End dot11f_unpack_ff_tx_antenna_id. */
743
744#define SigFfTxAntennaId (0x001b)
745
746void dot11f_unpack_ff_tx_power(tpAniSirGlobal pCtx,
747 uint8_t *pBuf,
748 tDot11fFfTxPower *pDst)
749{
750 pDst->txPower = *pBuf;
751 (void)pCtx;
752} /* End dot11f_unpack_ff_tx_power. */
753
754#define SigFfTxPower (0x001c)
755
756void dot11f_unpack_ff_vht_membership_status_array(tpAniSirGlobal pCtx,
757 uint8_t *pBuf,
758 tDot11fFfVhtMembershipStatusArray *pDst)
759{
760 DOT11F_MEMCPY(pCtx, pDst->membershipStatusArray, pBuf, 8);
761 (void)pCtx;
762} /* End dot11f_unpack_ff_vht_membership_status_array. */
763
764#define SigFfVhtMembershipStatusArray (0x001d)
765
766void dot11f_unpack_ff_vht_user_position_array(tpAniSirGlobal pCtx,
767 uint8_t *pBuf,
768 tDot11fFfVhtUserPositionArray *pDst)
769{
770 DOT11F_MEMCPY(pCtx, pDst->userPositionArray, pBuf, 16);
771 (void)pCtx;
772} /* End dot11f_unpack_ff_vht_user_position_array. */
773
774#define SigFfVhtUserPositionArray (0x001e)
775
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -0800776void dot11f_unpack_ff_addba_param_set(tpAniSirGlobal pCtx,
777 uint8_t *pBuf,
778 tDot11fFfaddba_param_set *pDst)
779{
780 uint16_t tmp4__;
781 framesntohs(pCtx, &tmp4__, pBuf, 0);
782 pDst->amsdu_supp = tmp4__ >> 0 & 0x1;
783 pDst->policy = tmp4__ >> 1 & 0x1;
784 pDst->tid = tmp4__ >> 2 & 0xf;
785 pDst->buff_size = tmp4__ >> 6 & 0x3ff;
786 (void)pCtx;
787} /* End dot11f_unpack_ff_addba_param_set. */
788
789#define SigFfaddba_param_set (0x001f)
790
791void dot11f_unpack_ff_ba_start_seq_ctrl(tpAniSirGlobal pCtx,
792 uint8_t *pBuf,
793 tDot11fFfba_start_seq_ctrl *pDst)
794{
795 uint16_t tmp5__;
796 framesntohs(pCtx, &tmp5__, pBuf, 0);
797 pDst->frag_number = tmp5__ >> 0 & 0xf;
798 pDst->ssn = tmp5__ >> 4 & 0xfff;
799 (void)pCtx;
800} /* End dot11f_unpack_ff_ba_start_seq_ctrl. */
801
802#define SigFfba_start_seq_ctrl (0x0020)
803
804void dot11f_unpack_ff_ba_timeout(tpAniSirGlobal pCtx,
805 uint8_t *pBuf,
806 tDot11fFfba_timeout *pDst)
807{
808 framesntohs(pCtx, &pDst->timeout, pBuf, 0);
809 (void)pCtx;
810} /* End dot11f_unpack_ff_ba_timeout. */
811
812#define SigFfba_timeout (0x0021)
813
814void dot11f_unpack_ff_delba_param_set(tpAniSirGlobal pCtx,
815 uint8_t *pBuf,
816 tDot11fFfdelba_param_set *pDst)
817{
818 uint16_t tmp6__;
819 framesntohs(pCtx, &tmp6__, pBuf, 0);
820 pDst->reserved = tmp6__ >> 0 & 0x7ff;
821 pDst->initiator = tmp6__ >> 11 & 0x1;
822 pDst->tid = tmp6__ >> 12 & 0xf;
823 (void)pCtx;
824} /* End dot11f_unpack_ff_delba_param_set. */
825
826#define SigFfdelba_param_set (0x0022)
827
Abhishek Singh518323d2015-10-19 17:42:01 +0530828void dot11f_unpack_ff_ext_chan_switch_ann_action(tpAniSirGlobal pCtx,
829 uint8_t *pBuf,
830 tDot11fFfext_chan_switch_ann_action *pDst)
831{
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -0800832 uint32_t tmp7__;
833 framesntohl(pCtx, &tmp7__, pBuf, 0);
834 pDst->switch_mode = tmp7__ >> 0 & 0xff;
835 pDst->op_class = tmp7__ >> 8 & 0xff;
836 pDst->new_channel = tmp7__ >> 16 & 0xff;
837 pDst->switch_count = tmp7__ >> 24 & 0xff;
Abhishek Singh518323d2015-10-19 17:42:01 +0530838 (void)pCtx;
839} /* End dot11f_unpack_ff_ext_chan_switch_ann_action. */
840
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -0800841#define SigFfext_chan_switch_ann_action (0x0023)
Abhishek Singh518323d2015-10-19 17:42:01 +0530842
Abhishek Singh5695e2a2016-10-28 10:39:12 +0530843void dot11f_unpack_ff_p2p_action_oui(tpAniSirGlobal pCtx,
844 uint8_t *pBuf,
845 tDot11fFfp2p_action_oui *pDst)
846{
847 DOT11F_MEMCPY(pCtx, pDst->oui_data, pBuf, 4);
848 (void)pCtx;
849} /* End dot11f_unpack_ff_p2p_action_oui. */
850
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -0800851#define SigFfp2p_action_oui (0x0024)
Abhishek Singh5695e2a2016-10-28 10:39:12 +0530852
853void dot11f_unpack_ff_p2p_action_subtype(tpAniSirGlobal pCtx,
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -0800854 uint8_t *pBuf,
Abhishek Singh5695e2a2016-10-28 10:39:12 +0530855 tDot11fFfp2p_action_subtype *pDst)
856{
857 pDst->subtype = *pBuf;
858 (void)pCtx;
859} /* End dot11f_unpack_ff_p2p_action_subtype. */
860
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -0800861#define SigFfp2p_action_subtype (0x0025)
Abhishek Singh5695e2a2016-10-28 10:39:12 +0530862
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800863uint32_t dot11f_unpack_tlv_authorized_ma_cs(tpAniSirGlobal pCtx,
864 uint8_t *pBuf,
865 uint16_t tlvlen,
866 tDot11fTLVAuthorizedMACs *pDst)
867{
868 uint32_t status = DOT11F_PARSE_SUCCESS;
869 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -0700870 if (unlikely(tlvlen < 6)) {
871 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -0700872 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -0700873 }
Naveen Rawat69623ef2018-04-27 16:11:01 -0700874
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800875 DOT11F_MEMCPY(pCtx, pDst->mac, pBuf, 6);
876 pBuf += 6;
877 tlvlen -= (uint8_t)6;
878 (void)pCtx;
879 return status;
880} /* End dot11f_unpack_tlv_authorized_ma_cs. */
881
882#define SigTlvAuthorizedMACs (0x0001)
883
884
885#define SigTlvRequestToEnroll (0x0002)
886
887
888uint32_t dot11f_unpack_tlv_version2(tpAniSirGlobal pCtx,
889 uint8_t *pBuf,
890 uint16_t tlvlen,
891 tDot11fTLVVersion2 *pDst)
892{
893 uint32_t status = DOT11F_PARSE_SUCCESS;
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -0800894 uint8_t tmp8__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800895 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -0700896 if (unlikely(tlvlen < 1)) {
897 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -0700898 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -0700899 }
Naveen Rawat69623ef2018-04-27 16:11:01 -0700900
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -0800901 tmp8__ = *pBuf;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800902 pBuf += 1;
903 tlvlen -= 1;
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -0800904 pDst->minor = tmp8__ >> 0 & 0xf;
905 pDst->major = tmp8__ >> 4 & 0xf;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800906 (void)pCtx;
907 return status;
908} /* End dot11f_unpack_tlv_version2. */
909
910#define SigTlvVersion2 (0x0003)
911
912
913#define SigTlvAPSetupLocked (0x0004)
914
915
916#define SigTlvAssociationState (0x0005)
917
918
919#define SigTlvConfigMethods (0x0006)
920
921
922#define SigTlvConfigurationError (0x0007)
923
924
925uint32_t dot11f_unpack_tlv_device_name(tpAniSirGlobal pCtx,
926 uint8_t *pBuf,
927 uint16_t tlvlen,
928 tDot11fTLVDeviceName *pDst)
929{
930 uint32_t status = DOT11F_PARSE_SUCCESS;
931 pDst->present = 1;
932 pDst->num_text = (uint8_t)(tlvlen);
933 if (tlvlen > 32) {
934 pDst->present = 0;
935 return DOT11F_SKIPPED_BAD_IE;
936 }
937
938 DOT11F_MEMCPY(pCtx, pDst->text, pBuf, (tlvlen));
939 pBuf += (tlvlen);
940 tlvlen -= (tlvlen);
941 (void)pCtx;
942 return status;
943} /* End dot11f_unpack_tlv_device_name. */
944
945#define SigTlvDeviceName (0x0008)
946
947
948#define SigTlvDevicePasswordID (0x0009)
949
950
951uint32_t dot11f_unpack_tlv_extended_listen_timing(tpAniSirGlobal pCtx,
952 uint8_t *pBuf,
953 uint16_t tlvlen,
954 tDot11fTLVExtendedListenTiming *pDst)
955{
956 uint32_t status = DOT11F_PARSE_SUCCESS;
957 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -0700958 if (unlikely(tlvlen < 2)) {
959 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -0700960 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -0700961 }
Naveen Rawat69623ef2018-04-27 16:11:01 -0700962
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800963 framesntohs(pCtx, &pDst->availibilityPeriod, pBuf, 0);
964 pBuf += 2;
965 tlvlen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -0700966 if (unlikely(tlvlen < 2)) {
967 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -0700968 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -0700969 }
Naveen Rawat69623ef2018-04-27 16:11:01 -0700970
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800971 framesntohs(pCtx, &pDst->availibilityInterval, pBuf, 0);
972 pBuf += 2;
973 tlvlen -= (uint8_t)2;
974 (void)pCtx;
975 return status;
976} /* End dot11f_unpack_tlv_extended_listen_timing. */
977
978#define SigTlvExtendedListenTiming (0x000a)
979
980
981uint32_t dot11f_unpack_tlv_listen_channel(tpAniSirGlobal pCtx,
982 uint8_t *pBuf,
983 uint16_t tlvlen,
984 tDot11fTLVListenChannel *pDst)
985{
986 uint32_t status = DOT11F_PARSE_SUCCESS;
987 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -0700988 if (unlikely(tlvlen < 3)) {
989 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -0700990 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -0700991 }
Naveen Rawat69623ef2018-04-27 16:11:01 -0700992
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800993 DOT11F_MEMCPY(pCtx, pDst->countryString, pBuf, 3);
994 pBuf += 3;
995 tlvlen -= (uint8_t)3;
Naveen Rawat89e85d42018-05-23 11:54:27 -0700996 if (unlikely(tlvlen < 1)) {
997 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -0700998 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -0700999 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001000
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001001 pDst->regulatoryClass = *pBuf;
1002 pBuf += 1;
1003 tlvlen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001004 if (unlikely(tlvlen < 1)) {
1005 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001006 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001007 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001008
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001009 pDst->channel = *pBuf;
1010 pBuf += 1;
1011 tlvlen -= (uint8_t)1;
1012 (void)pCtx;
1013 return status;
1014} /* End dot11f_unpack_tlv_listen_channel. */
1015
1016#define SigTlvListenChannel (0x000b)
1017
1018
1019uint32_t dot11f_unpack_tlv_manufacturer(tpAniSirGlobal pCtx,
1020 uint8_t *pBuf,
1021 uint16_t tlvlen,
1022 tDot11fTLVManufacturer *pDst)
1023{
1024 uint32_t status = DOT11F_PARSE_SUCCESS;
1025 pDst->present = 1;
1026 pDst->num_name = (uint8_t)(tlvlen);
1027 if (tlvlen > 64) {
1028 pDst->present = 0;
1029 return DOT11F_SKIPPED_BAD_IE;
1030 }
1031
1032 DOT11F_MEMCPY(pCtx, pDst->name, pBuf, (tlvlen));
1033 pBuf += (tlvlen);
1034 tlvlen -= (tlvlen);
1035 (void)pCtx;
1036 return status;
1037} /* End dot11f_unpack_tlv_manufacturer. */
1038
1039#define SigTlvManufacturer (0x000c)
1040
1041
1042#define SigTlvMinorReasonCode (0x000d)
1043
1044
1045uint32_t dot11f_unpack_tlv_model_name(tpAniSirGlobal pCtx,
1046 uint8_t *pBuf,
1047 uint16_t tlvlen,
1048 tDot11fTLVModelName *pDst)
1049{
1050 uint32_t status = DOT11F_PARSE_SUCCESS;
1051 pDst->present = 1;
1052 pDst->num_text = (uint8_t)(tlvlen);
1053 if (tlvlen > 32) {
1054 pDst->present = 0;
1055 return DOT11F_SKIPPED_BAD_IE;
1056 }
1057
1058 DOT11F_MEMCPY(pCtx, pDst->text, pBuf, (tlvlen));
1059 pBuf += (tlvlen);
1060 tlvlen -= (tlvlen);
1061 (void)pCtx;
1062 return status;
1063} /* End dot11f_unpack_tlv_model_name. */
1064
1065#define SigTlvModelName (0x000e)
1066
1067
1068uint32_t dot11f_unpack_tlv_model_number(tpAniSirGlobal pCtx,
1069 uint8_t *pBuf,
1070 uint16_t tlvlen,
1071 tDot11fTLVModelNumber *pDst)
1072{
1073 uint32_t status = DOT11F_PARSE_SUCCESS;
1074 pDst->present = 1;
1075 pDst->num_text = (uint8_t)(tlvlen);
1076 if (tlvlen > 32) {
1077 pDst->present = 0;
1078 return DOT11F_SKIPPED_BAD_IE;
1079 }
1080
1081 DOT11F_MEMCPY(pCtx, pDst->text, pBuf, (tlvlen));
1082 pBuf += (tlvlen);
1083 tlvlen -= (tlvlen);
1084 (void)pCtx;
1085 return status;
1086} /* End dot11f_unpack_tlv_model_number. */
1087
1088#define SigTlvModelNumber (0x000f)
1089
1090
1091uint32_t dot11f_unpack_tlv_notice_of_absence(tpAniSirGlobal pCtx,
1092 uint8_t *pBuf,
1093 uint16_t tlvlen,
1094 tDot11fTLVNoticeOfAbsence *pDst)
1095{
1096 uint32_t status = DOT11F_PARSE_SUCCESS;
1097 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001098 if (unlikely(tlvlen < 1)) {
1099 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001100 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001101 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001102
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001103 pDst->index = *pBuf;
1104 pBuf += 1;
1105 tlvlen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001106 if (unlikely(tlvlen < 1)) {
1107 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001108 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001109 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001110
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001111 pDst->CTSWindowOppPS = *pBuf;
1112 pBuf += 1;
1113 tlvlen -= (uint8_t)1;
1114 pDst->num_NoADesc = (uint8_t)(tlvlen);
1115 if (tlvlen > 36) {
1116 pDst->present = 0;
1117 return DOT11F_SKIPPED_BAD_IE;
1118 }
1119
1120 DOT11F_MEMCPY(pCtx, pDst->NoADesc, pBuf, (tlvlen));
1121 pBuf += (tlvlen);
1122 tlvlen -= (tlvlen);
1123 (void)pCtx;
1124 return status;
1125} /* End dot11f_unpack_tlv_notice_of_absence. */
1126
1127#define SigTlvNoticeOfAbsence (0x0010)
1128
1129
1130uint32_t dot11f_unpack_tlv_operating_channel(tpAniSirGlobal pCtx,
1131 uint8_t *pBuf,
1132 uint16_t tlvlen,
1133 tDot11fTLVOperatingChannel *pDst)
1134{
1135 uint32_t status = DOT11F_PARSE_SUCCESS;
1136 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001137 if (unlikely(tlvlen < 3)) {
1138 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001139 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001140 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001141
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001142 DOT11F_MEMCPY(pCtx, pDst->countryString, pBuf, 3);
1143 pBuf += 3;
1144 tlvlen -= (uint8_t)3;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001145 if (unlikely(tlvlen < 1)) {
1146 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001147 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001148 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001149
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001150 pDst->regulatoryClass = *pBuf;
1151 pBuf += 1;
1152 tlvlen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001153 if (unlikely(tlvlen < 1)) {
1154 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001155 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001156 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001157
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001158 pDst->channel = *pBuf;
1159 pBuf += 1;
1160 tlvlen -= (uint8_t)1;
1161 (void)pCtx;
1162 return status;
1163} /* End dot11f_unpack_tlv_operating_channel. */
1164
1165#define SigTlvOperatingChannel (0x0011)
1166
1167
1168uint32_t dot11f_unpack_tlv_p2_p_capability(tpAniSirGlobal pCtx,
1169 uint8_t *pBuf,
1170 uint16_t tlvlen,
1171 tDot11fTLVP2PCapability *pDst)
1172{
1173 uint32_t status = DOT11F_PARSE_SUCCESS;
1174 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001175 if (unlikely(tlvlen < 1)) {
1176 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001177 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001178 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001179
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001180 pDst->deviceCapability = *pBuf;
1181 pBuf += 1;
1182 tlvlen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001183 if (unlikely(tlvlen < 1)) {
1184 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001185 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001186 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001187
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001188 pDst->groupCapability = *pBuf;
1189 pBuf += 1;
1190 tlvlen -= (uint8_t)1;
1191 (void)pCtx;
1192 return status;
1193} /* End dot11f_unpack_tlv_p2_p_capability. */
1194
1195#define SigTlvP2PCapability (0x0012)
1196
1197
1198uint32_t dot11f_unpack_tlv_p2_p_device_id(tpAniSirGlobal pCtx,
1199 uint8_t *pBuf,
1200 uint16_t tlvlen,
1201 tDot11fTLVP2PDeviceId *pDst)
1202{
1203 uint32_t status = DOT11F_PARSE_SUCCESS;
1204 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001205 if (unlikely(tlvlen < 6)) {
1206 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001207 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001208 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001209
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001210 DOT11F_MEMCPY(pCtx, pDst->P2PDeviceAddress, pBuf, 6);
1211 pBuf += 6;
1212 tlvlen -= (uint8_t)6;
1213 (void)pCtx;
1214 return status;
1215} /* End dot11f_unpack_tlv_p2_p_device_id. */
1216
1217#define SigTlvP2PDeviceId (0x0013)
1218
1219
1220static const tTLVDefn TLVS_P2PDeviceInfo[] = {
1221 { offsetof(tDot11fTLVP2PDeviceInfo, DeviceName),
1222 offsetof(tDot11fTLVDeviceName, present), "DeviceName", SigTlvDeviceName,
1223 DOT11F_TLV_DEVICENAME, 0, 4, 36, 1, 2, 2, 1, },
1224 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
1225};
1226
1227uint32_t dot11f_unpack_tlv_p2_p_device_info(tpAniSirGlobal pCtx,
1228 uint8_t *pBuf,
1229 uint16_t tlvlen,
1230 tDot11fTLVP2PDeviceInfo *pDst)
1231{
1232 uint32_t status = DOT11F_PARSE_SUCCESS;
1233 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001234 if (unlikely(tlvlen < 6)) {
1235 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001236 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001237 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001238
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001239 DOT11F_MEMCPY(pCtx, pDst->P2PDeviceAddress, pBuf, 6);
1240 pBuf += 6;
1241 tlvlen -= (uint8_t)6;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001242 if (unlikely(tlvlen < 2)) {
1243 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001244 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001245 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001246
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001247 framesntohs(pCtx, &pDst->configMethod, pBuf, 0);
1248 pBuf += 2;
1249 tlvlen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001250 if (unlikely(tlvlen < 8)) {
1251 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001252 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001253 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001254
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001255 DOT11F_MEMCPY(pCtx, pDst->primaryDeviceType, pBuf, 8);
1256 pBuf += 8;
1257 tlvlen -= (uint8_t)8;
1258 (void)pCtx;
1259 status |= unpack_tlv_core(pCtx,
1260 pBuf,
1261 tlvlen,
1262 TLVS_P2PDeviceInfo,
1263 (uint8_t *)pDst,
1264 sizeof(*pDst));
1265 return status;
1266} /* End dot11f_unpack_tlv_p2_p_device_info. */
1267
1268#define SigTlvP2PDeviceInfo (0x0014)
1269
1270
1271uint32_t dot11f_unpack_tlv_p2_p_group_info(tpAniSirGlobal pCtx,
1272 uint8_t *pBuf,
1273 uint16_t tlvlen,
1274 tDot11fTLVP2PGroupInfo *pDst)
1275{
1276 uint32_t status = DOT11F_PARSE_SUCCESS;
1277 pDst->present = 1;
1278 pDst->num_P2PClientInfoDesc = (uint8_t)(tlvlen);
1279 DOT11F_MEMCPY(pCtx, pDst->P2PClientInfoDesc, pBuf, (tlvlen));
1280 pBuf += (tlvlen);
1281 tlvlen -= (tlvlen);
1282 (void)pCtx;
1283 return status;
1284} /* End dot11f_unpack_tlv_p2_p_group_info. */
1285
1286#define SigTlvP2PGroupInfo (0x0015)
1287
1288
1289#define SigTlvP2PStatus (0x0016)
1290
1291
1292uint32_t dot11f_unpack_tlv_primary_device_type(tpAniSirGlobal pCtx,
1293 uint8_t *pBuf,
1294 uint16_t tlvlen,
1295 tDot11fTLVPrimaryDeviceType *pDst)
1296{
1297 uint32_t status = DOT11F_PARSE_SUCCESS;
1298 (void)pBuf; (void)tlvlen; /* Shutup the compiler */
1299 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001300 if (unlikely(tlvlen < 2)) {
1301 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001302 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001303 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001304
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001305 framesntohs(pCtx, &pDst->primary_category, pBuf, 1);
1306 pBuf += 2;
1307 tlvlen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001308 if (unlikely(tlvlen < 4)) {
1309 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001310 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001311 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001312
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001313 DOT11F_MEMCPY(pCtx, pDst->oui, pBuf, 4);
1314 pBuf += 4;
1315 tlvlen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001316 if (unlikely(tlvlen < 2)) {
1317 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001318 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001319 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001320
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001321 framesntohs(pCtx, &pDst->sub_category, pBuf, 1);
1322 pBuf += 2;
1323 tlvlen -= (uint8_t)2;
1324 (void)pCtx;
1325 return status;
1326} /* End dot11f_unpack_tlv_primary_device_type. */
1327
1328#define SigTlvPrimaryDeviceType (0x0017)
1329
1330
1331#define SigTlvRFBands (0x0018)
1332
1333
1334uint32_t dot11f_unpack_tlv_request_device_type(tpAniSirGlobal pCtx,
1335 uint8_t *pBuf,
1336 uint16_t tlvlen,
1337 tDot11fTLVRequestDeviceType *pDst)
1338{
1339 uint32_t status = DOT11F_PARSE_SUCCESS;
1340 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001341 if (unlikely(tlvlen < 2)) {
1342 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001343 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001344 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001345
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001346 framesntohs(pCtx, &pDst->primary_category, pBuf, 1);
1347 pBuf += 2;
1348 tlvlen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001349 if (unlikely(tlvlen < 4)) {
1350 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001351 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001352 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001353
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001354 DOT11F_MEMCPY(pCtx, pDst->oui, pBuf, 4);
1355 pBuf += 4;
1356 tlvlen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001357 if (unlikely(tlvlen < 2)) {
1358 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001359 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001360 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001361
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001362 framesntohs(pCtx, &pDst->sub_category, pBuf, 1);
1363 pBuf += 2;
1364 tlvlen -= (uint8_t)2;
1365 (void)pCtx;
1366 return status;
1367} /* End dot11f_unpack_tlv_request_device_type. */
1368
1369#define SigTlvRequestDeviceType (0x0019)
1370
1371
1372#define SigTlvRequestType (0x001a)
1373
1374
1375#define SigTlvResponseType (0x001b)
1376
1377
1378#define SigTlvSelectedRegistrar (0x001c)
1379
1380
1381#define SigTlvSelectedRegistrarConfigMethods (0x001d)
1382
1383
1384uint32_t dot11f_unpack_tlv_serial_number(tpAniSirGlobal pCtx,
1385 uint8_t *pBuf,
1386 uint16_t tlvlen,
1387 tDot11fTLVSerialNumber *pDst)
1388{
1389 uint32_t status = DOT11F_PARSE_SUCCESS;
1390 pDst->present = 1;
1391 pDst->num_text = (uint8_t)(tlvlen);
1392 if (tlvlen > 32) {
1393 pDst->present = 0;
1394 return DOT11F_SKIPPED_BAD_IE;
1395 }
1396
1397 DOT11F_MEMCPY(pCtx, pDst->text, pBuf, (tlvlen));
1398 pBuf += (tlvlen);
1399 tlvlen -= (tlvlen);
1400 (void)pCtx;
1401 return status;
1402} /* End dot11f_unpack_tlv_serial_number. */
1403
1404#define SigTlvSerialNumber (0x001e)
1405
1406
1407uint32_t dot11f_unpack_tlv_uuid_e(tpAniSirGlobal pCtx,
1408 uint8_t *pBuf,
1409 uint16_t tlvlen,
1410 tDot11fTLVUUID_E *pDst)
1411{
1412 uint32_t status = DOT11F_PARSE_SUCCESS;
1413 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001414 if (unlikely(tlvlen < 16)) {
1415 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001416 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001417 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001418
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001419 DOT11F_MEMCPY(pCtx, pDst->uuid, pBuf, 16);
1420 pBuf += 16;
1421 tlvlen -= (uint8_t)16;
1422 (void)pCtx;
1423 return status;
1424} /* End dot11f_unpack_tlv_uuid_e. */
1425
1426#define SigTlvUUID_E (0x001f)
1427
1428
1429uint32_t dot11f_unpack_tlv_uuid_r(tpAniSirGlobal pCtx,
1430 uint8_t *pBuf,
1431 uint16_t tlvlen,
1432 tDot11fTLVUUID_R *pDst)
1433{
1434 uint32_t status = DOT11F_PARSE_SUCCESS;
1435 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001436 if (unlikely(tlvlen < 16)) {
1437 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001438 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001439 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001440
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001441 DOT11F_MEMCPY(pCtx, pDst->uuid, pBuf, 16);
1442 pBuf += 16;
1443 tlvlen -= (uint8_t)16;
1444 (void)pCtx;
1445 return status;
1446} /* End dot11f_unpack_tlv_uuid_r. */
1447
1448#define SigTlvUUID_R (0x0020)
1449
1450
1451static const tTLVDefn TLVS_VendorExtension[] = {
1452 { offsetof(tDot11fTLVVendorExtension, Version2),
1453 offsetof(tDot11fTLVVersion2, present), "Version2", SigTlvVersion2,
1454 DOT11F_TLV_VERSION2, 0, 3, 3, 0, 1, 1, 1, },
1455 { offsetof(tDot11fTLVVendorExtension, AuthorizedMACs),
1456 offsetof(tDot11fTLVAuthorizedMACs, present), "AuthorizedMACs",
1457 SigTlvAuthorizedMACs, DOT11F_TLV_AUTHORIZEDMACS, 0, 8, 8, 0, 1, 1, 1, },
1458 { offsetof(tDot11fTLVVendorExtension, RequestToEnroll),
1459 offsetof(tDot11fTLVRequestToEnroll, present), "RequestToEnroll",
1460 SigTlvRequestToEnroll, DOT11F_TLV_REQUESTTOENROLL,
1461 0, 3, 3, 0, 1, 1, 1, },
1462 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
1463};
1464
1465uint32_t dot11f_unpack_tlv_vendor_extension(tpAniSirGlobal pCtx,
1466 uint8_t *pBuf,
1467 uint16_t tlvlen,
1468 tDot11fTLVVendorExtension *pDst)
1469{
1470 uint32_t status = DOT11F_PARSE_SUCCESS;
1471 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001472 if (unlikely(tlvlen < 3)) {
1473 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001474 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001475 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001476
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001477 DOT11F_MEMCPY(pCtx, pDst->vendorId, pBuf, 3);
1478 pBuf += 3;
1479 tlvlen -= (uint8_t)3;
1480 (void)pCtx;
1481 status |= unpack_tlv_core(pCtx,
1482 pBuf,
1483 tlvlen,
1484 TLVS_VendorExtension,
1485 (uint8_t *)pDst,
1486 sizeof(*pDst));
1487 return status;
1488} /* End dot11f_unpack_tlv_vendor_extension. */
1489
1490#define SigTlvVendorExtension (0x0021)
1491
1492
1493uint32_t dot11f_unpack_tlv_version(tpAniSirGlobal pCtx,
1494 uint8_t *pBuf,
1495 uint16_t tlvlen,
1496 tDot11fTLVVersion *pDst)
1497{
1498 uint32_t status = DOT11F_PARSE_SUCCESS;
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -08001499 uint8_t tmp9__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001500 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001501 if (unlikely(tlvlen < 1)) {
1502 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001503 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001504 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001505
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -08001506 tmp9__ = *pBuf;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001507 pBuf += 1;
1508 tlvlen -= 1;
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -08001509 pDst->minor = tmp9__ >> 0 & 0xf;
1510 pDst->major = tmp9__ >> 4 & 0xf;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001511 (void)pCtx;
1512 return status;
1513} /* End dot11f_unpack_tlv_version. */
1514
1515#define SigTlvVersion (0x0022)
1516
1517
1518#define SigTlvWPSState (0x0023)
1519
1520
Abhishek Singh951eed82017-07-06 16:53:19 +05301521#define SigTlvassoc_disallowed (0x0024)
1522
1523
1524#define SigTlvassoc_retry_delay (0x0025)
1525
1526
1527#define SigTlvcellular_data_cap (0x0026)
1528
1529
1530#define SigTlvcellular_data_con_pref (0x0027)
1531
1532
1533#define SigTlvmbo_ap_cap (0x0028)
1534
1535
1536uint32_t dot11f_unpack_tlv_non_prefferd_chan_rep(tpAniSirGlobal pCtx,
1537 uint8_t *pBuf,
1538 uint16_t tlvlen,
1539 tDot11fTLVnon_prefferd_chan_rep *pDst)
1540{
1541 uint32_t status = DOT11F_PARSE_SUCCESS;
1542 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001543 if (unlikely(tlvlen < 1)) {
1544 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001545 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001546 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001547
Abhishek Singh951eed82017-07-06 16:53:19 +05301548 pDst->oper_class = *pBuf;
1549 pBuf += 1;
1550 tlvlen -= (uint8_t)1;
1551 pDst->num_channel_report = (uint8_t)(tlvlen);
1552 if (tlvlen > 254) {
1553 pDst->present = 0;
1554 return DOT11F_SKIPPED_BAD_IE;
1555 }
1556
1557 DOT11F_MEMCPY(pCtx, pDst->channel_report, pBuf, (tlvlen));
1558 pBuf += (tlvlen);
1559 tlvlen -= (tlvlen);
1560 (void)pCtx;
1561 return status;
1562} /* End dot11f_unpack_tlv_non_prefferd_chan_rep. */
1563
1564#define SigTlvnon_prefferd_chan_rep (0x0029)
1565
1566
1567uint32_t dot11f_unpack_tlv_oce_cap(tpAniSirGlobal pCtx,
1568 uint8_t *pBuf,
1569 uint16_t tlvlen,
1570 tDot11fTLVoce_cap *pDst)
1571{
1572 uint32_t status = DOT11F_PARSE_SUCCESS;
1573 uint8_t tmp10__;
1574 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001575 if (unlikely(tlvlen < 1)) {
1576 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001577 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001578 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001579
Abhishek Singh951eed82017-07-06 16:53:19 +05301580 tmp10__ = *pBuf;
1581 pBuf += 1;
1582 tlvlen -= 1;
1583 pDst->oce_release = tmp10__ >> 0 & 0x7;
1584 pDst->is_sta_cfon = tmp10__ >> 3 & 0x1;
1585 pDst->non_oce_ap_present = tmp10__ >> 4 & 0x1;
1586 pDst->reserved = tmp10__ >> 5 & 0x7;
1587 (void)pCtx;
1588 return status;
1589} /* End dot11f_unpack_tlv_oce_cap. */
1590
1591#define SigTlvoce_cap (0x002a)
1592
1593
1594uint32_t dot11f_unpack_tlv_reduced_wan_metrics(tpAniSirGlobal pCtx,
1595 uint8_t *pBuf,
1596 uint16_t tlvlen,
1597 tDot11fTLVreduced_wan_metrics *pDst)
1598{
1599 uint32_t status = DOT11F_PARSE_SUCCESS;
1600 uint8_t tmp11__;
1601 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001602 if (unlikely(tlvlen < 1)) {
1603 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001604 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001605 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001606
Abhishek Singh951eed82017-07-06 16:53:19 +05301607 tmp11__ = *pBuf;
1608 pBuf += 1;
1609 tlvlen -= 1;
1610 pDst->downlink_av_cap = tmp11__ >> 0 & 0xf;
1611 pDst->uplink_av_cap = tmp11__ >> 4 & 0xf;
1612 (void)pCtx;
1613 return status;
1614} /* End dot11f_unpack_tlv_reduced_wan_metrics. */
1615
1616#define SigTlvreduced_wan_metrics (0x002b)
1617
1618
1619uint32_t dot11f_unpack_tlv_rssi_assoc_rej(tpAniSirGlobal pCtx,
1620 uint8_t *pBuf,
1621 uint16_t tlvlen,
1622 tDot11fTLVrssi_assoc_rej *pDst)
1623{
1624 uint32_t status = DOT11F_PARSE_SUCCESS;
1625 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001626 if (unlikely(tlvlen < 1)) {
1627 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001628 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001629 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001630
Abhishek Singh951eed82017-07-06 16:53:19 +05301631 pDst->delta_rssi = *pBuf;
1632 pBuf += 1;
1633 tlvlen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001634 if (unlikely(tlvlen < 1)) {
1635 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001636 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001637 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001638
Abhishek Singh951eed82017-07-06 16:53:19 +05301639 pDst->retry_delay = *pBuf;
1640 pBuf += 1;
1641 tlvlen -= (uint8_t)1;
1642 (void)pCtx;
1643 return status;
1644} /* End dot11f_unpack_tlv_rssi_assoc_rej. */
1645
1646#define SigTlvrssi_assoc_rej (0x002c)
1647
1648
1649#define SigTlvtransition_reason (0x002d)
1650
1651
1652#define SigTlvtransition_reject_reason (0x002e)
1653
1654
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001655uint32_t dot11f_unpack_tlv_p2_p_interface(tpAniSirGlobal pCtx,
1656 uint8_t *pBuf,
1657 uint16_t tlvlen,
1658 tDot11fTLVP2PInterface *pDst)
1659{
1660 uint32_t status = DOT11F_PARSE_SUCCESS;
1661 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001662 if (unlikely(tlvlen < 6)) {
1663 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001664 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001665 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001666
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001667 DOT11F_MEMCPY(pCtx, pDst->P2PDeviceAddress, pBuf, 6);
1668 pBuf += 6;
1669 tlvlen -= (uint8_t)6;
1670 (void)pCtx;
1671 return status;
1672} /* End dot11f_unpack_tlv_p2_p_interface. */
1673
Abhishek Singh951eed82017-07-06 16:53:19 +05301674#define SigTlvP2PInterface (0x002f)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001675
1676
Abhishek Singh951eed82017-07-06 16:53:19 +05301677#define SigTlvP2PManageability (0x0030)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001678
1679
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001680uint32_t dot11f_unpack_ie_gtk(tpAniSirGlobal pCtx,
1681 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07001682 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05301683 tDot11fIEGTK *pDst,
1684 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001685{
1686 uint32_t status = DOT11F_PARSE_SUCCESS;
Abhishek Singh951eed82017-07-06 16:53:19 +05301687 uint16_t tmp12__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001688 (void) pBuf; (void)ielen; /* Shutup the compiler */
1689 if (pDst->present)
1690 status = DOT11F_DUPLICATE_IE;
1691 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001692 if (unlikely(ielen < 2)) {
1693 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001694 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001695 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001696
Abhishek Singh951eed82017-07-06 16:53:19 +05301697 framesntohs(pCtx, &tmp12__, pBuf, 0);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001698 pBuf += 2;
1699 ielen -= 2;
Abhishek Singh951eed82017-07-06 16:53:19 +05301700 pDst->keyId = tmp12__ >> 0 & 0x3;
1701 pDst->reserved = tmp12__ >> 2 & 0x3feb;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001702 if (unlikely(ielen < 1)) {
1703 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001704 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001705 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001706
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001707 pDst->keyLength = *pBuf;
1708 pBuf += 1;
1709 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001710 if (unlikely(ielen < 8)) {
1711 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001712 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001713 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001714
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001715 DOT11F_MEMCPY(pCtx, pDst->RSC, pBuf, 8);
1716 pBuf += 8;
1717 ielen -= (uint8_t)8;
1718 pDst->num_key = (uint8_t)(ielen);
1719 if (ielen > 32) {
1720 pDst->present = 0;
1721 return DOT11F_SKIPPED_BAD_IE;
1722 }
1723
1724 DOT11F_MEMCPY(pCtx, pDst->key, pBuf, (ielen));
1725 (void)pCtx;
1726 return status;
1727} /* End dot11f_unpack_ie_gtk. */
1728
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08001729#define SigIeGTK (0x0001)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001730
1731
1732uint32_t dot11f_unpack_ie_igtk(tpAniSirGlobal pCtx,
1733 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07001734 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05301735 tDot11fIEIGTK *pDst,
1736 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001737{
1738 uint32_t status = DOT11F_PARSE_SUCCESS;
1739 (void) pBuf; (void)ielen; /* Shutup the compiler */
1740 if (pDst->present)
1741 status = DOT11F_DUPLICATE_IE;
1742 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001743 if (unlikely(ielen < 2)) {
1744 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001745 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001746 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001747
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001748 DOT11F_MEMCPY(pCtx, pDst->keyID, pBuf, 2);
1749 pBuf += 2;
1750 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001751 if (unlikely(ielen < 6)) {
1752 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001753 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001754 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001755
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001756 DOT11F_MEMCPY(pCtx, pDst->IPN, pBuf, 6);
1757 pBuf += 6;
1758 ielen -= (uint8_t)6;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001759 if (unlikely(ielen < 1)) {
1760 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001761 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001762 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001763
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001764 pDst->keyLength = *pBuf;
1765 pBuf += 1;
1766 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001767 if (unlikely(ielen < 24)) {
1768 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001769 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001770 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001771
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001772 DOT11F_MEMCPY(pCtx, pDst->key, pBuf, 24);
1773 (void)pCtx;
1774 return status;
1775} /* End dot11f_unpack_ie_igtk. */
1776
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08001777#define SigIeIGTK (0x0002)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001778
1779
1780uint32_t dot11f_unpack_ie_r0_kh_id(tpAniSirGlobal pCtx,
1781 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07001782 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05301783 tDot11fIER0KH_ID *pDst,
1784 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001785{
1786 uint32_t status = DOT11F_PARSE_SUCCESS;
1787 (void) pBuf; (void)ielen; /* Shutup the compiler */
1788 if (pDst->present)
1789 status = DOT11F_DUPLICATE_IE;
1790 pDst->present = 1;
1791 pDst->num_PMK_R0_ID = (uint8_t)(ielen);
1792 if (ielen > 48) {
1793 pDst->present = 0;
1794 return DOT11F_SKIPPED_BAD_IE;
1795 }
1796
1797 DOT11F_MEMCPY(pCtx, pDst->PMK_R0_ID, pBuf, (ielen));
1798 (void)pCtx;
1799 return status;
1800} /* End dot11f_unpack_ie_r0_kh_id. */
1801
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08001802#define SigIeR0KH_ID (0x0003)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001803
1804
1805uint32_t dot11f_unpack_ie_r1_kh_id(tpAniSirGlobal pCtx,
1806 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07001807 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05301808 tDot11fIER1KH_ID *pDst,
1809 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001810{
1811 uint32_t status = DOT11F_PARSE_SUCCESS;
1812 (void) pBuf; (void)ielen; /* Shutup the compiler */
1813 if (pDst->present)
1814 status = DOT11F_DUPLICATE_IE;
1815 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001816 if (unlikely(ielen < 6)) {
1817 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001818 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001819 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001820
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001821 DOT11F_MEMCPY(pCtx, pDst->PMK_R1_ID, pBuf, 6);
1822 (void)pCtx;
1823 return status;
1824} /* End dot11f_unpack_ie_r1_kh_id. */
1825
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08001826#define SigIeR1KH_ID (0x0004)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001827
1828
1829uint32_t dot11f_unpack_ie_ap_channel_report(tpAniSirGlobal pCtx,
1830 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07001831 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05301832 tDot11fIEAPChannelReport *pDst,
1833 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001834{
1835 uint32_t status = DOT11F_PARSE_SUCCESS;
1836 (void) pBuf; (void)ielen; /* Shutup the compiler */
1837 if (pDst->present)
1838 status = DOT11F_DUPLICATE_IE;
1839 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001840 if (unlikely(ielen < 1)) {
1841 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001842 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001843 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001844
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001845 pDst->regulatoryClass = *pBuf;
1846 pBuf += 1;
1847 ielen -= (uint8_t)1;
1848 pDst->num_channelList = (uint8_t)(ielen);
1849 if (ielen > 50) {
1850 pDst->present = 0;
1851 return DOT11F_SKIPPED_BAD_IE;
1852 }
1853
1854 DOT11F_MEMCPY(pCtx, pDst->channelList, pBuf, (ielen));
1855 (void)pCtx;
1856 return status;
1857} /* End dot11f_unpack_ie_ap_channel_report. */
1858
Naveen Rawat819158d2018-01-16 10:56:45 -08001859#define SigIeAPChannelReport (0x0005)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001860
1861
1862uint32_t dot11f_unpack_ie_bcn_reporting_detail(tpAniSirGlobal pCtx,
1863 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07001864 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05301865 tDot11fIEBcnReportingDetail *pDst,
1866 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001867{
1868 uint32_t status = DOT11F_PARSE_SUCCESS;
1869 (void) pBuf; (void)ielen; /* Shutup the compiler */
1870 if (pDst->present)
1871 status = DOT11F_DUPLICATE_IE;
1872 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001873 if (unlikely(ielen < 1)) {
1874 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001875 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001876 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001877
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001878 pDst->reportingDetail = *pBuf;
1879 (void)pCtx;
1880 return status;
1881} /* End dot11f_unpack_ie_bcn_reporting_detail. */
1882
Naveen Rawat819158d2018-01-16 10:56:45 -08001883#define SigIeBcnReportingDetail (0x0006)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001884
1885
1886uint32_t dot11f_unpack_ie_beacon_report_frm_body(tpAniSirGlobal pCtx,
1887 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07001888 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05301889 tDot11fIEBeaconReportFrmBody *pDst,
1890 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001891{
1892 uint32_t status = DOT11F_PARSE_SUCCESS;
1893 (void) pBuf; (void)ielen; /* Shutup the compiler */
1894 if (pDst->present)
1895 status = DOT11F_DUPLICATE_IE;
1896 pDst->present = 1;
1897 pDst->num_reportedFields = (uint8_t)(ielen);
1898 if (ielen > 224) {
1899 pDst->present = 0;
1900 return DOT11F_SKIPPED_BAD_IE;
1901 }
1902
1903 DOT11F_MEMCPY(pCtx, pDst->reportedFields, pBuf, (ielen));
1904 (void)pCtx;
1905 return status;
1906} /* End dot11f_unpack_ie_beacon_report_frm_body. */
1907
Naveen Rawat819158d2018-01-16 10:56:45 -08001908#define SigIeBeaconReportFrmBody (0x0007)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001909
1910
1911uint32_t dot11f_unpack_ie_beacon_reporting(tpAniSirGlobal pCtx,
1912 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07001913 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05301914 tDot11fIEBeaconReporting *pDst,
1915 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001916{
1917 uint32_t status = DOT11F_PARSE_SUCCESS;
1918 (void) pBuf; (void)ielen; /* Shutup the compiler */
1919 if (pDst->present)
1920 status = DOT11F_DUPLICATE_IE;
1921 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001922 if (unlikely(ielen < 1)) {
1923 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001924 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001925 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001926
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001927 pDst->reportingCondition = *pBuf;
1928 pBuf += 1;
1929 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001930 if (unlikely(ielen < 1)) {
1931 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001932 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001933 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001934
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001935 pDst->threshold = *pBuf;
1936 (void)pCtx;
1937 return status;
1938} /* End dot11f_unpack_ie_beacon_reporting. */
1939
Naveen Rawat819158d2018-01-16 10:56:45 -08001940#define SigIeBeaconReporting (0x0008)
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08001941
1942
1943uint32_t dot11f_unpack_ie_condensed_country_str(tpAniSirGlobal pCtx,
1944 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07001945 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05301946 tDot11fIECondensedCountryStr *pDst,
1947 bool append_ie)
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08001948{
1949 uint32_t status = DOT11F_PARSE_SUCCESS;
1950 (void) pBuf; (void)ielen; /* Shutup the compiler */
1951 if (pDst->present)
1952 status = DOT11F_DUPLICATE_IE;
1953 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001954 if (unlikely(ielen < 2)) {
1955 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001956 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001957 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001958
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08001959 DOT11F_MEMCPY(pCtx, pDst->countryStr, pBuf, 2);
1960 (void)pCtx;
1961 return status;
1962} /* End dot11f_unpack_ie_condensed_country_str. */
1963
Naveen Rawat819158d2018-01-16 10:56:45 -08001964#define SigIeCondensedCountryStr (0x0009)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001965
1966
1967uint32_t dot11f_unpack_ie_measurement_pilot(tpAniSirGlobal pCtx,
1968 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07001969 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05301970 tDot11fIEMeasurementPilot *pDst,
1971 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001972{
1973 uint32_t status = DOT11F_PARSE_SUCCESS;
1974 (void) pBuf; (void)ielen; /* Shutup the compiler */
1975 if (pDst->present)
1976 status = DOT11F_DUPLICATE_IE;
1977 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001978 if (unlikely(ielen < 1)) {
1979 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07001980 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07001981 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07001982
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001983 pDst->measurementPilot = *pBuf;
1984 pBuf += 1;
1985 ielen -= (uint8_t)1;
1986 pDst->num_vendorSpecific = (uint8_t)(ielen);
1987 DOT11F_MEMCPY(pCtx, pDst->vendorSpecific, pBuf, (ielen));
1988 (void)pCtx;
1989 return status;
1990} /* End dot11f_unpack_ie_measurement_pilot. */
1991
Naveen Rawat819158d2018-01-16 10:56:45 -08001992#define SigIeMeasurementPilot (0x000a)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001993
1994
1995uint32_t dot11f_unpack_ie_multi_bssid(tpAniSirGlobal pCtx,
1996 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07001997 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05301998 tDot11fIEMultiBssid *pDst,
1999 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002000{
2001 uint32_t status = DOT11F_PARSE_SUCCESS;
2002 (void) pBuf; (void)ielen; /* Shutup the compiler */
2003 if (pDst->present)
2004 status = DOT11F_DUPLICATE_IE;
2005 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002006 if (unlikely(ielen < 1)) {
2007 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002008 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002009 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002010
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002011 pDst->maxBSSIDIndicator = *pBuf;
2012 pBuf += 1;
2013 ielen -= (uint8_t)1;
2014 pDst->num_vendorSpecific = (uint8_t)(ielen);
2015 DOT11F_MEMCPY(pCtx, pDst->vendorSpecific, pBuf, (ielen));
2016 (void)pCtx;
2017 return status;
2018} /* End dot11f_unpack_ie_multi_bssid. */
2019
Naveen Rawat819158d2018-01-16 10:56:45 -08002020#define SigIeMultiBssid (0x000b)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002021
2022
2023uint32_t dot11f_unpack_ie_ric_data(tpAniSirGlobal pCtx,
2024 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07002025 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05302026 tDot11fIERICData *pDst,
2027 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002028{
2029 uint32_t status = DOT11F_PARSE_SUCCESS;
2030 (void) pBuf; (void)ielen; /* Shutup the compiler */
2031 if (pDst->present)
2032 status = DOT11F_DUPLICATE_IE;
2033 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002034 if (unlikely(ielen < 1)) {
2035 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002036 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002037 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002038
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002039 pDst->Identifier = *pBuf;
2040 pBuf += 1;
2041 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002042 if (unlikely(ielen < 1)) {
2043 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002044 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002045 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002046
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002047 pDst->resourceDescCount = *pBuf;
2048 pBuf += 1;
2049 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002050 if (unlikely(ielen < 2)) {
2051 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002052 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002053 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002054
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002055 framesntohs(pCtx, &pDst->statusCode, pBuf, 0);
2056 (void)pCtx;
2057 return status;
2058} /* End dot11f_unpack_ie_ric_data. */
2059
Naveen Rawat819158d2018-01-16 10:56:45 -08002060#define SigIeRICData (0x000c)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002061
2062
2063uint32_t dot11f_unpack_ie_ric_descriptor(tpAniSirGlobal pCtx,
2064 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07002065 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05302066 tDot11fIERICDescriptor *pDst,
2067 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002068{
2069 uint32_t status = DOT11F_PARSE_SUCCESS;
2070 (void) pBuf; (void)ielen; /* Shutup the compiler */
2071 if (pDst->present)
2072 status = DOT11F_DUPLICATE_IE;
2073 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002074 if (unlikely(ielen < 1)) {
2075 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002076 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002077 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002078
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002079 pDst->resourceType = *pBuf;
2080 pBuf += 1;
2081 ielen -= (uint8_t)1;
2082 pDst->num_variableData = (uint8_t)(ielen);
2083 DOT11F_MEMCPY(pCtx, pDst->variableData, pBuf, (ielen));
2084 (void)pCtx;
2085 return status;
2086} /* End dot11f_unpack_ie_ric_descriptor. */
2087
Naveen Rawat819158d2018-01-16 10:56:45 -08002088#define SigIeRICDescriptor (0x000d)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002089
2090
2091uint32_t dot11f_unpack_ie_rrm_enabled_cap(tpAniSirGlobal pCtx,
2092 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07002093 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05302094 tDot11fIERRMEnabledCap *pDst,
2095 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002096{
2097 uint32_t status = DOT11F_PARSE_SUCCESS;
Naveen Rawat819158d2018-01-16 10:56:45 -08002098 uint8_t tmp13__;
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -08002099 uint8_t tmp14__;
2100 uint8_t tmp15__;
Krishna Kumaar Natarajan7ee45232016-08-29 17:13:47 -07002101 uint8_t tmp16__;
Abhishek Singh951eed82017-07-06 16:53:19 +05302102 uint8_t tmp17__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002103 (void) pBuf; (void)ielen; /* Shutup the compiler */
2104 if (pDst->present)
2105 status = DOT11F_DUPLICATE_IE;
2106 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002107 if (unlikely(ielen < 1)) {
2108 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002109 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002110 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002111
Naveen Rawat819158d2018-01-16 10:56:45 -08002112 tmp13__ = *pBuf;
2113 pBuf += 1;
2114 ielen -= 1;
2115 pDst->LinkMeasurement = tmp13__ >> 0 & 0x1;
2116 pDst->NeighborRpt = tmp13__ >> 1 & 0x1;
2117 pDst->parallel = tmp13__ >> 2 & 0x1;
2118 pDst->repeated = tmp13__ >> 3 & 0x1;
2119 pDst->BeaconPassive = tmp13__ >> 4 & 0x1;
2120 pDst->BeaconActive = tmp13__ >> 5 & 0x1;
2121 pDst->BeaconTable = tmp13__ >> 6 & 0x1;
2122 pDst->BeaconRepCond = tmp13__ >> 7 & 0x1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002123 if (unlikely(ielen < 1)) {
2124 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002125 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002126 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002127
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -08002128 tmp14__ = *pBuf;
2129 pBuf += 1;
2130 ielen -= 1;
Naveen Rawat819158d2018-01-16 10:56:45 -08002131 pDst->FrameMeasurement = tmp14__ >> 0 & 0x1;
2132 pDst->ChannelLoad = tmp14__ >> 1 & 0x1;
2133 pDst->NoiseHistogram = tmp14__ >> 2 & 0x1;
2134 pDst->statistics = tmp14__ >> 3 & 0x1;
2135 pDst->LCIMeasurement = tmp14__ >> 4 & 0x1;
2136 pDst->LCIAzimuth = tmp14__ >> 5 & 0x1;
2137 pDst->TCMCapability = tmp14__ >> 6 & 0x1;
2138 pDst->triggeredTCM = tmp14__ >> 7 & 0x1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002139 if (unlikely(ielen < 1)) {
2140 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002141 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002142 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002143
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -08002144 tmp15__ = *pBuf;
Krishna Kumaar Natarajan7ee45232016-08-29 17:13:47 -07002145 pBuf += 1;
2146 ielen -= 1;
Naveen Rawat819158d2018-01-16 10:56:45 -08002147 pDst->APChanReport = tmp15__ >> 0 & 0x1;
2148 pDst->RRMMIBEnabled = tmp15__ >> 1 & 0x1;
2149 pDst->operatingChanMax = tmp15__ >> 2 & 0x7;
2150 pDst->nonOperatinChanMax = tmp15__ >> 5 & 0x7;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002151 if (unlikely(ielen < 1)) {
2152 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002153 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002154 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002155
Krishna Kumaar Natarajan7ee45232016-08-29 17:13:47 -07002156 tmp16__ = *pBuf;
Abhishek Singh951eed82017-07-06 16:53:19 +05302157 pBuf += 1;
2158 ielen -= 1;
Naveen Rawat819158d2018-01-16 10:56:45 -08002159 pDst->MeasurementPilot = tmp16__ >> 0 & 0x7;
2160 pDst->MeasurementPilotEnabled = tmp16__ >> 3 & 0x1;
2161 pDst->NeighborTSFOffset = tmp16__ >> 4 & 0x1;
2162 pDst->RCPIMeasurement = tmp16__ >> 5 & 0x1;
2163 pDst->RSNIMeasurement = tmp16__ >> 6 & 0x1;
2164 pDst->BssAvgAccessDelay = tmp16__ >> 7 & 0x1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002165 if (unlikely(ielen < 1)) {
2166 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002167 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002168 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002169
Abhishek Singh951eed82017-07-06 16:53:19 +05302170 tmp17__ = *pBuf;
Naveen Rawat819158d2018-01-16 10:56:45 -08002171 pDst->BSSAvailAdmission = tmp17__ >> 0 & 0x1;
2172 pDst->AntennaInformation = tmp17__ >> 1 & 0x1;
2173 pDst->fine_time_meas_rpt = tmp17__ >> 2 & 0x1;
2174 pDst->lci_capability = tmp17__ >> 3 & 0x1;
2175 pDst->reserved = tmp17__ >> 4 & 0xf;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002176 (void)pCtx;
2177 return status;
2178} /* End dot11f_unpack_ie_rrm_enabled_cap. */
2179
Naveen Rawat819158d2018-01-16 10:56:45 -08002180#define SigIeRRMEnabledCap (0x000e)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002181
2182
2183uint32_t dot11f_unpack_ie_requested_info(tpAniSirGlobal pCtx,
2184 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07002185 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05302186 tDot11fIERequestedInfo *pDst,
2187 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002188{
2189 uint32_t status = DOT11F_PARSE_SUCCESS;
2190 (void) pBuf; (void)ielen; /* Shutup the compiler */
2191 if (pDst->present)
2192 status = DOT11F_DUPLICATE_IE;
2193 pDst->present = 1;
2194 pDst->num_requested_eids = (uint8_t)(ielen);
2195 DOT11F_MEMCPY(pCtx, pDst->requested_eids, pBuf, (ielen));
2196 (void)pCtx;
2197 return status;
2198} /* End dot11f_unpack_ie_requested_info. */
2199
Naveen Rawat819158d2018-01-16 10:56:45 -08002200#define SigIeRequestedInfo (0x000f)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002201
2202
2203uint32_t dot11f_unpack_ie_ssid(tpAniSirGlobal pCtx,
2204 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07002205 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05302206 tDot11fIESSID *pDst,
2207 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002208{
2209 uint32_t status = DOT11F_PARSE_SUCCESS;
2210 (void) pBuf; (void)ielen; /* Shutup the compiler */
2211 if (pDst->present) {
2212 status = DOT11F_DUPLICATE_IE;
2213 return status;
2214 }
2215 pDst->present = 1;
2216 pDst->num_ssid = (uint8_t)(ielen);
2217 if (ielen > 32) {
2218 pDst->present = 0;
2219 return DOT11F_SKIPPED_BAD_IE;
2220 }
2221
2222 DOT11F_MEMCPY(pCtx, pDst->ssid, pBuf, (ielen));
2223 (void)pCtx;
2224 return status;
2225} /* End dot11f_unpack_ie_ssid. */
2226
Naveen Rawat819158d2018-01-16 10:56:45 -08002227#define SigIeSSID (0x0010)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002228
2229
2230uint32_t dot11f_unpack_ie_schedule(tpAniSirGlobal pCtx,
2231 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07002232 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05302233 tDot11fIESchedule *pDst,
2234 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002235{
2236 uint32_t status = DOT11F_PARSE_SUCCESS;
Naveen Rawat819158d2018-01-16 10:56:45 -08002237 uint16_t tmp18__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002238 (void) pBuf; (void)ielen; /* Shutup the compiler */
2239 if (pDst->present)
2240 status = DOT11F_DUPLICATE_IE;
2241 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002242 if (unlikely(ielen < 2)) {
2243 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002244 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002245 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002246
Naveen Rawat819158d2018-01-16 10:56:45 -08002247 framesntohs(pCtx, &tmp18__, pBuf, 0);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002248 pBuf += 2;
2249 ielen -= 2;
Naveen Rawat819158d2018-01-16 10:56:45 -08002250 pDst->aggregation = tmp18__ >> 0 & 0x1;
2251 pDst->tsid = tmp18__ >> 1 & 0xf;
2252 pDst->direction = tmp18__ >> 5 & 0x3;
2253 pDst->reserved = tmp18__ >> 7 & 0x1ff;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002254 if (unlikely(ielen < 4)) {
2255 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002256 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002257 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002258
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002259 framesntohl(pCtx, &pDst->service_start_time, pBuf, 0);
2260 pBuf += 4;
2261 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002262 if (unlikely(ielen < 4)) {
2263 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002264 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002265 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002266
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002267 framesntohl(pCtx, &pDst->service_interval, pBuf, 0);
2268 pBuf += 4;
2269 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002270 if (unlikely(ielen < 2)) {
2271 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002272 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002273 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002274
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002275 framesntohs(pCtx, &pDst->max_service_dur, pBuf, 0);
2276 pBuf += 2;
2277 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002278 if (unlikely(ielen < 2)) {
2279 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002280 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002281 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002282
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002283 framesntohs(pCtx, &pDst->spec_interval, pBuf, 0);
2284 (void)pCtx;
2285 return status;
2286} /* End dot11f_unpack_ie_schedule. */
2287
Naveen Rawat819158d2018-01-16 10:56:45 -08002288#define SigIeSchedule (0x0011)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002289
2290
2291uint32_t dot11f_unpack_ie_tclas(tpAniSirGlobal pCtx,
2292 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07002293 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05302294 tDot11fIETCLAS *pDst,
2295 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002296{
2297 uint32_t status = DOT11F_PARSE_SUCCESS;
2298 (void) pBuf; (void)ielen; /* Shutup the compiler */
2299 if (pDst->present)
2300 status = DOT11F_DUPLICATE_IE;
2301 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002302 if (unlikely(ielen < 1)) {
2303 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002304 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002305 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002306
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002307 pDst->user_priority = *pBuf;
2308 pBuf += 1;
2309 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002310 if (unlikely(ielen < 1)) {
2311 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002312 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002313 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002314
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002315 pDst->classifier_type = *pBuf;
2316 pBuf += 1;
2317 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002318 if (unlikely(ielen < 1)) {
2319 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002320 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002321 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002322
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002323 pDst->classifier_mask = *pBuf;
2324 pBuf += 1;
2325 ielen -= (uint8_t)1;
2326 switch (pDst->classifier_type) {
2327 case 0:
Naveen Rawat89e85d42018-05-23 11:54:27 -07002328 if (unlikely(ielen < 6)) {
2329 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002330 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002331 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002332
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002333 DOT11F_MEMCPY(pCtx, pDst->info.EthParams.source, pBuf, 6);
2334 pBuf += 6;
2335 ielen -= (uint8_t)6;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002336 if (unlikely(ielen < 6)) {
2337 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002338 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002339 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002340
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002341 DOT11F_MEMCPY(pCtx, pDst->info.EthParams.dest, pBuf, 6);
2342 pBuf += 6;
2343 ielen -= (uint8_t)6;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002344 if (unlikely(ielen < 2)) {
2345 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002346 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002347 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002348
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002349 framesntohs(pCtx, &pDst->info.EthParams.type, pBuf, 0);
2350 pBuf += 2;
2351 ielen -= (uint8_t)2;
2352 break;
2353 case 1:
Naveen Rawat89e85d42018-05-23 11:54:27 -07002354 if (unlikely(ielen < 1)) {
2355 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002356 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002357 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002358
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002359 pDst->info.IpParams.version = *pBuf;
2360 pBuf += 1;
2361 ielen -= (uint8_t)1;
2362 switch (pDst->info.IpParams.version) {
2363 case 4:
Naveen Rawat89e85d42018-05-23 11:54:27 -07002364 if (unlikely(ielen < 4)) {
2365 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002366 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002367 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002368
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002369 DOT11F_MEMCPY(pCtx, pDst->info.IpParams.params.IpV4Params.source, pBuf, 4);
2370 pBuf += 4;
2371 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002372 if (unlikely(ielen < 4)) {
2373 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002374 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002375 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002376
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002377 DOT11F_MEMCPY(pCtx, pDst->info.IpParams.params.IpV4Params.dest, pBuf, 4);
2378 pBuf += 4;
2379 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002380 if (unlikely(ielen < 2)) {
2381 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002382 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002383 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002384
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002385 framesntohs(pCtx, &pDst->info.IpParams.params.IpV4Params.src_port, pBuf, 0);
2386 pBuf += 2;
2387 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002388 if (unlikely(ielen < 2)) {
2389 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002390 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002391 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002392
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002393 framesntohs(pCtx, &pDst->info.IpParams.params.IpV4Params.dest_port, pBuf, 0);
2394 pBuf += 2;
2395 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002396 if (unlikely(ielen < 1)) {
2397 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002398 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002399 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002400
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002401 pDst->info.IpParams.params.IpV4Params.DSCP = *pBuf;
2402 pBuf += 1;
2403 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002404 if (unlikely(ielen < 1)) {
2405 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002406 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002407 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002408
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002409 pDst->info.IpParams.params.IpV4Params.proto = *pBuf;
2410 pBuf += 1;
2411 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002412 if (unlikely(ielen < 1)) {
2413 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002414 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002415 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002416
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002417 pDst->info.IpParams.params.IpV4Params.reserved = *pBuf;
2418 pBuf += 1;
2419 ielen -= (uint8_t)1;
2420 break;
2421 case 6:
Naveen Rawat89e85d42018-05-23 11:54:27 -07002422 if (unlikely(ielen < 16)) {
2423 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002424 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002425 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002426
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002427 DOT11F_MEMCPY(pCtx, pDst->info.IpParams.params.IpV6Params.source, pBuf, 16);
2428 pBuf += 16;
2429 ielen -= (uint8_t)16;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002430 if (unlikely(ielen < 16)) {
2431 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002432 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002433 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002434
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002435 DOT11F_MEMCPY(pCtx, pDst->info.IpParams.params.IpV6Params.dest, pBuf, 16);
2436 pBuf += 16;
2437 ielen -= (uint8_t)16;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002438 if (unlikely(ielen < 2)) {
2439 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002440 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002441 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002442
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002443 framesntohs(pCtx, &pDst->info.IpParams.params.IpV6Params.src_port, pBuf, 0);
2444 pBuf += 2;
2445 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002446 if (unlikely(ielen < 2)) {
2447 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002448 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002449 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002450
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002451 framesntohs(pCtx, &pDst->info.IpParams.params.IpV6Params.dest_port, pBuf, 0);
2452 pBuf += 2;
2453 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002454 if (unlikely(ielen < 3)) {
2455 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002456 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002457 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002458
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002459 DOT11F_MEMCPY(pCtx, pDst->info.IpParams.params.IpV6Params.flow_label, pBuf, 3);
2460 pBuf += 3;
2461 ielen -= (uint8_t)3;
2462 break;
2463 }
2464 break;
2465 case 2:
Naveen Rawat89e85d42018-05-23 11:54:27 -07002466 if (unlikely(ielen < 2)) {
2467 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002468 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002469 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002470
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002471 framesntohs(pCtx, &pDst->info.Params8021dq.tag_type, pBuf, 0);
2472 pBuf += 2;
2473 ielen -= (uint8_t)2;
2474 break;
2475 }
2476 (void)pCtx;
2477 return status;
2478} /* End dot11f_unpack_ie_tclas. */
2479
Naveen Rawat819158d2018-01-16 10:56:45 -08002480#define SigIeTCLAS (0x0012)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002481
2482
Naveen Rawat819158d2018-01-16 10:56:45 -08002483#define SigIeTCLASSPROC (0x0013)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002484
2485
2486uint32_t dot11f_unpack_ie_ts_delay(tpAniSirGlobal pCtx,
2487 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07002488 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05302489 tDot11fIETSDelay *pDst,
2490 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002491{
2492 uint32_t status = DOT11F_PARSE_SUCCESS;
2493 (void) pBuf; (void)ielen; /* Shutup the compiler */
2494 if (pDst->present)
2495 status = DOT11F_DUPLICATE_IE;
2496 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002497 if (unlikely(ielen < 4)) {
2498 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002499 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002500 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002501
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002502 framesntohl(pCtx, &pDst->delay, pBuf, 0);
2503 (void)pCtx;
2504 return status;
2505} /* End dot11f_unpack_ie_ts_delay. */
2506
Naveen Rawat819158d2018-01-16 10:56:45 -08002507#define SigIeTSDelay (0x0014)
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08002508
2509
2510uint32_t dot11f_unpack_ie_tsf_info(tpAniSirGlobal pCtx,
2511 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07002512 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05302513 tDot11fIETSFInfo *pDst,
2514 bool append_ie)
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08002515{
2516 uint32_t status = DOT11F_PARSE_SUCCESS;
2517 (void) pBuf; (void)ielen; /* Shutup the compiler */
2518 if (pDst->present)
2519 status = DOT11F_DUPLICATE_IE;
2520 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002521 if (unlikely(ielen < 2)) {
2522 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002523 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002524 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002525
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08002526 framesntohs(pCtx, &pDst->TsfOffset, pBuf, 0);
2527 pBuf += 2;
2528 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002529 if (unlikely(ielen < 2)) {
2530 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002531 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002532 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002533
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08002534 framesntohs(pCtx, &pDst->BeaconIntvl, pBuf, 0);
2535 (void)pCtx;
2536 return status;
2537} /* End dot11f_unpack_ie_tsf_info. */
2538
Naveen Rawat819158d2018-01-16 10:56:45 -08002539#define SigIeTSFInfo (0x0015)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002540
2541
2542uint32_t dot11f_unpack_ie_tspec(tpAniSirGlobal pCtx,
2543 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07002544 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05302545 tDot11fIETSPEC *pDst,
2546 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002547{
2548 uint32_t status = DOT11F_PARSE_SUCCESS;
Naveen Rawat819158d2018-01-16 10:56:45 -08002549 uint16_t tmp19__;
2550 uint8_t tmp20__;
2551 uint16_t tmp21__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002552 (void) pBuf; (void)ielen; /* Shutup the compiler */
2553 if (pDst->present)
2554 status = DOT11F_DUPLICATE_IE;
2555 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002556 if (unlikely(ielen < 2)) {
2557 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002558 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002559 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002560
Naveen Rawat819158d2018-01-16 10:56:45 -08002561 framesntohs(pCtx, &tmp19__, pBuf, 0);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002562 pBuf += 2;
2563 ielen -= 2;
Naveen Rawat819158d2018-01-16 10:56:45 -08002564 pDst->traffic_type = tmp19__ >> 0 & 0x1;
2565 pDst->tsid = tmp19__ >> 1 & 0xf;
2566 pDst->direction = tmp19__ >> 5 & 0x3;
2567 pDst->access_policy = tmp19__ >> 7 & 0x3;
2568 pDst->aggregation = tmp19__ >> 9 & 0x1;
2569 pDst->psb = tmp19__ >> 10 & 0x1;
2570 pDst->user_priority = tmp19__ >> 11 & 0x7;
2571 pDst->tsinfo_ack_pol = tmp19__ >> 14 & 0x3;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002572 if (unlikely(ielen < 1)) {
2573 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002574 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002575 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002576
Naveen Rawat819158d2018-01-16 10:56:45 -08002577 tmp20__ = *pBuf;
Abhishek Singh951eed82017-07-06 16:53:19 +05302578 pBuf += 1;
2579 ielen -= 1;
Naveen Rawat819158d2018-01-16 10:56:45 -08002580 pDst->schedule = tmp20__ >> 0 & 0x1;
2581 pDst->unused = tmp20__ >> 1 & 0x7f;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002582 if (unlikely(ielen < 2)) {
2583 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002584 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002585 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002586
Naveen Rawat819158d2018-01-16 10:56:45 -08002587 framesntohs(pCtx, &tmp21__, pBuf, 0);
Abhishek Singh951eed82017-07-06 16:53:19 +05302588 pBuf += 2;
2589 ielen -= 2;
Naveen Rawat819158d2018-01-16 10:56:45 -08002590 pDst->size = tmp21__ >> 0 & 0x7fff;
2591 pDst->fixed = tmp21__ >> 15 & 0x1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002592 if (unlikely(ielen < 2)) {
2593 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002594 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002595 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002596
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002597 framesntohs(pCtx, &pDst->max_msdu_size, pBuf, 0);
2598 pBuf += 2;
2599 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002600 if (unlikely(ielen < 4)) {
2601 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002602 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002603 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002604
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002605 framesntohl(pCtx, &pDst->min_service_int, pBuf, 0);
2606 pBuf += 4;
2607 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002608 if (unlikely(ielen < 4)) {
2609 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002610 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002611 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002612
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002613 framesntohl(pCtx, &pDst->max_service_int, pBuf, 0);
2614 pBuf += 4;
2615 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002616 if (unlikely(ielen < 4)) {
2617 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002618 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002619 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002620
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002621 framesntohl(pCtx, &pDst->inactivity_int, pBuf, 0);
2622 pBuf += 4;
2623 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002624 if (unlikely(ielen < 4)) {
2625 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002626 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002627 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002628
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002629 framesntohl(pCtx, &pDst->suspension_int, pBuf, 0);
2630 pBuf += 4;
2631 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002632 if (unlikely(ielen < 4)) {
2633 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002634 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002635 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002636
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002637 framesntohl(pCtx, &pDst->service_start_time, pBuf, 0);
2638 pBuf += 4;
2639 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002640 if (unlikely(ielen < 4)) {
2641 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002642 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002643 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002644
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002645 framesntohl(pCtx, &pDst->min_data_rate, pBuf, 0);
2646 pBuf += 4;
2647 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002648 if (unlikely(ielen < 4)) {
2649 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002650 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002651 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002652
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002653 framesntohl(pCtx, &pDst->mean_data_rate, pBuf, 0);
2654 pBuf += 4;
2655 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002656 if (unlikely(ielen < 4)) {
2657 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002658 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002659 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002660
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002661 framesntohl(pCtx, &pDst->peak_data_rate, pBuf, 0);
2662 pBuf += 4;
2663 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002664 if (unlikely(ielen < 4)) {
2665 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002666 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002667 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002668
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002669 framesntohl(pCtx, &pDst->burst_size, pBuf, 0);
2670 pBuf += 4;
2671 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002672 if (unlikely(ielen < 4)) {
2673 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002674 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002675 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002676
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002677 framesntohl(pCtx, &pDst->delay_bound, pBuf, 0);
2678 pBuf += 4;
2679 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002680 if (unlikely(ielen < 4)) {
2681 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002682 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002683 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002684
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002685 framesntohl(pCtx, &pDst->min_phy_rate, pBuf, 0);
2686 pBuf += 4;
2687 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002688 if (unlikely(ielen < 2)) {
2689 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002690 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002691 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002692
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002693 framesntohs(pCtx, &pDst->surplus_bw_allowance, pBuf, 0);
2694 pBuf += 2;
2695 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002696 if (unlikely(ielen < 2)) {
2697 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002698 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002699 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002700
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002701 framesntohs(pCtx, &pDst->medium_time, pBuf, 0);
2702 (void)pCtx;
2703 return status;
2704} /* End dot11f_unpack_ie_tspec. */
2705
Naveen Rawat819158d2018-01-16 10:56:45 -08002706#define SigIeTSPEC (0x0016)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002707
2708
2709uint32_t dot11f_unpack_ie_vht_caps(tpAniSirGlobal pCtx,
2710 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07002711 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05302712 tDot11fIEVHTCaps *pDst,
2713 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002714{
2715 uint32_t status = DOT11F_PARSE_SUCCESS;
Naveen Rawat819158d2018-01-16 10:56:45 -08002716 uint32_t tmp22__;
2717 uint16_t tmp23__;
Abhishek Singh951eed82017-07-06 16:53:19 +05302718 uint16_t tmp24__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002719 (void) pBuf; (void)ielen; /* Shutup the compiler */
2720 if (pDst->present)
2721 status = DOT11F_DUPLICATE_IE;
2722 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002723 if (unlikely(ielen < 4)) {
2724 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002725 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002726 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002727
Naveen Rawat819158d2018-01-16 10:56:45 -08002728 framesntohl(pCtx, &tmp22__, pBuf, 0);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002729 pBuf += 4;
2730 ielen -= 4;
Naveen Rawat819158d2018-01-16 10:56:45 -08002731 pDst->maxMPDULen = tmp22__ >> 0 & 0x3;
2732 pDst->supportedChannelWidthSet = tmp22__ >> 2 & 0x3;
2733 pDst->ldpcCodingCap = tmp22__ >> 4 & 0x1;
2734 pDst->shortGI80MHz = tmp22__ >> 5 & 0x1;
2735 pDst->shortGI160and80plus80MHz = tmp22__ >> 6 & 0x1;
2736 pDst->txSTBC = tmp22__ >> 7 & 0x1;
2737 pDst->rxSTBC = tmp22__ >> 8 & 0x7;
2738 pDst->suBeamFormerCap = tmp22__ >> 11 & 0x1;
2739 pDst->suBeamformeeCap = tmp22__ >> 12 & 0x1;
2740 pDst->csnofBeamformerAntSup = tmp22__ >> 13 & 0x7;
2741 pDst->numSoundingDim = tmp22__ >> 16 & 0x7;
2742 pDst->muBeamformerCap = tmp22__ >> 19 & 0x1;
2743 pDst->muBeamformeeCap = tmp22__ >> 20 & 0x1;
2744 pDst->vhtTXOPPS = tmp22__ >> 21 & 0x1;
2745 pDst->htcVHTCap = tmp22__ >> 22 & 0x1;
2746 pDst->maxAMPDULenExp = tmp22__ >> 23 & 0x7;
2747 pDst->vhtLinkAdaptCap = tmp22__ >> 26 & 0x3;
2748 pDst->rxAntPattern = tmp22__ >> 28 & 0x1;
2749 pDst->txAntPattern = tmp22__ >> 29 & 0x1;
2750 pDst->reserved1 = tmp22__ >> 30 & 0x3;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002751 if (unlikely(ielen < 2)) {
2752 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002753 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002754 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002755
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002756 framesntohs(pCtx, &pDst->rxMCSMap, pBuf, 0);
2757 pBuf += 2;
2758 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002759 if (unlikely(ielen < 2)) {
2760 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002761 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002762 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002763
Naveen Rawat819158d2018-01-16 10:56:45 -08002764 framesntohs(pCtx, &tmp23__, pBuf, 0);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002765 pBuf += 2;
2766 ielen -= 2;
Naveen Rawat819158d2018-01-16 10:56:45 -08002767 pDst->rxHighSupDataRate = tmp23__ >> 0 & 0x1fff;
2768 pDst->reserved2 = tmp23__ >> 13 & 0x7;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002769 if (unlikely(ielen < 2)) {
2770 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002771 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002772 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002773
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002774 framesntohs(pCtx, &pDst->txMCSMap, pBuf, 0);
2775 pBuf += 2;
2776 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002777 if (unlikely(ielen < 2)) {
2778 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002779 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002780 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002781
Naveen Rawat819158d2018-01-16 10:56:45 -08002782 framesntohs(pCtx, &tmp24__, pBuf, 0);
2783 pDst->txSupDataRate = tmp24__ >> 0 & 0x1fff;
2784 pDst->reserved3 = tmp24__ >> 13 & 0x7;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002785 (void)pCtx;
2786 return status;
2787} /* End dot11f_unpack_ie_vht_caps. */
2788
Naveen Rawat819158d2018-01-16 10:56:45 -08002789#define SigIeVHTCaps (0x0017)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002790
2791
2792uint32_t dot11f_unpack_ie_vht_operation(tpAniSirGlobal pCtx,
2793 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07002794 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05302795 tDot11fIEVHTOperation *pDst,
2796 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002797{
2798 uint32_t status = DOT11F_PARSE_SUCCESS;
2799 (void) pBuf; (void)ielen; /* Shutup the compiler */
2800 if (pDst->present)
2801 status = DOT11F_DUPLICATE_IE;
2802 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002803 if (unlikely(ielen < 1)) {
2804 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002805 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002806 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002807
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002808 pDst->chanWidth = *pBuf;
2809 pBuf += 1;
2810 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002811 if (unlikely(ielen < 1)) {
2812 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002813 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002814 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002815
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002816 pDst->chanCenterFreqSeg1 = *pBuf;
2817 pBuf += 1;
2818 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002819 if (unlikely(ielen < 1)) {
2820 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002821 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002822 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002823
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002824 pDst->chanCenterFreqSeg2 = *pBuf;
2825 pBuf += 1;
2826 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002827 if (unlikely(ielen < 2)) {
2828 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002829 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002830 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002831
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002832 framesntohs(pCtx, &pDst->basicMCSSet, pBuf, 0);
2833 (void)pCtx;
2834 return status;
2835} /* End dot11f_unpack_ie_vht_operation. */
2836
Naveen Rawat819158d2018-01-16 10:56:45 -08002837#define SigIeVHTOperation (0x0018)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002838
2839
2840uint32_t dot11f_unpack_ie_wmm_schedule(tpAniSirGlobal pCtx,
2841 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07002842 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05302843 tDot11fIEWMMSchedule *pDst,
2844 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002845{
2846 uint32_t status = DOT11F_PARSE_SUCCESS;
Naveen Rawat819158d2018-01-16 10:56:45 -08002847 uint16_t tmp25__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002848 (void) pBuf; (void)ielen; /* Shutup the compiler */
2849 if (pDst->present)
2850 status = DOT11F_DUPLICATE_IE;
2851 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002852 if (unlikely(ielen < 1)) {
2853 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002854 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002855 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002856
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002857 pDst->version = *pBuf;
2858 pBuf += 1;
2859 ielen -= (uint8_t)1;
2860 if (pDst->version != 0x1) {
2861 pDst->present = 0;
2862 return status | DOT11F_BAD_FIXED_VALUE;
2863 }
Naveen Rawat89e85d42018-05-23 11:54:27 -07002864 if (unlikely(ielen < 2)) {
2865 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002866 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002867 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002868
Naveen Rawat819158d2018-01-16 10:56:45 -08002869 framesntohs(pCtx, &tmp25__, pBuf, 0);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002870 pBuf += 2;
2871 ielen -= 2;
Naveen Rawat819158d2018-01-16 10:56:45 -08002872 pDst->aggregation = tmp25__ >> 0 & 0x1;
2873 pDst->tsid = tmp25__ >> 1 & 0xf;
2874 pDst->direction = tmp25__ >> 5 & 0x3;
2875 pDst->reserved = tmp25__ >> 7 & 0x1ff;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002876 if (unlikely(ielen < 4)) {
2877 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002878 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002879 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002880
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002881 framesntohl(pCtx, &pDst->service_start_time, pBuf, 0);
2882 pBuf += 4;
2883 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002884 if (unlikely(ielen < 4)) {
2885 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002886 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002887 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002888
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002889 framesntohl(pCtx, &pDst->service_interval, pBuf, 0);
2890 pBuf += 4;
2891 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002892 if (unlikely(ielen < 2)) {
2893 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002894 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002895 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002896
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002897 framesntohs(pCtx, &pDst->max_service_dur, pBuf, 0);
2898 pBuf += 2;
2899 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002900 if (unlikely(ielen < 2)) {
2901 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002902 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002903 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002904
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002905 framesntohs(pCtx, &pDst->spec_interval, pBuf, 0);
2906 (void)pCtx;
2907 return status;
2908} /* End dot11f_unpack_ie_wmm_schedule. */
2909
Naveen Rawat819158d2018-01-16 10:56:45 -08002910#define SigIeWMMSchedule (0x0019)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002911
2912
2913uint32_t dot11f_unpack_ie_wmmtclas(tpAniSirGlobal pCtx,
2914 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07002915 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05302916 tDot11fIEWMMTCLAS *pDst,
2917 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002918{
2919 uint32_t status = DOT11F_PARSE_SUCCESS;
2920 (void) pBuf; (void)ielen; /* Shutup the compiler */
2921 if (pDst->present)
2922 status = DOT11F_DUPLICATE_IE;
2923 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002924 if (unlikely(ielen < 1)) {
2925 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002926 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002927 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002928
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002929 pDst->version = *pBuf;
2930 pBuf += 1;
2931 ielen -= (uint8_t)1;
2932 if (pDst->version != 0x1) {
2933 pDst->present = 0;
2934 return status | DOT11F_BAD_FIXED_VALUE;
2935 }
Naveen Rawat89e85d42018-05-23 11:54:27 -07002936 if (unlikely(ielen < 1)) {
2937 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002938 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002939 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002940
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002941 pDst->user_priority = *pBuf;
2942 pBuf += 1;
2943 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002944 if (unlikely(ielen < 1)) {
2945 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002946 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002947 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002948
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002949 pDst->classifier_type = *pBuf;
2950 pBuf += 1;
2951 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002952 if (unlikely(ielen < 1)) {
2953 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002954 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002955 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002956
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002957 pDst->classifier_mask = *pBuf;
2958 pBuf += 1;
2959 ielen -= (uint8_t)1;
2960 switch (pDst->classifier_type) {
2961 case 0:
Naveen Rawat89e85d42018-05-23 11:54:27 -07002962 if (unlikely(ielen < 6)) {
2963 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002964 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002965 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002966
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002967 DOT11F_MEMCPY(pCtx, pDst->info.EthParams.source, pBuf, 6);
2968 pBuf += 6;
2969 ielen -= (uint8_t)6;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002970 if (unlikely(ielen < 6)) {
2971 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002972 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002973 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002974
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002975 DOT11F_MEMCPY(pCtx, pDst->info.EthParams.dest, pBuf, 6);
2976 pBuf += 6;
2977 ielen -= (uint8_t)6;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002978 if (unlikely(ielen < 2)) {
2979 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002980 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002981 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002982
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002983 framesntohs(pCtx, &pDst->info.EthParams.type, pBuf, 0);
2984 pBuf += 2;
2985 ielen -= (uint8_t)2;
2986 break;
2987 case 1:
Naveen Rawat89e85d42018-05-23 11:54:27 -07002988 if (unlikely(ielen < 1)) {
2989 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07002990 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07002991 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07002992
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08002993 pDst->info.IpParams.version = *pBuf;
2994 pBuf += 1;
2995 ielen -= (uint8_t)1;
2996 switch (pDst->info.IpParams.version) {
2997 case 4:
Naveen Rawat89e85d42018-05-23 11:54:27 -07002998 if (unlikely(ielen < 4)) {
2999 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003000 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003001 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003002
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003003 DOT11F_MEMCPY(pCtx, pDst->info.IpParams.params.IpV4Params.source, pBuf, 4);
3004 pBuf += 4;
3005 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003006 if (unlikely(ielen < 4)) {
3007 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003008 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003009 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003010
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003011 DOT11F_MEMCPY(pCtx, pDst->info.IpParams.params.IpV4Params.dest, pBuf, 4);
3012 pBuf += 4;
3013 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003014 if (unlikely(ielen < 2)) {
3015 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003016 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003017 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003018
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003019 framesntohs(pCtx, &pDst->info.IpParams.params.IpV4Params.src_port, pBuf, 0);
3020 pBuf += 2;
3021 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003022 if (unlikely(ielen < 2)) {
3023 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003024 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003025 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003026
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003027 framesntohs(pCtx, &pDst->info.IpParams.params.IpV4Params.dest_port, pBuf, 0);
3028 pBuf += 2;
3029 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003030 if (unlikely(ielen < 1)) {
3031 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003032 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003033 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003034
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003035 pDst->info.IpParams.params.IpV4Params.DSCP = *pBuf;
3036 pBuf += 1;
3037 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003038 if (unlikely(ielen < 1)) {
3039 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003040 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003041 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003042
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003043 pDst->info.IpParams.params.IpV4Params.proto = *pBuf;
3044 pBuf += 1;
3045 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003046 if (unlikely(ielen < 1)) {
3047 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003048 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003049 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003050
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003051 pDst->info.IpParams.params.IpV4Params.reserved = *pBuf;
3052 pBuf += 1;
3053 ielen -= (uint8_t)1;
3054 break;
3055 case 6:
Naveen Rawat89e85d42018-05-23 11:54:27 -07003056 if (unlikely(ielen < 16)) {
3057 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003058 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003059 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003060
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003061 DOT11F_MEMCPY(pCtx, pDst->info.IpParams.params.IpV6Params.source, pBuf, 16);
3062 pBuf += 16;
3063 ielen -= (uint8_t)16;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003064 if (unlikely(ielen < 16)) {
3065 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003066 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003067 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003068
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003069 DOT11F_MEMCPY(pCtx, pDst->info.IpParams.params.IpV6Params.dest, pBuf, 16);
3070 pBuf += 16;
3071 ielen -= (uint8_t)16;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003072 if (unlikely(ielen < 2)) {
3073 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003074 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003075 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003076
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003077 framesntohs(pCtx, &pDst->info.IpParams.params.IpV6Params.src_port, pBuf, 0);
3078 pBuf += 2;
3079 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003080 if (unlikely(ielen < 2)) {
3081 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003082 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003083 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003084
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003085 framesntohs(pCtx, &pDst->info.IpParams.params.IpV6Params.dest_port, pBuf, 0);
3086 pBuf += 2;
3087 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003088 if (unlikely(ielen < 3)) {
3089 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003090 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003091 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003092
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003093 DOT11F_MEMCPY(pCtx, pDst->info.IpParams.params.IpV6Params.flow_label, pBuf, 3);
3094 pBuf += 3;
3095 ielen -= (uint8_t)3;
3096 break;
3097 }
3098 break;
3099 case 2:
Naveen Rawat89e85d42018-05-23 11:54:27 -07003100 if (unlikely(ielen < 2)) {
3101 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003102 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003103 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003104
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003105 framesntohs(pCtx, &pDst->info.Params8021dq.tag_type, pBuf, 0);
3106 pBuf += 2;
3107 ielen -= (uint8_t)2;
3108 break;
3109 }
3110 (void)pCtx;
3111 return status;
3112} /* End dot11f_unpack_ie_wmmtclas. */
3113
Naveen Rawat819158d2018-01-16 10:56:45 -08003114#define SigIeWMMTCLAS (0x001a)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003115
3116
3117uint32_t dot11f_unpack_ie_wmmtclasproc(tpAniSirGlobal pCtx,
3118 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07003119 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05303120 tDot11fIEWMMTCLASPROC *pDst,
3121 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003122{
3123 uint32_t status = DOT11F_PARSE_SUCCESS;
3124 (void) pBuf; (void)ielen; /* Shutup the compiler */
3125 if (pDst->present)
3126 status = DOT11F_DUPLICATE_IE;
3127 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003128 if (unlikely(ielen < 1)) {
3129 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003130 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003131 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003132
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003133 pDst->version = *pBuf;
3134 pBuf += 1;
3135 ielen -= (uint8_t)1;
3136 if (pDst->version != 0x1) {
3137 pDst->present = 0;
3138 return status | DOT11F_BAD_FIXED_VALUE;
3139 }
Naveen Rawat89e85d42018-05-23 11:54:27 -07003140 if (unlikely(ielen < 1)) {
3141 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003142 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003143 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003144
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003145 pDst->processing = *pBuf;
3146 (void)pCtx;
3147 return status;
3148} /* End dot11f_unpack_ie_wmmtclasproc. */
3149
Naveen Rawat819158d2018-01-16 10:56:45 -08003150#define SigIeWMMTCLASPROC (0x001b)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003151
3152
3153uint32_t dot11f_unpack_ie_wmmts_delay(tpAniSirGlobal pCtx,
3154 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07003155 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05303156 tDot11fIEWMMTSDelay *pDst,
3157 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003158{
3159 uint32_t status = DOT11F_PARSE_SUCCESS;
3160 (void) pBuf; (void)ielen; /* Shutup the compiler */
3161 if (pDst->present)
3162 status = DOT11F_DUPLICATE_IE;
3163 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003164 if (unlikely(ielen < 1)) {
3165 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003166 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003167 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003168
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003169 pDst->version = *pBuf;
3170 pBuf += 1;
3171 ielen -= (uint8_t)1;
3172 if (pDst->version != 0x1) {
3173 pDst->present = 0;
3174 return status | DOT11F_BAD_FIXED_VALUE;
3175 }
Naveen Rawat89e85d42018-05-23 11:54:27 -07003176 if (unlikely(ielen < 4)) {
3177 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003178 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003179 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003180
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003181 framesntohl(pCtx, &pDst->delay, pBuf, 0);
3182 (void)pCtx;
3183 return status;
3184} /* End dot11f_unpack_ie_wmmts_delay. */
3185
Naveen Rawat819158d2018-01-16 10:56:45 -08003186#define SigIeWMMTSDelay (0x001c)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003187
3188
3189uint32_t dot11f_unpack_ie_wmmtspec(tpAniSirGlobal pCtx,
3190 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07003191 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05303192 tDot11fIEWMMTSPEC *pDst,
3193 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003194{
3195 uint32_t status = DOT11F_PARSE_SUCCESS;
Naveen Rawat819158d2018-01-16 10:56:45 -08003196 uint16_t tmp26__;
3197 uint8_t tmp27__;
3198 uint16_t tmp28__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003199 (void) pBuf; (void)ielen; /* Shutup the compiler */
3200 if (pDst->present)
3201 status = DOT11F_DUPLICATE_IE;
3202 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003203 if (unlikely(ielen < 1)) {
3204 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003205 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003206 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003207
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003208 pDst->version = *pBuf;
3209 pBuf += 1;
3210 ielen -= (uint8_t)1;
3211 if (pDst->version != 0x1) {
3212 pDst->present = 0;
3213 return status | DOT11F_BAD_FIXED_VALUE;
3214 }
Naveen Rawat89e85d42018-05-23 11:54:27 -07003215 if (unlikely(ielen < 2)) {
3216 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003217 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003218 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003219
Naveen Rawat819158d2018-01-16 10:56:45 -08003220 framesntohs(pCtx, &tmp26__, pBuf, 0);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003221 pBuf += 2;
3222 ielen -= 2;
Naveen Rawat819158d2018-01-16 10:56:45 -08003223 pDst->traffic_type = tmp26__ >> 0 & 0x1;
3224 pDst->tsid = tmp26__ >> 1 & 0xf;
3225 pDst->direction = tmp26__ >> 5 & 0x3;
3226 pDst->access_policy = tmp26__ >> 7 & 0x3;
3227 pDst->aggregation = tmp26__ >> 9 & 0x1;
3228 pDst->psb = tmp26__ >> 10 & 0x1;
3229 pDst->user_priority = tmp26__ >> 11 & 0x7;
3230 pDst->tsinfo_ack_pol = tmp26__ >> 14 & 0x3;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003231 if (unlikely(ielen < 1)) {
3232 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003233 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003234 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003235
Naveen Rawat819158d2018-01-16 10:56:45 -08003236 tmp27__ = *pBuf;
Abhishek Singh951eed82017-07-06 16:53:19 +05303237 pBuf += 1;
3238 ielen -= 1;
Naveen Rawat819158d2018-01-16 10:56:45 -08003239 pDst->tsinfo_rsvd = tmp27__ >> 0 & 0x7f;
3240 pDst->burst_size_defn = tmp27__ >> 7 & 0x1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003241 if (unlikely(ielen < 2)) {
3242 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003243 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003244 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003245
Naveen Rawat819158d2018-01-16 10:56:45 -08003246 framesntohs(pCtx, &tmp28__, pBuf, 0);
Abhishek Singh951eed82017-07-06 16:53:19 +05303247 pBuf += 2;
3248 ielen -= 2;
Naveen Rawat819158d2018-01-16 10:56:45 -08003249 pDst->size = tmp28__ >> 0 & 0x7fff;
3250 pDst->fixed = tmp28__ >> 15 & 0x1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003251 if (unlikely(ielen < 2)) {
3252 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003253 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003254 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003255
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003256 framesntohs(pCtx, &pDst->max_msdu_size, pBuf, 0);
3257 pBuf += 2;
3258 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003259 if (unlikely(ielen < 4)) {
3260 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003261 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003262 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003263
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003264 framesntohl(pCtx, &pDst->min_service_int, pBuf, 0);
3265 pBuf += 4;
3266 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003267 if (unlikely(ielen < 4)) {
3268 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003269 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003270 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003271
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003272 framesntohl(pCtx, &pDst->max_service_int, pBuf, 0);
3273 pBuf += 4;
3274 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003275 if (unlikely(ielen < 4)) {
3276 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003277 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003278 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003279
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003280 framesntohl(pCtx, &pDst->inactivity_int, pBuf, 0);
3281 pBuf += 4;
3282 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003283 if (unlikely(ielen < 4)) {
3284 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003285 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003286 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003287
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003288 framesntohl(pCtx, &pDst->suspension_int, pBuf, 0);
3289 pBuf += 4;
3290 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003291 if (unlikely(ielen < 4)) {
3292 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003293 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003294 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003295
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003296 framesntohl(pCtx, &pDst->service_start_time, pBuf, 0);
3297 pBuf += 4;
3298 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003299 if (unlikely(ielen < 4)) {
3300 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003301 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003302 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003303
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003304 framesntohl(pCtx, &pDst->min_data_rate, pBuf, 0);
3305 pBuf += 4;
3306 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003307 if (unlikely(ielen < 4)) {
3308 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003309 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003310 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003311
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003312 framesntohl(pCtx, &pDst->mean_data_rate, pBuf, 0);
3313 pBuf += 4;
3314 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003315 if (unlikely(ielen < 4)) {
3316 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003317 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003318 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003319
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003320 framesntohl(pCtx, &pDst->peak_data_rate, pBuf, 0);
3321 pBuf += 4;
3322 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003323 if (unlikely(ielen < 4)) {
3324 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003325 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003326 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003327
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003328 framesntohl(pCtx, &pDst->burst_size, pBuf, 0);
3329 pBuf += 4;
3330 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003331 if (unlikely(ielen < 4)) {
3332 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003333 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003334 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003335
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003336 framesntohl(pCtx, &pDst->delay_bound, pBuf, 0);
3337 pBuf += 4;
3338 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003339 if (unlikely(ielen < 4)) {
3340 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003341 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003342 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003343
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003344 framesntohl(pCtx, &pDst->min_phy_rate, pBuf, 0);
3345 pBuf += 4;
3346 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003347 if (unlikely(ielen < 2)) {
3348 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003349 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003350 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003351
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003352 framesntohs(pCtx, &pDst->surplus_bw_allowance, pBuf, 0);
3353 pBuf += 2;
3354 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003355 if (unlikely(ielen < 2)) {
3356 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003357 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003358 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003359
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003360 framesntohs(pCtx, &pDst->medium_time, pBuf, 0);
3361 (void)pCtx;
3362 return status;
3363} /* End dot11f_unpack_ie_wmmtspec. */
3364
Naveen Rawat819158d2018-01-16 10:56:45 -08003365#define SigIeWMMTSPEC (0x001d)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003366
3367
3368uint32_t dot11f_unpack_ie_wider_bw_chan_switch_ann(tpAniSirGlobal pCtx,
3369 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07003370 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05303371 tDot11fIEWiderBWChanSwitchAnn *pDst,
3372 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003373{
3374 uint32_t status = DOT11F_PARSE_SUCCESS;
3375 (void) pBuf; (void)ielen; /* Shutup the compiler */
3376 if (pDst->present)
3377 status = DOT11F_DUPLICATE_IE;
3378 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003379 if (unlikely(ielen < 1)) {
3380 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003381 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003382 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003383
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003384 pDst->newChanWidth = *pBuf;
3385 pBuf += 1;
3386 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003387 if (unlikely(ielen < 1)) {
3388 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003389 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003390 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003391
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003392 pDst->newCenterChanFreq0 = *pBuf;
3393 pBuf += 1;
3394 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003395 if (unlikely(ielen < 1)) {
3396 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003397 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003398 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003399
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003400 pDst->newCenterChanFreq1 = *pBuf;
3401 (void)pCtx;
3402 return status;
3403} /* End dot11f_unpack_ie_wider_bw_chan_switch_ann. */
3404
Naveen Rawat819158d2018-01-16 10:56:45 -08003405#define SigIeWiderBWChanSwitchAnn (0x001e)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003406
3407
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003408uint32_t dot11f_unpack_ie_azimuth_req(tpAniSirGlobal pCtx,
3409 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07003410 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05303411 tDot11fIEazimuth_req *pDst,
3412 bool append_ie)
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003413{
3414 uint32_t status = DOT11F_PARSE_SUCCESS;
3415 (void) pBuf; (void)ielen; /* Shutup the compiler */
3416 if (pDst->present)
3417 status = DOT11F_DUPLICATE_IE;
3418 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003419 if (unlikely(ielen < 1)) {
3420 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003421 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003422 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003423
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003424 pDst->request = *pBuf;
3425 (void)pCtx;
3426 return status;
3427} /* End dot11f_unpack_ie_azimuth_req. */
3428
Naveen Rawat819158d2018-01-16 10:56:45 -08003429#define SigIeazimuth_req (0x001f)
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003430
3431
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05303432uint32_t dot11f_unpack_ie_beacon_report_frm_body_fragment_id(tpAniSirGlobal pCtx,
3433 uint8_t *pBuf,
3434 uint8_t ielen,
3435 tDot11fIEbeacon_report_frm_body_fragment_id *pDst,
3436 bool append_ie)
3437{
3438 uint32_t status = DOT11F_PARSE_SUCCESS;
3439 uint16_t tmp29__;
3440 (void) pBuf; (void)ielen; /* Shutup the compiler */
3441 if (pDst->present)
3442 status = DOT11F_DUPLICATE_IE;
3443 pDst->present = 1;
3444 if (unlikely(ielen < 2)) {
3445 pDst->present = 0;
3446 return DOT11F_INCOMPLETE_IE;
3447 }
3448
3449 framesntohs(pCtx, &tmp29__, pBuf, 0);
3450 pDst->beacon_report_id = tmp29__ >> 0 & 0xff;
3451 pDst->fragment_id_number = tmp29__ >> 8 & 0x7f;
3452 pDst->more_fragments = tmp29__ >> 15 & 0x1;
3453 (void)pCtx;
3454 return status;
3455} /* End dot11f_unpack_ie_beacon_report_frm_body_fragment_id. */
3456
3457#define SigIebeacon_report_frm_body_fragment_id (0x0020)
3458
3459
3460uint32_t dot11f_unpack_ie_last_beacon_report_indication(tpAniSirGlobal pCtx,
3461 uint8_t *pBuf,
3462 uint8_t ielen,
3463 tDot11fIElast_beacon_report_indication *pDst,
3464 bool append_ie)
3465{
3466 uint32_t status = DOT11F_PARSE_SUCCESS;
3467 (void) pBuf; (void)ielen; /* Shutup the compiler */
3468 if (pDst->present)
3469 status = DOT11F_DUPLICATE_IE;
3470 pDst->present = 1;
3471 if (unlikely(ielen < 1)) {
3472 pDst->present = 0;
3473 return DOT11F_INCOMPLETE_IE;
3474 }
3475
3476 pDst->last_fragment = *pBuf;
3477 (void)pCtx;
3478 return status;
3479} /* End dot11f_unpack_ie_last_beacon_report_indication. */
3480
3481#define SigIelast_beacon_report_indication (0x0021)
3482
3483
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003484uint32_t dot11f_unpack_ie_max_age(tpAniSirGlobal pCtx,
3485 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07003486 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05303487 tDot11fIEmax_age *pDst,
3488 bool append_ie)
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003489{
3490 uint32_t status = DOT11F_PARSE_SUCCESS;
3491 (void) pBuf; (void)ielen; /* Shutup the compiler */
3492 if (pDst->present)
3493 status = DOT11F_DUPLICATE_IE;
3494 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003495 if (unlikely(ielen < 2)) {
3496 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003497 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003498 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003499
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003500 framesntohs(pCtx, &pDst->max_age, pBuf, 0);
3501 (void)pCtx;
3502 return status;
3503} /* End dot11f_unpack_ie_max_age. */
3504
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05303505#define SigIemax_age (0x0022)
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003506
3507
3508static const tFFDefn FFS_neighbor_rpt[] = {
3509 { NULL, 0, 0, 0,},
3510};
3511
3512static const tIEDefn IES_neighbor_rpt[] = {
3513 { offsetof(tDot11fIEneighbor_rpt, TSFInfo), offsetof(tDot11fIETSFInfo,
3514 present), 0, "TSFInfo", 0, 6, 6, SigIeTSFInfo, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05303515 0, DOT11F_EID_TSFINFO, 0, 0, },
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003516 { offsetof(tDot11fIEneighbor_rpt, CondensedCountryStr),
3517 offsetof(tDot11fIECondensedCountryStr, present), 0, "CondensedCountryStr",
3518 0, 4, 4, SigIeCondensedCountryStr, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05303519 0, DOT11F_EID_CONDENSEDCOUNTRYSTR, 0, 0, },
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003520 { offsetof(tDot11fIEneighbor_rpt, MeasurementPilot),
3521 offsetof(tDot11fIEMeasurementPilot, present), 0, "MeasurementPilot",
3522 0, 3, 258, SigIeMeasurementPilot, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05303523 0, DOT11F_EID_MEASUREMENTPILOT, 0, 0, },
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003524 { offsetof(tDot11fIEneighbor_rpt, RRMEnabledCap),
3525 offsetof(tDot11fIERRMEnabledCap, present), 0, "RRMEnabledCap",
3526 0, 7, 7, SigIeRRMEnabledCap, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05303527 0, DOT11F_EID_RRMENABLEDCAP, 0, 0, },
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003528 { offsetof(tDot11fIEneighbor_rpt, MultiBssid),
3529 offsetof(tDot11fIEMultiBssid, present), 0, "MultiBssid",
3530 0, 3, 258, SigIeMultiBssid, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05303531 0, DOT11F_EID_MULTIBSSID, 0, 0, },
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003532 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },
3533};
3534
3535uint32_t dot11f_unpack_ie_neighbor_rpt(tpAniSirGlobal pCtx,
3536 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07003537 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05303538 tDot11fIEneighbor_rpt *pDst,
3539 bool append_ie)
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003540{
3541 uint32_t status = DOT11F_PARSE_SUCCESS;
Abhishek Singh951eed82017-07-06 16:53:19 +05303542 uint8_t tmp30__;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05303543 uint8_t tmp31__;
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003544 (void) pBuf; (void)ielen; /* Shutup the compiler */
3545 if (pDst->present)
3546 status = DOT11F_DUPLICATE_IE;
3547 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003548 if (unlikely(ielen < 6)) {
3549 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003550 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003551 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003552
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003553 DOT11F_MEMCPY(pCtx, pDst->bssid, pBuf, 6);
3554 pBuf += 6;
3555 ielen -= (uint8_t)6;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003556 if (unlikely(ielen < 1)) {
3557 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003558 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003559 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003560
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05303561 tmp30__ = *pBuf;
Naveen Rawat819158d2018-01-16 10:56:45 -08003562 pBuf += 1;
3563 ielen -= 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05303564 pDst->APReachability = tmp30__ >> 0 & 0x3;
3565 pDst->Security = tmp30__ >> 2 & 0x1;
3566 pDst->KeyScope = tmp30__ >> 3 & 0x1;
3567 pDst->SpecMgmtCap = tmp30__ >> 4 & 0x1;
3568 pDst->QosCap = tmp30__ >> 5 & 0x1;
3569 pDst->apsd = tmp30__ >> 6 & 0x1;
3570 pDst->rrm = tmp30__ >> 7 & 0x1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003571 if (unlikely(ielen < 1)) {
3572 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003573 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003574 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003575
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05303576 tmp31__ = *pBuf;
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003577 pBuf += 1;
3578 ielen -= 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05303579 pDst->DelayedBA = tmp31__ >> 0 & 0x1;
3580 pDst->ImmBA = tmp31__ >> 1 & 0x1;
3581 pDst->MobilityDomain = tmp31__ >> 2 & 0x1;
3582 pDst->reserved = tmp31__ >> 3 & 0x1f;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003583 if (unlikely(ielen < 2)) {
3584 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003585 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003586 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003587
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003588 framesntohs(pCtx, &pDst->reserved1, pBuf, 0);
3589 pBuf += 2;
3590 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003591 if (unlikely(ielen < 1)) {
3592 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003593 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003594 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003595
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003596 pDst->regulatoryClass = *pBuf;
3597 pBuf += 1;
3598 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003599 if (unlikely(ielen < 1)) {
3600 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003601 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003602 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003603
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003604 pDst->channel = *pBuf;
3605 pBuf += 1;
3606 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003607 if (unlikely(ielen < 1)) {
3608 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003609 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003610 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003611
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003612 pDst->PhyType = *pBuf;
3613 pBuf += 1;
3614 ielen -= (uint8_t)1;
3615 (void)pCtx;
3616 status |= unpack_core(pCtx,
3617 pBuf,
3618 ielen,
3619 FFS_neighbor_rpt,
3620 IES_neighbor_rpt,
3621 (uint8_t *)pDst,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05303622 sizeof(*pDst),
3623 append_ie);
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003624 return status;
3625} /* End dot11f_unpack_ie_neighbor_rpt. */
3626
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05303627#define SigIeneighbor_rpt (0x0023)
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003628
3629
3630uint32_t dot11f_unpack_ie_req_mac_addr(tpAniSirGlobal pCtx,
3631 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07003632 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05303633 tDot11fIEreq_mac_addr *pDst,
3634 bool append_ie)
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003635{
3636 uint32_t status = DOT11F_PARSE_SUCCESS;
3637 (void) pBuf; (void)ielen; /* Shutup the compiler */
3638 if (pDst->present)
3639 status = DOT11F_DUPLICATE_IE;
3640 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003641 if (unlikely(ielen < 6)) {
3642 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003643 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003644 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003645
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003646 DOT11F_MEMCPY(pCtx, pDst->addr, pBuf, 6);
3647 (void)pCtx;
3648 return status;
3649} /* End dot11f_unpack_ie_req_mac_addr. */
3650
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05303651#define SigIereq_mac_addr (0x0024)
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003652
3653
3654uint32_t dot11f_unpack_ie_tgt_mac_addr(tpAniSirGlobal pCtx,
3655 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07003656 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05303657 tDot11fIEtgt_mac_addr *pDst,
3658 bool append_ie)
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003659{
3660 uint32_t status = DOT11F_PARSE_SUCCESS;
3661 (void) pBuf; (void)ielen; /* Shutup the compiler */
3662 if (pDst->present)
3663 status = DOT11F_DUPLICATE_IE;
3664 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003665 if (unlikely(ielen < 6)) {
3666 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003667 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003668 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003669
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003670 DOT11F_MEMCPY(pCtx, pDst->addr, pBuf, 6);
3671 (void)pCtx;
3672 return status;
3673} /* End dot11f_unpack_ie_tgt_mac_addr. */
3674
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05303675#define SigIetgt_mac_addr (0x0025)
Krishna Kumaar Natarajan7ee45232016-08-29 17:13:47 -07003676
3677
Abhishek Singh37456d22016-08-29 16:05:11 +05303678uint32_t dot11f_unpack_ie_vht_transmit_power_env(tpAniSirGlobal pCtx,
3679 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07003680 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05303681 tDot11fIEvht_transmit_power_env *pDst,
3682 bool append_ie)
Abhishek Singh37456d22016-08-29 16:05:11 +05303683{
3684 uint32_t status = DOT11F_PARSE_SUCCESS;
3685 (void) pBuf; (void)ielen; /* Shutup the compiler */
3686 if (pDst->present)
3687 status = DOT11F_DUPLICATE_IE;
3688 pDst->present = 1;
3689 pDst->num_bytes = (uint8_t)(ielen);
3690 if (ielen > 5) {
3691 pDst->present = 0;
3692 return DOT11F_SKIPPED_BAD_IE;
3693 }
3694
3695 DOT11F_MEMCPY(pCtx, pDst->bytes, pBuf, (ielen));
3696 (void)pCtx;
3697 return status;
3698} /* End dot11f_unpack_ie_vht_transmit_power_env. */
3699
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05303700#define SigIevht_transmit_power_env (0x0026)
Abhishek Singh37456d22016-08-29 16:05:11 +05303701
3702
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003703uint32_t dot11f_unpack_ie_aid(tpAniSirGlobal pCtx,
3704 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07003705 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05303706 tDot11fIEAID *pDst,
3707 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003708{
3709 uint32_t status = DOT11F_PARSE_SUCCESS;
3710 (void) pBuf; (void)ielen; /* Shutup the compiler */
3711 if (pDst->present)
3712 status = DOT11F_DUPLICATE_IE;
3713 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003714 if (unlikely(ielen < 2)) {
3715 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003716 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003717 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003718
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003719 framesntohs(pCtx, &pDst->assocId, pBuf, 0);
3720 (void)pCtx;
3721 return status;
3722} /* End dot11f_unpack_ie_aid. */
3723
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05303724#define SigIeAID (0x0027)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003725
3726
3727uint32_t dot11f_unpack_ie_cf_params(tpAniSirGlobal pCtx,
3728 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07003729 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05303730 tDot11fIECFParams *pDst,
3731 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003732{
3733 uint32_t status = DOT11F_PARSE_SUCCESS;
3734 (void) pBuf; (void)ielen; /* Shutup the compiler */
3735 if (pDst->present)
3736 status = DOT11F_DUPLICATE_IE;
3737 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003738 if (unlikely(ielen < 1)) {
3739 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003740 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003741 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003742
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003743 pDst->cfp_count = *pBuf;
3744 pBuf += 1;
3745 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003746 if (unlikely(ielen < 1)) {
3747 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003748 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003749 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003750
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003751 pDst->cfp_period = *pBuf;
3752 pBuf += 1;
3753 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003754 if (unlikely(ielen < 2)) {
3755 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003756 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003757 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003758
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003759 framesntohs(pCtx, &pDst->cfp_maxduration, pBuf, 0);
3760 pBuf += 2;
3761 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003762 if (unlikely(ielen < 2)) {
3763 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003764 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003765 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003766
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003767 framesntohs(pCtx, &pDst->cfp_durremaining, pBuf, 0);
3768 (void)pCtx;
3769 return status;
3770} /* End dot11f_unpack_ie_cf_params. */
3771
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05303772#define SigIeCFParams (0x0028)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003773
3774
3775uint32_t dot11f_unpack_ie_challenge_text(tpAniSirGlobal pCtx,
3776 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07003777 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05303778 tDot11fIEChallengeText *pDst,
3779 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003780{
3781 uint32_t status = DOT11F_PARSE_SUCCESS;
3782 (void) pBuf; (void)ielen; /* Shutup the compiler */
3783 if (pDst->present)
3784 status = DOT11F_DUPLICATE_IE;
3785 pDst->present = 1;
3786 pDst->num_text = (uint8_t)(ielen);
3787 if (ielen > 253) {
3788 pDst->present = 0;
3789 return DOT11F_SKIPPED_BAD_IE;
3790 }
3791
3792 DOT11F_MEMCPY(pCtx, pDst->text, pBuf, (ielen));
3793 (void)pCtx;
3794 return status;
3795} /* End dot11f_unpack_ie_challenge_text. */
3796
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05303797#define SigIeChallengeText (0x0029)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003798
3799
3800uint32_t dot11f_unpack_ie_chan_switch_ann(tpAniSirGlobal pCtx,
3801 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07003802 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05303803 tDot11fIEChanSwitchAnn *pDst,
3804 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003805{
3806 uint32_t status = DOT11F_PARSE_SUCCESS;
3807 (void) pBuf; (void)ielen; /* Shutup the compiler */
3808 if (pDst->present)
3809 status = DOT11F_DUPLICATE_IE;
3810 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003811 if (unlikely(ielen < 1)) {
3812 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003813 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003814 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003815
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003816 pDst->switchMode = *pBuf;
3817 pBuf += 1;
3818 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003819 if (unlikely(ielen < 1)) {
3820 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003821 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003822 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003823
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003824 pDst->newChannel = *pBuf;
3825 pBuf += 1;
3826 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003827 if (unlikely(ielen < 1)) {
3828 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003829 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003830 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003831
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003832 pDst->switchCount = *pBuf;
3833 (void)pCtx;
3834 return status;
3835} /* End dot11f_unpack_ie_chan_switch_ann. */
3836
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05303837#define SigIeChanSwitchAnn (0x002a)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003838
3839
3840static const tFFDefn FFS_ChannelSwitchWrapper[] = {
3841 { NULL, 0, 0, 0,},
3842};
3843
3844static const tIEDefn IES_ChannelSwitchWrapper[] = {
3845 { offsetof(tDot11fIEChannelSwitchWrapper, WiderBWChanSwitchAnn),
3846 offsetof(tDot11fIEWiderBWChanSwitchAnn, present), 0,
3847 "WiderBWChanSwitchAnn", 0, 5, 5, SigIeWiderBWChanSwitchAnn,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05303848 {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, 0, },
Abhishek Singh37456d22016-08-29 16:05:11 +05303849 { offsetof(tDot11fIEChannelSwitchWrapper, vht_transmit_power_env),
3850 offsetof(tDot11fIEvht_transmit_power_env, present), 0,
3851 "vht_transmit_power_env", 0, 4, 7, SigIevht_transmit_power_env,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05303852 {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHT_TRANSMIT_POWER_ENV, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003853 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },
3854};
3855
3856uint32_t dot11f_unpack_ie_channel_switch_wrapper(tpAniSirGlobal pCtx,
3857 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07003858 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05303859 tDot11fIEChannelSwitchWrapper *pDst,
3860 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003861{
3862 uint32_t status = DOT11F_PARSE_SUCCESS;
3863 (void) pBuf; (void)ielen; /* Shutup the compiler */
3864 if (pDst->present)
3865 status = DOT11F_DUPLICATE_IE;
3866 pDst->present = 1;
3867 (void)pCtx;
3868 status |= unpack_core(pCtx,
3869 pBuf,
3870 ielen,
3871 FFS_ChannelSwitchWrapper,
3872 IES_ChannelSwitchWrapper,
3873 (uint8_t *)pDst,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05303874 sizeof(*pDst),
3875 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003876 return status;
3877} /* End dot11f_unpack_ie_channel_switch_wrapper. */
3878
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05303879#define SigIeChannelSwitchWrapper (0x002b)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003880
3881
3882uint32_t dot11f_unpack_ie_country(tpAniSirGlobal pCtx,
3883 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07003884 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05303885 tDot11fIECountry *pDst,
3886 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003887{
3888 uint32_t status = DOT11F_PARSE_SUCCESS;
3889 (void) pBuf; (void)ielen; /* Shutup the compiler */
3890 if (pDst->present)
3891 status = DOT11F_DUPLICATE_IE;
3892 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003893 if (unlikely(ielen < 3)) {
3894 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003895 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003896 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003897
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003898 DOT11F_MEMCPY(pCtx, pDst->country, pBuf, 3);
3899 pBuf += 3;
3900 ielen -= (uint8_t)3;
3901 if (!ielen) {
3902 pDst->num_triplets = 0U;
3903 return 0U;
3904 } else {
3905 pDst->num_triplets = (uint8_t)(ielen / 3);
3906 if (ielen > 84 * 3) {
3907 pDst->present = 0;
3908 return DOT11F_SKIPPED_BAD_IE;
3909 }
3910
3911 DOT11F_MEMCPY(pCtx, pDst->triplets, pBuf, (ielen));
3912 }
3913 (void)pCtx;
3914 return status;
3915} /* End dot11f_unpack_ie_country. */
3916
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05303917#define SigIeCountry (0x002c)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003918
3919
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05303920#define SigIeDSParams (0x002d)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003921
3922
3923uint32_t dot11f_unpack_ie_edca_param_set(tpAniSirGlobal pCtx,
3924 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07003925 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05303926 tDot11fIEEDCAParamSet *pDst,
3927 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003928{
3929 uint32_t status = DOT11F_PARSE_SUCCESS;
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003930 uint8_t tmp32__;
3931 uint8_t tmp33__;
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -08003932 uint8_t tmp34__;
3933 uint8_t tmp35__;
3934 uint8_t tmp36__;
Krishna Kumaar Natarajan7ee45232016-08-29 17:13:47 -07003935 uint8_t tmp37__;
Abhishek Singh951eed82017-07-06 16:53:19 +05303936 uint8_t tmp38__;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05303937 uint8_t tmp39__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003938 (void) pBuf; (void)ielen; /* Shutup the compiler */
3939 if (pDst->present)
3940 status = DOT11F_DUPLICATE_IE;
3941 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003942 if (unlikely(ielen < 1)) {
3943 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003944 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003945 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003946
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003947 pDst->qos = *pBuf;
3948 pBuf += 1;
3949 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003950 if (unlikely(ielen < 1)) {
3951 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003952 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003953 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003954
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003955 pDst->reserved = *pBuf;
3956 pBuf += 1;
3957 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003958 if (unlikely(ielen < 1)) {
3959 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003960 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003961 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003962
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05303963 tmp32__ = *pBuf;
Naveen Rawat819158d2018-01-16 10:56:45 -08003964 pBuf += 1;
3965 ielen -= 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05303966 pDst->acbe_aifsn = tmp32__ >> 0 & 0xf;
3967 pDst->acbe_acm = tmp32__ >> 4 & 0x1;
3968 pDst->acbe_aci = tmp32__ >> 5 & 0x3;
3969 pDst->unused1 = tmp32__ >> 7 & 0x1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003970 if (unlikely(ielen < 1)) {
3971 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003972 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003973 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003974
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05303975 tmp33__ = *pBuf;
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08003976 pBuf += 1;
3977 ielen -= 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05303978 pDst->acbe_acwmin = tmp33__ >> 0 & 0xf;
3979 pDst->acbe_acwmax = tmp33__ >> 4 & 0xf;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003980 if (unlikely(ielen < 2)) {
3981 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003982 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003983 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003984
Abhishek Singh951eed82017-07-06 16:53:19 +05303985 framesntohs(pCtx, &pDst->acbe_txoplimit, pBuf, 0);
Krishna Kumaar Natarajan7ee45232016-08-29 17:13:47 -07003986 pBuf += 2;
3987 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003988 if (unlikely(ielen < 1)) {
3989 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07003990 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07003991 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07003992
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05303993 tmp34__ = *pBuf;
Naveen Rawat819158d2018-01-16 10:56:45 -08003994 pBuf += 1;
3995 ielen -= 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05303996 pDst->acbk_aifsn = tmp34__ >> 0 & 0xf;
3997 pDst->acbk_acm = tmp34__ >> 4 & 0x1;
3998 pDst->acbk_aci = tmp34__ >> 5 & 0x3;
3999 pDst->unused2 = tmp34__ >> 7 & 0x1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004000 if (unlikely(ielen < 1)) {
4001 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004002 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004003 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004004
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304005 tmp35__ = *pBuf;
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -08004006 pBuf += 1;
4007 ielen -= 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304008 pDst->acbk_acwmin = tmp35__ >> 0 & 0xf;
4009 pDst->acbk_acwmax = tmp35__ >> 4 & 0xf;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004010 if (unlikely(ielen < 2)) {
4011 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004012 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004013 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004014
Abhishek Singh951eed82017-07-06 16:53:19 +05304015 framesntohs(pCtx, &pDst->acbk_txoplimit, pBuf, 0);
Krishna Kumaar Natarajan7ee45232016-08-29 17:13:47 -07004016 pBuf += 2;
4017 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004018 if (unlikely(ielen < 1)) {
4019 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004020 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004021 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004022
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304023 tmp36__ = *pBuf;
Naveen Rawat819158d2018-01-16 10:56:45 -08004024 pBuf += 1;
4025 ielen -= 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304026 pDst->acvi_aifsn = tmp36__ >> 0 & 0xf;
4027 pDst->acvi_acm = tmp36__ >> 4 & 0x1;
4028 pDst->acvi_aci = tmp36__ >> 5 & 0x3;
4029 pDst->unused3 = tmp36__ >> 7 & 0x1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004030 if (unlikely(ielen < 1)) {
4031 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004032 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004033 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004034
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304035 tmp37__ = *pBuf;
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -08004036 pBuf += 1;
4037 ielen -= 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304038 pDst->acvi_acwmin = tmp37__ >> 0 & 0xf;
4039 pDst->acvi_acwmax = tmp37__ >> 4 & 0xf;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004040 if (unlikely(ielen < 2)) {
4041 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004042 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004043 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004044
Abhishek Singh951eed82017-07-06 16:53:19 +05304045 framesntohs(pCtx, &pDst->acvi_txoplimit, pBuf, 0);
4046 pBuf += 2;
4047 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004048 if (unlikely(ielen < 1)) {
4049 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004050 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004051 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004052
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304053 tmp38__ = *pBuf;
Naveen Rawat819158d2018-01-16 10:56:45 -08004054 pBuf += 1;
4055 ielen -= 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304056 pDst->acvo_aifsn = tmp38__ >> 0 & 0xf;
4057 pDst->acvo_acm = tmp38__ >> 4 & 0x1;
4058 pDst->acvo_aci = tmp38__ >> 5 & 0x3;
4059 pDst->unused4 = tmp38__ >> 7 & 0x1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004060 if (unlikely(ielen < 1)) {
4061 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004062 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004063 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004064
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304065 tmp39__ = *pBuf;
Abhishek Singh951eed82017-07-06 16:53:19 +05304066 pBuf += 1;
4067 ielen -= 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304068 pDst->acvo_acwmin = tmp39__ >> 0 & 0xf;
4069 pDst->acvo_acwmax = tmp39__ >> 4 & 0xf;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004070 if (unlikely(ielen < 2)) {
4071 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004072 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004073 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004074
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004075 framesntohs(pCtx, &pDst->acvo_txoplimit, pBuf, 0);
4076 (void)pCtx;
4077 return status;
4078} /* End dot11f_unpack_ie_edca_param_set. */
4079
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304080#define SigIeEDCAParamSet (0x002e)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004081
4082
4083uint32_t dot11f_unpack_ie_erp_info(tpAniSirGlobal pCtx,
4084 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07004085 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05304086 tDot11fIEERPInfo *pDst,
4087 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004088{
4089 uint32_t status = DOT11F_PARSE_SUCCESS;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304090 uint8_t tmp40__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004091 (void) pBuf; (void)ielen; /* Shutup the compiler */
4092 if (pDst->present)
4093 status = DOT11F_DUPLICATE_IE;
4094 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004095 if (unlikely(ielen < 1)) {
4096 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004097 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004098 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004099
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304100 tmp40__ = *pBuf;
4101 pDst->non_erp_present = tmp40__ >> 0 & 0x1;
4102 pDst->use_prot = tmp40__ >> 1 & 0x1;
4103 pDst->barker_preamble = tmp40__ >> 2 & 0x1;
4104 pDst->unused = tmp40__ >> 3 & 0x1f;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004105 (void)pCtx;
4106 return status;
4107} /* End dot11f_unpack_ie_erp_info. */
4108
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304109#define SigIeERPInfo (0x002f)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004110
4111
4112uint32_t dot11f_unpack_ie_ese_cckm_opaque(tpAniSirGlobal pCtx,
4113 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07004114 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05304115 tDot11fIEESECckmOpaque *pDst,
4116 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004117{
4118 uint32_t status = DOT11F_PARSE_SUCCESS;
4119 (void) pBuf; (void)ielen; /* Shutup the compiler */
4120 if (pDst->present)
4121 status = DOT11F_DUPLICATE_IE;
4122 pDst->present = 1;
4123 pDst->num_data = (uint8_t)(ielen);
4124 if (ielen > 20) {
4125 pDst->present = 0;
4126 return DOT11F_SKIPPED_BAD_IE;
4127 }
4128
4129 DOT11F_MEMCPY(pCtx, pDst->data, pBuf, (ielen));
4130 (void)pCtx;
4131 return status;
4132} /* End dot11f_unpack_ie_ese_cckm_opaque. */
4133
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304134#define SigIeESECckmOpaque (0x0030)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004135
4136
4137uint32_t dot11f_unpack_ie_ese_rad_mgmt_cap(tpAniSirGlobal pCtx,
4138 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07004139 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05304140 tDot11fIEESERadMgmtCap *pDst,
4141 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004142{
4143 uint32_t status = DOT11F_PARSE_SUCCESS;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304144 uint8_t tmp41__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004145 (void) pBuf; (void)ielen; /* Shutup the compiler */
4146 if (pDst->present)
4147 status = DOT11F_DUPLICATE_IE;
4148 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004149 if (unlikely(ielen < 1)) {
4150 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004151 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004152 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004153
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004154 pDst->mgmt_state = *pBuf;
4155 pBuf += 1;
4156 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004157 if (unlikely(ielen < 1)) {
4158 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004159 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004160 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004161
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304162 tmp41__ = *pBuf;
4163 pDst->mbssid_mask = tmp41__ >> 0 & 0x7;
4164 pDst->reserved = tmp41__ >> 3 & 0x1f;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004165 (void)pCtx;
4166 return status;
4167} /* End dot11f_unpack_ie_ese_rad_mgmt_cap. */
4168
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304169#define SigIeESERadMgmtCap (0x0031)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004170
4171
4172uint32_t dot11f_unpack_ie_ese_traf_strm_met(tpAniSirGlobal pCtx,
4173 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07004174 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05304175 tDot11fIEESETrafStrmMet *pDst,
4176 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004177{
4178 uint32_t status = DOT11F_PARSE_SUCCESS;
4179 (void) pBuf; (void)ielen; /* Shutup the compiler */
4180 if (pDst->present)
4181 status = DOT11F_DUPLICATE_IE;
4182 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004183 if (unlikely(ielen < 1)) {
4184 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004185 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004186 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004187
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004188 pDst->tsid = *pBuf;
4189 pBuf += 1;
4190 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004191 if (unlikely(ielen < 1)) {
4192 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004193 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004194 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004195
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004196 pDst->state = *pBuf;
4197 pBuf += 1;
4198 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004199 if (unlikely(ielen < 2)) {
4200 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004201 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004202 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004203
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004204 framesntohs(pCtx, &pDst->msmt_interval, pBuf, 0);
4205 (void)pCtx;
4206 return status;
4207} /* End dot11f_unpack_ie_ese_traf_strm_met. */
4208
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304209#define SigIeESETrafStrmMet (0x0032)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004210
4211
4212uint32_t dot11f_unpack_ie_ese_traf_strm_rate_set(tpAniSirGlobal pCtx,
4213 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07004214 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05304215 tDot11fIEESETrafStrmRateSet *pDst,
4216 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004217{
4218 uint32_t status = DOT11F_PARSE_SUCCESS;
4219 (void) pBuf; (void)ielen; /* Shutup the compiler */
4220 if (pDst->present)
4221 status = DOT11F_DUPLICATE_IE;
4222 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004223 if (unlikely(ielen < 1)) {
4224 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004225 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004226 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004227
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004228 pDst->tsid = *pBuf;
4229 pBuf += 1;
4230 ielen -= (uint8_t)1;
4231 pDst->num_tsrates = (uint8_t)(ielen);
4232 if (ielen > 8) {
4233 pDst->present = 0;
4234 return DOT11F_SKIPPED_BAD_IE;
4235 }
4236
4237 DOT11F_MEMCPY(pCtx, pDst->tsrates, pBuf, (ielen));
4238 (void)pCtx;
4239 return status;
4240} /* End dot11f_unpack_ie_ese_traf_strm_rate_set. */
4241
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304242#define SigIeESETrafStrmRateSet (0x0033)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004243
4244
4245uint32_t dot11f_unpack_ie_ese_txmit_power(tpAniSirGlobal pCtx,
4246 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07004247 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05304248 tDot11fIEESETxmitPower *pDst,
4249 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004250{
4251 uint32_t status = DOT11F_PARSE_SUCCESS;
4252 (void) pBuf; (void)ielen; /* Shutup the compiler */
4253 if (pDst->present)
4254 status = DOT11F_DUPLICATE_IE;
4255 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004256 if (unlikely(ielen < 1)) {
4257 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004258 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004259 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004260
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004261 pDst->power_limit = *pBuf;
4262 pBuf += 1;
4263 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004264 if (unlikely(ielen < 1)) {
4265 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004266 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004267 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004268
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004269 pDst->reserved = *pBuf;
4270 (void)pCtx;
4271 return status;
4272} /* End dot11f_unpack_ie_ese_txmit_power. */
4273
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304274#define SigIeESETxmitPower (0x0034)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004275
4276
4277uint32_t dot11f_unpack_ie_ese_version(tpAniSirGlobal pCtx,
4278 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07004279 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05304280 tDot11fIEESEVersion *pDst,
4281 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004282{
4283 uint32_t status = DOT11F_PARSE_SUCCESS;
4284 (void) pBuf; (void)ielen; /* Shutup the compiler */
4285 if (pDst->present)
4286 status = DOT11F_DUPLICATE_IE;
4287 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004288 if (unlikely(ielen < 1)) {
4289 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004290 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004291 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004292
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004293 pDst->version = *pBuf;
4294 (void)pCtx;
4295 return status;
4296} /* End dot11f_unpack_ie_ese_version. */
4297
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304298#define SigIeESEVersion (0x0035)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004299
4300
4301uint32_t dot11f_unpack_ie_ext_cap(tpAniSirGlobal pCtx,
4302 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07004303 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05304304 tDot11fIEExtCap *pDst,
4305 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004306{
4307 uint32_t status = DOT11F_PARSE_SUCCESS;
4308 (void) pBuf; (void)ielen; /* Shutup the compiler */
4309 if (pDst->present)
4310 status = DOT11F_DUPLICATE_IE;
4311 pDst->present = 1;
4312
4313 if (!ielen) /* Check to ensure copying of ielen bytes */
4314 goto endUnpackIeExtCap;
4315 pDst->num_bytes = (uint8_t)(ielen);
Selvaraj, Sridhar2c46d832017-03-13 17:55:48 +05304316 if (ielen > 15) {
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004317 pDst->present = 0;
4318 return DOT11F_SKIPPED_BAD_IE;
4319 }
4320
4321 DOT11F_MEMCPY(pCtx, pDst->bytes, pBuf, (ielen));
4322
4323endUnpackIeExtCap:
4324 (void)pCtx;
4325 return status;
4326} /* End dot11f_unpack_ie_ext_cap. */
4327
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304328#define SigIeExtCap (0x0036)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004329
4330
4331uint32_t dot11f_unpack_ie_ext_supp_rates(tpAniSirGlobal pCtx,
4332 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07004333 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05304334 tDot11fIEExtSuppRates *pDst,
4335 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004336{
4337 uint8_t i;
4338 uint8_t rate_indx = 0;
4339 uint32_t status = DOT11F_PARSE_SUCCESS;
4340 (void) pBuf; (void)ielen; /* Shutup the compiler */
4341 if (pDst->present)
4342 status = DOT11F_DUPLICATE_IE;
4343 pDst->present = 1;
4344 for (i = 0; i < ielen; i++) {
4345 if ((DOT11F_IS_BG_RATE(pBuf[i] & 0x7F)) &&
4346 (rate_indx < 12)) {
4347 pDst->rates[rate_indx++] = pBuf[i];
4348 }
4349 }
4350
4351 if (rate_indx == 0) {
4352 pDst->present = 0;
4353 return DOT11F_SKIPPED_BAD_IE;
4354 }
4355
4356 pDst->num_rates = rate_indx;
4357 (void)pCtx;
4358 return status;
4359} /* End dot11f_unpack_ie_ext_supp_rates. */
4360
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304361#define SigIeExtSuppRates (0x0037)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004362
4363
4364uint32_t dot11f_unpack_ie_fh_param_set(tpAniSirGlobal pCtx,
4365 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07004366 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05304367 tDot11fIEFHParamSet *pDst,
4368 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004369{
4370 uint32_t status = DOT11F_PARSE_SUCCESS;
4371 (void) pBuf; (void)ielen; /* Shutup the compiler */
4372 if (pDst->present)
4373 status = DOT11F_DUPLICATE_IE;
4374 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004375 if (unlikely(ielen < 2)) {
4376 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004377 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004378 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004379
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004380 framesntohs(pCtx, &pDst->dwell_time, pBuf, 0);
4381 pBuf += 2;
4382 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004383 if (unlikely(ielen < 1)) {
4384 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004385 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004386 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004387
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004388 pDst->hop_set = *pBuf;
4389 pBuf += 1;
4390 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004391 if (unlikely(ielen < 1)) {
4392 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004393 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004394 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004395
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004396 pDst->hop_pattern = *pBuf;
4397 pBuf += 1;
4398 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004399 if (unlikely(ielen < 1)) {
4400 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004401 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004402 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004403
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004404 pDst->hop_index = *pBuf;
4405 (void)pCtx;
4406 return status;
4407} /* End dot11f_unpack_ie_fh_param_set. */
4408
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304409#define SigIeFHParamSet (0x0038)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004410
4411
4412uint32_t dot11f_unpack_ie_fh_params(tpAniSirGlobal pCtx,
4413 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07004414 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05304415 tDot11fIEFHParams *pDst,
4416 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004417{
4418 uint32_t status = DOT11F_PARSE_SUCCESS;
4419 (void) pBuf; (void)ielen; /* Shutup the compiler */
4420 if (pDst->present)
4421 status = DOT11F_DUPLICATE_IE;
4422 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004423 if (unlikely(ielen < 1)) {
4424 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004425 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004426 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004427
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004428 pDst->radix = *pBuf;
4429 pBuf += 1;
4430 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004431 if (unlikely(ielen < 1)) {
4432 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004433 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004434 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004435
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004436 pDst->nchannels = *pBuf;
4437 (void)pCtx;
4438 return status;
4439} /* End dot11f_unpack_ie_fh_params. */
4440
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304441#define SigIeFHParams (0x0039)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004442
4443
4444uint32_t dot11f_unpack_ie_fh_patt_table(tpAniSirGlobal pCtx,
4445 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07004446 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05304447 tDot11fIEFHPattTable *pDst,
4448 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004449{
4450 uint32_t status = DOT11F_PARSE_SUCCESS;
4451 (void) pBuf; (void)ielen; /* Shutup the compiler */
4452 if (pDst->present)
4453 status = DOT11F_DUPLICATE_IE;
4454 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004455 if (unlikely(ielen < 1)) {
4456 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004457 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004458 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004459
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004460 pDst->flag = *pBuf;
4461 pBuf += 1;
4462 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004463 if (unlikely(ielen < 1)) {
4464 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004465 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004466 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004467
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004468 pDst->nsets = *pBuf;
4469 pBuf += 1;
4470 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004471 if (unlikely(ielen < 1)) {
4472 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004473 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004474 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004475
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004476 pDst->modulus = *pBuf;
4477 pBuf += 1;
4478 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004479 if (unlikely(ielen < 1)) {
4480 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004481 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004482 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004483
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004484 pDst->offset = *pBuf;
4485 pBuf += 1;
4486 ielen -= (uint8_t)1;
4487 pDst->num_randtable = (uint8_t)(ielen);
4488 if (ielen > 251) {
4489 pDst->present = 0;
4490 return DOT11F_SKIPPED_BAD_IE;
4491 }
4492
4493 DOT11F_MEMCPY(pCtx, pDst->randtable, pBuf, (ielen));
4494 (void)pCtx;
4495 return status;
4496} /* End dot11f_unpack_ie_fh_patt_table. */
4497
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304498#define SigIeFHPattTable (0x003a)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004499
4500
4501static const tFFDefn FFS_FTInfo[] = {
4502 { NULL, 0, 0, 0,},
4503};
4504
4505static const tIEDefn IES_FTInfo[] = {
4506 { offsetof(tDot11fIEFTInfo, R1KH_ID), offsetof(tDot11fIER1KH_ID, present),
4507 0, "R1KH_ID", 0, 8, 8, SigIeR1KH_ID, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05304508 0, DOT11F_EID_R1KH_ID, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004509 { offsetof(tDot11fIEFTInfo, GTK), offsetof(tDot11fIEGTK, present), 0, "GTK",
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05304510 0, 18, 45, SigIeGTK, {0, 0, 0, 0, 0}, 0, DOT11F_EID_GTK, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004511 { offsetof(tDot11fIEFTInfo, R0KH_ID), offsetof(tDot11fIER0KH_ID, present),
4512 0, "R0KH_ID", 0, 3, 50, SigIeR0KH_ID, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05304513 0, DOT11F_EID_R0KH_ID, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004514 { offsetof(tDot11fIEFTInfo, IGTK), offsetof(tDot11fIEIGTK, present), 0,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05304515 "IGTK", 0, 35, 35, SigIeIGTK, {0, 0, 0, 0, 0},
4516 0, DOT11F_EID_IGTK, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004517 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },
4518};
4519
4520uint32_t dot11f_unpack_ie_ft_info(tpAniSirGlobal pCtx,
4521 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07004522 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05304523 tDot11fIEFTInfo *pDst,
4524 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004525{
4526 uint32_t status = DOT11F_PARSE_SUCCESS;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304527 uint16_t tmp42__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004528 (void) pBuf; (void)ielen; /* Shutup the compiler */
4529 if (pDst->present)
4530 status = DOT11F_DUPLICATE_IE;
4531 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004532 if (unlikely(ielen < 2)) {
4533 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004534 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004535 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004536
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304537 framesntohs(pCtx, &tmp42__, pBuf, 0);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004538 pBuf += 2;
4539 ielen -= 2;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304540 pDst->reserved = tmp42__ >> 0 & 0xff;
4541 pDst->IECount = tmp42__ >> 8 & 0xff;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004542 if (unlikely(ielen < 16)) {
4543 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004544 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004545 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004546
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004547 DOT11F_MEMCPY(pCtx, pDst->MIC, pBuf, 16);
4548 pBuf += 16;
4549 ielen -= (uint8_t)16;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004550 if (unlikely(ielen < 32)) {
4551 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004552 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004553 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004554
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004555 DOT11F_MEMCPY(pCtx, pDst->Anonce, pBuf, 32);
4556 pBuf += 32;
4557 ielen -= (uint8_t)32;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004558 if (unlikely(ielen < 32)) {
4559 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004560 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004561 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004562
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004563 DOT11F_MEMCPY(pCtx, pDst->Snonce, pBuf, 32);
4564 pBuf += 32;
4565 ielen -= (uint8_t)32;
4566 (void)pCtx;
4567 status |= unpack_core(pCtx,
4568 pBuf,
4569 ielen,
4570 FFS_FTInfo,
4571 IES_FTInfo,
4572 (uint8_t *)pDst,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05304573 sizeof(*pDst),
4574 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004575 return status;
4576} /* End dot11f_unpack_ie_ft_info. */
4577
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304578#define SigIeFTInfo (0x003b)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004579
4580
4581uint32_t dot11f_unpack_ie_ht_caps(tpAniSirGlobal pCtx,
4582 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07004583 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05304584 tDot11fIEHTCaps *pDst,
4585 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004586{
4587 uint32_t status = DOT11F_PARSE_SUCCESS;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304588 uint16_t tmp43__;
4589 uint8_t tmp44__;
4590 uint16_t tmp45__;
4591 uint32_t tmp46__;
4592 uint8_t tmp47__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004593 (void) pBuf; (void)ielen; /* Shutup the compiler */
4594 if (pDst->present)
4595 status = DOT11F_DUPLICATE_IE;
4596 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004597 if (unlikely(ielen < 2)) {
4598 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004599 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004600 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004601
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304602 framesntohs(pCtx, &tmp43__, pBuf, 0);
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -08004603 pBuf += 2;
4604 ielen -= 2;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304605 pDst->advCodingCap = tmp43__ >> 0 & 0x1;
4606 pDst->supportedChannelWidthSet = tmp43__ >> 1 & 0x1;
4607 pDst->mimoPowerSave = tmp43__ >> 2 & 0x3;
4608 pDst->greenField = tmp43__ >> 4 & 0x1;
4609 pDst->shortGI20MHz = tmp43__ >> 5 & 0x1;
4610 pDst->shortGI40MHz = tmp43__ >> 6 & 0x1;
4611 pDst->txSTBC = tmp43__ >> 7 & 0x1;
4612 pDst->rxSTBC = tmp43__ >> 8 & 0x3;
4613 pDst->delayedBA = tmp43__ >> 10 & 0x1;
4614 pDst->maximalAMSDUsize = tmp43__ >> 11 & 0x1;
4615 pDst->dsssCckMode40MHz = tmp43__ >> 12 & 0x1;
4616 pDst->psmp = tmp43__ >> 13 & 0x1;
4617 pDst->stbcControlFrame = tmp43__ >> 14 & 0x1;
4618 pDst->lsigTXOPProtection = tmp43__ >> 15 & 0x1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004619 if (unlikely(ielen < 1)) {
4620 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004621 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004622 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004623
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304624 tmp44__ = *pBuf;
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -08004625 pBuf += 1;
4626 ielen -= 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304627 pDst->maxRxAMPDUFactor = tmp44__ >> 0 & 0x3;
4628 pDst->mpduDensity = tmp44__ >> 2 & 0x7;
4629 pDst->reserved1 = tmp44__ >> 5 & 0x7;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004630 if (unlikely(ielen < 16)) {
4631 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004632 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004633 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004634
Abhishek Singh951eed82017-07-06 16:53:19 +05304635 DOT11F_MEMCPY(pCtx, pDst->supportedMCSSet, pBuf, 16);
4636 pBuf += 16;
4637 ielen -= (uint8_t)16;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004638 if (unlikely(ielen < 2)) {
4639 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004640 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004641 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004642
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304643 framesntohs(pCtx, &tmp45__, pBuf, 0);
Abhishek Singh951eed82017-07-06 16:53:19 +05304644 pBuf += 2;
4645 ielen -= 2;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304646 pDst->pco = tmp45__ >> 0 & 0x1;
4647 pDst->transitionTime = tmp45__ >> 1 & 0x3;
4648 pDst->reserved2 = tmp45__ >> 3 & 0x1f;
4649 pDst->mcsFeedback = tmp45__ >> 8 & 0x3;
4650 pDst->reserved3 = tmp45__ >> 10 & 0x3f;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004651 if (unlikely(ielen < 4)) {
4652 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004653 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004654 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004655
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304656 framesntohl(pCtx, &tmp46__, pBuf, 0);
Abhishek Singh951eed82017-07-06 16:53:19 +05304657 pBuf += 4;
4658 ielen -= 4;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304659 pDst->txBF = tmp46__ >> 0 & 0x1;
4660 pDst->rxStaggeredSounding = tmp46__ >> 1 & 0x1;
4661 pDst->txStaggeredSounding = tmp46__ >> 2 & 0x1;
4662 pDst->rxZLF = tmp46__ >> 3 & 0x1;
4663 pDst->txZLF = tmp46__ >> 4 & 0x1;
4664 pDst->implicitTxBF = tmp46__ >> 5 & 0x1;
4665 pDst->calibration = tmp46__ >> 6 & 0x3;
4666 pDst->explicitCSITxBF = tmp46__ >> 8 & 0x1;
4667 pDst->explicitUncompressedSteeringMatrix = tmp46__ >> 9 & 0x1;
4668 pDst->explicitBFCSIFeedback = tmp46__ >> 10 & 0x7;
4669 pDst->explicitUncompressedSteeringMatrixFeedback = tmp46__ >> 13 & 0x7;
4670 pDst->explicitCompressedSteeringMatrixFeedback = tmp46__ >> 16 & 0x7;
4671 pDst->csiNumBFAntennae = tmp46__ >> 19 & 0x3;
4672 pDst->uncompressedSteeringMatrixBFAntennae = tmp46__ >> 21 & 0x3;
4673 pDst->compressedSteeringMatrixBFAntennae = tmp46__ >> 23 & 0x3;
4674 pDst->reserved4 = tmp46__ >> 25 & 0x7f;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004675 if (unlikely(ielen < 1)) {
4676 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004677 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004678 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004679
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304680 tmp47__ = *pBuf;
Abhishek Singh951eed82017-07-06 16:53:19 +05304681 pBuf += 1;
4682 ielen -= 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304683 pDst->antennaSelection = tmp47__ >> 0 & 0x1;
4684 pDst->explicitCSIFeedbackTx = tmp47__ >> 1 & 0x1;
4685 pDst->antennaIndicesFeedbackTx = tmp47__ >> 2 & 0x1;
4686 pDst->explicitCSIFeedback = tmp47__ >> 3 & 0x1;
4687 pDst->antennaIndicesFeedback = tmp47__ >> 4 & 0x1;
4688 pDst->rxAS = tmp47__ >> 5 & 0x1;
4689 pDst->txSoundingPPDUs = tmp47__ >> 6 & 0x1;
4690 pDst->reserved5 = tmp47__ >> 7 & 0x1;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004691 pDst->num_rsvd = (uint8_t)(ielen);
4692 if (ielen > 32) {
4693 pDst->present = 0;
4694 return DOT11F_SKIPPED_BAD_IE;
4695 }
4696
4697 DOT11F_MEMCPY(pCtx, pDst->rsvd, pBuf, (ielen));
4698 (void)pCtx;
4699 return status;
4700} /* End dot11f_unpack_ie_ht_caps. */
4701
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304702#define SigIeHTCaps (0x003c)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004703
4704
4705uint32_t dot11f_unpack_ie_ht_info(tpAniSirGlobal pCtx,
4706 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07004707 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05304708 tDot11fIEHTInfo *pDst,
4709 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004710{
4711 uint32_t status = DOT11F_PARSE_SUCCESS;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304712 uint8_t tmp48__;
Abhishek Singh951eed82017-07-06 16:53:19 +05304713 uint16_t tmp49__;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304714 uint16_t tmp50__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004715 (void) pBuf; (void)ielen; /* Shutup the compiler */
4716 if (pDst->present)
4717 status = DOT11F_DUPLICATE_IE;
4718 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004719 if (unlikely(ielen < 1)) {
4720 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004721 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004722 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004723
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004724 pDst->primaryChannel = *pBuf;
4725 pBuf += 1;
4726 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004727 if (unlikely(ielen < 1)) {
4728 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004729 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004730 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004731
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304732 tmp48__ = *pBuf;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004733 pBuf += 1;
4734 ielen -= 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304735 pDst->secondaryChannelOffset = tmp48__ >> 0 & 0x3;
4736 pDst->recommendedTxWidthSet = tmp48__ >> 2 & 0x1;
4737 pDst->rifsMode = tmp48__ >> 3 & 0x1;
4738 pDst->controlledAccessOnly = tmp48__ >> 4 & 0x1;
4739 pDst->serviceIntervalGranularity = tmp48__ >> 5 & 0x7;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004740 if (unlikely(ielen < 2)) {
4741 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004742 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004743 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004744
Abhishek Singh951eed82017-07-06 16:53:19 +05304745 framesntohs(pCtx, &tmp49__, pBuf, 0);
Abhishek Singh518323d2015-10-19 17:42:01 +05304746 pBuf += 2;
4747 ielen -= 2;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304748 pDst->opMode = tmp49__ >> 0 & 0x3;
4749 pDst->nonGFDevicesPresent = tmp49__ >> 2 & 0x1;
4750 pDst->transmitBurstLimit = tmp49__ >> 3 & 0x1;
4751 pDst->obssNonHTStaPresent = tmp49__ >> 4 & 0x1;
4752 pDst->reserved = tmp49__ >> 5 & 0x7ff;
4753 if (unlikely(ielen < 2)) {
4754 pDst->present = 0;
4755 return DOT11F_INCOMPLETE_IE;
4756 }
4757
4758 framesntohs(pCtx, &tmp50__, pBuf, 0);
4759 pBuf += 2;
4760 ielen -= 2;
4761 pDst->basicSTBCMCS = tmp50__ >> 0 & 0x7f;
4762 pDst->dualCTSProtection = tmp50__ >> 7 & 0x1;
4763 pDst->secondaryBeacon = tmp50__ >> 8 & 0x1;
4764 pDst->lsigTXOPProtectionFullSupport = tmp50__ >> 9 & 0x1;
4765 pDst->pcoActive = tmp50__ >> 10 & 0x1;
4766 pDst->pcoPhase = tmp50__ >> 11 & 0x1;
4767 pDst->reserved2 = tmp50__ >> 12 & 0xf;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004768 if (unlikely(ielen < 16)) {
4769 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004770 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004771 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004772
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004773 DOT11F_MEMCPY(pCtx, pDst->basicMCSSet, pBuf, 16);
4774 pBuf += 16;
4775 ielen -= (uint8_t)16;
4776 pDst->num_rsvd = (uint8_t)(ielen);
4777 if (ielen > 32) {
4778 pDst->present = 0;
4779 return DOT11F_SKIPPED_BAD_IE;
4780 }
4781
4782 DOT11F_MEMCPY(pCtx, pDst->rsvd, pBuf, (ielen));
4783 (void)pCtx;
4784 return status;
4785} /* End dot11f_unpack_ie_ht_info. */
4786
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304787#define SigIeHTInfo (0x003d)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004788
4789
4790uint32_t dot11f_unpack_ie_ibss_params(tpAniSirGlobal pCtx,
4791 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07004792 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05304793 tDot11fIEIBSSParams *pDst,
4794 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004795{
4796 uint32_t status = DOT11F_PARSE_SUCCESS;
4797 (void) pBuf; (void)ielen; /* Shutup the compiler */
4798 if (pDst->present)
4799 status = DOT11F_DUPLICATE_IE;
4800 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004801 if (unlikely(ielen < 2)) {
4802 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004803 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004804 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004805
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004806 framesntohs(pCtx, &pDst->atim, pBuf, 0);
4807 (void)pCtx;
4808 return status;
4809} /* End dot11f_unpack_ie_ibss_params. */
4810
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304811#define SigIeIBSSParams (0x003e)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004812
4813
4814uint32_t dot11f_unpack_ie_link_identifier(tpAniSirGlobal pCtx,
4815 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07004816 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05304817 tDot11fIELinkIdentifier *pDst,
4818 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004819{
4820 uint32_t status = DOT11F_PARSE_SUCCESS;
4821 (void) pBuf; (void)ielen; /* Shutup the compiler */
4822 if (pDst->present)
4823 status = DOT11F_DUPLICATE_IE;
4824 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004825 if (unlikely(ielen < 6)) {
4826 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004827 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004828 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004829
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004830 DOT11F_MEMCPY(pCtx, pDst->bssid, pBuf, 6);
4831 pBuf += 6;
4832 ielen -= (uint8_t)6;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004833 if (unlikely(ielen < 6)) {
4834 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004835 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004836 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004837
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004838 DOT11F_MEMCPY(pCtx, pDst->InitStaAddr, pBuf, 6);
4839 pBuf += 6;
4840 ielen -= (uint8_t)6;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004841 if (unlikely(ielen < 6)) {
4842 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004843 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004844 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004845
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004846 DOT11F_MEMCPY(pCtx, pDst->RespStaAddr, pBuf, 6);
4847 (void)pCtx;
4848 return status;
4849} /* End dot11f_unpack_ie_link_identifier. */
4850
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304851#define SigIeLinkIdentifier (0x003f)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004852
4853
Abhishek Singh951eed82017-07-06 16:53:19 +05304854static const tTLVDefn TLVS_MBO_IE[] = {
4855 { offsetof(tDot11fIEMBO_IE, mbo_ap_cap), offsetof(tDot11fTLVmbo_ap_cap,
4856 present), "mbo_ap_cap", SigTlvmbo_ap_cap, DOT11F_TLV_MBO_AP_CAP,
4857 0, 3, 3, 0, 1, 1, 0, },
4858 { offsetof(tDot11fIEMBO_IE, non_prefferd_chan_rep),
4859 offsetof(tDot11fTLVnon_prefferd_chan_rep, present),
4860 "non_prefferd_chan_rep", SigTlvnon_prefferd_chan_rep,
4861 DOT11F_TLV_NON_PREFFERD_CHAN_REP, 0, 6, 257, 0, 1, 1, 0, },
4862 { offsetof(tDot11fIEMBO_IE, cellular_data_cap),
4863 offsetof(tDot11fTLVcellular_data_cap, present), "cellular_data_cap",
4864 SigTlvcellular_data_cap, DOT11F_TLV_CELLULAR_DATA_CAP,
4865 0, 3, 3, 0, 1, 1, 0, },
4866 { offsetof(tDot11fIEMBO_IE, assoc_disallowed),
4867 offsetof(tDot11fTLVassoc_disallowed, present), "assoc_disallowed",
4868 SigTlvassoc_disallowed, DOT11F_TLV_ASSOC_DISALLOWED,
4869 0, 3, 3, 0, 1, 1, 0, },
4870 { offsetof(tDot11fIEMBO_IE, cellular_data_con_pref),
4871 offsetof(tDot11fTLVcellular_data_con_pref, present),
4872 "cellular_data_con_pref", SigTlvcellular_data_con_pref,
4873 DOT11F_TLV_CELLULAR_DATA_CON_PREF, 0, 3, 3, 0, 1, 1, 0, },
4874 { offsetof(tDot11fIEMBO_IE, transition_reason),
4875 offsetof(tDot11fTLVtransition_reason, present), "transition_reason",
4876 SigTlvtransition_reason, DOT11F_TLV_TRANSITION_REASON,
4877 0, 3, 3, 0, 1, 1, 0, },
4878 { offsetof(tDot11fIEMBO_IE, transition_reject_reason),
4879 offsetof(tDot11fTLVtransition_reject_reason, present),
4880 "transition_reject_reason", SigTlvtransition_reject_reason,
4881 DOT11F_TLV_TRANSITION_REJECT_REASON, 0, 3, 3, 0, 1, 1, 0, },
4882 { offsetof(tDot11fIEMBO_IE, assoc_retry_delay),
4883 offsetof(tDot11fTLVassoc_retry_delay, present), "assoc_retry_delay",
4884 SigTlvassoc_retry_delay, DOT11F_TLV_ASSOC_RETRY_DELAY,
4885 0, 4, 4, 0, 1, 1, 0, },
4886 { offsetof(tDot11fIEMBO_IE, oce_cap), offsetof(tDot11fTLVoce_cap,
4887 present), "oce_cap", SigTlvoce_cap, DOT11F_TLV_OCE_CAP,
4888 0, 3, 3, 0, 1, 1, 0, },
4889 { offsetof(tDot11fIEMBO_IE, rssi_assoc_rej),
4890 offsetof(tDot11fTLVrssi_assoc_rej, present), "rssi_assoc_rej",
4891 SigTlvrssi_assoc_rej, DOT11F_TLV_RSSI_ASSOC_REJ, 0, 4, 4, 0, 1, 1, 0, },
4892 { offsetof(tDot11fIEMBO_IE, reduced_wan_metrics),
4893 offsetof(tDot11fTLVreduced_wan_metrics, present), "reduced_wan_metrics",
4894 SigTlvreduced_wan_metrics, DOT11F_TLV_REDUCED_WAN_METRICS,
4895 0, 3, 3, 0, 1, 1, 0, },
4896 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
4897};
4898
Selvaraj, Sridharba726cb2016-07-22 13:41:03 +05304899uint32_t dot11f_unpack_ie_MBO_IE(tpAniSirGlobal pCtx,
4900 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07004901 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05304902 tDot11fIEMBO_IE *pDst,
4903 bool append_ie)
Selvaraj, Sridharba726cb2016-07-22 13:41:03 +05304904{
4905 uint32_t status = DOT11F_PARSE_SUCCESS;
Abhishek Singh951eed82017-07-06 16:53:19 +05304906 (void)pBuf; (void)ielen; /* Shutup the compiler */
Selvaraj, Sridharba726cb2016-07-22 13:41:03 +05304907 pDst->present = 1;
Abhishek Singh951eed82017-07-06 16:53:19 +05304908 status = unpack_tlv_core(pCtx, pBuf, ielen,
4909 TLVS_MBO_IE,
4910 (uint8_t *)pDst, sizeof(*pDst));
Selvaraj, Sridharba726cb2016-07-22 13:41:03 +05304911 return status;
4912} /* End dot11f_unpack_ie_MBO_IE. */
4913
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304914#define SigIeMBO_IE (0x0040)
Selvaraj, Sridharba726cb2016-07-22 13:41:03 +05304915
4916
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004917static const tFFDefn FFS_reportBeacon[] = {
4918 { NULL, 0, 0, 0,},
4919};
4920
4921static const tIEDefn IES_reportBeacon[] = {
4922 { offsetof(tDot11fIEMeasurementReport,
4923 report.Beacon.BeaconReportFrmBody),
4924 offsetof(tDot11fIEBeaconReportFrmBody, present), 0, "BeaconReportFrmBody",
4925 0, 2, 226, SigIeBeaconReportFrmBody, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05304926 0, DOT11F_EID_BEACONREPORTFRMBODY, 0, 0, },
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304927 { offsetof(tDot11fIEMeasurementReport,
4928 report.Beacon.beacon_report_frm_body_fragment_id),
4929 offsetof(tDot11fIEbeacon_report_frm_body_fragment_id, present), 0,
4930 "beacon_report_frm_body_fragment_id",
4931 0, 4, 4, SigIebeacon_report_frm_body_fragment_id, {0, 0, 0, 0, 0},
4932 0, DOT11F_EID_BEACON_REPORT_FRM_BODY_FRAGMENT_ID, 0, 0, },
4933 { offsetof(tDot11fIEMeasurementReport,
4934 report.Beacon.last_beacon_report_indication),
4935 offsetof(tDot11fIElast_beacon_report_indication, present), 0,
4936 "last_beacon_report_indication",
4937 0, 3, 3, SigIelast_beacon_report_indication, {0, 0, 0, 0, 0},
4938 0, DOT11F_EID_LAST_BEACON_REPORT_INDICATION, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004939 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },
4940};
4941
4942uint32_t dot11f_unpack_ie_measurement_report(tpAniSirGlobal pCtx,
4943 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07004944 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05304945 tDot11fIEMeasurementReport *pDst,
4946 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004947{
4948 uint32_t status = DOT11F_PARSE_SUCCESS;
Krishna Kumaar Natarajan7ee45232016-08-29 17:13:47 -07004949 uint8_t tmp51__;
Abhishek Singh951eed82017-07-06 16:53:19 +05304950 uint8_t tmp52__;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304951 uint8_t tmp53__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004952 (void) pBuf; (void)ielen; /* Shutup the compiler */
4953 if (pDst->present)
4954 status = DOT11F_DUPLICATE_IE;
4955 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004956 if (unlikely(ielen < 1)) {
4957 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004958 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004959 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004960
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004961 pDst->token = *pBuf;
4962 pBuf += 1;
4963 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004964 if (unlikely(ielen < 1)) {
4965 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004966 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004967 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004968
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304969 tmp51__ = *pBuf;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004970 pBuf += 1;
4971 ielen -= 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05304972 pDst->late = tmp51__ >> 0 & 0x1;
4973 pDst->incapable = tmp51__ >> 1 & 0x1;
4974 pDst->refused = tmp51__ >> 2 & 0x1;
4975 pDst->unused = tmp51__ >> 3 & 0x1f;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004976 if (unlikely(ielen < 1)) {
4977 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004978 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004979 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004980
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004981 pDst->type = *pBuf;
4982 pBuf += 1;
4983 ielen -= (uint8_t)1;
4984 if (!ielen) {
4985 return 0U;
4986 } else {
4987 switch (pDst->type) {
4988 case 0:
Naveen Rawat89e85d42018-05-23 11:54:27 -07004989 if (unlikely(ielen < 1)) {
4990 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004991 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004992 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07004993
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08004994 pDst->report.Basic.channel = *pBuf;
4995 pBuf += 1;
4996 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07004997 if (unlikely(ielen < 8)) {
4998 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07004999 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005000 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005001
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005002 framesntohq(pCtx, &pDst->report.Basic.meas_start_time, pBuf, 0);
5003 pBuf += 8;
5004 ielen -= (uint8_t)8;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005005 if (unlikely(ielen < 2)) {
5006 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005007 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005008 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005009
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005010 framesntohs(pCtx, &pDst->report.Basic.meas_duration, pBuf, 0);
5011 pBuf += 2;
5012 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005013 if (unlikely(ielen < 1)) {
5014 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005015 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005016 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005017
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305018 tmp52__ = *pBuf;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005019 pBuf += 1;
5020 ielen -= 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305021 pDst->report.Basic.bss = tmp52__ >> 0 & 0x1;
5022 pDst->report.Basic.ofdm_preamble = tmp52__ >> 1 & 0x1;
5023 pDst->report.Basic.unid_signal = tmp52__ >> 2 & 0x1;
5024 pDst->report.Basic.rader = tmp52__ >> 3 & 0x1;
5025 pDst->report.Basic.unmeasured = tmp52__ >> 4 & 0x1;
5026 pDst->report.Basic.unused = tmp52__ >> 5 & 0x7;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005027 break;
5028 case 1:
Naveen Rawat89e85d42018-05-23 11:54:27 -07005029 if (unlikely(ielen < 1)) {
5030 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005031 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005032 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005033
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005034 pDst->report.CCA.channel = *pBuf;
5035 pBuf += 1;
5036 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005037 if (unlikely(ielen < 8)) {
5038 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005039 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005040 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005041
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005042 framesntohq(pCtx, &pDst->report.CCA.meas_start_time, pBuf, 0);
5043 pBuf += 8;
5044 ielen -= (uint8_t)8;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005045 if (unlikely(ielen < 2)) {
5046 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005047 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005048 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005049
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005050 framesntohs(pCtx, &pDst->report.CCA.meas_duration, pBuf, 0);
5051 pBuf += 2;
5052 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005053 if (unlikely(ielen < 1)) {
5054 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005055 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005056 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005057
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005058 pDst->report.CCA.cca_busy_fraction = *pBuf;
5059 pBuf += 1;
5060 ielen -= (uint8_t)1;
5061 break;
5062 case 2:
Naveen Rawat89e85d42018-05-23 11:54:27 -07005063 if (unlikely(ielen < 1)) {
5064 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005065 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005066 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005067
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005068 pDst->report.RPIHistogram.channel = *pBuf;
5069 pBuf += 1;
5070 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005071 if (unlikely(ielen < 8)) {
5072 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005073 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005074 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005075
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005076 framesntohq(pCtx, &pDst->report.RPIHistogram.meas_start_time, pBuf, 0);
5077 pBuf += 8;
5078 ielen -= (uint8_t)8;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005079 if (unlikely(ielen < 2)) {
5080 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005081 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005082 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005083
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005084 framesntohs(pCtx, &pDst->report.RPIHistogram.meas_duration, pBuf, 0);
5085 pBuf += 2;
5086 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005087 if (unlikely(ielen < 1)) {
5088 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005089 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005090 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005091
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005092 pDst->report.RPIHistogram.rpi0_density = *pBuf;
5093 pBuf += 1;
5094 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005095 if (unlikely(ielen < 1)) {
5096 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005097 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005098 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005099
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005100 pDst->report.RPIHistogram.rpi1_density = *pBuf;
5101 pBuf += 1;
5102 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005103 if (unlikely(ielen < 1)) {
5104 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005105 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005106 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005107
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005108 pDst->report.RPIHistogram.rpi2_density = *pBuf;
5109 pBuf += 1;
5110 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005111 if (unlikely(ielen < 1)) {
5112 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005113 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005114 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005115
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005116 pDst->report.RPIHistogram.rpi3_density = *pBuf;
5117 pBuf += 1;
5118 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005119 if (unlikely(ielen < 1)) {
5120 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005121 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005122 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005123
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005124 pDst->report.RPIHistogram.rpi4_density = *pBuf;
5125 pBuf += 1;
5126 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005127 if (unlikely(ielen < 1)) {
5128 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005129 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005130 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005131
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005132 pDst->report.RPIHistogram.rpi5_density = *pBuf;
5133 pBuf += 1;
5134 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005135 if (unlikely(ielen < 1)) {
5136 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005137 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005138 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005139
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005140 pDst->report.RPIHistogram.rpi6_density = *pBuf;
5141 pBuf += 1;
5142 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005143 if (unlikely(ielen < 1)) {
5144 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005145 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005146 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005147
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005148 pDst->report.RPIHistogram.rpi7_density = *pBuf;
5149 pBuf += 1;
5150 ielen -= (uint8_t)1;
5151 break;
5152 case 5:
Naveen Rawat89e85d42018-05-23 11:54:27 -07005153 if (unlikely(ielen < 1)) {
5154 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005155 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005156 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005157
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005158 pDst->report.Beacon.regClass = *pBuf;
5159 pBuf += 1;
5160 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005161 if (unlikely(ielen < 1)) {
5162 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005163 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005164 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005165
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005166 pDst->report.Beacon.channel = *pBuf;
5167 pBuf += 1;
5168 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005169 if (unlikely(ielen < 8)) {
5170 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005171 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005172 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005173
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005174 framesntohq(pCtx, &pDst->report.Beacon.meas_start_time, pBuf, 0);
5175 pBuf += 8;
5176 ielen -= (uint8_t)8;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005177 if (unlikely(ielen < 2)) {
5178 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005179 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005180 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005181
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005182 framesntohs(pCtx, &pDst->report.Beacon.meas_duration, pBuf, 0);
5183 pBuf += 2;
5184 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005185 if (unlikely(ielen < 1)) {
5186 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005187 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005188 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005189
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305190 tmp53__ = *pBuf;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005191 pBuf += 1;
5192 ielen -= 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305193 pDst->report.Beacon.condensed_PHY = tmp53__ >> 0 & 0x7f;
5194 pDst->report.Beacon.reported_frame_type = tmp53__ >> 7 & 0x1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005195 if (unlikely(ielen < 1)) {
5196 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005197 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005198 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005199
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005200 pDst->report.Beacon.RCPI = *pBuf;
5201 pBuf += 1;
5202 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005203 if (unlikely(ielen < 1)) {
5204 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005205 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005206 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005207
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005208 pDst->report.Beacon.RSNI = *pBuf;
5209 pBuf += 1;
5210 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005211 if (unlikely(ielen < 6)) {
5212 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005213 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005214 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005215
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005216 DOT11F_MEMCPY(pCtx, pDst->report.Beacon.BSSID, pBuf, 6);
5217 pBuf += 6;
5218 ielen -= (uint8_t)6;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005219 if (unlikely(ielen < 1)) {
5220 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005221 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005222 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005223
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005224 pDst->report.Beacon.antenna_id = *pBuf;
5225 pBuf += 1;
5226 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005227 if (unlikely(ielen < 4)) {
5228 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005229 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005230 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005231
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005232 framesntohl(pCtx, &pDst->report.Beacon.parent_TSF, pBuf, 0);
5233 pBuf += 4;
5234 ielen -= (uint8_t)4;
5235 status |= unpack_core(pCtx,
5236 pBuf,
5237 ielen,
5238 FFS_reportBeacon,
5239 IES_reportBeacon,
5240 (uint8_t *)pDst,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305241 sizeof(*pDst), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005242 break;
5243 }
5244 }
5245 (void)pCtx;
5246 return status;
5247} /* End dot11f_unpack_ie_measurement_report. */
5248
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305249#define SigIeMeasurementReport (0x0041)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005250
5251
5252static const tFFDefn FFS_measurement_requestBeacon[] = {
5253 { NULL, 0, 0, 0,},
5254};
5255
5256static const tIEDefn IES_measurement_requestBeacon[] = {
5257 { offsetof(tDot11fIEMeasurementRequest,
5258 measurement_request.Beacon.SSID), offsetof(tDot11fIESSID, present), 0,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305259 "SSID", 0, 2, 34, SigIeSSID, {0, 0, 0, 0, 0}, 0, DOT11F_EID_SSID, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005260 { offsetof(tDot11fIEMeasurementRequest,
5261 measurement_request.Beacon.BeaconReporting),
5262 offsetof(tDot11fIEBeaconReporting, present), 0, "BeaconReporting",
5263 0, 4, 4, SigIeBeaconReporting, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305264 0, DOT11F_EID_BEACONREPORTING, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005265 { offsetof(tDot11fIEMeasurementRequest,
5266 measurement_request.Beacon.BcnReportingDetail),
5267 offsetof(tDot11fIEBcnReportingDetail, present), 0, "BcnReportingDetail",
5268 0, 3, 3, SigIeBcnReportingDetail, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305269 0, DOT11F_EID_BCNREPORTINGDETAIL, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005270 { offsetof(tDot11fIEMeasurementRequest,
5271 measurement_request.Beacon.RequestedInfo),
5272 offsetof(tDot11fIERequestedInfo, present), 0, "RequestedInfo",
5273 0, 2, 257, SigIeRequestedInfo, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305274 0, DOT11F_EID_REQUESTEDINFO, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005275 { offsetof(tDot11fIEMeasurementRequest,
5276 measurement_request.Beacon.APChannelReport),
5277 offsetof(tDot11fIEAPChannelReport, present),
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305278 offsetof(tDot11fIEMeasurementRequest, measurement_request.Beacon.num_APChannelReport), "APChannelReport", 2, 3, 53, SigIeAPChannelReport, {0, 0, 0, 0, 0}, 0, DOT11F_EID_APCHANNELREPORT, 0, 0, },
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305279 { offsetof(tDot11fIEMeasurementRequest,
5280 measurement_request.Beacon.last_beacon_report_indication),
5281 offsetof(tDot11fIElast_beacon_report_indication, present), 0,
5282 "last_beacon_report_indication",
5283 0, 3, 3, SigIelast_beacon_report_indication, {0, 0, 0, 0, 0},
5284 0, DOT11F_EID_LAST_BEACON_REPORT_INDICATION, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005285 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },
5286};
5287
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08005288static const tFFDefn FFS_measurement_requestlci[] = {
5289 { NULL, 0, 0, 0,},
5290};
5291
5292static const tIEDefn IES_measurement_requestlci[] = {
5293 { offsetof(tDot11fIEMeasurementRequest,
5294 measurement_request.lci.azimuth_req), offsetof(tDot11fIEazimuth_req,
5295 present), 0, "azimuth_req", 0, 3, 3, SigIeazimuth_req, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305296 0, DOT11F_EID_AZIMUTH_REQ, 0, 0, },
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08005297 { offsetof(tDot11fIEMeasurementRequest,
5298 measurement_request.lci.req_mac_addr), offsetof(tDot11fIEreq_mac_addr,
5299 present), 0, "req_mac_addr", 0, 8, 8, SigIereq_mac_addr, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305300 0, DOT11F_EID_REQ_MAC_ADDR, 0, 0, },
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08005301 { offsetof(tDot11fIEMeasurementRequest,
5302 measurement_request.lci.tgt_mac_addr), offsetof(tDot11fIEtgt_mac_addr,
5303 present), 0, "tgt_mac_addr", 0, 8, 8, SigIetgt_mac_addr, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305304 0, DOT11F_EID_TGT_MAC_ADDR, 0, 0, },
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08005305 { offsetof(tDot11fIEMeasurementRequest,
5306 measurement_request.lci.max_age), offsetof(tDot11fIEmax_age, present), 0,
5307 "max_age", 0, 4, 4, SigIemax_age, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305308 0, DOT11F_EID_MAX_AGE, 0, 0, },
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08005309 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },
5310};
5311
5312static const tFFDefn FFS_measurement_requestftmrr[] = {
5313 { NULL, 0, 0, 0,},
5314};
5315
5316static const tIEDefn IES_measurement_requestftmrr[] = {
5317 { offsetof(tDot11fIEMeasurementRequest,
5318 measurement_request.ftmrr.neighbor_rpt), offsetof(tDot11fIEneighbor_rpt,
5319 present), 0, "neighbor_rpt", 0, 15, 548, SigIeneighbor_rpt,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305320 {0, 0, 0, 0, 0}, 0, DOT11F_EID_NEIGHBOR_RPT, 0, 0, },
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08005321 { offsetof(tDot11fIEMeasurementRequest,
5322 measurement_request.ftmrr.max_age), offsetof(tDot11fIEmax_age, present),
5323 0, "max_age", 0, 4, 4, SigIemax_age, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305324 0, DOT11F_EID_MAX_AGE, 0, 0, },
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08005325 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },
5326};
5327
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005328uint32_t dot11f_unpack_ie_measurement_request(tpAniSirGlobal pCtx,
5329 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07005330 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305331 tDot11fIEMeasurementRequest *pDst,
5332 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005333{
5334 uint32_t status = DOT11F_PARSE_SUCCESS;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305335 uint8_t tmp54__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005336 (void) pBuf; (void)ielen; /* Shutup the compiler */
5337 if (pDst->present)
5338 status = DOT11F_DUPLICATE_IE;
5339 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005340 if (unlikely(ielen < 1)) {
5341 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005342 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005343 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005344
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005345 pDst->measurement_token = *pBuf;
5346 pBuf += 1;
5347 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005348 if (unlikely(ielen < 1)) {
5349 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005350 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005351 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005352
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305353 tmp54__ = *pBuf;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005354 pBuf += 1;
5355 ielen -= 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305356 pDst->parallel = tmp54__ >> 0 & 0x1;
5357 pDst->enable = tmp54__ >> 1 & 0x1;
5358 pDst->request = tmp54__ >> 2 & 0x1;
5359 pDst->report = tmp54__ >> 3 & 0x1;
5360 pDst->durationMandatory = tmp54__ >> 4 & 0x1;
5361 pDst->unused = tmp54__ >> 5 & 0x7;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005362 if (unlikely(ielen < 1)) {
5363 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005364 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005365 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005366
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005367 pDst->measurement_type = *pBuf;
5368 pBuf += 1;
5369 ielen -= (uint8_t)1;
5370 switch (pDst->measurement_type) {
5371 case 0:
Naveen Rawat89e85d42018-05-23 11:54:27 -07005372 if (unlikely(ielen < 1)) {
5373 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005374 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005375 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005376
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005377 pDst->measurement_request.Basic.channel_no = *pBuf;
5378 pBuf += 1;
5379 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005380 if (unlikely(ielen < 8)) {
5381 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005382 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005383 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005384
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005385 DOT11F_MEMCPY(pCtx, pDst->measurement_request.Basic.meas_start_time, pBuf, 8);
5386 pBuf += 8;
5387 ielen -= (uint8_t)8;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005388 if (unlikely(ielen < 2)) {
5389 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005390 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005391 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005392
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005393 framesntohs(pCtx, &pDst->measurement_request.Basic.meas_duration, pBuf, 0);
5394 pBuf += 2;
5395 ielen -= (uint8_t)2;
5396 break;
5397 case 1:
Naveen Rawat89e85d42018-05-23 11:54:27 -07005398 if (unlikely(ielen < 1)) {
5399 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005400 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005401 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005402
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005403 pDst->measurement_request.CCA.channel_no = *pBuf;
5404 pBuf += 1;
5405 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005406 if (unlikely(ielen < 8)) {
5407 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005408 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005409 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005410
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005411 DOT11F_MEMCPY(pCtx, pDst->measurement_request.CCA.meas_start_time, pBuf, 8);
5412 pBuf += 8;
5413 ielen -= (uint8_t)8;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005414 if (unlikely(ielen < 2)) {
5415 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005416 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005417 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005418
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005419 framesntohs(pCtx, &pDst->measurement_request.CCA.meas_duration, pBuf, 0);
5420 pBuf += 2;
5421 ielen -= (uint8_t)2;
5422 break;
5423 case 2:
Naveen Rawat89e85d42018-05-23 11:54:27 -07005424 if (unlikely(ielen < 1)) {
5425 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005426 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005427 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005428
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005429 pDst->measurement_request.RPIHistogram.channel_no = *pBuf;
5430 pBuf += 1;
5431 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005432 if (unlikely(ielen < 8)) {
5433 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005434 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005435 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005436
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005437 DOT11F_MEMCPY(pCtx, pDst->measurement_request.RPIHistogram.meas_start_time, pBuf, 8);
5438 pBuf += 8;
5439 ielen -= (uint8_t)8;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005440 if (unlikely(ielen < 2)) {
5441 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005442 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005443 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005444
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005445 framesntohs(pCtx, &pDst->measurement_request.RPIHistogram.meas_duration, pBuf, 0);
5446 pBuf += 2;
5447 ielen -= (uint8_t)2;
5448 break;
5449 case 5:
Naveen Rawat89e85d42018-05-23 11:54:27 -07005450 if (unlikely(ielen < 1)) {
5451 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005452 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005453 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005454
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005455 pDst->measurement_request.Beacon.regClass = *pBuf;
5456 pBuf += 1;
5457 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005458 if (unlikely(ielen < 1)) {
5459 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005460 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005461 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005462
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005463 pDst->measurement_request.Beacon.channel = *pBuf;
5464 pBuf += 1;
5465 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005466 if (unlikely(ielen < 2)) {
5467 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005468 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005469 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005470
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005471 framesntohs(pCtx, &pDst->measurement_request.Beacon.randomization, pBuf, 0);
5472 pBuf += 2;
5473 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005474 if (unlikely(ielen < 2)) {
5475 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005476 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005477 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005478
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005479 framesntohs(pCtx, &pDst->measurement_request.Beacon.meas_duration, pBuf, 0);
5480 pBuf += 2;
5481 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005482 if (unlikely(ielen < 1)) {
5483 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005484 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005485 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005486
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005487 pDst->measurement_request.Beacon.meas_mode = *pBuf;
5488 pBuf += 1;
5489 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005490 if (unlikely(ielen < 6)) {
5491 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005492 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005493 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005494
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005495 DOT11F_MEMCPY(pCtx, pDst->measurement_request.Beacon.BSSID, pBuf, 6);
5496 pBuf += 6;
5497 ielen -= (uint8_t)6;
5498 status |= unpack_core(pCtx,
5499 pBuf,
5500 ielen,
5501 FFS_measurement_requestBeacon,
5502 IES_measurement_requestBeacon,
5503 (uint8_t *)pDst,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305504 sizeof(*pDst), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005505 break;
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08005506 case 8:
Naveen Rawat89e85d42018-05-23 11:54:27 -07005507 if (unlikely(ielen < 1)) {
5508 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005509 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005510 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005511
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08005512 pDst->measurement_request.lci.loc_subject = *pBuf;
5513 pBuf += 1;
5514 ielen -= (uint8_t)1;
5515 status |= unpack_core(pCtx,
5516 pBuf,
5517 ielen,
5518 FFS_measurement_requestlci,
5519 IES_measurement_requestlci,
5520 (uint8_t *)pDst,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305521 sizeof(*pDst), append_ie);
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08005522 break;
5523 case 16:
Naveen Rawat89e85d42018-05-23 11:54:27 -07005524 if (unlikely(ielen < 2)) {
5525 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005526 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005527 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005528
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08005529 framesntohs(pCtx, &pDst->measurement_request.ftmrr.random_interval, pBuf, 0);
5530 pBuf += 2;
5531 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005532 if (unlikely(ielen < 1)) {
5533 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005534 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005535 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005536
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08005537 pDst->measurement_request.ftmrr.min_ap_count = *pBuf;
5538 pBuf += 1;
5539 ielen -= (uint8_t)1;
5540 status |= unpack_core(pCtx,
5541 pBuf,
5542 ielen,
5543 FFS_measurement_requestftmrr,
5544 IES_measurement_requestftmrr,
5545 (uint8_t *)pDst,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305546 sizeof(*pDst), append_ie);
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08005547 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005548 }
5549 (void)pCtx;
5550 return status;
5551} /* End dot11f_unpack_ie_measurement_request. */
5552
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305553#define SigIeMeasurementRequest (0x0042)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005554
5555
5556uint32_t dot11f_unpack_ie_mobility_domain(tpAniSirGlobal pCtx,
5557 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07005558 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305559 tDot11fIEMobilityDomain *pDst,
5560 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005561{
5562 uint32_t status = DOT11F_PARSE_SUCCESS;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305563 uint8_t tmp55__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005564 (void) pBuf; (void)ielen; /* Shutup the compiler */
5565 if (pDst->present)
5566 status = DOT11F_DUPLICATE_IE;
5567 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005568 if (unlikely(ielen < 2)) {
5569 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005570 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005571 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005572
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005573 framesntohs(pCtx, &pDst->MDID, pBuf, 0);
5574 pBuf += 2;
5575 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005576 if (unlikely(ielen < 1)) {
5577 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005578 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005579 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005580
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305581 tmp55__ = *pBuf;
5582 pDst->overDSCap = tmp55__ >> 0 & 0x1;
5583 pDst->resourceReqCap = tmp55__ >> 1 & 0x1;
5584 pDst->reserved = tmp55__ >> 2 & 0x3f;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005585 (void)pCtx;
5586 return status;
5587} /* End dot11f_unpack_ie_mobility_domain. */
5588
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305589#define SigIeMobilityDomain (0x0043)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005590
5591
5592static const tFFDefn FFS_NeighborReport[] = {
5593 { NULL, 0, 0, 0,},
5594};
5595
5596static const tIEDefn IES_NeighborReport[] = {
5597 { offsetof(tDot11fIENeighborReport, TSFInfo), offsetof(tDot11fIETSFInfo,
5598 present), 0, "TSFInfo", 0, 6, 6, SigIeTSFInfo, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305599 0, DOT11F_EID_TSFINFO, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005600 { offsetof(tDot11fIENeighborReport, CondensedCountryStr),
5601 offsetof(tDot11fIECondensedCountryStr, present), 0, "CondensedCountryStr",
5602 0, 4, 4, SigIeCondensedCountryStr, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305603 0, DOT11F_EID_CONDENSEDCOUNTRYSTR, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005604 { offsetof(tDot11fIENeighborReport, MeasurementPilot),
5605 offsetof(tDot11fIEMeasurementPilot, present), 0, "MeasurementPilot",
5606 0, 3, 258, SigIeMeasurementPilot, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305607 0, DOT11F_EID_MEASUREMENTPILOT, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005608 { offsetof(tDot11fIENeighborReport, RRMEnabledCap),
5609 offsetof(tDot11fIERRMEnabledCap, present), 0, "RRMEnabledCap",
5610 0, 7, 7, SigIeRRMEnabledCap, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305611 0, DOT11F_EID_RRMENABLEDCAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005612 { offsetof(tDot11fIENeighborReport, MultiBssid),
5613 offsetof(tDot11fIEMultiBssid, present), 0, "MultiBssid",
5614 0, 3, 258, SigIeMultiBssid, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305615 0, DOT11F_EID_MULTIBSSID, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005616 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },
5617};
5618
5619uint32_t dot11f_unpack_ie_neighbor_report(tpAniSirGlobal pCtx,
5620 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07005621 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305622 tDot11fIENeighborReport *pDst,
5623 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005624{
5625 uint32_t status = DOT11F_PARSE_SUCCESS;
Abhishek Singh951eed82017-07-06 16:53:19 +05305626 uint8_t tmp56__;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305627 uint8_t tmp57__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005628 (void) pBuf; (void)ielen; /* Shutup the compiler */
5629 if (pDst->present)
5630 status = DOT11F_DUPLICATE_IE;
5631 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005632 if (unlikely(ielen < 6)) {
5633 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005634 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005635 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005636
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005637 DOT11F_MEMCPY(pCtx, pDst->bssid, pBuf, 6);
5638 pBuf += 6;
5639 ielen -= (uint8_t)6;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005640 if (unlikely(ielen < 1)) {
5641 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005642 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005643 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005644
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305645 tmp56__ = *pBuf;
Naveen Rawat819158d2018-01-16 10:56:45 -08005646 pBuf += 1;
5647 ielen -= 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305648 pDst->APReachability = tmp56__ >> 0 & 0x3;
5649 pDst->Security = tmp56__ >> 2 & 0x1;
5650 pDst->KeyScope = tmp56__ >> 3 & 0x1;
5651 pDst->SpecMgmtCap = tmp56__ >> 4 & 0x1;
5652 pDst->QosCap = tmp56__ >> 5 & 0x1;
5653 pDst->apsd = tmp56__ >> 6 & 0x1;
5654 pDst->rrm = tmp56__ >> 7 & 0x1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005655 if (unlikely(ielen < 1)) {
5656 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005657 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005658 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005659
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305660 tmp57__ = *pBuf;
Abhishek Singh518323d2015-10-19 17:42:01 +05305661 pBuf += 1;
5662 ielen -= 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305663 pDst->DelayedBA = tmp57__ >> 0 & 0x1;
5664 pDst->ImmBA = tmp57__ >> 1 & 0x1;
5665 pDst->MobilityDomain = tmp57__ >> 2 & 0x1;
5666 pDst->reserved = tmp57__ >> 3 & 0x1f;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005667 if (unlikely(ielen < 2)) {
5668 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005669 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005670 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005671
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005672 framesntohs(pCtx, &pDst->reserved1, pBuf, 0);
5673 pBuf += 2;
5674 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005675 if (unlikely(ielen < 1)) {
5676 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005677 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005678 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005679
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005680 pDst->regulatoryClass = *pBuf;
5681 pBuf += 1;
5682 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005683 if (unlikely(ielen < 1)) {
5684 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005685 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005686 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005687
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005688 pDst->channel = *pBuf;
5689 pBuf += 1;
5690 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005691 if (unlikely(ielen < 1)) {
5692 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005693 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005694 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005695
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005696 pDst->PhyType = *pBuf;
5697 pBuf += 1;
5698 ielen -= (uint8_t)1;
5699 (void)pCtx;
5700 status |= unpack_core(pCtx,
5701 pBuf,
5702 ielen,
5703 FFS_NeighborReport,
5704 IES_NeighborReport,
5705 (uint8_t *)pDst,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305706 sizeof(*pDst),
5707 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005708 return status;
5709} /* End dot11f_unpack_ie_neighbor_report. */
5710
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305711#define SigIeNeighborReport (0x0044)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005712
5713
5714uint32_t dot11f_unpack_ie_obss_scan_parameters(tpAniSirGlobal pCtx,
5715 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07005716 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305717 tDot11fIEOBSSScanParameters *pDst,
5718 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005719{
5720 uint32_t status = DOT11F_PARSE_SUCCESS;
5721 (void) pBuf; (void)ielen; /* Shutup the compiler */
5722 if (pDst->present)
5723 status = DOT11F_DUPLICATE_IE;
5724 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005725 if (unlikely(ielen < 2)) {
5726 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005727 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005728 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005729
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005730 framesntohs(pCtx, &pDst->obssScanPassiveDwell, pBuf, 0);
5731 pBuf += 2;
5732 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005733 if (unlikely(ielen < 2)) {
5734 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005735 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005736 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005737
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005738 framesntohs(pCtx, &pDst->obssScanActiveDwell, pBuf, 0);
5739 pBuf += 2;
5740 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005741 if (unlikely(ielen < 2)) {
5742 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005743 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005744 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005745
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005746 framesntohs(pCtx, &pDst->bssChannelWidthTriggerScanInterval, pBuf, 0);
5747 pBuf += 2;
5748 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005749 if (unlikely(ielen < 2)) {
5750 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005751 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005752 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005753
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005754 framesntohs(pCtx, &pDst->obssScanPassiveTotalPerChannel, pBuf, 0);
5755 pBuf += 2;
5756 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005757 if (unlikely(ielen < 2)) {
5758 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005759 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005760 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005761
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005762 framesntohs(pCtx, &pDst->obssScanActiveTotalPerChannel, pBuf, 0);
5763 pBuf += 2;
5764 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005765 if (unlikely(ielen < 2)) {
5766 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005767 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005768 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005769
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005770 framesntohs(pCtx, &pDst->bssWidthChannelTransitionDelayFactor, pBuf, 0);
5771 pBuf += 2;
5772 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005773 if (unlikely(ielen < 2)) {
5774 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005775 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005776 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005777
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005778 framesntohs(pCtx, &pDst->obssScanActivityThreshold, pBuf, 0);
5779 (void)pCtx;
5780 return status;
5781} /* End dot11f_unpack_ie_obss_scan_parameters. */
5782
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305783#define SigIeOBSSScanParameters (0x0045)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005784
5785
5786uint32_t dot11f_unpack_ie_operating_mode(tpAniSirGlobal pCtx,
5787 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07005788 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305789 tDot11fIEOperatingMode *pDst,
5790 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005791{
5792 uint32_t status = DOT11F_PARSE_SUCCESS;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305793 uint8_t tmp58__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005794 (void) pBuf; (void)ielen; /* Shutup the compiler */
5795 if (pDst->present)
5796 status = DOT11F_DUPLICATE_IE;
5797 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005798 if (unlikely(ielen < 1)) {
5799 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07005800 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07005801 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07005802
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305803 tmp58__ = *pBuf;
5804 pDst->chanWidth = tmp58__ >> 0 & 0x3;
5805 pDst->reserved = tmp58__ >> 2 & 0x3;
5806 pDst->rxNSS = tmp58__ >> 4 & 0x7;
5807 pDst->rxNSSType = tmp58__ >> 7 & 0x1;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005808 (void)pCtx;
5809 return status;
5810} /* End dot11f_unpack_ie_operating_mode. */
5811
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305812#define SigIeOperatingMode (0x0046)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005813
5814
5815static const tTLVDefn TLVS_P2PAssocReq[] = {
5816 { offsetof(tDot11fIEP2PAssocReq, P2PCapability),
5817 offsetof(tDot11fTLVP2PCapability, present), "P2PCapability",
5818 SigTlvP2PCapability, DOT11F_TLV_P2PCAPABILITY, 0, 5, 5, 1, 1, 2, 0, },
5819 { offsetof(tDot11fIEP2PAssocReq, ExtendedListenTiming),
5820 offsetof(tDot11fTLVExtendedListenTiming, present),
5821 "ExtendedListenTiming", SigTlvExtendedListenTiming,
5822 DOT11F_TLV_EXTENDEDLISTENTIMING, 0, 7, 7, 0, 1, 2, 0, },
5823 { offsetof(tDot11fIEP2PAssocReq, P2PDeviceInfo),
5824 offsetof(tDot11fTLVP2PDeviceInfo, present), "P2PDeviceInfo",
5825 SigTlvP2PDeviceInfo, DOT11F_TLV_P2PDEVICEINFO, 0, 19, 55, 1, 1, 2, 0, },
5826 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
5827};
5828
5829uint32_t dot11f_unpack_ie_p2_p_assoc_req(tpAniSirGlobal pCtx,
5830 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07005831 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305832 tDot11fIEP2PAssocReq *pDst,
5833 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005834{
5835 uint32_t status = DOT11F_PARSE_SUCCESS;
5836 (void)pBuf; (void)ielen; /* Shutup the compiler */
5837 pDst->present = 1;
5838 status = unpack_tlv_core(pCtx, pBuf, ielen,
5839 TLVS_P2PAssocReq,
5840 (uint8_t *)pDst, sizeof(*pDst));
5841 return status;
5842} /* End dot11f_unpack_ie_p2_p_assoc_req. */
5843
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305844#define SigIeP2PAssocReq (0x0047)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005845
5846
5847static const tTLVDefn TLVS_P2PAssocRes[] = {
5848 { offsetof(tDot11fIEP2PAssocRes, P2PStatus),
5849 offsetof(tDot11fTLVP2PStatus, present), "P2PStatus", SigTlvP2PStatus,
5850 DOT11F_TLV_P2PSTATUS, 0, 4, 4, 1, 1, 2, 0, },
5851 { offsetof(tDot11fIEP2PAssocRes, ExtendedListenTiming),
5852 offsetof(tDot11fTLVExtendedListenTiming, present),
5853 "ExtendedListenTiming", SigTlvExtendedListenTiming,
5854 DOT11F_TLV_EXTENDEDLISTENTIMING, 0, 7, 7, 0, 1, 2, 0, },
5855 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
5856};
5857
5858uint32_t dot11f_unpack_ie_p2_p_assoc_res(tpAniSirGlobal pCtx,
5859 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07005860 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305861 tDot11fIEP2PAssocRes *pDst,
5862 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005863{
5864 uint32_t status = DOT11F_PARSE_SUCCESS;
5865 (void)pBuf; (void)ielen; /* Shutup the compiler */
5866 pDst->present = 1;
5867 status = unpack_tlv_core(pCtx, pBuf, ielen,
5868 TLVS_P2PAssocRes,
5869 (uint8_t *)pDst, sizeof(*pDst));
5870 return status;
5871} /* End dot11f_unpack_ie_p2_p_assoc_res. */
5872
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305873#define SigIeP2PAssocRes (0x0048)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005874
5875
5876static const tTLVDefn TLVS_P2PBeacon[] = {
5877 { offsetof(tDot11fIEP2PBeacon, P2PCapability),
5878 offsetof(tDot11fTLVP2PCapability, present), "P2PCapability",
5879 SigTlvP2PCapability, DOT11F_TLV_P2PCAPABILITY, 0, 5, 5, 1, 1, 2, 0, },
5880 { offsetof(tDot11fIEP2PBeacon, P2PDeviceId),
5881 offsetof(tDot11fTLVP2PDeviceId, present), "P2PDeviceId",
5882 SigTlvP2PDeviceId, DOT11F_TLV_P2PDEVICEID, 0, 9, 9, 1, 1, 2, 0, },
5883 { offsetof(tDot11fIEP2PBeacon, NoticeOfAbsence),
5884 offsetof(tDot11fTLVNoticeOfAbsence, present), "NoticeOfAbsence",
5885 SigTlvNoticeOfAbsence, DOT11F_TLV_NOTICEOFABSENCE,
5886 0, 5, 41, 0, 1, 2, 0, },
5887 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
5888};
5889
5890uint32_t dot11f_unpack_ie_p2_p_beacon(tpAniSirGlobal pCtx,
5891 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07005892 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305893 tDot11fIEP2PBeacon *pDst,
5894 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005895{
5896 uint32_t status = DOT11F_PARSE_SUCCESS;
5897 (void)pBuf; (void)ielen; /* Shutup the compiler */
5898 pDst->present = 1;
5899 status = unpack_tlv_core(pCtx, pBuf, ielen,
5900 TLVS_P2PBeacon,
5901 (uint8_t *)pDst, sizeof(*pDst));
5902 return status;
5903} /* End dot11f_unpack_ie_p2_p_beacon. */
5904
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305905#define SigIeP2PBeacon (0x0049)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005906
5907
5908static const tTLVDefn TLVS_P2PBeaconProbeRes[] = {
5909 { offsetof(tDot11fIEP2PBeaconProbeRes, P2PCapability),
5910 offsetof(tDot11fTLVP2PCapability, present), "P2PCapability",
5911 SigTlvP2PCapability, DOT11F_TLV_P2PCAPABILITY, 0, 5, 5, 0, 1, 2, 0, },
5912 { offsetof(tDot11fIEP2PBeaconProbeRes, P2PDeviceId),
5913 offsetof(tDot11fTLVP2PDeviceId, present), "P2PDeviceId",
5914 SigTlvP2PDeviceId, DOT11F_TLV_P2PDEVICEID, 0, 9, 9, 0, 1, 2, 0, },
5915 { offsetof(tDot11fIEP2PBeaconProbeRes, ExtendedListenTiming),
5916 offsetof(tDot11fTLVExtendedListenTiming, present),
5917 "ExtendedListenTiming", SigTlvExtendedListenTiming,
5918 DOT11F_TLV_EXTENDEDLISTENTIMING, 0, 7, 7, 0, 1, 2, 0, },
5919 { offsetof(tDot11fIEP2PBeaconProbeRes, NoticeOfAbsence),
5920 offsetof(tDot11fTLVNoticeOfAbsence, present), "NoticeOfAbsence",
5921 SigTlvNoticeOfAbsence, DOT11F_TLV_NOTICEOFABSENCE,
5922 0, 5, 41, 0, 1, 2, 0, },
5923 { offsetof(tDot11fIEP2PBeaconProbeRes, P2PDeviceInfo),
5924 offsetof(tDot11fTLVP2PDeviceInfo, present), "P2PDeviceInfo",
5925 SigTlvP2PDeviceInfo, DOT11F_TLV_P2PDEVICEINFO, 0, 19, 55, 0, 1, 2, 0, },
5926 { offsetof(tDot11fIEP2PBeaconProbeRes, P2PGroupInfo),
5927 offsetof(tDot11fTLVP2PGroupInfo, present), "P2PGroupInfo",
5928 SigTlvP2PGroupInfo, DOT11F_TLV_P2PGROUPINFO, 0, 3, 1027, 0, 1, 2, 0, },
5929 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
5930};
5931
5932uint32_t dot11f_unpack_ie_p2_p_beacon_probe_res(tpAniSirGlobal pCtx,
5933 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07005934 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305935 tDot11fIEP2PBeaconProbeRes *pDst,
5936 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005937{
5938 uint32_t status = DOT11F_PARSE_SUCCESS;
5939 (void)pBuf; (void)ielen; /* Shutup the compiler */
5940 pDst->present = 1;
5941 status = unpack_tlv_core(pCtx, pBuf, ielen,
5942 TLVS_P2PBeaconProbeRes,
5943 (uint8_t *)pDst, sizeof(*pDst));
5944 return status;
5945} /* End dot11f_unpack_ie_p2_p_beacon_probe_res. */
5946
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305947#define SigIeP2PBeaconProbeRes (0x004a)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005948
5949
5950static const tTLVDefn TLVS_P2PDeAuth[] = {
5951 { offsetof(tDot11fIEP2PDeAuth, MinorReasonCode),
5952 offsetof(tDot11fTLVMinorReasonCode, present), "MinorReasonCode",
5953 SigTlvMinorReasonCode, DOT11F_TLV_MINORREASONCODE,
5954 0, 4, 4, 1, 1, 2, 0, },
5955 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
5956};
5957
5958uint32_t dot11f_unpack_ie_p2_p_de_auth(tpAniSirGlobal pCtx,
5959 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07005960 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305961 tDot11fIEP2PDeAuth *pDst,
5962 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005963{
5964 uint32_t status = DOT11F_PARSE_SUCCESS;
5965 (void)pBuf; (void)ielen; /* Shutup the compiler */
5966 pDst->present = 1;
5967 status = unpack_tlv_core(pCtx, pBuf, ielen,
5968 TLVS_P2PDeAuth,
5969 (uint8_t *)pDst, sizeof(*pDst));
5970 return status;
5971} /* End dot11f_unpack_ie_p2_p_de_auth. */
5972
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305973#define SigIeP2PDeAuth (0x004b)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005974
5975
5976static const tTLVDefn TLVS_P2PDisAssoc[] = {
5977 { offsetof(tDot11fIEP2PDisAssoc, MinorReasonCode),
5978 offsetof(tDot11fTLVMinorReasonCode, present), "MinorReasonCode",
5979 SigTlvMinorReasonCode, DOT11F_TLV_MINORREASONCODE,
5980 0, 4, 4, 1, 1, 2, 0, },
5981 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
5982};
5983
5984uint32_t dot11f_unpack_ie_p2_p_dis_assoc(tpAniSirGlobal pCtx,
5985 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07005986 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05305987 tDot11fIEP2PDisAssoc *pDst,
5988 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08005989{
5990 uint32_t status = DOT11F_PARSE_SUCCESS;
5991 (void)pBuf; (void)ielen; /* Shutup the compiler */
5992 pDst->present = 1;
5993 status = unpack_tlv_core(pCtx, pBuf, ielen,
5994 TLVS_P2PDisAssoc,
5995 (uint8_t *)pDst, sizeof(*pDst));
5996 return status;
5997} /* End dot11f_unpack_ie_p2_p_dis_assoc. */
5998
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05305999#define SigIeP2PDisAssoc (0x004c)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006000
6001
6002uint32_t dot11f_unpack_ie_p2_pie_opaque(tpAniSirGlobal pCtx,
6003 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07006004 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306005 tDot11fIEP2PIEOpaque *pDst,
6006 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006007{
6008 uint32_t status = DOT11F_PARSE_SUCCESS;
6009 (void) pBuf; (void)ielen; /* Shutup the compiler */
6010 if (pDst->present)
6011 status = DOT11F_DUPLICATE_IE;
6012 pDst->present = 1;
6013 pDst->num_data = (uint8_t)(ielen);
6014 if (ielen > 249) {
6015 pDst->present = 0;
6016 return DOT11F_SKIPPED_BAD_IE;
6017 }
6018
6019 DOT11F_MEMCPY(pCtx, pDst->data, pBuf, (ielen));
6020 (void)pCtx;
6021 return status;
6022} /* End dot11f_unpack_ie_p2_pie_opaque. */
6023
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306024#define SigIeP2PIEOpaque (0x004d)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006025
6026
6027static const tTLVDefn TLVS_P2PProbeReq[] = {
6028 { offsetof(tDot11fIEP2PProbeReq, P2PCapability),
6029 offsetof(tDot11fTLVP2PCapability, present), "P2PCapability",
6030 SigTlvP2PCapability, DOT11F_TLV_P2PCAPABILITY, 0, 5, 5, 1, 1, 2, 0, },
6031 { offsetof(tDot11fIEP2PProbeReq, P2PDeviceId),
6032 offsetof(tDot11fTLVP2PDeviceId, present), "P2PDeviceId",
6033 SigTlvP2PDeviceId, DOT11F_TLV_P2PDEVICEID, 0, 9, 9, 0, 1, 2, 0, },
6034 { offsetof(tDot11fIEP2PProbeReq, ListenChannel),
6035 offsetof(tDot11fTLVListenChannel, present), "ListenChannel",
6036 SigTlvListenChannel, DOT11F_TLV_LISTENCHANNEL, 0, 8, 8, 1, 1, 2, 0, },
6037 { offsetof(tDot11fIEP2PProbeReq, ExtendedListenTiming),
6038 offsetof(tDot11fTLVExtendedListenTiming, present),
6039 "ExtendedListenTiming", SigTlvExtendedListenTiming,
6040 DOT11F_TLV_EXTENDEDLISTENTIMING, 0, 7, 7, 0, 1, 2, 0, },
6041 { offsetof(tDot11fIEP2PProbeReq, OperatingChannel),
6042 offsetof(tDot11fTLVOperatingChannel, present), "OperatingChannel",
6043 SigTlvOperatingChannel, DOT11F_TLV_OPERATINGCHANNEL,
6044 0, 8, 8, 0, 1, 2, 0, },
6045 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
6046};
6047
6048uint32_t dot11f_unpack_ie_p2_p_probe_req(tpAniSirGlobal pCtx,
6049 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07006050 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306051 tDot11fIEP2PProbeReq *pDst,
6052 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006053{
6054 uint32_t status = DOT11F_PARSE_SUCCESS;
6055 (void)pBuf; (void)ielen; /* Shutup the compiler */
6056 pDst->present = 1;
6057 status = unpack_tlv_core(pCtx, pBuf, ielen,
6058 TLVS_P2PProbeReq,
6059 (uint8_t *)pDst, sizeof(*pDst));
6060 return status;
6061} /* End dot11f_unpack_ie_p2_p_probe_req. */
6062
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306063#define SigIeP2PProbeReq (0x004e)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006064
6065
6066static const tTLVDefn TLVS_P2PProbeRes[] = {
6067 { offsetof(tDot11fIEP2PProbeRes, P2PCapability),
6068 offsetof(tDot11fTLVP2PCapability, present), "P2PCapability",
6069 SigTlvP2PCapability, DOT11F_TLV_P2PCAPABILITY, 0, 5, 5, 1, 1, 2, 0, },
6070 { offsetof(tDot11fIEP2PProbeRes, ExtendedListenTiming),
6071 offsetof(tDot11fTLVExtendedListenTiming, present),
6072 "ExtendedListenTiming", SigTlvExtendedListenTiming,
6073 DOT11F_TLV_EXTENDEDLISTENTIMING, 0, 7, 7, 0, 1, 2, 0, },
6074 { offsetof(tDot11fIEP2PProbeRes, NoticeOfAbsence),
6075 offsetof(tDot11fTLVNoticeOfAbsence, present), "NoticeOfAbsence",
6076 SigTlvNoticeOfAbsence, DOT11F_TLV_NOTICEOFABSENCE,
6077 0, 5, 41, 0, 1, 2, 0, },
6078 { offsetof(tDot11fIEP2PProbeRes, P2PDeviceInfo),
6079 offsetof(tDot11fTLVP2PDeviceInfo, present), "P2PDeviceInfo",
6080 SigTlvP2PDeviceInfo, DOT11F_TLV_P2PDEVICEINFO, 0, 19, 55, 1, 1, 2, 0, },
6081 { offsetof(tDot11fIEP2PProbeRes, P2PGroupInfo),
6082 offsetof(tDot11fTLVP2PGroupInfo, present), "P2PGroupInfo",
6083 SigTlvP2PGroupInfo, DOT11F_TLV_P2PGROUPINFO, 0, 3, 1027, 0, 1, 2, 0, },
6084 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
6085};
6086
6087uint32_t dot11f_unpack_ie_p2_p_probe_res(tpAniSirGlobal pCtx,
6088 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07006089 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306090 tDot11fIEP2PProbeRes *pDst,
6091 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006092{
6093 uint32_t status = DOT11F_PARSE_SUCCESS;
6094 (void)pBuf; (void)ielen; /* Shutup the compiler */
6095 pDst->present = 1;
6096 status = unpack_tlv_core(pCtx, pBuf, ielen,
6097 TLVS_P2PProbeRes,
6098 (uint8_t *)pDst, sizeof(*pDst));
6099 return status;
6100} /* End dot11f_unpack_ie_p2_p_probe_res. */
6101
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306102#define SigIeP2PProbeRes (0x004f)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006103
6104
6105uint32_t dot11f_unpack_ie_pti_control(tpAniSirGlobal pCtx,
6106 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07006107 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306108 tDot11fIEPTIControl *pDst,
6109 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006110{
6111 uint32_t status = DOT11F_PARSE_SUCCESS;
6112 (void) pBuf; (void)ielen; /* Shutup the compiler */
6113 if (pDst->present)
6114 status = DOT11F_DUPLICATE_IE;
6115 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006116 if (unlikely(ielen < 1)) {
6117 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006118 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006119 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006120
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006121 pDst->tid = *pBuf;
6122 pBuf += 1;
6123 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006124 if (unlikely(ielen < 2)) {
6125 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006126 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006127 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006128
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006129 framesntohs(pCtx, &pDst->sequence_control, pBuf, 0);
6130 (void)pCtx;
6131 return status;
6132} /* End dot11f_unpack_ie_pti_control. */
6133
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306134#define SigIePTIControl (0x0050)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006135
6136
6137uint32_t dot11f_unpack_ie_pu_buffer_status(tpAniSirGlobal pCtx,
6138 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07006139 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306140 tDot11fIEPUBufferStatus *pDst,
6141 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006142{
6143 uint32_t status = DOT11F_PARSE_SUCCESS;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306144 uint8_t tmp59__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006145 (void) pBuf; (void)ielen; /* Shutup the compiler */
6146 if (pDst->present)
6147 status = DOT11F_DUPLICATE_IE;
6148 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006149 if (unlikely(ielen < 1)) {
6150 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006151 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006152 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006153
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306154 tmp59__ = *pBuf;
6155 pDst->ac_bk_traffic_aval = tmp59__ >> 0 & 0x1;
6156 pDst->ac_be_traffic_aval = tmp59__ >> 1 & 0x1;
6157 pDst->ac_vi_traffic_aval = tmp59__ >> 2 & 0x1;
6158 pDst->ac_vo_traffic_aval = tmp59__ >> 3 & 0x1;
6159 pDst->reserved = tmp59__ >> 4 & 0xf;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006160 (void)pCtx;
6161 return status;
6162} /* End dot11f_unpack_ie_pu_buffer_status. */
6163
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306164#define SigIePUBufferStatus (0x0051)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006165
6166
6167uint32_t dot11f_unpack_ie_power_caps(tpAniSirGlobal pCtx,
6168 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07006169 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306170 tDot11fIEPowerCaps *pDst,
6171 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006172{
6173 uint32_t status = DOT11F_PARSE_SUCCESS;
6174 (void) pBuf; (void)ielen; /* Shutup the compiler */
6175 if (pDst->present)
6176 status = DOT11F_DUPLICATE_IE;
6177 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006178 if (unlikely(ielen < 1)) {
6179 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006180 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006181 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006182
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006183 pDst->minTxPower = *pBuf;
6184 pBuf += 1;
6185 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006186 if (unlikely(ielen < 1)) {
6187 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006188 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006189 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006190
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006191 pDst->maxTxPower = *pBuf;
6192 (void)pCtx;
6193 return status;
6194} /* End dot11f_unpack_ie_power_caps. */
6195
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306196#define SigIePowerCaps (0x0052)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006197
6198
6199uint32_t dot11f_unpack_ie_power_constraints(tpAniSirGlobal pCtx,
6200 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07006201 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306202 tDot11fIEPowerConstraints *pDst,
6203 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006204{
6205 uint32_t status = DOT11F_PARSE_SUCCESS;
6206 (void) pBuf; (void)ielen; /* Shutup the compiler */
6207 if (pDst->present)
6208 status = DOT11F_DUPLICATE_IE;
6209 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006210 if (unlikely(ielen < 1)) {
6211 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006212 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006213 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006214
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006215 pDst->localPowerConstraints = *pBuf;
6216 (void)pCtx;
6217 return status;
6218} /* End dot11f_unpack_ie_power_constraints. */
6219
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306220#define SigIePowerConstraints (0x0053)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006221
6222
6223uint32_t dot11f_unpack_ie_qbss_load(tpAniSirGlobal pCtx,
6224 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07006225 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306226 tDot11fIEQBSSLoad *pDst,
6227 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006228{
6229 uint32_t status = DOT11F_PARSE_SUCCESS;
6230 (void) pBuf; (void)ielen; /* Shutup the compiler */
6231 if (pDst->present)
6232 status = DOT11F_DUPLICATE_IE;
6233 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006234 if (unlikely(ielen < 2)) {
6235 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006236 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006237 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006238
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006239 framesntohs(pCtx, &pDst->stacount, pBuf, 0);
6240 pBuf += 2;
6241 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006242 if (unlikely(ielen < 1)) {
6243 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006244 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006245 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006246
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006247 pDst->chautil = *pBuf;
6248 pBuf += 1;
6249 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006250 if (unlikely(ielen < 2)) {
6251 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006252 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006253 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006254
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006255 framesntohs(pCtx, &pDst->avail, pBuf, 0);
6256 (void)pCtx;
6257 return status;
6258} /* End dot11f_unpack_ie_qbss_load. */
6259
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306260#define SigIeQBSSLoad (0x0054)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006261
6262
Selvaraj, Sridharc2fe7a32017-02-02 19:20:16 +05306263uint32_t dot11f_unpack_ie_QCN_IE(tpAniSirGlobal pCtx,
6264 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07006265 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306266 tDot11fIEQCN_IE *pDst,
6267 bool append_ie)
Selvaraj, Sridharc2fe7a32017-02-02 19:20:16 +05306268{
6269 uint32_t status = DOT11F_PARSE_SUCCESS;
6270 (void) pBuf; (void)ielen; /* Shutup the compiler */
6271 if (pDst->present)
6272 status = DOT11F_DUPLICATE_IE;
6273 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006274 if (unlikely(ielen < 4)) {
6275 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006276 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006277 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006278
Selvaraj, Sridharc2fe7a32017-02-02 19:20:16 +05306279 DOT11F_MEMCPY(pCtx, pDst->version, pBuf, 4);
6280 (void)pCtx;
6281 return status;
6282} /* End dot11f_unpack_ie_QCN_IE. */
6283
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306284#define SigIeQCN_IE (0x0055)
Selvaraj, Sridharc2fe7a32017-02-02 19:20:16 +05306285
6286
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006287uint32_t dot11f_unpack_ie_QComVendorIE(tpAniSirGlobal pCtx,
6288 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07006289 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306290 tDot11fIEQComVendorIE *pDst,
6291 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006292{
6293 uint32_t status = DOT11F_PARSE_SUCCESS;
6294 (void) pBuf; (void)ielen; /* Shutup the compiler */
6295 if (pDst->present)
6296 status = DOT11F_DUPLICATE_IE;
6297 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006298 if (unlikely(ielen < 1)) {
6299 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006300 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006301 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006302
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006303 pDst->type = *pBuf;
6304 pBuf += 1;
6305 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006306 if (unlikely(ielen < 1)) {
6307 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006308 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006309 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006310
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006311 pDst->channel = *pBuf;
6312 (void)pCtx;
6313 return status;
6314} /* End dot11f_unpack_ie_QComVendorIE. */
6315
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306316#define SigIeQComVendorIE (0x0056)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006317
6318
6319uint32_t dot11f_unpack_ie_qos_caps_ap(tpAniSirGlobal pCtx,
6320 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07006321 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306322 tDot11fIEQOSCapsAp *pDst,
6323 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006324{
6325 uint32_t status = DOT11F_PARSE_SUCCESS;
Naveen Rawat819158d2018-01-16 10:56:45 -08006326 uint8_t tmp60__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006327 (void) pBuf; (void)ielen; /* Shutup the compiler */
6328 if (pDst->present)
6329 status = DOT11F_DUPLICATE_IE;
6330 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006331 if (unlikely(ielen < 1)) {
6332 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006333 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006334 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006335
Naveen Rawat819158d2018-01-16 10:56:45 -08006336 tmp60__ = *pBuf;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306337 pDst->count = tmp60__ >> 0 & 0xf;
Naveen Rawat819158d2018-01-16 10:56:45 -08006338 pDst->qack = tmp60__ >> 4 & 0x1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306339 pDst->qreq = tmp60__ >> 5 & 0x1;
6340 pDst->txopreq = tmp60__ >> 6 & 0x1;
6341 pDst->reserved = tmp60__ >> 7 & 0x1;
6342 (void)pCtx;
6343 return status;
6344} /* End dot11f_unpack_ie_qos_caps_ap. */
6345
6346#define SigIeQOSCapsAp (0x0057)
6347
6348
6349uint32_t dot11f_unpack_ie_qos_caps_station(tpAniSirGlobal pCtx,
6350 uint8_t *pBuf,
6351 uint8_t ielen,
6352 tDot11fIEQOSCapsStation *pDst,
6353 bool append_ie)
6354{
6355 uint32_t status = DOT11F_PARSE_SUCCESS;
6356 uint8_t tmp61__;
6357 (void) pBuf; (void)ielen; /* Shutup the compiler */
6358 if (pDst->present)
6359 status = DOT11F_DUPLICATE_IE;
6360 pDst->present = 1;
6361 if (unlikely(ielen < 1)) {
6362 pDst->present = 0;
6363 return DOT11F_INCOMPLETE_IE;
6364 }
6365
6366 tmp61__ = *pBuf;
6367 pDst->acvo_uapsd = tmp61__ >> 0 & 0x1;
6368 pDst->acvi_uapsd = tmp61__ >> 1 & 0x1;
6369 pDst->acbk_uapsd = tmp61__ >> 2 & 0x1;
6370 pDst->acbe_uapsd = tmp61__ >> 3 & 0x1;
6371 pDst->qack = tmp61__ >> 4 & 0x1;
6372 pDst->max_sp_length = tmp61__ >> 5 & 0x3;
6373 pDst->more_data_ack = tmp61__ >> 7 & 0x1;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006374 (void)pCtx;
6375 return status;
6376} /* End dot11f_unpack_ie_qos_caps_station. */
6377
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306378#define SigIeQOSCapsStation (0x0058)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006379
6380
6381uint32_t dot11f_unpack_ie_qos_map_set(tpAniSirGlobal pCtx,
6382 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07006383 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306384 tDot11fIEQosMapSet *pDst,
6385 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006386{
6387 uint32_t status = DOT11F_PARSE_SUCCESS;
6388 (void) pBuf; (void)ielen; /* Shutup the compiler */
6389 if (pDst->present)
6390 status = DOT11F_DUPLICATE_IE;
6391 pDst->present = 1;
6392 pDst->num_dscp_exceptions = (uint8_t)(ielen);
6393 if (ielen > 60) {
6394 pDst->present = 0;
6395 return DOT11F_SKIPPED_BAD_IE;
6396 }
6397
6398 DOT11F_MEMCPY(pCtx, pDst->dscp_exceptions, pBuf, (ielen));
6399 (void)pCtx;
6400 return status;
6401} /* End dot11f_unpack_ie_qos_map_set. */
6402
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306403#define SigIeQosMapSet (0x0059)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006404
6405
6406uint32_t dot11f_unpack_ie_quiet(tpAniSirGlobal pCtx,
6407 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07006408 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306409 tDot11fIEQuiet *pDst,
6410 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006411{
6412 uint32_t status = DOT11F_PARSE_SUCCESS;
6413 (void) pBuf; (void)ielen; /* Shutup the compiler */
6414 if (pDst->present)
6415 status = DOT11F_DUPLICATE_IE;
6416 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006417 if (unlikely(ielen < 1)) {
6418 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006419 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006420 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006421
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006422 pDst->count = *pBuf;
6423 pBuf += 1;
6424 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006425 if (unlikely(ielen < 1)) {
6426 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006427 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006428 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006429
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006430 pDst->period = *pBuf;
6431 pBuf += 1;
6432 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006433 if (unlikely(ielen < 2)) {
6434 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006435 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006436 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006437
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006438 framesntohs(pCtx, &pDst->duration, pBuf, 0);
6439 pBuf += 2;
6440 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006441 if (unlikely(ielen < 2)) {
6442 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006443 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006444 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006445
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006446 framesntohs(pCtx, &pDst->offset, pBuf, 0);
6447 (void)pCtx;
6448 return status;
6449} /* End dot11f_unpack_ie_quiet. */
6450
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306451#define SigIeQuiet (0x005a)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006452
6453
6454uint32_t dot11f_unpack_ie_rcpiie(tpAniSirGlobal pCtx,
6455 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07006456 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306457 tDot11fIERCPIIE *pDst,
6458 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006459{
6460 uint32_t status = DOT11F_PARSE_SUCCESS;
6461 (void) pBuf; (void)ielen; /* Shutup the compiler */
6462 if (pDst->present)
6463 status = DOT11F_DUPLICATE_IE;
6464 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006465 if (unlikely(ielen < 1)) {
6466 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006467 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006468 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006469
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006470 pDst->rcpi = *pBuf;
6471 (void)pCtx;
6472 return status;
6473} /* End dot11f_unpack_ie_rcpiie. */
6474
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306475#define SigIeRCPIIE (0x005b)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006476
6477
6478static const tFFDefn FFS_RICDataDesc[] = {
6479 { NULL, 0, 0, 0,},
6480};
6481
6482static const tIEDefn IES_RICDataDesc[] = {
6483 { offsetof(tDot11fIERICDataDesc, RICData), offsetof(tDot11fIERICData,
6484 present), 0, "RICData", 0, 6, 6, SigIeRICData, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306485 0, DOT11F_EID_RICDATA, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006486 { offsetof(tDot11fIERICDataDesc, RICDescriptor),
6487 offsetof(tDot11fIERICDescriptor, present), 0, "RICDescriptor",
6488 0, 3, 258, SigIeRICDescriptor, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306489 0, DOT11F_EID_RICDESCRIPTOR, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006490 { offsetof(tDot11fIERICDataDesc, TSPEC), offsetof(tDot11fIETSPEC,
6491 present), 0, "TSPEC", 0, 57, 57, SigIeTSPEC, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306492 0, DOT11F_EID_TSPEC, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006493 { offsetof(tDot11fIERICDataDesc, TCLAS), offsetof(tDot11fIETCLAS,
6494 present), offsetof(tDot11fIERICDataDesc, num_TCLAS), "TCLAS",
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306495 2, 7, 45, SigIeTCLAS, {0, 0, 0, 0, 0}, 0, DOT11F_EID_TCLAS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006496 { offsetof(tDot11fIERICDataDesc, TCLASSPROC),
6497 offsetof(tDot11fIETCLASSPROC, present), 0, "TCLASSPROC",
6498 0, 3, 3, SigIeTCLASSPROC, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306499 0, DOT11F_EID_TCLASSPROC, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006500 { offsetof(tDot11fIERICDataDesc, TSDelay), offsetof(tDot11fIETSDelay,
6501 present), 0, "TSDelay", 0, 6, 6, SigIeTSDelay, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306502 0, DOT11F_EID_TSDELAY, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006503 { offsetof(tDot11fIERICDataDesc, Schedule), offsetof(tDot11fIESchedule,
6504 present), 0, "Schedule", 0, 16, 16, SigIeSchedule, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306505 0, DOT11F_EID_SCHEDULE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006506 { offsetof(tDot11fIERICDataDesc, WMMTSPEC), offsetof(tDot11fIEWMMTSPEC,
6507 present), 0, "WMMTSPEC", 0, 63, 63, SigIeWMMTSPEC, {0, 80, 242, 2, 2},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306508 5, DOT11F_EID_WMMTSPEC, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006509 { offsetof(tDot11fIERICDataDesc, WMMTCLAS), offsetof(tDot11fIEWMMTCLAS,
6510 present), offsetof(tDot11fIERICDataDesc, num_WMMTCLAS), "WMMTCLAS",
6511 2, 13, 51, SigIeWMMTCLAS, {0, 80, 242, 2, 6},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306512 5, DOT11F_EID_WMMTCLAS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006513 { offsetof(tDot11fIERICDataDesc, WMMTCLASPROC),
6514 offsetof(tDot11fIEWMMTCLASPROC, present), 0, "WMMTCLASPROC",
6515 0, 9, 9, SigIeWMMTCLASPROC, {0, 80, 242, 2, 7},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306516 5, DOT11F_EID_WMMTCLASPROC, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006517 { offsetof(tDot11fIERICDataDesc, WMMTSDelay),
6518 offsetof(tDot11fIEWMMTSDelay, present), 0, "WMMTSDelay",
6519 0, 12, 12, SigIeWMMTSDelay, {0, 80, 242, 2, 8},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306520 5, DOT11F_EID_WMMTSDELAY, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006521 { offsetof(tDot11fIERICDataDesc, WMMSchedule),
6522 offsetof(tDot11fIEWMMSchedule, present), 0, "WMMSchedule",
6523 0, 22, 22, SigIeWMMSchedule, {0, 80, 242, 2, 9},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306524 5, DOT11F_EID_WMMSCHEDULE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006525 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },
6526};
6527
6528uint32_t dot11f_unpack_ie_ric_data_desc(tpAniSirGlobal pCtx,
6529 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07006530 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306531 tDot11fIERICDataDesc *pDst,
6532 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006533{
6534 uint32_t status = DOT11F_PARSE_SUCCESS;
6535 (void) pBuf; (void)ielen; /* Shutup the compiler */
6536 if (pDst->present)
6537 status = DOT11F_DUPLICATE_IE;
6538 pDst->present = 1;
6539 (void)pCtx;
6540 status |= unpack_core(pCtx,
6541 pBuf,
6542 ielen,
6543 FFS_RICDataDesc,
6544 IES_RICDataDesc,
6545 (uint8_t *)pDst,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306546 sizeof(*pDst),
6547 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006548 return status;
6549} /* End dot11f_unpack_ie_ric_data_desc. */
6550
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306551#define SigIeRICDataDesc (0x005c)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006552
6553
6554uint32_t dot11f_unpack_ie_rsn(tpAniSirGlobal pCtx,
6555 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07006556 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306557 tDot11fIERSN *pDst,
6558 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006559{
6560 uint32_t status = DOT11F_PARSE_SUCCESS;
Abhishek Singh3f13a812018-01-16 14:24:44 +05306561 uint8_t def_cipher_suite[4] = {0x00, 0x0f, 0xac, 0x04};
6562 uint8_t def_akm_suite[4] = {0x00, 0x0f, 0xac, 0x01};
Naveen Rawat69623ef2018-04-27 16:11:01 -07006563
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006564 (void) pBuf; (void)ielen; /* Shutup the compiler */
6565 if (pDst->present)
6566 status = DOT11F_DUPLICATE_IE;
6567 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006568 if (unlikely(ielen < 2)) {
6569 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006570 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006571 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006572
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006573 framesntohs(pCtx, &pDst->version, pBuf, 0);
6574 pBuf += 2;
6575 ielen -= (uint8_t)2;
6576 if (pDst->version != 0x1) {
6577 pDst->present = 0;
6578 return status | DOT11F_BAD_FIXED_VALUE;
6579 }
Abhishek Singh7dcb85b2017-12-27 15:15:01 +05306580 if (!ielen) {
Abhishek Singh3f13a812018-01-16 14:24:44 +05306581 pDst->RSN_Cap_present = 0U;
6582 pDst->gp_mgmt_cipher_suite_present = 0U;
6583 pDst->gp_cipher_suite_present = 1;
6584 DOT11F_MEMCPY(pCtx, pDst->gp_cipher_suite, def_cipher_suite, 4);
6585 pDst->pwise_cipher_suite_count = 1;
6586 DOT11F_MEMCPY(pCtx,
6587 pDst->pwise_cipher_suites, def_cipher_suite, 4);
6588 pDst->akm_suite_cnt = 1;
6589 DOT11F_MEMCPY(pCtx, pDst->akm_suite, def_akm_suite, 4);
Abhishek Singh7dcb85b2017-12-27 15:15:01 +05306590 pDst->pmkid_count = 0U;
6591 return 0U;
6592 } else {
Abhishek Singh3f13a812018-01-16 14:24:44 +05306593 pDst->gp_cipher_suite_present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006594 if (unlikely(ielen < 4)) {
Abhishek Singh3f13a812018-01-16 14:24:44 +05306595 pDst->present = 0;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006596 return DOT11F_INCOMPLETE_IE;
Abhishek Singh3f13a812018-01-16 14:24:44 +05306597 }
6598
Abhishek Singh7dcb85b2017-12-27 15:15:01 +05306599 DOT11F_MEMCPY(pCtx, pDst->gp_cipher_suite, pBuf, 4);
6600 pBuf += 4;
6601 ielen -= (uint8_t)4;
6602 }
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006603 if (!ielen) {
Abhishek Singh3f13a812018-01-16 14:24:44 +05306604 pDst->RSN_Cap_present = 0U;
6605 pDst->gp_mgmt_cipher_suite_present = 0U;
6606 pDst->pwise_cipher_suite_count = 1;
6607 DOT11F_MEMCPY(pCtx,
6608 pDst->pwise_cipher_suites, def_cipher_suite, 4);
6609 pDst->akm_suite_cnt = 1;
6610 DOT11F_MEMCPY(pCtx, pDst->akm_suite, def_akm_suite, 4);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006611 pDst->pmkid_count = 0U;
6612 return 0U;
6613 } else {
Naveen Rawat89e85d42018-05-23 11:54:27 -07006614 if (unlikely(ielen < 2)) {
Abhishek Singh3f13a812018-01-16 14:24:44 +05306615 pDst->present = 0;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006616 return DOT11F_INCOMPLETE_IE;
Abhishek Singh3f13a812018-01-16 14:24:44 +05306617 }
6618
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006619 framesntohs(pCtx, &pDst->pwise_cipher_suite_count, pBuf, 0);
6620 pBuf += 2;
6621 ielen -= (uint8_t)2;
6622 }
Naveen Rawat89e85d42018-05-23 11:54:27 -07006623 if (unlikely(ielen < pDst->pwise_cipher_suite_count * 4)) {
6624 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006625 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006626 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006627
Abhishek Singh3f13a812018-01-16 14:24:44 +05306628 if (!pDst->pwise_cipher_suite_count ||
6629 pDst->pwise_cipher_suite_count > 6) {
6630 pDst->present = 0;
6631 return DOT11F_SKIPPED_BAD_IE;
6632 }
6633
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006634 DOT11F_MEMCPY(pCtx, pDst->pwise_cipher_suites, pBuf, (pDst->pwise_cipher_suite_count * 4));
6635 pBuf += (pDst->pwise_cipher_suite_count * 4);
6636 ielen -= (pDst->pwise_cipher_suite_count * 4);
6637 if (!ielen) {
Abhishek Singh3f13a812018-01-16 14:24:44 +05306638 pDst->RSN_Cap_present = 0U;
6639 pDst->gp_mgmt_cipher_suite_present = 0U;
6640 pDst->akm_suite_cnt = 1;
6641 DOT11F_MEMCPY(pCtx, pDst->akm_suite, def_akm_suite, 4);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006642 pDst->pmkid_count = 0U;
6643 return 0U;
6644 } else {
Naveen Rawat89e85d42018-05-23 11:54:27 -07006645 if (unlikely(ielen < 2)) {
Abhishek Singh3f13a812018-01-16 14:24:44 +05306646 pDst->present = 0;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006647 return DOT11F_INCOMPLETE_IE;
Abhishek Singh3f13a812018-01-16 14:24:44 +05306648 }
6649
6650 framesntohs(pCtx, &pDst->akm_suite_cnt, pBuf, 0);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006651 pBuf += 2;
6652 ielen -= (uint8_t)2;
6653 }
Naveen Rawat89e85d42018-05-23 11:54:27 -07006654 if (unlikely(ielen < pDst->akm_suite_cnt * 4)) {
6655 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006656 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006657 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006658
Abhishek Singh3f13a812018-01-16 14:24:44 +05306659 if (!pDst->akm_suite_cnt ||
6660 pDst->akm_suite_cnt > 6) {
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006661 pDst->present = 0;
6662 return DOT11F_SKIPPED_BAD_IE;
6663 }
6664
Abhishek Singh3f13a812018-01-16 14:24:44 +05306665 DOT11F_MEMCPY(pCtx, pDst->akm_suite, pBuf, (pDst->akm_suite_cnt * 4));
6666 pBuf += (pDst->akm_suite_cnt * 4);
6667 ielen -= (pDst->akm_suite_cnt * 4);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006668 if (!ielen) {
Abhishek Singh3f13a812018-01-16 14:24:44 +05306669 pDst->RSN_Cap_present = 0U;
6670 pDst->gp_mgmt_cipher_suite_present = 0U;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006671 pDst->pmkid_count = 0U;
6672 return 0U;
6673 } else {
Abhishek Singh3f13a812018-01-16 14:24:44 +05306674 pDst->RSN_Cap_present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006675 if (unlikely(ielen < 2)) {
Abhishek Singh3f13a812018-01-16 14:24:44 +05306676 pDst->present = 0;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006677 return DOT11F_INCOMPLETE_IE;
Abhishek Singh3f13a812018-01-16 14:24:44 +05306678 }
6679
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006680 DOT11F_MEMCPY(pCtx, pDst->RSN_Cap, pBuf, 2);
6681 pBuf += 2;
6682 ielen -= (uint8_t)2;
6683 }
6684 if (!ielen) {
Abhishek Singh3f13a812018-01-16 14:24:44 +05306685 pDst->RSN_Cap_present = 0U;
6686 pDst->gp_mgmt_cipher_suite_present = 0U;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006687 pDst->pmkid_count = 0U;
6688 return 0U;
6689 } else {
Naveen Rawat89e85d42018-05-23 11:54:27 -07006690 if (unlikely(ielen < 2)) {
Abhishek Singh3f13a812018-01-16 14:24:44 +05306691 pDst->present = 0;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006692 return DOT11F_INCOMPLETE_IE;
Abhishek Singh3f13a812018-01-16 14:24:44 +05306693 }
6694
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006695 framesntohs(pCtx, &pDst->pmkid_count, pBuf, 0);
6696 pBuf += 2;
6697 ielen -= (uint8_t)2;
6698 }
Naveen Rawat89e85d42018-05-23 11:54:27 -07006699 if (unlikely(ielen < pDst->pmkid_count * 16)) {
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006700 pDst->present = 0;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006701 return DOT11F_INCOMPLETE_IE;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006702 }
6703
Naveen Rawat89e85d42018-05-23 11:54:27 -07006704 if (pDst->pmkid_count > 4) {
Abhishek Singh3f13a812018-01-16 14:24:44 +05306705 pDst->present = 0;
6706 return DOT11F_SKIPPED_BAD_IE;
6707 }
6708
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006709 DOT11F_MEMCPY(pCtx, pDst->pmkid, pBuf, (pDst->pmkid_count * 16));
6710 pBuf += (pDst->pmkid_count * 16);
6711 ielen -= (pDst->pmkid_count * 16);
6712 if (!ielen) {
6713 return 0U;
6714 } else {
Abhishek Singh3f13a812018-01-16 14:24:44 +05306715 pDst->gp_mgmt_cipher_suite_present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006716 if (unlikely(ielen < 4)) {
Abhishek Singh3f13a812018-01-16 14:24:44 +05306717 pDst->present = 0;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006718 return DOT11F_INCOMPLETE_IE;
Abhishek Singh3f13a812018-01-16 14:24:44 +05306719 }
6720
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006721 DOT11F_MEMCPY(pCtx, pDst->gp_mgmt_cipher_suite, pBuf, 4);
6722 }
6723 (void)pCtx;
6724 return status;
6725} /* End dot11f_unpack_ie_rsn. */
6726
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306727#define SigIeRSN (0x005d)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006728
6729
6730uint32_t dot11f_unpack_ie_rsniie(tpAniSirGlobal pCtx,
6731 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07006732 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306733 tDot11fIERSNIIE *pDst,
6734 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006735{
6736 uint32_t status = DOT11F_PARSE_SUCCESS;
6737 (void) pBuf; (void)ielen; /* Shutup the compiler */
6738 if (pDst->present)
6739 status = DOT11F_DUPLICATE_IE;
6740 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006741 if (unlikely(ielen < 1)) {
6742 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006743 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006744 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006745
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006746 pDst->rsni = *pBuf;
6747 (void)pCtx;
6748 return status;
6749} /* End dot11f_unpack_ie_rsniie. */
6750
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306751#define SigIeRSNIIE (0x005e)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006752
6753
6754uint32_t dot11f_unpack_ie_rsn_opaque(tpAniSirGlobal pCtx,
6755 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07006756 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306757 tDot11fIERSNOpaque *pDst,
6758 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006759{
6760 uint32_t status = DOT11F_PARSE_SUCCESS;
6761 (void) pBuf; (void)ielen; /* Shutup the compiler */
6762 if (pDst->present)
6763 status = DOT11F_DUPLICATE_IE;
6764 pDst->present = 1;
6765 pDst->num_data = (uint8_t)(ielen);
6766 if (ielen > 253) {
6767 pDst->present = 0;
6768 return DOT11F_SKIPPED_BAD_IE;
6769 }
6770
6771 DOT11F_MEMCPY(pCtx, pDst->data, pBuf, (ielen));
6772 (void)pCtx;
6773 return status;
6774} /* End dot11f_unpack_ie_rsn_opaque. */
6775
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306776#define SigIeRSNOpaque (0x005f)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006777
6778
6779uint32_t dot11f_unpack_ie_supp_channels(tpAniSirGlobal pCtx,
6780 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07006781 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306782 tDot11fIESuppChannels *pDst,
6783 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006784{
6785 uint32_t status = DOT11F_PARSE_SUCCESS;
6786 (void) pBuf; (void)ielen; /* Shutup the compiler */
6787 if (pDst->present)
6788 status = DOT11F_DUPLICATE_IE;
6789 pDst->present = 1;
6790 pDst->num_bands = (uint8_t)(ielen / 2);
6791 if (ielen > 48 * 2) {
6792 pDst->present = 0;
6793 return DOT11F_SKIPPED_BAD_IE;
6794 }
6795
6796 DOT11F_MEMCPY(pCtx, pDst->bands, pBuf, (ielen));
6797 (void)pCtx;
6798 return status;
6799} /* End dot11f_unpack_ie_supp_channels. */
6800
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306801#define SigIeSuppChannels (0x0060)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006802
6803
6804uint32_t dot11f_unpack_ie_supp_operating_classes(tpAniSirGlobal pCtx,
6805 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07006806 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306807 tDot11fIESuppOperatingClasses *pDst,
6808 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006809{
6810 uint32_t status = DOT11F_PARSE_SUCCESS;
6811 (void) pBuf; (void)ielen; /* Shutup the compiler */
6812 if (pDst->present)
6813 status = DOT11F_DUPLICATE_IE;
6814 pDst->present = 1;
6815 pDst->num_classes = (uint8_t)(ielen);
6816 if (ielen > 32) {
6817 pDst->present = 0;
6818 return DOT11F_SKIPPED_BAD_IE;
6819 }
6820
6821 DOT11F_MEMCPY(pCtx, pDst->classes, pBuf, (ielen));
6822 (void)pCtx;
6823 return status;
6824} /* End dot11f_unpack_ie_supp_operating_classes. */
6825
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306826#define SigIeSuppOperatingClasses (0x0061)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006827
6828
6829uint32_t dot11f_unpack_ie_supp_rates(tpAniSirGlobal pCtx,
6830 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07006831 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306832 tDot11fIESuppRates *pDst,
6833 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006834{
6835 uint8_t i;
6836 uint8_t rate_indx = 0;
6837 uint32_t status = DOT11F_PARSE_SUCCESS;
6838 (void) pBuf; (void)ielen; /* Shutup the compiler */
6839 if (pDst->present)
6840 status = DOT11F_DUPLICATE_IE;
6841 pDst->present = 1;
6842 for (i = 0; i < ielen; i++) {
6843 if ((DOT11F_IS_BG_RATE(pBuf[i] & 0x7F)) &&
6844 (rate_indx < 12)) {
6845 pDst->rates[rate_indx++] = pBuf[i];
6846 }
6847 }
6848
6849 if (rate_indx == 0) {
6850 pDst->present = 0;
6851 return DOT11F_SKIPPED_BAD_IE;
6852 }
6853
6854 pDst->num_rates = rate_indx;
6855 (void)pCtx;
6856 return status;
6857} /* End dot11f_unpack_ie_supp_rates. */
6858
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306859#define SigIeSuppRates (0x0062)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006860
6861
6862uint32_t dot11f_unpack_ie_tim(tpAniSirGlobal pCtx,
6863 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07006864 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306865 tDot11fIETIM *pDst,
6866 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006867{
6868 uint32_t status = DOT11F_PARSE_SUCCESS;
6869 (void) pBuf; (void)ielen; /* Shutup the compiler */
6870 if (pDst->present)
6871 status = DOT11F_DUPLICATE_IE;
6872 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006873 if (unlikely(ielen < 1)) {
6874 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006875 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006876 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006877
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006878 pDst->dtim_count = *pBuf;
6879 pBuf += 1;
6880 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006881 if (unlikely(ielen < 1)) {
6882 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006883 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006884 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006885
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006886 pDst->dtim_period = *pBuf;
6887 pBuf += 1;
6888 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006889 if (unlikely(ielen < 1)) {
6890 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006891 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006892 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006893
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006894 pDst->bmpctl = *pBuf;
6895 pBuf += 1;
6896 ielen -= (uint8_t)1;
6897 pDst->num_vbmp = (uint8_t)(ielen);
6898 if (ielen > 251) {
6899 pDst->present = 0;
6900 return DOT11F_SKIPPED_BAD_IE;
6901 }
6902
6903 DOT11F_MEMCPY(pCtx, pDst->vbmp, pBuf, (ielen));
6904 (void)pCtx;
6905 return status;
6906} /* End dot11f_unpack_ie_tim. */
6907
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306908#define SigIeTIM (0x0063)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006909
6910
6911uint32_t dot11f_unpack_ie_tpc_report(tpAniSirGlobal pCtx,
6912 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07006913 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306914 tDot11fIETPCReport *pDst,
6915 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006916{
6917 uint32_t status = DOT11F_PARSE_SUCCESS;
6918 (void) pBuf; (void)ielen; /* Shutup the compiler */
6919 if (pDst->present)
6920 status = DOT11F_DUPLICATE_IE;
6921 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006922 if (unlikely(ielen < 1)) {
6923 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006924 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006925 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006926
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006927 pDst->tx_power = *pBuf;
6928 pBuf += 1;
6929 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006930 if (unlikely(ielen < 1)) {
6931 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006932 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006933 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006934
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006935 pDst->link_margin = *pBuf;
6936 (void)pCtx;
6937 return status;
6938} /* End dot11f_unpack_ie_tpc_report. */
6939
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306940#define SigIeTPCReport (0x0064)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006941
6942
6943uint32_t dot11f_unpack_ie_tpc_request(tpAniSirGlobal pCtx,
6944 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07006945 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306946 tDot11fIETPCRequest *pDst,
6947 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006948{
6949 uint32_t status = DOT11F_PARSE_SUCCESS;
6950 (void) pBuf; (void)ielen; /* Shutup the compiler */
6951 if (pDst->present)
6952 status = DOT11F_DUPLICATE_IE;
6953 pDst->present = 1;
6954 (void)pCtx;
6955 return status;
6956} /* End dot11f_unpack_ie_tpc_request. */
6957
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306958#define SigIeTPCRequest (0x0065)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006959
6960
6961uint32_t dot11f_unpack_ie_time_advertisement(tpAniSirGlobal pCtx,
6962 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07006963 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05306964 tDot11fIETimeAdvertisement *pDst,
6965 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006966{
6967 uint32_t status = DOT11F_PARSE_SUCCESS;
6968 (void) pBuf; (void)ielen; /* Shutup the compiler */
6969 if (pDst->present)
6970 status = DOT11F_DUPLICATE_IE;
6971 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006972 if (unlikely(ielen < 1)) {
6973 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006974 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006975 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006976
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006977 pDst->timing_capabilities = *pBuf;
6978 pBuf += 1;
6979 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006980 if (unlikely(ielen < 10)) {
6981 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006982 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006983 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006984
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006985 DOT11F_MEMCPY(pCtx, pDst->time_value, pBuf, 10);
6986 pBuf += 10;
6987 ielen -= (uint8_t)10;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006988 if (unlikely(ielen < 5)) {
6989 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07006990 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07006991 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07006992
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006993 DOT11F_MEMCPY(pCtx, pDst->time_error, pBuf, 5);
6994 (void)pCtx;
6995 return status;
6996} /* End dot11f_unpack_ie_time_advertisement. */
6997
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05306998#define SigIeTimeAdvertisement (0x0066)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08006999
7000
7001uint32_t dot11f_unpack_ie_timeout_interval(tpAniSirGlobal pCtx,
7002 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07007003 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05307004 tDot11fIETimeoutInterval *pDst,
7005 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007006{
7007 uint32_t status = DOT11F_PARSE_SUCCESS;
7008 (void) pBuf; (void)ielen; /* Shutup the compiler */
7009 if (pDst->present)
7010 status = DOT11F_DUPLICATE_IE;
7011 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007012 if (unlikely(ielen < 1)) {
7013 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007014 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007015 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007016
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007017 pDst->timeoutType = *pBuf;
7018 pBuf += 1;
7019 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007020 if (unlikely(ielen < 4)) {
7021 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007022 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007023 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007024
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007025 framesntohl(pCtx, &pDst->timeoutValue, pBuf, 0);
7026 (void)pCtx;
7027 return status;
7028} /* End dot11f_unpack_ie_timeout_interval. */
7029
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307030#define SigIeTimeoutInterval (0x0067)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007031
7032
7033uint32_t dot11f_unpack_ie_vht_ext_bss_load(tpAniSirGlobal pCtx,
7034 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07007035 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05307036 tDot11fIEVHTExtBssLoad *pDst,
7037 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007038{
7039 uint32_t status = DOT11F_PARSE_SUCCESS;
7040 (void) pBuf; (void)ielen; /* Shutup the compiler */
7041 if (pDst->present)
7042 status = DOT11F_DUPLICATE_IE;
7043 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007044 if (unlikely(ielen < 1)) {
7045 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007046 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007047 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007048
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007049 pDst->muMIMOCapStaCount = *pBuf;
7050 pBuf += 1;
7051 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007052 if (unlikely(ielen < 1)) {
7053 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007054 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007055 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007056
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007057 pDst->ssUnderUtil = *pBuf;
7058 pBuf += 1;
7059 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007060 if (unlikely(ielen < 1)) {
7061 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007062 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007063 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007064
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007065 pDst->FortyMHzUtil = *pBuf;
7066 pBuf += 1;
7067 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007068 if (unlikely(ielen < 1)) {
7069 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007070 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007071 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007072
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007073 pDst->EightyMHzUtil = *pBuf;
7074 pBuf += 1;
7075 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007076 if (unlikely(ielen < 1)) {
7077 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007078 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007079 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007080
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007081 pDst->OneSixtyMHzUtil = *pBuf;
7082 (void)pCtx;
7083 return status;
7084} /* End dot11f_unpack_ie_vht_ext_bss_load. */
7085
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307086#define SigIeVHTExtBssLoad (0x0068)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007087
7088
7089uint32_t dot11f_unpack_ie_vendor1_ie(tpAniSirGlobal pCtx,
7090 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07007091 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05307092 tDot11fIEVendor1IE *pDst,
7093 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007094{
7095 uint32_t status = DOT11F_PARSE_SUCCESS;
7096 (void) pBuf; (void)ielen; /* Shutup the compiler */
7097 if (pDst->present)
7098 status = DOT11F_DUPLICATE_IE;
7099 pDst->present = 1;
7100 (void)pCtx;
7101 return status;
7102} /* End dot11f_unpack_ie_vendor1_ie. */
7103
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307104#define SigIeVendor1IE (0x0069)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007105
7106
7107uint32_t dot11f_unpack_ie_vendor3_ie(tpAniSirGlobal pCtx,
7108 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07007109 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05307110 tDot11fIEVendor3IE *pDst,
7111 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007112{
7113 uint32_t status = DOT11F_PARSE_SUCCESS;
7114 (void) pBuf; (void)ielen; /* Shutup the compiler */
7115 if (pDst->present)
7116 status = DOT11F_DUPLICATE_IE;
7117 pDst->present = 1;
7118 (void)pCtx;
7119 return status;
7120} /* End dot11f_unpack_ie_vendor3_ie. */
7121
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307122#define SigIeVendor3IE (0x006a)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007123
7124
7125uint32_t dot11f_unpack_ie_wapi(tpAniSirGlobal pCtx,
7126 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07007127 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05307128 tDot11fIEWAPI *pDst,
7129 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007130{
7131 uint32_t status = DOT11F_PARSE_SUCCESS;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307132 uint16_t tmp62__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007133 (void) pBuf; (void)ielen; /* Shutup the compiler */
7134 if (pDst->present)
7135 status = DOT11F_DUPLICATE_IE;
7136 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007137 if (unlikely(ielen < 2)) {
7138 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007139 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007140 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007141
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007142 framesntohs(pCtx, &pDst->version, pBuf, 0);
7143 pBuf += 2;
7144 ielen -= (uint8_t)2;
7145 if (pDst->version != 0x1) {
7146 pDst->present = 0;
7147 return status | DOT11F_BAD_FIXED_VALUE;
7148 }
Naveen Rawat89e85d42018-05-23 11:54:27 -07007149 if (unlikely(ielen < 2)) {
7150 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007151 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007152 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007153
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007154 framesntohs(pCtx, &pDst->akm_suite_count, pBuf, 0);
7155 pBuf += 2;
7156 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007157 if (unlikely(ielen < pDst->akm_suite_count * 4)) {
7158 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007159 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007160 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007161
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007162 if (pDst->akm_suite_count > 4) {
7163 pDst->present = 0;
7164 return DOT11F_SKIPPED_BAD_IE;
7165 }
7166
7167 DOT11F_MEMCPY(pCtx, pDst->akm_suites, pBuf, (pDst->akm_suite_count * 4));
7168 pBuf += (pDst->akm_suite_count * 4);
7169 ielen -= (pDst->akm_suite_count * 4);
Naveen Rawat89e85d42018-05-23 11:54:27 -07007170 if (unlikely(ielen < 2)) {
7171 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007172 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007173 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007174
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007175 framesntohs(pCtx, &pDst->unicast_cipher_suite_count, pBuf, 0);
7176 pBuf += 2;
7177 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007178 if (unlikely(ielen < pDst->unicast_cipher_suite_count * 4)) {
7179 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007180 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007181 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007182
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007183 if (pDst->unicast_cipher_suite_count > 4) {
7184 pDst->present = 0;
7185 return DOT11F_SKIPPED_BAD_IE;
7186 }
7187
7188 DOT11F_MEMCPY(pCtx, pDst->unicast_cipher_suites, pBuf, (pDst->unicast_cipher_suite_count * 4));
7189 pBuf += (pDst->unicast_cipher_suite_count * 4);
7190 ielen -= (pDst->unicast_cipher_suite_count * 4);
Naveen Rawat89e85d42018-05-23 11:54:27 -07007191 if (unlikely(ielen < 4)) {
7192 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007193 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007194 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007195
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007196 DOT11F_MEMCPY(pCtx, pDst->multicast_cipher_suite, pBuf, 4);
7197 pBuf += 4;
7198 ielen -= (uint8_t)4;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007199 if (unlikely(ielen < 2)) {
7200 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007201 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007202 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007203
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307204 framesntohs(pCtx, &tmp62__, pBuf, 0);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007205 pBuf += 2;
7206 ielen -= 2;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307207 pDst->preauth = tmp62__ >> 0 & 0x1;
7208 pDst->reserved = tmp62__ >> 1 & 0x7fff;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007209 if (!ielen) {
7210 pDst->bkid_count = 0U;
7211 return 0U;
7212 } else {
Naveen Rawat89e85d42018-05-23 11:54:27 -07007213 if (unlikely(ielen < 2)) {
7214 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007215 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007216 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007217
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007218 framesntohs(pCtx, &pDst->bkid_count, pBuf, 0);
7219 pBuf += 2;
7220 ielen -= (uint8_t)2;
7221 }
Naveen Rawat89e85d42018-05-23 11:54:27 -07007222 if (unlikely(ielen < pDst->bkid_count * 16)) {
7223 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007224 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007225 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007226
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007227 if (pDst->bkid_count > 4) {
7228 pDst->present = 0;
7229 return DOT11F_SKIPPED_BAD_IE;
7230 }
7231
7232 DOT11F_MEMCPY(pCtx, pDst->bkid, pBuf, (pDst->bkid_count * 16));
7233 (void)pCtx;
7234 return status;
7235} /* End dot11f_unpack_ie_wapi. */
7236
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307237#define SigIeWAPI (0x006b)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007238
7239
7240uint32_t dot11f_unpack_ie_wapi_opaque(tpAniSirGlobal pCtx,
7241 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07007242 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05307243 tDot11fIEWAPIOpaque *pDst,
7244 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007245{
7246 uint32_t status = DOT11F_PARSE_SUCCESS;
7247 (void) pBuf; (void)ielen; /* Shutup the compiler */
7248 if (pDst->present)
7249 status = DOT11F_DUPLICATE_IE;
7250 pDst->present = 1;
7251 pDst->num_data = (uint8_t)(ielen);
7252 if (ielen > 253) {
7253 pDst->present = 0;
7254 return DOT11F_SKIPPED_BAD_IE;
7255 }
7256
7257 DOT11F_MEMCPY(pCtx, pDst->data, pBuf, (ielen));
7258 (void)pCtx;
7259 return status;
7260} /* End dot11f_unpack_ie_wapi_opaque. */
7261
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307262#define SigIeWAPIOpaque (0x006c)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007263
7264
7265uint32_t dot11f_unpack_ie_wfatpc(tpAniSirGlobal pCtx,
7266 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07007267 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05307268 tDot11fIEWFATPC *pDst,
7269 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007270{
7271 uint32_t status = DOT11F_PARSE_SUCCESS;
7272 (void) pBuf; (void)ielen; /* Shutup the compiler */
7273 if (pDst->present)
7274 status = DOT11F_DUPLICATE_IE;
7275 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007276 if (unlikely(ielen < 1)) {
7277 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007278 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007279 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007280
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007281 pDst->txPower = *pBuf;
7282 pBuf += 1;
7283 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007284 if (unlikely(ielen < 1)) {
7285 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007286 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007287 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007288
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007289 pDst->linkMargin = *pBuf;
7290 (void)pCtx;
7291 return status;
7292} /* End dot11f_unpack_ie_wfatpc. */
7293
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307294#define SigIeWFATPC (0x006d)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007295
7296
7297uint32_t dot11f_unpack_ie_wfdie_opaque(tpAniSirGlobal pCtx,
7298 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07007299 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05307300 tDot11fIEWFDIEOpaque *pDst,
7301 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007302{
7303 uint32_t status = DOT11F_PARSE_SUCCESS;
7304 (void) pBuf; (void)ielen; /* Shutup the compiler */
7305 if (pDst->present)
7306 status = DOT11F_DUPLICATE_IE;
7307 pDst->present = 1;
7308 pDst->num_data = (uint8_t)(ielen);
7309 if (ielen > 249) {
7310 pDst->present = 0;
7311 return DOT11F_SKIPPED_BAD_IE;
7312 }
7313
7314 DOT11F_MEMCPY(pCtx, pDst->data, pBuf, (ielen));
7315 (void)pCtx;
7316 return status;
7317} /* End dot11f_unpack_ie_wfdie_opaque. */
7318
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307319#define SigIeWFDIEOpaque (0x006e)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007320
7321
7322uint32_t dot11f_unpack_ie_wmm_caps(tpAniSirGlobal pCtx,
7323 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07007324 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05307325 tDot11fIEWMMCaps *pDst,
7326 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007327{
7328 uint32_t status = DOT11F_PARSE_SUCCESS;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307329 uint8_t tmp63__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007330 (void) pBuf; (void)ielen; /* Shutup the compiler */
7331 if (pDst->present)
7332 status = DOT11F_DUPLICATE_IE;
7333 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007334 if (unlikely(ielen < 1)) {
7335 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007336 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007337 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007338
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007339 pDst->version = *pBuf;
7340 pBuf += 1;
7341 ielen -= (uint8_t)1;
7342 if (pDst->version != 0x1) {
7343 pDst->present = 0;
7344 return status | DOT11F_BAD_FIXED_VALUE;
7345 }
Naveen Rawat89e85d42018-05-23 11:54:27 -07007346 if (unlikely(ielen < 1)) {
7347 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007348 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007349 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007350
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307351 tmp63__ = *pBuf;
7352 pDst->reserved = tmp63__ >> 0 & 0xf;
7353 pDst->qack = tmp63__ >> 4 & 0x1;
7354 pDst->queue_request = tmp63__ >> 5 & 0x1;
7355 pDst->txop_request = tmp63__ >> 6 & 0x1;
7356 pDst->more_ack = tmp63__ >> 7 & 0x1;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007357 (void)pCtx;
7358 return status;
7359} /* End dot11f_unpack_ie_wmm_caps. */
7360
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307361#define SigIeWMMCaps (0x006f)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007362
7363
7364uint32_t dot11f_unpack_ie_wmm_info_ap(tpAniSirGlobal pCtx,
7365 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07007366 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05307367 tDot11fIEWMMInfoAp *pDst,
7368 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007369{
7370 uint32_t status = DOT11F_PARSE_SUCCESS;
Abhishek Singh951eed82017-07-06 16:53:19 +05307371 uint8_t tmp64__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007372 (void) pBuf; (void)ielen; /* Shutup the compiler */
7373 if (pDst->present)
7374 status = DOT11F_DUPLICATE_IE;
7375 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007376 if (unlikely(ielen < 1)) {
7377 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007378 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007379 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007380
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007381 pDst->version = *pBuf;
7382 pBuf += 1;
7383 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007384 if (unlikely(ielen < 1)) {
7385 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007386 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007387 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007388
Abhishek Singh951eed82017-07-06 16:53:19 +05307389 tmp64__ = *pBuf;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307390 pDst->param_set_count = tmp64__ >> 0 & 0xf;
7391 pDst->reserved = tmp64__ >> 4 & 0x7;
7392 pDst->uapsd = tmp64__ >> 7 & 0x1;
7393 (void)pCtx;
7394 return status;
7395} /* End dot11f_unpack_ie_wmm_info_ap. */
7396
7397#define SigIeWMMInfoAp (0x0070)
7398
7399
7400uint32_t dot11f_unpack_ie_wmm_info_station(tpAniSirGlobal pCtx,
7401 uint8_t *pBuf,
7402 uint8_t ielen,
7403 tDot11fIEWMMInfoStation *pDst,
7404 bool append_ie)
7405{
7406 uint32_t status = DOT11F_PARSE_SUCCESS;
7407 uint8_t tmp65__;
7408 (void) pBuf; (void)ielen; /* Shutup the compiler */
7409 if (pDst->present)
7410 status = DOT11F_DUPLICATE_IE;
7411 pDst->present = 1;
7412 if (unlikely(ielen < 1)) {
7413 pDst->present = 0;
7414 return DOT11F_INCOMPLETE_IE;
7415 }
7416
7417 pDst->version = *pBuf;
7418 pBuf += 1;
7419 ielen -= (uint8_t)1;
7420 if (unlikely(ielen < 1)) {
7421 pDst->present = 0;
7422 return DOT11F_INCOMPLETE_IE;
7423 }
7424
7425 tmp65__ = *pBuf;
7426 pDst->acvo_uapsd = tmp65__ >> 0 & 0x1;
7427 pDst->acvi_uapsd = tmp65__ >> 1 & 0x1;
7428 pDst->acbk_uapsd = tmp65__ >> 2 & 0x1;
7429 pDst->acbe_uapsd = tmp65__ >> 3 & 0x1;
7430 pDst->reserved1 = tmp65__ >> 4 & 0x1;
7431 pDst->max_sp_length = tmp65__ >> 5 & 0x3;
7432 pDst->reserved2 = tmp65__ >> 7 & 0x1;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007433 (void)pCtx;
7434 return status;
7435} /* End dot11f_unpack_ie_wmm_info_station. */
7436
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307437#define SigIeWMMInfoStation (0x0071)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007438
7439
7440uint32_t dot11f_unpack_ie_wmm_params(tpAniSirGlobal pCtx,
7441 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07007442 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05307443 tDot11fIEWMMParams *pDst,
7444 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007445{
7446 uint32_t status = DOT11F_PARSE_SUCCESS;
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08007447 uint8_t tmp66__;
7448 uint8_t tmp67__;
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -08007449 uint8_t tmp68__;
7450 uint8_t tmp69__;
7451 uint8_t tmp70__;
Krishna Kumaar Natarajan7ee45232016-08-29 17:13:47 -07007452 uint8_t tmp71__;
Abhishek Singh951eed82017-07-06 16:53:19 +05307453 uint8_t tmp72__;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307454 uint8_t tmp73__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007455 (void) pBuf; (void)ielen; /* Shutup the compiler */
7456 if (pDst->present)
7457 status = DOT11F_DUPLICATE_IE;
7458 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007459 if (unlikely(ielen < 1)) {
7460 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007461 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007462 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007463
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007464 pDst->version = *pBuf;
7465 pBuf += 1;
7466 ielen -= (uint8_t)1;
7467 if (pDst->version != 0x1) {
7468 pDst->present = 0;
7469 return status | DOT11F_BAD_FIXED_VALUE;
7470 }
Naveen Rawat89e85d42018-05-23 11:54:27 -07007471 if (unlikely(ielen < 1)) {
7472 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007473 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007474 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007475
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007476 pDst->qosInfo = *pBuf;
7477 pBuf += 1;
7478 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007479 if (unlikely(ielen < 1)) {
7480 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007481 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007482 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007483
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007484 pDst->reserved2 = *pBuf;
7485 pBuf += 1;
7486 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007487 if (unlikely(ielen < 1)) {
7488 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007489 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007490 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007491
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307492 tmp66__ = *pBuf;
Naveen Rawat819158d2018-01-16 10:56:45 -08007493 pBuf += 1;
7494 ielen -= 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307495 pDst->acbe_aifsn = tmp66__ >> 0 & 0xf;
7496 pDst->acbe_acm = tmp66__ >> 4 & 0x1;
7497 pDst->acbe_aci = tmp66__ >> 5 & 0x3;
7498 pDst->unused1 = tmp66__ >> 7 & 0x1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007499 if (unlikely(ielen < 1)) {
7500 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007501 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007502 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007503
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307504 tmp67__ = *pBuf;
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -08007505 pBuf += 1;
7506 ielen -= 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307507 pDst->acbe_acwmin = tmp67__ >> 0 & 0xf;
7508 pDst->acbe_acwmax = tmp67__ >> 4 & 0xf;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007509 if (unlikely(ielen < 2)) {
7510 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007511 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007512 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007513
Abhishek Singh951eed82017-07-06 16:53:19 +05307514 framesntohs(pCtx, &pDst->acbe_txoplimit, pBuf, 0);
Krishna Kumaar Natarajan7ee45232016-08-29 17:13:47 -07007515 pBuf += 2;
7516 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007517 if (unlikely(ielen < 1)) {
7518 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007519 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007520 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007521
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307522 tmp68__ = *pBuf;
Naveen Rawat819158d2018-01-16 10:56:45 -08007523 pBuf += 1;
7524 ielen -= 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307525 pDst->acbk_aifsn = tmp68__ >> 0 & 0xf;
7526 pDst->acbk_acm = tmp68__ >> 4 & 0x1;
7527 pDst->acbk_aci = tmp68__ >> 5 & 0x3;
7528 pDst->unused2 = tmp68__ >> 7 & 0x1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007529 if (unlikely(ielen < 1)) {
7530 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007531 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007532 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007533
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307534 tmp69__ = *pBuf;
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -08007535 pBuf += 1;
7536 ielen -= 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307537 pDst->acbk_acwmin = tmp69__ >> 0 & 0xf;
7538 pDst->acbk_acwmax = tmp69__ >> 4 & 0xf;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007539 if (unlikely(ielen < 2)) {
7540 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007541 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007542 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007543
Abhishek Singh951eed82017-07-06 16:53:19 +05307544 framesntohs(pCtx, &pDst->acbk_txoplimit, pBuf, 0);
Krishna Kumaar Natarajan7ee45232016-08-29 17:13:47 -07007545 pBuf += 2;
7546 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007547 if (unlikely(ielen < 1)) {
7548 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007549 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007550 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007551
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307552 tmp70__ = *pBuf;
Naveen Rawat819158d2018-01-16 10:56:45 -08007553 pBuf += 1;
7554 ielen -= 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307555 pDst->acvi_aifsn = tmp70__ >> 0 & 0xf;
7556 pDst->acvi_acm = tmp70__ >> 4 & 0x1;
7557 pDst->acvi_aci = tmp70__ >> 5 & 0x3;
7558 pDst->unused3 = tmp70__ >> 7 & 0x1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007559 if (unlikely(ielen < 1)) {
7560 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007561 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007562 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007563
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307564 tmp71__ = *pBuf;
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -08007565 pBuf += 1;
7566 ielen -= 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307567 pDst->acvi_acwmin = tmp71__ >> 0 & 0xf;
7568 pDst->acvi_acwmax = tmp71__ >> 4 & 0xf;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007569 if (unlikely(ielen < 2)) {
7570 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007571 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007572 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007573
Abhishek Singh951eed82017-07-06 16:53:19 +05307574 framesntohs(pCtx, &pDst->acvi_txoplimit, pBuf, 0);
7575 pBuf += 2;
7576 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007577 if (unlikely(ielen < 1)) {
7578 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007579 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007580 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007581
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307582 tmp72__ = *pBuf;
Naveen Rawat819158d2018-01-16 10:56:45 -08007583 pBuf += 1;
7584 ielen -= 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307585 pDst->acvo_aifsn = tmp72__ >> 0 & 0xf;
7586 pDst->acvo_acm = tmp72__ >> 4 & 0x1;
7587 pDst->acvo_aci = tmp72__ >> 5 & 0x3;
7588 pDst->unused4 = tmp72__ >> 7 & 0x1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007589 if (unlikely(ielen < 1)) {
7590 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007591 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007592 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007593
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307594 tmp73__ = *pBuf;
Abhishek Singh951eed82017-07-06 16:53:19 +05307595 pBuf += 1;
7596 ielen -= 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307597 pDst->acvo_acwmin = tmp73__ >> 0 & 0xf;
7598 pDst->acvo_acwmax = tmp73__ >> 4 & 0xf;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007599 if (unlikely(ielen < 2)) {
7600 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007601 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007602 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007603
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007604 framesntohs(pCtx, &pDst->acvo_txoplimit, pBuf, 0);
7605 (void)pCtx;
7606 return status;
7607} /* End dot11f_unpack_ie_wmm_params. */
7608
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307609#define SigIeWMMParams (0x0072)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007610
7611
7612uint32_t dot11f_unpack_ie_wpa(tpAniSirGlobal pCtx,
7613 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07007614 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05307615 tDot11fIEWPA *pDst,
7616 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007617{
7618 uint32_t status = DOT11F_PARSE_SUCCESS;
7619 (void) pBuf; (void)ielen; /* Shutup the compiler */
7620 if (pDst->present)
7621 status = DOT11F_DUPLICATE_IE;
7622 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007623 if (unlikely(ielen < 2)) {
7624 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007625 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007626 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007627
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007628 framesntohs(pCtx, &pDst->version, pBuf, 0);
7629 pBuf += 2;
7630 ielen -= (uint8_t)2;
7631 if (pDst->version != 0x1) {
7632 pDst->present = 0;
7633 return status | DOT11F_BAD_FIXED_VALUE;
7634 }
7635 if (!ielen) {
7636 pDst->multicast_cipher_present = 0U;
7637 pDst->unicast_cipher_count = 0U;
7638 pDst->auth_suite_count = 0U;
7639 return 0U;
7640 } else {
7641 pDst->multicast_cipher_present = 1U;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007642 if (unlikely(ielen < 4)) {
7643 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007644 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007645 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007646
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007647 DOT11F_MEMCPY(pCtx, pDst->multicast_cipher, pBuf, 4);
7648 pBuf += 4;
7649 ielen -= (uint8_t)4;
7650 }
7651 if (!ielen) {
7652 pDst->unicast_cipher_count = 0U;
7653 pDst->auth_suite_count = 0U;
7654 return 0U;
7655 } else {
Naveen Rawat89e85d42018-05-23 11:54:27 -07007656 if (unlikely(ielen < 2)) {
7657 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007658 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007659 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007660
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007661 framesntohs(pCtx, &pDst->unicast_cipher_count, pBuf, 0);
7662 pBuf += 2;
7663 ielen -= (uint8_t)2;
7664 }
Naveen Rawat89e85d42018-05-23 11:54:27 -07007665 if (unlikely(ielen < pDst->unicast_cipher_count * 4)) {
7666 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007667 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007668 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007669
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007670 if (pDst->unicast_cipher_count > 4) {
7671 pDst->present = 0;
7672 return DOT11F_SKIPPED_BAD_IE;
7673 }
7674
7675 DOT11F_MEMCPY(pCtx, pDst->unicast_ciphers, pBuf, (pDst->unicast_cipher_count * 4));
7676 pBuf += (pDst->unicast_cipher_count * 4);
7677 ielen -= (pDst->unicast_cipher_count * 4);
7678 if (!ielen) {
7679 pDst->auth_suite_count = 0U;
7680 return 0U;
7681 } else {
Naveen Rawat89e85d42018-05-23 11:54:27 -07007682 if (unlikely(ielen < 2)) {
7683 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007684 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007685 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007686
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007687 framesntohs(pCtx, &pDst->auth_suite_count, pBuf, 0);
7688 pBuf += 2;
7689 ielen -= (uint8_t)2;
7690 }
Naveen Rawat89e85d42018-05-23 11:54:27 -07007691 if (unlikely(ielen < pDst->auth_suite_count * 4)) {
7692 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007693 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007694 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007695
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007696 if (pDst->auth_suite_count > 4) {
7697 pDst->present = 0;
7698 return DOT11F_SKIPPED_BAD_IE;
7699 }
7700
7701 DOT11F_MEMCPY(pCtx, pDst->auth_suites, pBuf, (pDst->auth_suite_count * 4));
7702 pBuf += (pDst->auth_suite_count * 4);
7703 ielen -= (pDst->auth_suite_count * 4);
7704 if (!ielen) {
7705 return 0U;
7706 } else {
Naveen Rawat89e85d42018-05-23 11:54:27 -07007707 if (unlikely(ielen < 2)) {
7708 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07007709 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07007710 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07007711
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007712 framesntohs(pCtx, &pDst->caps, pBuf, 0);
7713 }
7714 (void)pCtx;
7715 return status;
7716} /* End dot11f_unpack_ie_wpa. */
7717
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307718#define SigIeWPA (0x0073)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007719
7720
7721uint32_t dot11f_unpack_ie_wpa_opaque(tpAniSirGlobal pCtx,
7722 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07007723 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05307724 tDot11fIEWPAOpaque *pDst,
7725 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007726{
7727 uint32_t status = DOT11F_PARSE_SUCCESS;
7728 (void) pBuf; (void)ielen; /* Shutup the compiler */
7729 if (pDst->present)
7730 status = DOT11F_DUPLICATE_IE;
7731 pDst->present = 1;
7732 pDst->num_data = (uint8_t)(ielen);
7733 if (ielen > 249) {
7734 pDst->present = 0;
7735 return DOT11F_SKIPPED_BAD_IE;
7736 }
7737
7738 DOT11F_MEMCPY(pCtx, pDst->data, pBuf, (ielen));
7739 (void)pCtx;
7740 return status;
7741} /* End dot11f_unpack_ie_wpa_opaque. */
7742
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307743#define SigIeWPAOpaque (0x0074)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007744
7745
7746static const tTLVDefn TLVS_WSC[] = {
7747 { offsetof(tDot11fIEWSC, Version), offsetof(tDot11fTLVVersion, present),
7748 "Version", SigTlvVersion, DOT11F_TLV_VERSION, 0, 5, 5, 1, 2, 2, 1, },
7749 { offsetof(tDot11fIEWSC, WPSState), offsetof(tDot11fTLVWPSState, present),
7750 "WPSState", SigTlvWPSState, DOT11F_TLV_WPSSTATE, 0, 5, 5, 0, 2, 2, 1, },
7751 { offsetof(tDot11fIEWSC, APSetupLocked),
7752 offsetof(tDot11fTLVAPSetupLocked, present), "APSetupLocked",
7753 SigTlvAPSetupLocked, DOT11F_TLV_APSETUPLOCKED, 0, 5, 5, 0, 2, 2, 1, },
7754 { offsetof(tDot11fIEWSC, SelectedRegistrarConfigMethods),
7755 offsetof(tDot11fTLVSelectedRegistrarConfigMethods, present),
7756 "SelectedRegistrarConfigMethods", SigTlvSelectedRegistrarConfigMethods,
7757 DOT11F_TLV_SELECTEDREGISTRARCONFIGMETHODS, 0, 6, 6, 0, 2, 2, 1, },
7758 { offsetof(tDot11fIEWSC, UUID_E), offsetof(tDot11fTLVUUID_E, present),
7759 "UUID_E", SigTlvUUID_E, DOT11F_TLV_UUID_E, 0, 20, 20, 0, 2, 2, 1, },
7760 { offsetof(tDot11fIEWSC, UUID_R), offsetof(tDot11fTLVUUID_R, present),
7761 "UUID_R", SigTlvUUID_R, DOT11F_TLV_UUID_R, 0, 20, 20, 0, 2, 2, 1, },
7762 { offsetof(tDot11fIEWSC, RFBands), offsetof(tDot11fTLVRFBands, present),
7763 "RFBands", SigTlvRFBands, DOT11F_TLV_RFBANDS, 0, 5, 5, 0, 2, 2, 1, },
7764 { offsetof(tDot11fIEWSC, SelectedRegistrar),
7765 offsetof(tDot11fTLVSelectedRegistrar, present), "SelectedRegistrar",
7766 SigTlvSelectedRegistrar, DOT11F_TLV_SELECTEDREGISTRAR,
7767 0, 5, 5, 0, 2, 2, 1, },
7768 { offsetof(tDot11fIEWSC, ConfigMethods),
7769 offsetof(tDot11fTLVConfigMethods, present), "ConfigMethods",
7770 SigTlvConfigMethods, DOT11F_TLV_CONFIGMETHODS, 0, 6, 6, 0, 2, 2, 1, },
7771 { offsetof(tDot11fIEWSC, AssociationState),
7772 offsetof(tDot11fTLVAssociationState, present), "AssociationState",
7773 SigTlvAssociationState, DOT11F_TLV_ASSOCIATIONSTATE,
7774 0, 6, 6, 0, 2, 2, 1, },
7775 { offsetof(tDot11fIEWSC, ConfigurationError),
7776 offsetof(tDot11fTLVConfigurationError, present), "ConfigurationError",
7777 SigTlvConfigurationError, DOT11F_TLV_CONFIGURATIONERROR,
7778 0, 6, 6, 0, 2, 2, 1, },
7779 { offsetof(tDot11fIEWSC, Manufacturer), offsetof(tDot11fTLVManufacturer,
7780 present), "Manufacturer", SigTlvManufacturer, DOT11F_TLV_MANUFACTURER,
7781 0, 4, 68, 0, 2, 2, 1, },
7782 { offsetof(tDot11fIEWSC, ModelName), offsetof(tDot11fTLVModelName,
7783 present), "ModelName", SigTlvModelName, DOT11F_TLV_MODELNAME,
7784 0, 4, 36, 0, 2, 2, 1, },
7785 { offsetof(tDot11fIEWSC, ModelNumber), offsetof(tDot11fTLVModelNumber,
7786 present), "ModelNumber", SigTlvModelNumber, DOT11F_TLV_MODELNUMBER,
7787 0, 4, 36, 0, 2, 2, 1, },
7788 { offsetof(tDot11fIEWSC, SerialNumber), offsetof(tDot11fTLVSerialNumber,
7789 present), "SerialNumber", SigTlvSerialNumber, DOT11F_TLV_SERIALNUMBER,
7790 0, 4, 36, 0, 2, 2, 1, },
7791 { offsetof(tDot11fIEWSC, DeviceName), offsetof(tDot11fTLVDeviceName,
7792 present), "DeviceName", SigTlvDeviceName, DOT11F_TLV_DEVICENAME,
7793 0, 4, 36, 0, 2, 2, 1, },
7794 { offsetof(tDot11fIEWSC, DevicePasswordID),
7795 offsetof(tDot11fTLVDevicePasswordID, present), "DevicePasswordID",
7796 SigTlvDevicePasswordID, DOT11F_TLV_DEVICEPASSWORDID,
7797 0, 6, 6, 0, 2, 2, 1, },
7798 { offsetof(tDot11fIEWSC, PrimaryDeviceType),
7799 offsetof(tDot11fTLVPrimaryDeviceType, present), "PrimaryDeviceType",
7800 SigTlvPrimaryDeviceType, DOT11F_TLV_PRIMARYDEVICETYPE,
7801 0, 12, 12, 0, 2, 2, 1, },
7802 { offsetof(tDot11fIEWSC, RequestType), offsetof(tDot11fTLVRequestType,
7803 present), "RequestType", SigTlvRequestType, DOT11F_TLV_REQUESTTYPE,
7804 0, 5, 5, 0, 2, 2, 1, },
7805 { offsetof(tDot11fIEWSC, ResponseType), offsetof(tDot11fTLVResponseType,
7806 present), "ResponseType", SigTlvResponseType, DOT11F_TLV_RESPONSETYPE,
7807 0, 5, 5, 0, 2, 2, 1, },
7808 { offsetof(tDot11fIEWSC, VendorExtension),
7809 offsetof(tDot11fTLVVendorExtension, present), "VendorExtension",
7810 SigTlvVendorExtension, DOT11F_TLV_VENDOREXTENSION,
7811 0, 7, 21, 0, 2, 2, 1, },
7812 { offsetof(tDot11fIEWSC, RequestDeviceType),
7813 offsetof(tDot11fTLVRequestDeviceType, present), "RequestDeviceType",
7814 SigTlvRequestDeviceType, DOT11F_TLV_REQUESTDEVICETYPE,
7815 0, 12, 12, 0, 2, 2, 1, },
7816 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
7817};
7818
7819uint32_t dot11f_unpack_ie_wsc(tpAniSirGlobal pCtx,
7820 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07007821 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05307822 tDot11fIEWSC *pDst,
7823 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007824{
7825 uint32_t status = DOT11F_PARSE_SUCCESS;
7826 (void)pBuf; (void)ielen; /* Shutup the compiler */
7827 pDst->present = 1;
7828 status = unpack_tlv_core(pCtx, pBuf, ielen,
7829 TLVS_WSC,
7830 (uint8_t *)pDst, sizeof(*pDst));
7831 return status;
7832} /* End dot11f_unpack_ie_wsc. */
7833
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307834#define SigIeWSC (0x0075)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007835
7836
7837static const tTLVDefn TLVS_WscAssocReq[] = {
7838 { offsetof(tDot11fIEWscAssocReq, Version), offsetof(tDot11fTLVVersion,
7839 present), "Version", SigTlvVersion, DOT11F_TLV_VERSION,
7840 0, 5, 5, 1, 2, 2, 1, },
7841 { offsetof(tDot11fIEWscAssocReq, RequestType),
7842 offsetof(tDot11fTLVRequestType, present), "RequestType",
7843 SigTlvRequestType, DOT11F_TLV_REQUESTTYPE, 0, 5, 5, 1, 2, 2, 1, },
7844 { offsetof(tDot11fIEWscAssocReq, VendorExtension),
7845 offsetof(tDot11fTLVVendorExtension, present), "VendorExtension",
7846 SigTlvVendorExtension, DOT11F_TLV_VENDOREXTENSION,
7847 0, 7, 21, 0, 2, 2, 1, },
7848 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
7849};
7850
7851uint32_t dot11f_unpack_ie_wsc_assoc_req(tpAniSirGlobal pCtx,
7852 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07007853 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05307854 tDot11fIEWscAssocReq *pDst,
7855 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007856{
7857 uint32_t status = DOT11F_PARSE_SUCCESS;
7858 (void)pBuf; (void)ielen; /* Shutup the compiler */
7859 pDst->present = 1;
7860 status = unpack_tlv_core(pCtx, pBuf, ielen,
7861 TLVS_WscAssocReq,
7862 (uint8_t *)pDst, sizeof(*pDst));
7863 return status;
7864} /* End dot11f_unpack_ie_wsc_assoc_req. */
7865
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307866#define SigIeWscAssocReq (0x0076)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007867
7868
7869static const tTLVDefn TLVS_WscAssocRes[] = {
7870 { offsetof(tDot11fIEWscAssocRes, Version), offsetof(tDot11fTLVVersion,
7871 present), "Version", SigTlvVersion, DOT11F_TLV_VERSION,
7872 0, 5, 5, 1, 2, 2, 1, },
7873 { offsetof(tDot11fIEWscAssocRes, ResponseType),
7874 offsetof(tDot11fTLVResponseType, present), "ResponseType",
7875 SigTlvResponseType, DOT11F_TLV_RESPONSETYPE, 0, 5, 5, 1, 2, 2, 1, },
7876 { offsetof(tDot11fIEWscAssocRes, VendorExtension),
7877 offsetof(tDot11fTLVVendorExtension, present), "VendorExtension",
7878 SigTlvVendorExtension, DOT11F_TLV_VENDOREXTENSION,
7879 0, 7, 21, 0, 2, 2, 1, },
7880 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
7881};
7882
7883uint32_t dot11f_unpack_ie_wsc_assoc_res(tpAniSirGlobal pCtx,
7884 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07007885 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05307886 tDot11fIEWscAssocRes *pDst,
7887 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007888{
7889 uint32_t status = DOT11F_PARSE_SUCCESS;
7890 (void)pBuf; (void)ielen; /* Shutup the compiler */
7891 pDst->present = 1;
7892 status = unpack_tlv_core(pCtx, pBuf, ielen,
7893 TLVS_WscAssocRes,
7894 (uint8_t *)pDst, sizeof(*pDst));
7895 return status;
7896} /* End dot11f_unpack_ie_wsc_assoc_res. */
7897
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307898#define SigIeWscAssocRes (0x0077)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007899
7900
7901static const tTLVDefn TLVS_WscBeacon[] = {
7902 { offsetof(tDot11fIEWscBeacon, Version), offsetof(tDot11fTLVVersion,
7903 present), "Version", SigTlvVersion, DOT11F_TLV_VERSION,
7904 0, 5, 5, 1, 2, 2, 1, },
7905 { offsetof(tDot11fIEWscBeacon, WPSState), offsetof(tDot11fTLVWPSState,
7906 present), "WPSState", SigTlvWPSState, DOT11F_TLV_WPSSTATE,
7907 0, 5, 5, 1, 2, 2, 1, },
7908 { offsetof(tDot11fIEWscBeacon, APSetupLocked),
7909 offsetof(tDot11fTLVAPSetupLocked, present), "APSetupLocked",
7910 SigTlvAPSetupLocked, DOT11F_TLV_APSETUPLOCKED, 0, 5, 5, 0, 2, 2, 1, },
7911 { offsetof(tDot11fIEWscBeacon, SelectedRegistrar),
7912 offsetof(tDot11fTLVSelectedRegistrar, present), "SelectedRegistrar",
7913 SigTlvSelectedRegistrar, DOT11F_TLV_SELECTEDREGISTRAR,
7914 0, 5, 5, 0, 2, 2, 1, },
7915 { offsetof(tDot11fIEWscBeacon, DevicePasswordID),
7916 offsetof(tDot11fTLVDevicePasswordID, present), "DevicePasswordID",
7917 SigTlvDevicePasswordID, DOT11F_TLV_DEVICEPASSWORDID,
7918 0, 6, 6, 0, 2, 2, 1, },
7919 { offsetof(tDot11fIEWscBeacon, SelectedRegistrarConfigMethods),
7920 offsetof(tDot11fTLVSelectedRegistrarConfigMethods, present),
7921 "SelectedRegistrarConfigMethods", SigTlvSelectedRegistrarConfigMethods,
7922 DOT11F_TLV_SELECTEDREGISTRARCONFIGMETHODS, 0, 6, 6, 0, 2, 2, 1, },
7923 { offsetof(tDot11fIEWscBeacon, UUID_E), offsetof(tDot11fTLVUUID_E,
7924 present), "UUID_E", SigTlvUUID_E, DOT11F_TLV_UUID_E,
7925 0, 20, 20, 0, 2, 2, 1, },
7926 { offsetof(tDot11fIEWscBeacon, RFBands), offsetof(tDot11fTLVRFBands,
7927 present), "RFBands", SigTlvRFBands, DOT11F_TLV_RFBANDS,
7928 0, 5, 5, 0, 2, 2, 1, },
7929 { offsetof(tDot11fIEWscBeacon, VendorExtension),
7930 offsetof(tDot11fTLVVendorExtension, present), "VendorExtension",
7931 SigTlvVendorExtension, DOT11F_TLV_VENDOREXTENSION,
7932 0, 7, 21, 0, 2, 2, 1, },
7933 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
7934};
7935
7936uint32_t dot11f_unpack_ie_wsc_beacon(tpAniSirGlobal pCtx,
7937 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07007938 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05307939 tDot11fIEWscBeacon *pDst,
7940 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007941{
7942 uint32_t status = DOT11F_PARSE_SUCCESS;
7943 (void)pBuf; (void)ielen; /* Shutup the compiler */
7944 pDst->present = 1;
7945 status = unpack_tlv_core(pCtx, pBuf, ielen,
7946 TLVS_WscBeacon,
7947 (uint8_t *)pDst, sizeof(*pDst));
7948 return status;
7949} /* End dot11f_unpack_ie_wsc_beacon. */
7950
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05307951#define SigIeWscBeacon (0x0078)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08007952
7953
7954static const tTLVDefn TLVS_WscBeaconProbeRes[] = {
7955 { offsetof(tDot11fIEWscBeaconProbeRes, Version),
7956 offsetof(tDot11fTLVVersion, present), "Version", SigTlvVersion,
7957 DOT11F_TLV_VERSION, 0, 5, 5, 0, 2, 2, 1, },
7958 { offsetof(tDot11fIEWscBeaconProbeRes, WPSState),
7959 offsetof(tDot11fTLVWPSState, present), "WPSState", SigTlvWPSState,
7960 DOT11F_TLV_WPSSTATE, 0, 5, 5, 0, 2, 2, 1, },
7961 { offsetof(tDot11fIEWscBeaconProbeRes, APSetupLocked),
7962 offsetof(tDot11fTLVAPSetupLocked, present), "APSetupLocked",
7963 SigTlvAPSetupLocked, DOT11F_TLV_APSETUPLOCKED, 0, 5, 5, 0, 2, 2, 1, },
7964 { offsetof(tDot11fIEWscBeaconProbeRes, SelectedRegistrar),
7965 offsetof(tDot11fTLVSelectedRegistrar, present), "SelectedRegistrar",
7966 SigTlvSelectedRegistrar, DOT11F_TLV_SELECTEDREGISTRAR,
7967 0, 5, 5, 0, 2, 2, 1, },
7968 { offsetof(tDot11fIEWscBeaconProbeRes, DevicePasswordID),
7969 offsetof(tDot11fTLVDevicePasswordID, present), "DevicePasswordID",
7970 SigTlvDevicePasswordID, DOT11F_TLV_DEVICEPASSWORDID,
7971 0, 6, 6, 0, 2, 2, 1, },
7972 { offsetof(tDot11fIEWscBeaconProbeRes, SelectedRegistrarConfigMethods),
7973 offsetof(tDot11fTLVSelectedRegistrarConfigMethods, present),
7974 "SelectedRegistrarConfigMethods", SigTlvSelectedRegistrarConfigMethods,
7975 DOT11F_TLV_SELECTEDREGISTRARCONFIGMETHODS, 0, 6, 6, 0, 2, 2, 1, },
7976 { offsetof(tDot11fIEWscBeaconProbeRes, ResponseType),
7977 offsetof(tDot11fTLVResponseType, present), "ResponseType",
7978 SigTlvResponseType, DOT11F_TLV_RESPONSETYPE, 0, 5, 5, 0, 2, 2, 1, },
7979 { offsetof(tDot11fIEWscBeaconProbeRes, UUID_E),
7980 offsetof(tDot11fTLVUUID_E, present), "UUID_E", SigTlvUUID_E,
7981 DOT11F_TLV_UUID_E, 0, 20, 20, 0, 2, 2, 1, },
7982 { offsetof(tDot11fIEWscBeaconProbeRes, Manufacturer),
7983 offsetof(tDot11fTLVManufacturer, present), "Manufacturer",
7984 SigTlvManufacturer, DOT11F_TLV_MANUFACTURER, 0, 4, 68, 0, 2, 2, 1, },
7985 { offsetof(tDot11fIEWscBeaconProbeRes, ModelName),
7986 offsetof(tDot11fTLVModelName, present), "ModelName", SigTlvModelName,
7987 DOT11F_TLV_MODELNAME, 0, 4, 36, 0, 2, 2, 1, },
7988 { offsetof(tDot11fIEWscBeaconProbeRes, ModelNumber),
7989 offsetof(tDot11fTLVModelNumber, present), "ModelNumber",
7990 SigTlvModelNumber, DOT11F_TLV_MODELNUMBER, 0, 4, 36, 0, 2, 2, 1, },
7991 { offsetof(tDot11fIEWscBeaconProbeRes, SerialNumber),
7992 offsetof(tDot11fTLVSerialNumber, present), "SerialNumber",
7993 SigTlvSerialNumber, DOT11F_TLV_SERIALNUMBER, 0, 4, 36, 0, 2, 2, 1, },
7994 { offsetof(tDot11fIEWscBeaconProbeRes, PrimaryDeviceType),
7995 offsetof(tDot11fTLVPrimaryDeviceType, present), "PrimaryDeviceType",
7996 SigTlvPrimaryDeviceType, DOT11F_TLV_PRIMARYDEVICETYPE,
7997 0, 12, 12, 0, 2, 2, 1, },
7998 { offsetof(tDot11fIEWscBeaconProbeRes, DeviceName),
7999 offsetof(tDot11fTLVDeviceName, present), "DeviceName", SigTlvDeviceName,
8000 DOT11F_TLV_DEVICENAME, 0, 4, 36, 0, 2, 2, 1, },
8001 { offsetof(tDot11fIEWscBeaconProbeRes, ConfigMethods),
8002 offsetof(tDot11fTLVConfigMethods, present), "ConfigMethods",
8003 SigTlvConfigMethods, DOT11F_TLV_CONFIGMETHODS, 0, 6, 6, 0, 2, 2, 1, },
8004 { offsetof(tDot11fIEWscBeaconProbeRes, RFBands),
8005 offsetof(tDot11fTLVRFBands, present), "RFBands", SigTlvRFBands,
8006 DOT11F_TLV_RFBANDS, 0, 5, 5, 0, 2, 2, 1, },
8007 { offsetof(tDot11fIEWscBeaconProbeRes, VendorExtension),
8008 offsetof(tDot11fTLVVendorExtension, present), "VendorExtension",
8009 SigTlvVendorExtension, DOT11F_TLV_VENDOREXTENSION,
8010 0, 7, 21, 0, 2, 2, 1, },
8011 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
8012};
8013
8014uint32_t dot11f_unpack_ie_wsc_beacon_probe_res(tpAniSirGlobal pCtx,
8015 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07008016 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308017 tDot11fIEWscBeaconProbeRes *pDst,
8018 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08008019{
8020 uint32_t status = DOT11F_PARSE_SUCCESS;
8021 (void)pBuf; (void)ielen; /* Shutup the compiler */
8022 pDst->present = 1;
8023 status = unpack_tlv_core(pCtx, pBuf, ielen,
8024 TLVS_WscBeaconProbeRes,
8025 (uint8_t *)pDst, sizeof(*pDst));
8026 return status;
8027} /* End dot11f_unpack_ie_wsc_beacon_probe_res. */
8028
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308029#define SigIeWscBeaconProbeRes (0x0079)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08008030
8031
8032uint32_t dot11f_unpack_ie_wsc_ie_opaque(tpAniSirGlobal pCtx,
8033 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07008034 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308035 tDot11fIEWscIEOpaque *pDst,
8036 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08008037{
8038 uint32_t status = DOT11F_PARSE_SUCCESS;
8039 (void) pBuf; (void)ielen; /* Shutup the compiler */
8040 if (pDst->present)
8041 status = DOT11F_DUPLICATE_IE;
8042 pDst->present = 1;
8043 pDst->num_data = (uint8_t)(ielen);
8044 if (ielen > 249) {
8045 pDst->present = 0;
8046 return DOT11F_SKIPPED_BAD_IE;
8047 }
8048
8049 DOT11F_MEMCPY(pCtx, pDst->data, pBuf, (ielen));
8050 (void)pCtx;
8051 return status;
8052} /* End dot11f_unpack_ie_wsc_ie_opaque. */
8053
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308054#define SigIeWscIEOpaque (0x007a)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08008055
8056
8057static const tTLVDefn TLVS_WscProbeReq[] = {
8058 { offsetof(tDot11fIEWscProbeReq, Version), offsetof(tDot11fTLVVersion,
8059 present), "Version", SigTlvVersion, DOT11F_TLV_VERSION,
8060 0, 5, 5, 1, 2, 2, 1, },
8061 { offsetof(tDot11fIEWscProbeReq, RequestType),
8062 offsetof(tDot11fTLVRequestType, present), "RequestType",
8063 SigTlvRequestType, DOT11F_TLV_REQUESTTYPE, 0, 5, 5, 1, 2, 2, 1, },
8064 { offsetof(tDot11fIEWscProbeReq, ConfigMethods),
8065 offsetof(tDot11fTLVConfigMethods, present), "ConfigMethods",
8066 SigTlvConfigMethods, DOT11F_TLV_CONFIGMETHODS, 0, 6, 6, 1, 2, 2, 1, },
8067 { offsetof(tDot11fIEWscProbeReq, UUID_E), offsetof(tDot11fTLVUUID_E,
8068 present), "UUID_E", SigTlvUUID_E, DOT11F_TLV_UUID_E,
8069 0, 20, 20, 1, 2, 2, 1, },
8070 { offsetof(tDot11fIEWscProbeReq, PrimaryDeviceType),
8071 offsetof(tDot11fTLVPrimaryDeviceType, present), "PrimaryDeviceType",
8072 SigTlvPrimaryDeviceType, DOT11F_TLV_PRIMARYDEVICETYPE,
8073 0, 12, 12, 1, 2, 2, 1, },
8074 { offsetof(tDot11fIEWscProbeReq, RFBands), offsetof(tDot11fTLVRFBands,
8075 present), "RFBands", SigTlvRFBands, DOT11F_TLV_RFBANDS,
8076 0, 5, 5, 1, 2, 2, 1, },
8077 { offsetof(tDot11fIEWscProbeReq, AssociationState),
8078 offsetof(tDot11fTLVAssociationState, present), "AssociationState",
8079 SigTlvAssociationState, DOT11F_TLV_ASSOCIATIONSTATE,
8080 0, 6, 6, 1, 2, 2, 1, },
8081 { offsetof(tDot11fIEWscProbeReq, ConfigurationError),
8082 offsetof(tDot11fTLVConfigurationError, present), "ConfigurationError",
8083 SigTlvConfigurationError, DOT11F_TLV_CONFIGURATIONERROR,
8084 0, 6, 6, 1, 2, 2, 1, },
8085 { offsetof(tDot11fIEWscProbeReq, DevicePasswordID),
8086 offsetof(tDot11fTLVDevicePasswordID, present), "DevicePasswordID",
8087 SigTlvDevicePasswordID, DOT11F_TLV_DEVICEPASSWORDID,
8088 0, 6, 6, 1, 2, 2, 1, },
8089 { offsetof(tDot11fIEWscProbeReq, Manufacturer),
8090 offsetof(tDot11fTLVManufacturer, present), "Manufacturer",
8091 SigTlvManufacturer, DOT11F_TLV_MANUFACTURER, 0, 4, 68, 0, 2, 2, 1, },
8092 { offsetof(tDot11fIEWscProbeReq, ModelName),
8093 offsetof(tDot11fTLVModelName, present), "ModelName", SigTlvModelName,
8094 DOT11F_TLV_MODELNAME, 0, 4, 36, 0, 2, 2, 1, },
8095 { offsetof(tDot11fIEWscProbeReq, ModelNumber),
8096 offsetof(tDot11fTLVModelNumber, present), "ModelNumber",
8097 SigTlvModelNumber, DOT11F_TLV_MODELNUMBER, 0, 4, 36, 0, 2, 2, 1, },
8098 { offsetof(tDot11fIEWscProbeReq, DeviceName),
8099 offsetof(tDot11fTLVDeviceName, present), "DeviceName", SigTlvDeviceName,
8100 DOT11F_TLV_DEVICENAME, 0, 4, 36, 0, 2, 2, 1, },
8101 { offsetof(tDot11fIEWscProbeReq, VendorExtension),
8102 offsetof(tDot11fTLVVendorExtension, present), "VendorExtension",
8103 SigTlvVendorExtension, DOT11F_TLV_VENDOREXTENSION,
8104 0, 7, 21, 0, 2, 2, 1, },
8105 { offsetof(tDot11fIEWscProbeReq, RequestDeviceType),
8106 offsetof(tDot11fTLVRequestDeviceType, present), "RequestDeviceType",
8107 SigTlvRequestDeviceType, DOT11F_TLV_REQUESTDEVICETYPE,
8108 0, 12, 12, 0, 2, 2, 1, },
8109 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
8110};
8111
8112uint32_t dot11f_unpack_ie_wsc_probe_req(tpAniSirGlobal pCtx,
8113 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07008114 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308115 tDot11fIEWscProbeReq *pDst,
8116 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08008117{
8118 uint32_t status = DOT11F_PARSE_SUCCESS;
8119 (void)pBuf; (void)ielen; /* Shutup the compiler */
8120 pDst->present = 1;
8121 status = unpack_tlv_core(pCtx, pBuf, ielen,
8122 TLVS_WscProbeReq,
8123 (uint8_t *)pDst, sizeof(*pDst));
8124 return status;
8125} /* End dot11f_unpack_ie_wsc_probe_req. */
8126
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308127#define SigIeWscProbeReq (0x007b)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08008128
8129
8130static const tTLVDefn TLVS_WscProbeRes[] = {
8131 { offsetof(tDot11fIEWscProbeRes, Version), offsetof(tDot11fTLVVersion,
8132 present), "Version", SigTlvVersion, DOT11F_TLV_VERSION,
8133 0, 5, 5, 1, 2, 2, 1, },
8134 { offsetof(tDot11fIEWscProbeRes, WPSState), offsetof(tDot11fTLVWPSState,
8135 present), "WPSState", SigTlvWPSState, DOT11F_TLV_WPSSTATE,
8136 0, 5, 5, 1, 2, 2, 1, },
8137 { offsetof(tDot11fIEWscProbeRes, APSetupLocked),
8138 offsetof(tDot11fTLVAPSetupLocked, present), "APSetupLocked",
8139 SigTlvAPSetupLocked, DOT11F_TLV_APSETUPLOCKED, 0, 5, 5, 0, 2, 2, 1, },
8140 { offsetof(tDot11fIEWscProbeRes, SelectedRegistrar),
8141 offsetof(tDot11fTLVSelectedRegistrar, present), "SelectedRegistrar",
8142 SigTlvSelectedRegistrar, DOT11F_TLV_SELECTEDREGISTRAR,
8143 0, 5, 5, 0, 2, 2, 1, },
8144 { offsetof(tDot11fIEWscProbeRes, DevicePasswordID),
8145 offsetof(tDot11fTLVDevicePasswordID, present), "DevicePasswordID",
8146 SigTlvDevicePasswordID, DOT11F_TLV_DEVICEPASSWORDID,
8147 0, 6, 6, 0, 2, 2, 1, },
8148 { offsetof(tDot11fIEWscProbeRes, SelectedRegistrarConfigMethods),
8149 offsetof(tDot11fTLVSelectedRegistrarConfigMethods, present),
8150 "SelectedRegistrarConfigMethods", SigTlvSelectedRegistrarConfigMethods,
8151 DOT11F_TLV_SELECTEDREGISTRARCONFIGMETHODS, 0, 6, 6, 0, 2, 2, 1, },
8152 { offsetof(tDot11fIEWscProbeRes, ResponseType),
8153 offsetof(tDot11fTLVResponseType, present), "ResponseType",
8154 SigTlvResponseType, DOT11F_TLV_RESPONSETYPE, 0, 5, 5, 1, 2, 2, 1, },
8155 { offsetof(tDot11fIEWscProbeRes, UUID_E), offsetof(tDot11fTLVUUID_E,
8156 present), "UUID_E", SigTlvUUID_E, DOT11F_TLV_UUID_E,
8157 0, 20, 20, 1, 2, 2, 1, },
8158 { offsetof(tDot11fIEWscProbeRes, Manufacturer),
8159 offsetof(tDot11fTLVManufacturer, present), "Manufacturer",
8160 SigTlvManufacturer, DOT11F_TLV_MANUFACTURER, 0, 4, 68, 1, 2, 2, 1, },
8161 { offsetof(tDot11fIEWscProbeRes, ModelName),
8162 offsetof(tDot11fTLVModelName, present), "ModelName", SigTlvModelName,
8163 DOT11F_TLV_MODELNAME, 0, 4, 36, 1, 2, 2, 1, },
8164 { offsetof(tDot11fIEWscProbeRes, ModelNumber),
8165 offsetof(tDot11fTLVModelNumber, present), "ModelNumber",
8166 SigTlvModelNumber, DOT11F_TLV_MODELNUMBER, 0, 4, 36, 1, 2, 2, 1, },
8167 { offsetof(tDot11fIEWscProbeRes, SerialNumber),
8168 offsetof(tDot11fTLVSerialNumber, present), "SerialNumber",
8169 SigTlvSerialNumber, DOT11F_TLV_SERIALNUMBER, 0, 4, 36, 1, 2, 2, 1, },
8170 { offsetof(tDot11fIEWscProbeRes, PrimaryDeviceType),
8171 offsetof(tDot11fTLVPrimaryDeviceType, present), "PrimaryDeviceType",
8172 SigTlvPrimaryDeviceType, DOT11F_TLV_PRIMARYDEVICETYPE,
8173 0, 12, 12, 1, 2, 2, 1, },
8174 { offsetof(tDot11fIEWscProbeRes, DeviceName),
8175 offsetof(tDot11fTLVDeviceName, present), "DeviceName", SigTlvDeviceName,
8176 DOT11F_TLV_DEVICENAME, 0, 4, 36, 1, 2, 2, 1, },
8177 { offsetof(tDot11fIEWscProbeRes, ConfigMethods),
8178 offsetof(tDot11fTLVConfigMethods, present), "ConfigMethods",
8179 SigTlvConfigMethods, DOT11F_TLV_CONFIGMETHODS, 0, 6, 6, 1, 2, 2, 1, },
8180 { offsetof(tDot11fIEWscProbeRes, RFBands), offsetof(tDot11fTLVRFBands,
8181 present), "RFBands", SigTlvRFBands, DOT11F_TLV_RFBANDS,
8182 0, 5, 5, 0, 2, 2, 1, },
8183 { offsetof(tDot11fIEWscProbeRes, VendorExtension),
8184 offsetof(tDot11fTLVVendorExtension, present), "VendorExtension",
8185 SigTlvVendorExtension, DOT11F_TLV_VENDOREXTENSION,
8186 0, 7, 21, 0, 2, 2, 1, },
8187 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
8188};
8189
8190uint32_t dot11f_unpack_ie_wsc_probe_res(tpAniSirGlobal pCtx,
8191 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07008192 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308193 tDot11fIEWscProbeRes *pDst,
8194 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08008195{
8196 uint32_t status = DOT11F_PARSE_SUCCESS;
8197 (void)pBuf; (void)ielen; /* Shutup the compiler */
8198 pDst->present = 1;
8199 status = unpack_tlv_core(pCtx, pBuf, ielen,
8200 TLVS_WscProbeRes,
8201 (uint8_t *)pDst, sizeof(*pDst));
8202 return status;
8203} /* End dot11f_unpack_ie_wsc_probe_res. */
8204
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308205#define SigIeWscProbeRes (0x007c)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08008206
8207
8208static const tTLVDefn TLVS_WscReassocRes[] = {
8209 { offsetof(tDot11fIEWscReassocRes, Version), offsetof(tDot11fTLVVersion,
8210 present), "Version", SigTlvVersion, DOT11F_TLV_VERSION,
8211 0, 5, 5, 1, 2, 2, 1, },
8212 { offsetof(tDot11fIEWscReassocRes, ResponseType),
8213 offsetof(tDot11fTLVResponseType, present), "ResponseType",
8214 SigTlvResponseType, DOT11F_TLV_RESPONSETYPE, 0, 5, 5, 1, 2, 2, 1, },
8215 { offsetof(tDot11fIEWscReassocRes, VendorExtension),
8216 offsetof(tDot11fTLVVendorExtension, present), "VendorExtension",
8217 SigTlvVendorExtension, DOT11F_TLV_VENDOREXTENSION,
8218 0, 7, 21, 0, 2, 2, 1, },
8219 {0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
8220};
8221
8222uint32_t dot11f_unpack_ie_wsc_reassoc_res(tpAniSirGlobal pCtx,
8223 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07008224 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308225 tDot11fIEWscReassocRes *pDst,
8226 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08008227{
8228 uint32_t status = DOT11F_PARSE_SUCCESS;
8229 (void)pBuf; (void)ielen; /* Shutup the compiler */
8230 pDst->present = 1;
8231 status = unpack_tlv_core(pCtx, pBuf, ielen,
8232 TLVS_WscReassocRes,
8233 (uint8_t *)pDst, sizeof(*pDst));
8234 return status;
8235} /* End dot11f_unpack_ie_wsc_reassoc_res. */
8236
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308237#define SigIeWscReassocRes (0x007d)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08008238
8239
Kiran Kumar Lokere40875852018-01-15 12:36:19 -08008240uint32_t dot11f_unpack_ie_addba_extn_element(tpAniSirGlobal pCtx,
8241 uint8_t *pBuf,
8242 uint8_t ielen,
8243 tDot11fIEaddba_extn_element *pDst,
8244 bool append_ie)
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -07008245{
8246 uint32_t status = DOT11F_PARSE_SUCCESS;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308247 uint8_t tmp74__;
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -07008248 (void) pBuf; (void)ielen; /* Shutup the compiler */
8249 if (pDst->present)
8250 status = DOT11F_DUPLICATE_IE;
8251 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008252 if (unlikely(ielen < 1)) {
8253 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008254 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008255 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008256
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308257 tmp74__ = *pBuf;
8258 pDst->no_fragmentation = tmp74__ >> 0 & 0x1;
8259 pDst->he_frag_operation = tmp74__ >> 1 & 0x3;
8260 pDst->reserved = tmp74__ >> 3 & 0x1f;
Kiran Kumar Lokere40875852018-01-15 12:36:19 -08008261 (void)pCtx;
8262 return status;
8263} /* End dot11f_unpack_ie_addba_extn_element. */
8264
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308265#define SigIeaddba_extn_element (0x007e)
Kiran Kumar Lokere40875852018-01-15 12:36:19 -08008266
8267
8268uint32_t dot11f_unpack_ie_bss_color_change(tpAniSirGlobal pCtx,
8269 uint8_t *pBuf,
8270 uint8_t ielen,
8271 tDot11fIEbss_color_change *pDst,
8272 bool append_ie)
8273{
8274 uint32_t status = DOT11F_PARSE_SUCCESS;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308275 uint8_t tmp75__;
Kiran Kumar Lokere40875852018-01-15 12:36:19 -08008276 (void) pBuf; (void)ielen; /* Shutup the compiler */
8277 if (pDst->present)
8278 status = DOT11F_DUPLICATE_IE;
8279 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008280 if (unlikely(ielen < 1)) {
8281 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008282 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008283 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008284
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -07008285 pDst->countdown = *pBuf;
8286 pBuf += 1;
8287 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008288 if (unlikely(ielen < 1)) {
8289 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008290 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008291 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008292
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308293 tmp75__ = *pBuf;
8294 pDst->new_color = tmp75__ >> 0 & 0x3f;
8295 pDst->reserved = tmp75__ >> 6 & 0x3;
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -07008296 (void)pCtx;
8297 return status;
8298} /* End dot11f_unpack_ie_bss_color_change. */
8299
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308300#define SigIebss_color_change (0x007f)
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -07008301
8302
Padma, Santhosh Kumar666f96e2017-11-10 13:22:59 +05308303uint32_t dot11f_unpack_ie_dh_parameter_element(tpAniSirGlobal pCtx,
8304 uint8_t *pBuf,
8305 uint8_t ielen,
8306 tDot11fIEdh_parameter_element *pDst,
8307 bool append_ie)
8308{
8309 uint32_t status = DOT11F_PARSE_SUCCESS;
8310 (void) pBuf; (void)ielen; /* Shutup the compiler */
8311 if (pDst->present)
8312 status = DOT11F_DUPLICATE_IE;
8313 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008314 if (unlikely(ielen < 2)) {
8315 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008316 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008317 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008318
Padma, Santhosh Kumar666f96e2017-11-10 13:22:59 +05308319 DOT11F_MEMCPY(pCtx, pDst->group, pBuf, 2);
8320 pBuf += 2;
8321 ielen -= (uint8_t)2;
8322 pDst->num_public_key = (uint8_t)(ielen);
8323 DOT11F_MEMCPY(pCtx, pDst->public_key, pBuf, (ielen));
8324 (void)pCtx;
8325 return status;
8326} /* End dot11f_unpack_ie_dh_parameter_element. */
8327
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308328#define SigIedh_parameter_element (0x0080)
Padma, Santhosh Kumar666f96e2017-11-10 13:22:59 +05308329
8330
Abhishek Singhd8c3f102017-07-29 14:10:37 +05308331uint32_t dot11f_unpack_ie_esp_information(tpAniSirGlobal pCtx,
8332 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07008333 uint8_t ielen,
Abhishek Singhd8c3f102017-07-29 14:10:37 +05308334 tDot11fIEesp_information *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 status = DOT11F_DUPLICATE_IE;
8341 pDst->present = 1;
8342 pDst->num_data = (uint8_t)(ielen);
8343 if (ielen > 96) {
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_esp_information. */
8352
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308353#define SigIeesp_information (0x0081)
Abhishek Singhd8c3f102017-07-29 14:10:37 +05308354
8355
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08008356uint32_t dot11f_unpack_ie_ext_chan_switch_ann(tpAniSirGlobal pCtx,
8357 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07008358 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308359 tDot11fIEext_chan_switch_ann *pDst,
8360 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08008361{
8362 uint32_t status = DOT11F_PARSE_SUCCESS;
8363 (void) pBuf; (void)ielen; /* Shutup the compiler */
8364 if (pDst->present)
8365 status = DOT11F_DUPLICATE_IE;
8366 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008367 if (unlikely(ielen < 1)) {
8368 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008369 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008370 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008371
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08008372 pDst->switch_mode = *pBuf;
8373 pBuf += 1;
8374 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008375 if (unlikely(ielen < 1)) {
8376 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008377 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008378 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008379
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08008380 pDst->new_reg_class = *pBuf;
8381 pBuf += 1;
8382 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008383 if (unlikely(ielen < 1)) {
8384 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008385 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008386 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008387
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08008388 pDst->new_channel = *pBuf;
8389 pBuf += 1;
8390 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008391 if (unlikely(ielen < 1)) {
8392 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008393 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008394 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008395
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08008396 pDst->switch_count = *pBuf;
8397 (void)pCtx;
8398 return status;
8399} /* End dot11f_unpack_ie_ext_chan_switch_ann. */
8400
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308401#define SigIeext_chan_switch_ann (0x0082)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08008402
8403
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308404uint32_t dot11f_unpack_ie_fils_assoc_delay_info(tpAniSirGlobal pCtx,
8405 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07008406 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308407 tDot11fIEfils_assoc_delay_info *pDst,
8408 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08008409{
8410 uint32_t status = DOT11F_PARSE_SUCCESS;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08008411 (void) pBuf; (void)ielen; /* Shutup the compiler */
8412 if (pDst->present)
8413 status = DOT11F_DUPLICATE_IE;
8414 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008415 if (unlikely(ielen < 1)) {
8416 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008417 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008418 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008419
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308420 pDst->assoc_delay_info = *pBuf;
8421 (void)pCtx;
8422 return status;
8423} /* End dot11f_unpack_ie_fils_assoc_delay_info. */
8424
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308425#define SigIefils_assoc_delay_info (0x0083)
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308426
8427
8428uint32_t dot11f_unpack_ie_fils_hlp_container(tpAniSirGlobal pCtx,
8429 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07008430 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308431 tDot11fIEfils_hlp_container *pDst,
8432 bool append_ie)
8433{
8434 uint32_t status = DOT11F_PARSE_SUCCESS;
8435 (void) pBuf; (void)ielen; /* Shutup the compiler */
8436 if (pDst->present)
8437 status = DOT11F_DUPLICATE_IE;
8438 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008439 if (unlikely(ielen < 6)) {
8440 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008441 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008442 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008443
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308444 DOT11F_MEMCPY(pCtx, pDst->dest_mac, pBuf, 6);
8445 pBuf += 6;
8446 ielen -= (uint8_t)6;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008447 if (unlikely(ielen < 6)) {
8448 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008449 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008450 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008451
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308452 DOT11F_MEMCPY(pCtx, pDst->src_mac, pBuf, 6);
8453 pBuf += 6;
8454 ielen -= (uint8_t)6;
8455 pDst->num_hlp_packet = (uint8_t)(ielen);
8456 DOT11F_MEMCPY(pCtx, pDst->hlp_packet, pBuf, (ielen));
8457 (void)pCtx;
8458 return status;
8459} /* End dot11f_unpack_ie_fils_hlp_container. */
8460
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308461#define SigIefils_hlp_container (0x0084)
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308462
8463
8464uint32_t dot11f_unpack_ie_fils_indication(tpAniSirGlobal pCtx,
8465 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07008466 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308467 tDot11fIEfils_indication *pDst,
8468 bool append_ie)
8469{
8470 uint32_t status = DOT11F_PARSE_SUCCESS;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308471 uint16_t tmp76__;
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308472 (void) pBuf; (void)ielen; /* Shutup the compiler */
8473 if (pDst->present)
8474 status = DOT11F_DUPLICATE_IE;
8475 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008476 if (unlikely(ielen < 2)) {
8477 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008478 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008479 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008480
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308481 framesntohs(pCtx, &tmp76__, pBuf, 0);
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308482 pBuf += 2;
8483 ielen -= 2;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308484 pDst->public_key_identifiers_cnt = tmp76__ >> 0 & 0x7;
8485 pDst->realm_identifiers_cnt = tmp76__ >> 3 & 0x7;
8486 pDst->is_ip_config_supported = tmp76__ >> 6 & 0x1;
8487 pDst->is_cache_id_present = tmp76__ >> 7 & 0x1;
8488 pDst->is_hessid_present = tmp76__ >> 8 & 0x1;
8489 pDst->is_fils_sk_auth_supported = tmp76__ >> 9 & 0x1;
8490 pDst->is_fils_sk_auth_pfs_supported = tmp76__ >> 10 & 0x1;
8491 pDst->is_pk_auth_supported = tmp76__ >> 11 & 0x1;
8492 pDst->reserved = tmp76__ >> 12 & 0xf;
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308493 pDst->num_variable_data = (uint8_t)(ielen);
8494 DOT11F_MEMCPY(pCtx, pDst->variable_data, pBuf, (ielen));
8495 (void)pCtx;
8496 return status;
8497} /* End dot11f_unpack_ie_fils_indication. */
8498
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308499#define SigIefils_indication (0x0085)
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308500
8501
8502uint32_t dot11f_unpack_ie_fils_kde(tpAniSirGlobal pCtx,
8503 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07008504 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308505 tDot11fIEfils_kde *pDst,
8506 bool append_ie)
8507{
8508 uint32_t status = DOT11F_PARSE_SUCCESS;
8509 (void) pBuf; (void)ielen; /* Shutup the compiler */
8510 if (pDst->present)
8511 status = DOT11F_DUPLICATE_IE;
8512 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008513 if (unlikely(ielen < 8)) {
8514 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008515 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008516 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008517
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308518 DOT11F_MEMCPY(pCtx, pDst->key_rsc, pBuf, 8);
8519 pBuf += 8;
8520 ielen -= (uint8_t)8;
8521 pDst->num_kde_list = (uint8_t)(ielen);
8522 DOT11F_MEMCPY(pCtx, pDst->kde_list, pBuf, (ielen));
8523 (void)pCtx;
8524 return status;
8525} /* End dot11f_unpack_ie_fils_kde. */
8526
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308527#define SigIefils_kde (0x0086)
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308528
8529
8530uint32_t dot11f_unpack_ie_fils_key_confirmation(tpAniSirGlobal pCtx,
8531 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07008532 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308533 tDot11fIEfils_key_confirmation *pDst,
8534 bool append_ie)
8535{
8536 uint32_t status = DOT11F_PARSE_SUCCESS;
8537 (void) pBuf; (void)ielen; /* Shutup the compiler */
8538 if (pDst->present)
8539 status = DOT11F_DUPLICATE_IE;
8540 pDst->present = 1;
8541 pDst->num_key_auth = (uint8_t)(ielen);
8542 DOT11F_MEMCPY(pCtx, pDst->key_auth, pBuf, (ielen));
8543 (void)pCtx;
8544 return status;
8545} /* End dot11f_unpack_ie_fils_key_confirmation. */
8546
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308547#define SigIefils_key_confirmation (0x0087)
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308548
8549
8550uint32_t dot11f_unpack_ie_fils_nonce(tpAniSirGlobal pCtx,
8551 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07008552 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308553 tDot11fIEfils_nonce *pDst,
8554 bool append_ie)
8555{
8556 uint32_t status = DOT11F_PARSE_SUCCESS;
8557 (void) pBuf; (void)ielen; /* Shutup the compiler */
8558 if (pDst->present)
8559 status = DOT11F_DUPLICATE_IE;
8560 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008561 if (unlikely(ielen < 16)) {
8562 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008563 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008564 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008565
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308566 DOT11F_MEMCPY(pCtx, pDst->nonce, pBuf, 16);
8567 (void)pCtx;
8568 return status;
8569} /* End dot11f_unpack_ie_fils_nonce. */
8570
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308571#define SigIefils_nonce (0x0088)
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308572
8573
8574uint32_t dot11f_unpack_ie_fils_public_key(tpAniSirGlobal pCtx,
8575 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07008576 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308577 tDot11fIEfils_public_key *pDst,
8578 bool append_ie)
8579{
8580 uint32_t status = DOT11F_PARSE_SUCCESS;
8581 (void) pBuf; (void)ielen; /* Shutup the compiler */
8582 if (pDst->present)
8583 status = DOT11F_DUPLICATE_IE;
8584 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008585 if (unlikely(ielen < 1)) {
8586 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008587 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008588 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008589
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308590 pDst->key_type = *pBuf;
8591 pBuf += 1;
8592 ielen -= (uint8_t)1;
8593 pDst->num_public_key = (uint8_t)(ielen);
8594 DOT11F_MEMCPY(pCtx, pDst->public_key, pBuf, (ielen));
8595 (void)pCtx;
8596 return status;
8597} /* End dot11f_unpack_ie_fils_public_key. */
8598
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308599#define SigIefils_public_key (0x0089)
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308600
8601
8602uint32_t dot11f_unpack_ie_fils_session(tpAniSirGlobal pCtx,
8603 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07008604 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308605 tDot11fIEfils_session *pDst,
8606 bool append_ie)
8607{
8608 uint32_t status = DOT11F_PARSE_SUCCESS;
8609 (void) pBuf; (void)ielen; /* Shutup the compiler */
8610 if (pDst->present)
8611 status = DOT11F_DUPLICATE_IE;
8612 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008613 if (unlikely(ielen < 8)) {
8614 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008615 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008616 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008617
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308618 DOT11F_MEMCPY(pCtx, pDst->session, pBuf, 8);
8619 (void)pCtx;
8620 return status;
8621} /* End dot11f_unpack_ie_fils_session. */
8622
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308623#define SigIefils_session (0x008a)
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308624
8625
8626uint32_t dot11f_unpack_ie_fils_wrapped_data(tpAniSirGlobal pCtx,
8627 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07008628 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308629 tDot11fIEfils_wrapped_data *pDst,
8630 bool append_ie)
8631{
8632 uint32_t status = DOT11F_PARSE_SUCCESS;
8633 (void) pBuf; (void)ielen; /* Shutup the compiler */
8634 if (pDst->present)
8635 status = DOT11F_DUPLICATE_IE;
8636 pDst->present = 1;
8637 pDst->num_wrapped_data = (uint8_t)(ielen);
8638 DOT11F_MEMCPY(pCtx, pDst->wrapped_data, pBuf, (ielen));
8639 (void)pCtx;
8640 return status;
8641} /* End dot11f_unpack_ie_fils_wrapped_data. */
8642
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308643#define SigIefils_wrapped_data (0x008b)
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05308644
8645
Sridhar Selvaraj6d3e0d72017-08-17 17:32:37 +05308646uint32_t dot11f_unpack_ie_fragment_ie(tpAniSirGlobal pCtx,
8647 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07008648 uint8_t ielen,
Sridhar Selvaraj6d3e0d72017-08-17 17:32:37 +05308649 tDot11fIEfragment_ie *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 status = DOT11F_DUPLICATE_IE;
8656 pDst->present = 1;
8657 pDst->num_data = (uint8_t)(ielen);
8658 DOT11F_MEMCPY(pCtx, pDst->data, pBuf, (ielen));
8659 (void)pCtx;
8660 return status;
8661} /* End dot11f_unpack_ie_fragment_ie. */
8662
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308663#define SigIefragment_ie (0x008c)
Sridhar Selvaraj6d3e0d72017-08-17 17:32:37 +05308664
8665
Naveen Rawatea921ce2017-09-08 15:07:58 -07008666uint32_t dot11f_unpack_ie_he_cap(tpAniSirGlobal pCtx,
8667 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07008668 uint8_t ielen,
Naveen Rawatea921ce2017-09-08 15:07:58 -07008669 tDot11fIEhe_cap *pDst,
8670 bool append_ie)
8671{
8672 uint32_t status = DOT11F_PARSE_SUCCESS;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308673 uint32_t tmp77__;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07008674 uint16_t tmp78__;
Kiran Kumar Lokere40875852018-01-15 12:36:19 -08008675 uint32_t tmp79__;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308676 uint32_t tmp80__;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07008677 uint16_t tmp81__;
Naveen Rawatea921ce2017-09-08 15:07:58 -07008678 (void) pBuf; (void)ielen; /* Shutup the compiler */
8679 if (pDst->present)
8680 status = DOT11F_DUPLICATE_IE;
8681 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008682 if (unlikely(ielen < 4)) {
8683 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008684 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008685 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008686
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308687 framesntohl(pCtx, &tmp77__, pBuf, 0);
Naveen Rawatea921ce2017-09-08 15:07:58 -07008688 pBuf += 4;
8689 ielen -= 4;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308690 pDst->htc_he = tmp77__ >> 0 & 0x1;
8691 pDst->twt_request = tmp77__ >> 1 & 0x1;
8692 pDst->twt_responder = tmp77__ >> 2 & 0x1;
8693 pDst->fragmentation = tmp77__ >> 3 & 0x3;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07008694 pDst->max_num_frag_msdu_amsdu_exp = tmp77__ >> 5 & 0x7;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308695 pDst->min_frag_size = tmp77__ >> 8 & 0x3;
8696 pDst->trigger_frm_mac_pad = tmp77__ >> 10 & 0x3;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07008697 pDst->multi_tid_aggr_rx_supp = tmp77__ >> 12 & 0x7;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308698 pDst->he_link_adaptation = tmp77__ >> 15 & 0x3;
8699 pDst->all_ack = tmp77__ >> 17 & 0x1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07008700 pDst->trigd_rsp_sched = tmp77__ >> 18 & 0x1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308701 pDst->a_bsr = tmp77__ >> 19 & 0x1;
8702 pDst->broadcast_twt = tmp77__ >> 20 & 0x1;
8703 pDst->ba_32bit_bitmap = tmp77__ >> 21 & 0x1;
8704 pDst->mu_cascade = tmp77__ >> 22 & 0x1;
8705 pDst->ack_enabled_multitid = tmp77__ >> 23 & 0x1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07008706 pDst->reserved = tmp77__ >> 24 & 0x1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308707 pDst->omi_a_ctrl = tmp77__ >> 25 & 0x1;
8708 pDst->ofdma_ra = tmp77__ >> 26 & 0x1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07008709 pDst->max_ampdu_len_exp_ext = tmp77__ >> 27 & 0x3;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308710 pDst->amsdu_frag = tmp77__ >> 29 & 0x1;
8711 pDst->flex_twt_sched = tmp77__ >> 30 & 0x1;
8712 pDst->rx_ctrl_frame = tmp77__ >> 31 & 0x1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07008713 if (unlikely(ielen < 2)) {
Naveen Rawat89e85d42018-05-23 11:54:27 -07008714 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008715 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008716 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008717
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07008718 framesntohs(pCtx, &tmp78__, pBuf, 0);
8719 pBuf += 2;
8720 ielen -= 2;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308721 pDst->bsrp_ampdu_aggr = tmp78__ >> 0 & 0x1;
8722 pDst->qtp = tmp78__ >> 1 & 0x1;
8723 pDst->a_bqr = tmp78__ >> 2 & 0x1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07008724 pDst->spatial_reuse_param_rspder = tmp78__ >> 3 & 0x1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308725 pDst->ndp_feedback_supp = tmp78__ >> 4 & 0x1;
8726 pDst->ops_supp = tmp78__ >> 5 & 0x1;
8727 pDst->amsdu_in_ampdu = tmp78__ >> 6 & 0x1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07008728 pDst->multi_tid_aggr_tx_supp = tmp78__ >> 7 & 0x7;
8729 pDst->he_sub_ch_sel_tx_supp = tmp78__ >> 10 & 0x1;
8730 pDst->ul_2x996_tone_ru_supp = tmp78__ >> 11 & 0x1;
8731 pDst->om_ctrl_ul_mu_data_dis_rx = tmp78__ >> 12 & 0x1;
8732 pDst->reserved1 = tmp78__ >> 13 & 0x7;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008733 if (unlikely(ielen < 4)) {
8734 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008735 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008736 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008737
Kiran Kumar Lokere40875852018-01-15 12:36:19 -08008738 framesntohl(pCtx, &tmp79__, pBuf, 0);
8739 pBuf += 4;
8740 ielen -= 4;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07008741 pDst->reserved2 = tmp79__ >> 0 & 0x1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308742 pDst->chan_width_0 = tmp79__ >> 1 & 0x1;
8743 pDst->chan_width_1 = tmp79__ >> 2 & 0x1;
8744 pDst->chan_width_2 = tmp79__ >> 3 & 0x1;
8745 pDst->chan_width_3 = tmp79__ >> 4 & 0x1;
8746 pDst->chan_width_4 = tmp79__ >> 5 & 0x1;
8747 pDst->chan_width_5 = tmp79__ >> 6 & 0x1;
8748 pDst->chan_width_6 = tmp79__ >> 7 & 0x1;
8749 pDst->rx_pream_puncturing = tmp79__ >> 8 & 0xf;
8750 pDst->device_class = tmp79__ >> 12 & 0x1;
8751 pDst->ldpc_coding = tmp79__ >> 13 & 0x1;
8752 pDst->he_1x_ltf_800_gi_ppdu = tmp79__ >> 14 & 0x1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07008753 pDst->midamble_tx_rx_max_nsts = tmp79__ >> 15 & 0x3;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308754 pDst->he_4x_ltf_3200_gi_ndp = tmp79__ >> 17 & 0x1;
8755 pDst->tx_stbc_lt_80mhz = tmp79__ >> 18 & 0x1;
8756 pDst->rx_stbc_lt_80mhz = tmp79__ >> 19 & 0x1;
8757 pDst->doppler = tmp79__ >> 20 & 0x3;
8758 pDst->ul_mu = tmp79__ >> 22 & 0x3;
8759 pDst->dcm_enc_tx = tmp79__ >> 24 & 0x7;
8760 pDst->dcm_enc_rx = tmp79__ >> 27 & 0x7;
8761 pDst->ul_he_mu = tmp79__ >> 30 & 0x1;
8762 pDst->su_beamformer = tmp79__ >> 31 & 0x1;
8763 if (unlikely(ielen < 4)) {
8764 pDst->present = 0;
8765 return DOT11F_INCOMPLETE_IE;
8766 }
8767
8768 framesntohl(pCtx, &tmp80__, pBuf, 0);
8769 pBuf += 4;
8770 ielen -= 4;
8771 pDst->su_beamformee = tmp80__ >> 0 & 0x1;
8772 pDst->mu_beamformer = tmp80__ >> 1 & 0x1;
8773 pDst->bfee_sts_lt_80 = tmp80__ >> 2 & 0x7;
8774 pDst->bfee_sts_gt_80 = tmp80__ >> 5 & 0x7;
8775 pDst->num_sounding_lt_80 = tmp80__ >> 8 & 0x7;
8776 pDst->num_sounding_gt_80 = tmp80__ >> 11 & 0x7;
8777 pDst->su_feedback_tone16 = tmp80__ >> 14 & 0x1;
8778 pDst->mu_feedback_tone16 = tmp80__ >> 15 & 0x1;
8779 pDst->codebook_su = tmp80__ >> 16 & 0x1;
8780 pDst->codebook_mu = tmp80__ >> 17 & 0x1;
8781 pDst->beamforming_feedback = tmp80__ >> 18 & 0x7;
8782 pDst->he_er_su_ppdu = tmp80__ >> 21 & 0x1;
8783 pDst->dl_mu_mimo_part_bw = tmp80__ >> 22 & 0x1;
8784 pDst->ppet_present = tmp80__ >> 23 & 0x1;
8785 pDst->srp = tmp80__ >> 24 & 0x1;
8786 pDst->power_boost = tmp80__ >> 25 & 0x1;
8787 pDst->he_ltf_800_gi_4x = tmp80__ >> 26 & 0x1;
8788 pDst->max_nc = tmp80__ >> 27 & 0x7;
8789 pDst->tx_stbc_gt_80mhz = tmp80__ >> 30 & 0x1;
8790 pDst->rx_stbc_gt_80mhz = tmp80__ >> 31 & 0x1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07008791 if (unlikely(ielen < 2)) {
Naveen Rawat89e85d42018-05-23 11:54:27 -07008792 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008793 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008794 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008795
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07008796 framesntohs(pCtx, &tmp81__, pBuf, 0);
8797 pBuf += 2;
8798 ielen -= 2;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308799 pDst->er_he_ltf_800_gi_4x = tmp81__ >> 0 & 0x1;
8800 pDst->he_ppdu_20_in_40Mhz_2G = tmp81__ >> 1 & 0x1;
8801 pDst->he_ppdu_20_in_160_80p80Mhz = tmp81__ >> 2 & 0x1;
8802 pDst->he_ppdu_80_in_160_80p80Mhz = tmp81__ >> 3 & 0x1;
8803 pDst->er_1x_he_ltf_gi = tmp81__ >> 4 & 0x1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07008804 pDst->midamble_tx_rx_1x_he_ltf = tmp81__ >> 5 & 0x1;
8805 pDst->dcm_max_bw = tmp81__ >> 6 & 0x3;
8806 pDst->longer_than_16_he_sigb_ofdm_sym = tmp81__ >> 8 & 0x1;
8807 pDst->non_trig_cqi_feedback = tmp81__ >> 9 & 0x1;
8808 pDst->tx_1024_qam_lt_242_tone_ru = tmp81__ >> 10 & 0x1;
8809 pDst->rx_1024_qam_lt_242_tone_ru = tmp81__ >> 11 & 0x1;
8810 pDst->rx_full_bw_su_he_mu_compress_sigb = tmp81__ >> 12 & 0x1;
8811 pDst->rx_full_bw_su_he_mu_non_cmpr_sigb = tmp81__ >> 13 & 0x1;
8812 pDst->reserved3 = tmp81__ >> 14 & 0x3;
8813 if (unlikely(ielen < 1)) {
8814 pDst->present = 0;
8815 return DOT11F_INCOMPLETE_IE;
8816 }
8817
8818 pDst->reserved4 = *pBuf;
8819 pBuf += 1;
8820 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008821 if (unlikely(ielen < 2)) {
8822 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008823 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008824 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008825
Naveen Rawat215dad62017-10-16 16:55:18 -07008826 framesntohs(pCtx, &pDst->rx_he_mcs_map_lt_80, pBuf, 0);
Naveen Rawatea921ce2017-09-08 15:07:58 -07008827 pBuf += 2;
Naveen Rawat215dad62017-10-16 16:55:18 -07008828 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008829 if (unlikely(ielen < 2)) {
8830 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008831 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008832 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008833
Naveen Rawat215dad62017-10-16 16:55:18 -07008834 framesntohs(pCtx, &pDst->tx_he_mcs_map_lt_80, pBuf, 0);
8835 pBuf += 2;
8836 ielen -= (uint8_t)2;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008837 if (unlikely(ielen < pDst->chan_width_2 * 2)) {
8838 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008839 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008840 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008841
Naveen Rawat215dad62017-10-16 16:55:18 -07008842 if (pDst->chan_width_2 > 1) {
8843 pDst->present = 0;
8844 return DOT11F_SKIPPED_BAD_IE;
8845 }
8846
8847 DOT11F_MEMCPY(pCtx, pDst->rx_he_mcs_map_160, pBuf, (pDst->chan_width_2 * 2));
8848 pBuf += (pDst->chan_width_2 * 2);
8849 ielen -= (pDst->chan_width_2 * 2);
Naveen Rawat89e85d42018-05-23 11:54:27 -07008850 if (unlikely(ielen < pDst->chan_width_2 * 2)) {
8851 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008852 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008853 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008854
Naveen Rawat215dad62017-10-16 16:55:18 -07008855 if (pDst->chan_width_2 > 1) {
8856 pDst->present = 0;
8857 return DOT11F_SKIPPED_BAD_IE;
8858 }
8859
8860 DOT11F_MEMCPY(pCtx, pDst->tx_he_mcs_map_160, pBuf, (pDst->chan_width_2 * 2));
8861 pBuf += (pDst->chan_width_2 * 2);
8862 ielen -= (pDst->chan_width_2 * 2);
Naveen Rawat89e85d42018-05-23 11:54:27 -07008863 if (unlikely(ielen < pDst->chan_width_3 * 2)) {
8864 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008865 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008866 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008867
Naveen Rawat215dad62017-10-16 16:55:18 -07008868 if (pDst->chan_width_3 > 1) {
8869 pDst->present = 0;
8870 return DOT11F_SKIPPED_BAD_IE;
8871 }
8872
8873 DOT11F_MEMCPY(pCtx, pDst->rx_he_mcs_map_80_80, pBuf, (pDst->chan_width_3 * 2));
8874 pBuf += (pDst->chan_width_3 * 2);
8875 ielen -= (pDst->chan_width_3 * 2);
Naveen Rawat89e85d42018-05-23 11:54:27 -07008876 if (unlikely(ielen < pDst->chan_width_3 * 2)) {
8877 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008878 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008879 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008880
Naveen Rawat215dad62017-10-16 16:55:18 -07008881 if (pDst->chan_width_3 > 1) {
8882 pDst->present = 0;
8883 return DOT11F_SKIPPED_BAD_IE;
8884 }
8885
8886 DOT11F_MEMCPY(pCtx, pDst->tx_he_mcs_map_80_80, pBuf, (pDst->chan_width_3 * 2));
8887 pBuf += (pDst->chan_width_3 * 2);
8888 ielen -= (pDst->chan_width_3 * 2);
Naveen Rawat819158d2018-01-16 10:56:45 -08008889 switch (pDst->ppet_present) {
8890 case 1:
8891 pDst->ppet.ppe_threshold.num_ppe_th = (uint8_t)(ielen);
8892 if (ielen > 25) {
8893 pDst->present = 0;
8894 return DOT11F_SKIPPED_BAD_IE;
8895 }
8896
8897 DOT11F_MEMCPY(pCtx, pDst->ppet.ppe_threshold.ppe_th, pBuf, (ielen));
8898 pBuf += (ielen);
8899 ielen -= (ielen);
8900 break;
8901 }
Naveen Rawatea921ce2017-09-08 15:07:58 -07008902 (void)pCtx;
Naveen Rawatea921ce2017-09-08 15:07:58 -07008903 return status;
8904} /* End dot11f_unpack_ie_he_cap. */
8905
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05308906#define SigIehe_cap (0x008d)
Naveen Rawatea921ce2017-09-08 15:07:58 -07008907
8908
8909uint32_t dot11f_unpack_ie_he_op(tpAniSirGlobal pCtx,
8910 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07008911 uint8_t ielen,
Naveen Rawatea921ce2017-09-08 15:07:58 -07008912 tDot11fIEhe_op *pDst,
8913 bool append_ie)
8914{
8915 uint32_t status = DOT11F_PARSE_SUCCESS;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07008916 uint16_t tmp82__;
8917 uint8_t tmp83__;
8918 uint8_t tmp84__;
Naveen Rawatea921ce2017-09-08 15:07:58 -07008919 (void) pBuf; (void)ielen; /* Shutup the compiler */
8920 if (pDst->present)
8921 status = DOT11F_DUPLICATE_IE;
8922 pDst->present = 1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07008923 if (unlikely(ielen < 2)) {
Naveen Rawat89e85d42018-05-23 11:54:27 -07008924 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008925 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008926 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008927
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07008928 framesntohs(pCtx, &tmp82__, pBuf, 0);
8929 pBuf += 2;
8930 ielen -= 2;
8931 pDst->default_pe = tmp82__ >> 0 & 0x7;
8932 pDst->twt_required = tmp82__ >> 3 & 0x1;
8933 pDst->txop_rts_threshold = tmp82__ >> 4 & 0x3ff;
8934 pDst->vht_oper_present = tmp82__ >> 14 & 0x1;
8935 pDst->co_located_bss = tmp82__ >> 15 & 0x1;
8936 if (unlikely(ielen < 1)) {
8937 pDst->present = 0;
8938 return DOT11F_INCOMPLETE_IE;
8939 }
8940
8941 tmp83__ = *pBuf;
8942 pBuf += 1;
8943 ielen -= 1;
8944 pDst->er_su_disable = tmp83__ >> 0 & 0x1;
8945 pDst->reserved2 = tmp83__ >> 1 & 0x7f;
8946 if (unlikely(ielen < 1)) {
8947 pDst->present = 0;
8948 return DOT11F_INCOMPLETE_IE;
8949 }
8950
8951 tmp84__ = *pBuf;
8952 pBuf += 1;
8953 ielen -= 1;
8954 pDst->bss_color = tmp84__ >> 0 & 0x3f;
8955 pDst->partial_bss_col = tmp84__ >> 6 & 0x1;
8956 pDst->bss_col_disabled = tmp84__ >> 7 & 0x1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008957 if (unlikely(ielen < 2)) {
8958 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008959 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008960 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008961
Naveen Rawate795f452017-11-13 14:47:39 -08008962 DOT11F_MEMCPY(pCtx, pDst->basic_mcs_nss, pBuf, 2);
8963 pBuf += 2;
8964 ielen -= (uint8_t)2;
Naveen Rawatea921ce2017-09-08 15:07:58 -07008965 switch (pDst->vht_oper_present) {
8966 case 1:
Naveen Rawat89e85d42018-05-23 11:54:27 -07008967 if (unlikely(ielen < 1)) {
8968 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008969 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008970 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008971
Naveen Rawatea921ce2017-09-08 15:07:58 -07008972 pDst->vht_oper.info.chan_width = *pBuf;
8973 pBuf += 1;
8974 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008975 if (unlikely(ielen < 1)) {
8976 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008977 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008978 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008979
Naveen Rawatea921ce2017-09-08 15:07:58 -07008980 pDst->vht_oper.info.center_freq_seg0 = *pBuf;
8981 pBuf += 1;
8982 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008983 if (unlikely(ielen < 1)) {
8984 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008985 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008986 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008987
Naveen Rawatea921ce2017-09-08 15:07:58 -07008988 pDst->vht_oper.info.center_freq_seg1 = *pBuf;
8989 pBuf += 1;
8990 ielen -= (uint8_t)1;
8991 break;
8992 }
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07008993 switch (pDst->co_located_bss) {
Naveen Rawatea921ce2017-09-08 15:07:58 -07008994 case 1:
Naveen Rawat89e85d42018-05-23 11:54:27 -07008995 if (unlikely(ielen < 1)) {
8996 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07008997 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07008998 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07008999
Naveen Rawatea921ce2017-09-08 15:07:58 -07009000 pDst->maxbssid_ind.info.data = *pBuf;
9001 pBuf += 1;
9002 ielen -= (uint8_t)1;
9003 break;
9004 }
9005 (void)pCtx;
9006 return status;
9007} /* End dot11f_unpack_ie_he_op. */
9008
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05309009#define SigIehe_op (0x008e)
Naveen Rawatea921ce2017-09-08 15:07:58 -07009010
9011
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309012uint32_t dot11f_unpack_ie_hs20vendor_ie(tpAniSirGlobal pCtx,
9013 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07009014 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309015 tDot11fIEhs20vendor_ie *pDst,
9016 bool append_ie)
9017{
9018 uint32_t status = DOT11F_PARSE_SUCCESS;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07009019 uint8_t tmp85__;
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309020 (void) pBuf; (void)ielen; /* Shutup the compiler */
9021 if (pDst->present)
9022 status = DOT11F_DUPLICATE_IE;
9023 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009024 if (unlikely(ielen < 1)) {
9025 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07009026 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009027 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07009028
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07009029 tmp85__ = *pBuf;
Nitesh Shah0ddd4f62016-05-27 10:07:32 +05309030 pBuf += 1;
9031 ielen -= 1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07009032 pDst->dgaf_dis = tmp85__ >> 0 & 0x1;
9033 pDst->hs_id_present = tmp85__ >> 1 & 0x3;
9034 pDst->reserved = tmp85__ >> 3 & 0x1;
9035 pDst->release_num = tmp85__ >> 4 & 0xf;
Nitesh Shah0ddd4f62016-05-27 10:07:32 +05309036 if (!ielen) {
9037 return 0U;
9038 } else {
9039 switch (pDst->hs_id_present) {
9040 case 1:
Naveen Rawat89e85d42018-05-23 11:54:27 -07009041 if (unlikely(ielen < 2)) {
9042 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07009043 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009044 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07009045
Selvaraj, Sridharba726cb2016-07-22 13:41:03 +05309046 framesntohs(pCtx, &pDst->hs_id.pps_mo.pps_mo_id, pBuf, 0);
Nitesh Shah0ddd4f62016-05-27 10:07:32 +05309047 pBuf += 2;
9048 ielen -= (uint8_t)2;
9049 break;
9050 case 2:
Naveen Rawat89e85d42018-05-23 11:54:27 -07009051 if (unlikely(ielen < 2)) {
9052 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07009053 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009054 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07009055
Selvaraj, Sridharba726cb2016-07-22 13:41:03 +05309056 framesntohs(pCtx, &pDst->hs_id.anqp_domain.anqp_domain_id, pBuf, 0);
Nitesh Shah0ddd4f62016-05-27 10:07:32 +05309057 pBuf += 2;
9058 ielen -= (uint8_t)2;
9059 break;
9060 }
9061 }
9062 (void)pCtx;
9063 return status;
9064} /* End dot11f_unpack_ie_hs20vendor_ie. */
9065
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05309066#define SigIehs20vendor_ie (0x008f)
Nitesh Shah0ddd4f62016-05-27 10:07:32 +05309067
9068
9069uint32_t dot11f_unpack_ie_ht2040_bss_coexistence(tpAniSirGlobal pCtx,
9070 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07009071 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309072 tDot11fIEht2040_bss_coexistence *pDst,
9073 bool append_ie)
Nitesh Shah0ddd4f62016-05-27 10:07:32 +05309074{
9075 uint32_t status = DOT11F_PARSE_SUCCESS;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07009076 uint8_t tmp86__;
Nitesh Shah0ddd4f62016-05-27 10:07:32 +05309077 (void) pBuf; (void)ielen; /* Shutup the compiler */
9078 if (pDst->present)
9079 status = DOT11F_DUPLICATE_IE;
9080 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009081 if (unlikely(ielen < 1)) {
9082 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07009083 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009084 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07009085
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07009086 tmp86__ = *pBuf;
9087 pDst->info_request = tmp86__ >> 0 & 0x1;
9088 pDst->forty_mhz_intolerant = tmp86__ >> 1 & 0x1;
9089 pDst->twenty_mhz_bsswidth_req = tmp86__ >> 2 & 0x1;
9090 pDst->obss_scan_exemption_req = tmp86__ >> 3 & 0x1;
9091 pDst->obss_scan_exemption_grant = tmp86__ >> 4 & 0x1;
9092 pDst->unused = tmp86__ >> 5 & 0x7;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009093 (void)pCtx;
9094 return status;
9095} /* End dot11f_unpack_ie_ht2040_bss_coexistence. */
9096
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05309097#define SigIeht2040_bss_coexistence (0x0090)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009098
9099
9100uint32_t dot11f_unpack_ie_ht2040_bss_intolerant_report(tpAniSirGlobal pCtx,
9101 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07009102 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309103 tDot11fIEht2040_bss_intolerant_report *pDst,
9104 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009105{
9106 uint32_t status = DOT11F_PARSE_SUCCESS;
9107 (void) pBuf; (void)ielen; /* Shutup the compiler */
9108 if (pDst->present)
9109 status = DOT11F_DUPLICATE_IE;
9110 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009111 if (unlikely(ielen < 1)) {
9112 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07009113 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009114 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07009115
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009116 pDst->operating_class = *pBuf;
9117 pBuf += 1;
9118 ielen -= (uint8_t)1;
9119 pDst->num_channel_list = (uint8_t)(ielen);
9120 if (ielen > 50) {
9121 pDst->present = 0;
9122 return DOT11F_SKIPPED_BAD_IE;
9123 }
9124
9125 DOT11F_MEMCPY(pCtx, pDst->channel_list, pBuf, (ielen));
9126 (void)pCtx;
9127 return status;
9128} /* End dot11f_unpack_ie_ht2040_bss_intolerant_report. */
9129
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05309130#define SigIeht2040_bss_intolerant_report (0x0091)
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -07009131
9132
9133uint32_t dot11f_unpack_ie_mu_edca_param_set(tpAniSirGlobal pCtx,
9134 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07009135 uint8_t ielen,
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -07009136 tDot11fIEmu_edca_param_set *pDst,
9137 bool append_ie)
9138{
9139 uint32_t status = DOT11F_PARSE_SUCCESS;
Naveen Rawatea921ce2017-09-08 15:07:58 -07009140 uint8_t tmp87__;
9141 uint8_t tmp88__;
9142 uint8_t tmp89__;
9143 uint8_t tmp90__;
Kiran Kumar Lokere40875852018-01-15 12:36:19 -08009144 uint8_t tmp91__;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05309145 uint8_t tmp92__;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07009146 uint8_t tmp93__;
9147 uint8_t tmp94__;
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -07009148 (void) pBuf; (void)ielen; /* Shutup the compiler */
9149 if (pDst->present)
9150 status = DOT11F_DUPLICATE_IE;
9151 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009152 if (unlikely(ielen < 1)) {
9153 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07009154 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009155 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07009156
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -07009157 pDst->qos = *pBuf;
9158 pBuf += 1;
9159 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009160 if (unlikely(ielen < 1)) {
9161 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07009162 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009163 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07009164
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07009165 tmp87__ = *pBuf;
Naveen Rawat215dad62017-10-16 16:55:18 -07009166 pBuf += 1;
9167 ielen -= 1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07009168 pDst->acbe_aifsn = tmp87__ >> 0 & 0xf;
9169 pDst->acbe_acm = tmp87__ >> 4 & 0x1;
9170 pDst->acbe_aci = tmp87__ >> 5 & 0x3;
9171 pDst->unused1 = tmp87__ >> 7 & 0x1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009172 if (unlikely(ielen < 1)) {
9173 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07009174 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009175 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07009176
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07009177 tmp88__ = *pBuf;
Naveen Rawat819158d2018-01-16 10:56:45 -08009178 pBuf += 1;
9179 ielen -= 1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07009180 pDst->acbe_acwmin = tmp88__ >> 0 & 0xf;
9181 pDst->acbe_acwmax = tmp88__ >> 4 & 0xf;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009182 if (unlikely(ielen < 1)) {
9183 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07009184 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009185 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07009186
Kiran Kumar Lokere40875852018-01-15 12:36:19 -08009187 pDst->acbe_muedca_timer = *pBuf;
9188 pBuf += 1;
9189 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009190 if (unlikely(ielen < 1)) {
9191 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07009192 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009193 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07009194
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07009195 tmp89__ = *pBuf;
Naveen Rawat215dad62017-10-16 16:55:18 -07009196 pBuf += 1;
9197 ielen -= 1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07009198 pDst->acbk_aifsn = tmp89__ >> 0 & 0xf;
9199 pDst->acbk_acm = tmp89__ >> 4 & 0x1;
9200 pDst->acbk_aci = tmp89__ >> 5 & 0x3;
9201 pDst->unused2 = tmp89__ >> 7 & 0x1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009202 if (unlikely(ielen < 1)) {
9203 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07009204 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009205 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07009206
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07009207 tmp90__ = *pBuf;
Naveen Rawat819158d2018-01-16 10:56:45 -08009208 pBuf += 1;
9209 ielen -= 1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07009210 pDst->acbk_acwmin = tmp90__ >> 0 & 0xf;
9211 pDst->acbk_acwmax = tmp90__ >> 4 & 0xf;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009212 if (unlikely(ielen < 1)) {
9213 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07009214 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009215 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07009216
Kiran Kumar Lokere40875852018-01-15 12:36:19 -08009217 pDst->acbk_muedca_timer = *pBuf;
9218 pBuf += 1;
9219 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009220 if (unlikely(ielen < 1)) {
9221 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07009222 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009223 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07009224
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07009225 tmp91__ = *pBuf;
Naveen Rawat215dad62017-10-16 16:55:18 -07009226 pBuf += 1;
9227 ielen -= 1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07009228 pDst->acvi_aifsn = tmp91__ >> 0 & 0xf;
9229 pDst->acvi_acm = tmp91__ >> 4 & 0x1;
9230 pDst->acvi_aci = tmp91__ >> 5 & 0x3;
9231 pDst->unused3 = tmp91__ >> 7 & 0x1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009232 if (unlikely(ielen < 1)) {
9233 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07009234 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009235 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07009236
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07009237 tmp92__ = *pBuf;
Naveen Rawat819158d2018-01-16 10:56:45 -08009238 pBuf += 1;
9239 ielen -= 1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07009240 pDst->acvi_acwmin = tmp92__ >> 0 & 0xf;
9241 pDst->acvi_acwmax = tmp92__ >> 4 & 0xf;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009242 if (unlikely(ielen < 1)) {
9243 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07009244 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009245 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07009246
Kiran Kumar Lokere40875852018-01-15 12:36:19 -08009247 pDst->acvi_muedca_timer = *pBuf;
9248 pBuf += 1;
9249 ielen -= (uint8_t)1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009250 if (unlikely(ielen < 1)) {
9251 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07009252 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009253 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07009254
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07009255 tmp93__ = *pBuf;
Naveen Rawat215dad62017-10-16 16:55:18 -07009256 pBuf += 1;
9257 ielen -= 1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07009258 pDst->acvo_aifsn = tmp93__ >> 0 & 0xf;
9259 pDst->acvo_acm = tmp93__ >> 4 & 0x1;
9260 pDst->acvo_aci = tmp93__ >> 5 & 0x3;
9261 pDst->unused4 = tmp93__ >> 7 & 0x1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009262 if (unlikely(ielen < 1)) {
9263 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07009264 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009265 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07009266
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07009267 tmp94__ = *pBuf;
Kiran Kumar Lokere40875852018-01-15 12:36:19 -08009268 pBuf += 1;
9269 ielen -= 1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07009270 pDst->acvo_acwmin = tmp94__ >> 0 & 0xf;
9271 pDst->acvo_acwmax = tmp94__ >> 4 & 0xf;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009272 if (unlikely(ielen < 1)) {
9273 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07009274 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009275 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07009276
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -07009277 pDst->acvo_muedca_timer = *pBuf;
9278 (void)pCtx;
9279 return status;
9280} /* End dot11f_unpack_ie_mu_edca_param_set. */
9281
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05309282#define SigIemu_edca_param_set (0x0092)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009283
9284
Selvaraj, Sridhar99edbc32017-06-22 10:49:59 +05309285uint32_t dot11f_unpack_ie_osen_ie(tpAniSirGlobal pCtx,
9286 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07009287 uint8_t ielen,
Selvaraj, Sridhar99edbc32017-06-22 10:49:59 +05309288 tDot11fIEosen_ie *pDst,
9289 bool append_ie)
9290{
9291 uint32_t status = DOT11F_PARSE_SUCCESS;
9292 (void) pBuf; (void)ielen; /* Shutup the compiler */
9293 if (pDst->present)
9294 status = DOT11F_DUPLICATE_IE;
9295 pDst->present = 1;
9296 pDst->num_data = (uint8_t)(ielen);
9297 DOT11F_MEMCPY(pCtx, pDst->data, pBuf, (ielen));
9298 (void)pCtx;
9299 return status;
9300} /* End dot11f_unpack_ie_osen_ie. */
9301
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05309302#define SigIeosen_ie (0x0093)
Selvaraj, Sridhar99edbc32017-06-22 10:49:59 +05309303
9304
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009305uint32_t dot11f_unpack_ie_sec_chan_offset_ele(tpAniSirGlobal pCtx,
9306 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07009307 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309308 tDot11fIEsec_chan_offset_ele *pDst,
9309 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009310{
9311 uint32_t status = DOT11F_PARSE_SUCCESS;
9312 (void) pBuf; (void)ielen; /* Shutup the compiler */
9313 if (pDst->present)
9314 status = DOT11F_DUPLICATE_IE;
9315 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009316 if (unlikely(ielen < 1)) {
9317 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07009318 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009319 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07009320
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009321 pDst->secondaryChannelOffset = *pBuf;
9322 (void)pCtx;
9323 return status;
9324} /* End dot11f_unpack_ie_sec_chan_offset_ele. */
9325
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05309326#define SigIesec_chan_offset_ele (0x0094)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009327
9328
Kapil Gupta4b2efbb2016-10-03 13:07:20 +05309329static const tFFDefn FFS_vendor_vht_ie[] = {
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009330 { NULL, 0, 0, 0,},
9331};
9332
Kapil Gupta4b2efbb2016-10-03 13:07:20 +05309333static const tIEDefn IES_vendor_vht_ie[] = {
9334 { offsetof(tDot11fIEvendor_vht_ie, VHTCaps), offsetof(tDot11fIEVHTCaps,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009335 present), 0, "VHTCaps", 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309336 0, DOT11F_EID_VHTCAPS, 0, 0, },
Kapil Gupta4b2efbb2016-10-03 13:07:20 +05309337 { offsetof(tDot11fIEvendor_vht_ie, VHTOperation),
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009338 offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation",
9339 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309340 0, DOT11F_EID_VHTOPERATION, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009341 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },
9342};
9343
Kapil Gupta4b2efbb2016-10-03 13:07:20 +05309344uint32_t dot11f_unpack_ie_vendor_vht_ie(tpAniSirGlobal pCtx,
9345 uint8_t *pBuf,
Naveen Rawat9c13ac52017-10-20 13:48:03 -07009346 uint8_t ielen,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309347 tDot11fIEvendor_vht_ie *pDst,
9348 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009349{
9350 uint32_t status = DOT11F_PARSE_SUCCESS;
9351 (void) pBuf; (void)ielen; /* Shutup the compiler */
9352 if (pDst->present)
9353 status = DOT11F_DUPLICATE_IE;
9354 pDst->present = 1;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009355 if (unlikely(ielen < 1)) {
9356 pDst->present = 0;
Naveen Rawat69623ef2018-04-27 16:11:01 -07009357 return DOT11F_INCOMPLETE_IE;
Naveen Rawat89e85d42018-05-23 11:54:27 -07009358 }
Naveen Rawat69623ef2018-04-27 16:11:01 -07009359
Kiran Kumar Lokere81722632017-09-26 12:11:43 -07009360 pDst->sub_type = *pBuf;
9361 pBuf += 1;
9362 ielen -= (uint8_t)1;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009363 (void)pCtx;
9364 status |= unpack_core(pCtx,
9365 pBuf,
9366 ielen,
Kapil Gupta4b2efbb2016-10-03 13:07:20 +05309367 FFS_vendor_vht_ie,
9368 IES_vendor_vht_ie,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009369 (uint8_t *)pDst,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309370 sizeof(*pDst),
9371 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009372 return status;
Kapil Gupta4b2efbb2016-10-03 13:07:20 +05309373} /* End dot11f_unpack_ie_vendor_vht_ie. */
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009374
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +05309375#define SigIevendor_vht_ie (0x0095)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009376
9377
9378static const tFFDefn FFS_AddTSRequest[] = {
9379 { "Category", offsetof(tDot11fAddTSRequest, Category), SigFfCategory,
9380 DOT11F_FF_CATEGORY_LEN, },
9381 { "Action", offsetof(tDot11fAddTSRequest, Action), SigFfAction,
9382 DOT11F_FF_ACTION_LEN, },
9383 { "DialogToken", offsetof(tDot11fAddTSRequest, DialogToken),
9384 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
9385 { NULL, 0, 0, 0,},
9386};
9387
9388static const tIEDefn IES_AddTSRequest[] = {
9389 { offsetof(tDot11fAddTSRequest, TSPEC), offsetof(tDot11fIETSPEC, present),
9390 0, "TSPEC", 0, 57, 57, SigIeTSPEC, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309391 0, DOT11F_EID_TSPEC, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009392 { offsetof(tDot11fAddTSRequest, TCLAS), offsetof(tDot11fIETCLAS, present),
9393 offsetof(tDot11fAddTSRequest, num_TCLAS), "TCLAS", 2, 7, 45, SigIeTCLAS,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309394 {0, 0, 0, 0, 0}, 0, DOT11F_EID_TCLAS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009395 { offsetof(tDot11fAddTSRequest, TCLASSPROC),
9396 offsetof(tDot11fIETCLASSPROC, present), 0, "TCLASSPROC",
9397 0, 3, 3, SigIeTCLASSPROC, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309398 0, DOT11F_EID_TCLASSPROC, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009399 { offsetof(tDot11fAddTSRequest, WMMTSPEC), offsetof(tDot11fIEWMMTSPEC,
9400 present), 0, "WMMTSPEC", 0, 63, 63, SigIeWMMTSPEC, {0, 80, 242, 2, 2},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309401 5, DOT11F_EID_WMMTSPEC, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009402 { offsetof(tDot11fAddTSRequest, WMMTCLAS), offsetof(tDot11fIEWMMTCLAS,
9403 present), offsetof(tDot11fAddTSRequest, num_WMMTCLAS), "WMMTCLAS",
9404 2, 13, 51, SigIeWMMTCLAS, {0, 80, 242, 2, 6},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309405 5, DOT11F_EID_WMMTCLAS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009406 { offsetof(tDot11fAddTSRequest, WMMTCLASPROC),
9407 offsetof(tDot11fIEWMMTCLASPROC, present), 0, "WMMTCLASPROC",
9408 0, 9, 9, SigIeWMMTCLASPROC, {0, 80, 242, 2, 7},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309409 5, DOT11F_EID_WMMTCLASPROC, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009410 { offsetof(tDot11fAddTSRequest, ESETrafStrmRateSet),
9411 offsetof(tDot11fIEESETrafStrmRateSet, present), 0, "ESETrafStrmRateSet",
9412 0, 7, 15, SigIeESETrafStrmRateSet, {0, 64, 150, 8, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309413 4, DOT11F_EID_ESETRAFSTRMRATESET, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009414 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
9415
9416uint32_t dot11f_unpack_add_ts_request(tpAniSirGlobal pCtx,
9417 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309418 tDot11fAddTSRequest *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009419{
9420 uint32_t i = 0;
9421 uint32_t status = 0;
9422 status = unpack_core(pCtx, pBuf, nBuf,
9423 FFS_AddTSRequest, IES_AddTSRequest,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309424 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009425
9426 (void)i;
9427 return status;
9428
9429} /* End dot11f_unpack_add_ts_request. */
9430
9431static const tFFDefn FFS_AddTSResponse[] = {
9432 { "Category", offsetof(tDot11fAddTSResponse, Category), SigFfCategory,
9433 DOT11F_FF_CATEGORY_LEN, },
9434 { "Action", offsetof(tDot11fAddTSResponse, Action), SigFfAction,
9435 DOT11F_FF_ACTION_LEN, },
9436 { "DialogToken", offsetof(tDot11fAddTSResponse, DialogToken),
9437 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
9438 { "Status", offsetof(tDot11fAddTSResponse, Status), SigFfStatus,
9439 DOT11F_FF_STATUS_LEN, },
9440 { NULL, 0, 0, 0,},
9441};
9442
9443static const tIEDefn IES_AddTSResponse[] = {
9444 { offsetof(tDot11fAddTSResponse, TSDelay), offsetof(tDot11fIETSDelay,
9445 present), 0, "TSDelay", 0, 6, 6, SigIeTSDelay, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309446 0, DOT11F_EID_TSDELAY, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009447 { offsetof(tDot11fAddTSResponse, TSPEC), offsetof(tDot11fIETSPEC,
9448 present), 0, "TSPEC", 0, 57, 57, SigIeTSPEC, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309449 0, DOT11F_EID_TSPEC, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009450 { offsetof(tDot11fAddTSResponse, TCLAS), offsetof(tDot11fIETCLAS,
9451 present), offsetof(tDot11fAddTSResponse, num_TCLAS), "TCLAS",
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309452 2, 7, 45, SigIeTCLAS, {0, 0, 0, 0, 0}, 0, DOT11F_EID_TCLAS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009453 { offsetof(tDot11fAddTSResponse, TCLASSPROC),
9454 offsetof(tDot11fIETCLASSPROC, present), 0, "TCLASSPROC",
9455 0, 3, 3, SigIeTCLASSPROC, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309456 0, DOT11F_EID_TCLASSPROC, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009457 { offsetof(tDot11fAddTSResponse, Schedule), offsetof(tDot11fIESchedule,
9458 present), 0, "Schedule", 0, 16, 16, SigIeSchedule, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309459 0, DOT11F_EID_SCHEDULE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009460 { offsetof(tDot11fAddTSResponse, WMMTSDelay),
9461 offsetof(tDot11fIEWMMTSDelay, present), 0, "WMMTSDelay",
9462 0, 12, 12, SigIeWMMTSDelay, {0, 80, 242, 2, 8},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309463 5, DOT11F_EID_WMMTSDELAY, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009464 { offsetof(tDot11fAddTSResponse, WMMSchedule),
9465 offsetof(tDot11fIEWMMSchedule, present), 0, "WMMSchedule",
9466 0, 22, 22, SigIeWMMSchedule, {0, 80, 242, 2, 9},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309467 5, DOT11F_EID_WMMSCHEDULE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009468 { offsetof(tDot11fAddTSResponse, WMMTSPEC), offsetof(tDot11fIEWMMTSPEC,
9469 present), 0, "WMMTSPEC", 0, 63, 63, SigIeWMMTSPEC, {0, 80, 242, 2, 2},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309470 5, DOT11F_EID_WMMTSPEC, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009471 { offsetof(tDot11fAddTSResponse, WMMTCLAS), offsetof(tDot11fIEWMMTCLAS,
9472 present), offsetof(tDot11fAddTSResponse, num_WMMTCLAS), "WMMTCLAS",
9473 2, 13, 51, SigIeWMMTCLAS, {0, 80, 242, 2, 6},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309474 5, DOT11F_EID_WMMTCLAS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009475 { offsetof(tDot11fAddTSResponse, WMMTCLASPROC),
9476 offsetof(tDot11fIEWMMTCLASPROC, present), 0, "WMMTCLASPROC",
9477 0, 9, 9, SigIeWMMTCLASPROC, {0, 80, 242, 2, 7},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309478 5, DOT11F_EID_WMMTCLASPROC, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009479 { offsetof(tDot11fAddTSResponse, ESETrafStrmMet),
9480 offsetof(tDot11fIEESETrafStrmMet, present), 0, "ESETrafStrmMet",
9481 0, 10, 10, SigIeESETrafStrmMet, {0, 64, 150, 7, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309482 4, DOT11F_EID_ESETRAFSTRMMET, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009483 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
9484
9485uint32_t dot11f_unpack_add_ts_response(tpAniSirGlobal pCtx,
9486 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309487 tDot11fAddTSResponse *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009488{
9489 uint32_t i = 0;
9490 uint32_t status = 0;
9491 status = unpack_core(pCtx, pBuf, nBuf,
9492 FFS_AddTSResponse, IES_AddTSResponse,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309493 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009494
9495 (void)i;
9496 return status;
9497
9498} /* End dot11f_unpack_add_ts_response. */
9499
9500static const tFFDefn FFS_AssocRequest[] = {
9501 { "Capabilities", offsetof(tDot11fAssocRequest, Capabilities),
9502 SigFfCapabilities, DOT11F_FF_CAPABILITIES_LEN, },
9503 { "ListenInterval", offsetof(tDot11fAssocRequest, ListenInterval),
9504 SigFfListenInterval, DOT11F_FF_LISTENINTERVAL_LEN, },
9505 { NULL, 0, 0, 0,},
9506};
9507
9508static const tIEDefn IES_AssocRequest[] = {
9509 { offsetof(tDot11fAssocRequest, SSID), offsetof(tDot11fIESSID, present), 0,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309510 "SSID", 0, 2, 34, SigIeSSID, {0, 0, 0, 0, 0}, 0, DOT11F_EID_SSID, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009511 { offsetof(tDot11fAssocRequest, SuppRates), offsetof(tDot11fIESuppRates,
9512 present), 0, "SuppRates", 0, 2, 14, SigIeSuppRates, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309513 0, DOT11F_EID_SUPPRATES, 0, 1, },
Krunal Soni971ea8c2017-02-14 11:24:38 -08009514 { offsetof(tDot11fAssocRequest, OperatingMode),
9515 offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode",
9516 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309517 0, DOT11F_EID_OPERATINGMODE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009518 { offsetof(tDot11fAssocRequest, PowerCaps), offsetof(tDot11fIEPowerCaps,
9519 present), 0, "PowerCaps", 0, 4, 4, SigIePowerCaps, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309520 0, DOT11F_EID_POWERCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009521 { offsetof(tDot11fAssocRequest, SuppChannels),
9522 offsetof(tDot11fIESuppChannels, present), 0, "SuppChannels",
Vignesh Viswanathan7813a3d2018-08-27 19:09:00 +05309523 0, 2, 98, SigIeSuppChannels, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309524 0, DOT11F_EID_SUPPCHANNELS, 0, 0, },
Krunal Soni971ea8c2017-02-14 11:24:38 -08009525 { offsetof(tDot11fAssocRequest, HTCaps), offsetof(tDot11fIEHTCaps,
9526 present), 0, "HTCaps", 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309527 0, DOT11F_EID_HTCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009528 { offsetof(tDot11fAssocRequest, QOSCapsStation),
9529 offsetof(tDot11fIEQOSCapsStation, present), 0, "QOSCapsStation",
9530 0, 3, 3, SigIeQOSCapsStation, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309531 0, DOT11F_EID_QOSCAPSSTATION, 0, 0, },
Krunal Soni971ea8c2017-02-14 11:24:38 -08009532 { offsetof(tDot11fAssocRequest, RSNOpaque), offsetof(tDot11fIERSNOpaque,
Liangwei Dong5b25e342018-08-22 00:55:41 -04009533 present), 0, "RSNOpaque", 0, 2, 255, SigIeRSNOpaque, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309534 0, DOT11F_EID_RSNOPAQUE, 0, 0, },
Krunal Soni971ea8c2017-02-14 11:24:38 -08009535 { offsetof(tDot11fAssocRequest, ExtSuppRates),
9536 offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates",
9537 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309538 0, DOT11F_EID_EXTSUPPRATES, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009539 { offsetof(tDot11fAssocRequest, MobilityDomain),
9540 offsetof(tDot11fIEMobilityDomain, present), 0, "MobilityDomain",
9541 0, 5, 5, SigIeMobilityDomain, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309542 0, DOT11F_EID_MOBILITYDOMAIN, 0, 0, },
Krunal Soni971ea8c2017-02-14 11:24:38 -08009543 { offsetof(tDot11fAssocRequest, SuppOperatingClasses),
9544 offsetof(tDot11fIESuppOperatingClasses, present), 0,
9545 "SuppOperatingClasses", 0, 3, 34, SigIeSuppOperatingClasses,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309546 {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPOPERATINGCLASSES, 0, 0, },
Krunal Soni971ea8c2017-02-14 11:24:38 -08009547 { offsetof(tDot11fAssocRequest, WAPIOpaque),
9548 offsetof(tDot11fIEWAPIOpaque, present), 0, "WAPIOpaque",
9549 0, 8, 255, SigIeWAPIOpaque, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309550 0, DOT11F_EID_WAPIOPAQUE, 0, 0, },
Krunal Soni971ea8c2017-02-14 11:24:38 -08009551 { offsetof(tDot11fAssocRequest, WAPI), offsetof(tDot11fIEWAPI, present), 0,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309552 "WAPI", 0, 14, 112, SigIeWAPI, {0, 0, 0, 0, 0},
9553 0, DOT11F_EID_WAPI, 0, 0, },
Krunal Soni971ea8c2017-02-14 11:24:38 -08009554 { offsetof(tDot11fAssocRequest, RRMEnabledCap),
9555 offsetof(tDot11fIERRMEnabledCap, present), 0, "RRMEnabledCap",
9556 0, 7, 7, SigIeRRMEnabledCap, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309557 0, DOT11F_EID_RRMENABLEDCAP, 0, 0, },
Krunal Soni971ea8c2017-02-14 11:24:38 -08009558 { offsetof(tDot11fAssocRequest, QosMapSet), offsetof(tDot11fIEQosMapSet,
9559 present), 0, "QosMapSet", 0, 2, 62, SigIeQosMapSet, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309560 0, DOT11F_EID_QOSMAPSET, 0, 0, },
Krunal Soni971ea8c2017-02-14 11:24:38 -08009561 { offsetof(tDot11fAssocRequest, ExtCap), offsetof(tDot11fIEExtCap,
Selvaraj, Sridhar2c46d832017-03-13 17:55:48 +05309562 present), 0, "ExtCap", 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309563 0, DOT11F_EID_EXTCAP, 0, 0, },
Krunal Soni971ea8c2017-02-14 11:24:38 -08009564 { offsetof(tDot11fAssocRequest, VHTCaps), offsetof(tDot11fIEVHTCaps,
9565 present), 0, "VHTCaps", 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309566 0, DOT11F_EID_VHTCAPS, 0, 0, },
9567 { offsetof(tDot11fAssocRequest, fils_session),
9568 offsetof(tDot11fIEfils_session, present), 0, "fils_session",
9569 0, 10, 10, SigIefils_session, {0, 0, 0, 0, 0},
9570 0, DOT11F_EID_FILS_SESSION, 4, 0, },
9571 { offsetof(tDot11fAssocRequest, fils_public_key),
9572 offsetof(tDot11fIEfils_public_key, present), 0, "fils_public_key",
9573 0, 3, 258, SigIefils_public_key, {0, 0, 0, 0, 0},
9574 0, DOT11F_EID_FILS_PUBLIC_KEY, 12, 0, },
9575 { offsetof(tDot11fAssocRequest, fils_key_confirmation),
9576 offsetof(tDot11fIEfils_key_confirmation, present), 0,
9577 "fils_key_confirmation", 0, 2, 257, SigIefils_key_confirmation,
9578 {0, 0, 0, 0, 0}, 0, DOT11F_EID_FILS_KEY_CONFIRMATION, 3, 0, },
9579 { offsetof(tDot11fAssocRequest, fils_hlp_container),
9580 offsetof(tDot11fIEfils_hlp_container, present), 0, "fils_hlp_container",
9581 0, 14, 269, SigIefils_hlp_container, {0, 0, 0, 0, 0},
9582 0, DOT11F_EID_FILS_HLP_CONTAINER, 5, 0, },
Sridhar Selvaraj6d3e0d72017-08-17 17:32:37 +05309583 { offsetof(tDot11fAssocRequest, fragment_ie),
9584 offsetof(tDot11fIEfragment_ie, present), 0, "fragment_ie",
9585 0, 2, 257, SigIefragment_ie, {0, 0, 0, 0, 0},
9586 0, DOT11F_EID_FRAGMENT_IE, 0, 0, },
Padma, Santhosh Kumar666f96e2017-11-10 13:22:59 +05309587 { offsetof(tDot11fAssocRequest, dh_parameter_element),
9588 offsetof(tDot11fIEdh_parameter_element, present), 0,
9589 "dh_parameter_element", 0, 4, 259, SigIedh_parameter_element,
9590 {0, 0, 0, 0, 0}, 0, DOT11F_EID_DH_PARAMETER_ELEMENT, 32, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009591 { offsetof(tDot11fAssocRequest, WPAOpaque), offsetof(tDot11fIEWPAOpaque,
9592 present), 0, "WPAOpaque", 0, 8, 255, SigIeWPAOpaque, {0, 80, 242, 1, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309593 4, DOT11F_EID_WPAOPAQUE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009594 { offsetof(tDot11fAssocRequest, WMMCaps), offsetof(tDot11fIEWMMCaps,
9595 present), 0, "WMMCaps", 0, 9, 9, SigIeWMMCaps, {0, 80, 242, 2, 5},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309596 5, DOT11F_EID_WMMCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009597 { offsetof(tDot11fAssocRequest, WMMInfoStation),
9598 offsetof(tDot11fIEWMMInfoStation, present), 0, "WMMInfoStation",
9599 0, 9, 9, SigIeWMMInfoStation, {0, 80, 242, 2, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309600 5, DOT11F_EID_WMMINFOSTATION, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009601 { offsetof(tDot11fAssocRequest, WscIEOpaque),
9602 offsetof(tDot11fIEWscIEOpaque, present), 0, "WscIEOpaque",
9603 0, 8, 255, SigIeWscIEOpaque, {0, 80, 242, 4, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309604 4, DOT11F_EID_WSCIEOPAQUE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009605 { offsetof(tDot11fAssocRequest, ESERadMgmtCap),
9606 offsetof(tDot11fIEESERadMgmtCap, present), 0, "ESERadMgmtCap",
9607 0, 8, 8, SigIeESERadMgmtCap, {0, 64, 150, 1, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309608 4, DOT11F_EID_ESERADMGMTCAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009609 { offsetof(tDot11fAssocRequest, ESEVersion),
9610 offsetof(tDot11fIEESEVersion, present), 0, "ESEVersion",
9611 0, 7, 7, SigIeESEVersion, {0, 64, 150, 3, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309612 4, DOT11F_EID_ESEVERSION, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009613 { offsetof(tDot11fAssocRequest, P2PIEOpaque),
9614 offsetof(tDot11fIEP2PIEOpaque, present), 0, "P2PIEOpaque",
9615 0, 8, 255, SigIeP2PIEOpaque, {80, 111, 154, 9, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309616 4, DOT11F_EID_P2PIEOPAQUE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009617 { offsetof(tDot11fAssocRequest, WFDIEOpaque),
9618 offsetof(tDot11fIEWFDIEOpaque, present), 0, "WFDIEOpaque",
9619 0, 8, 255, SigIeWFDIEOpaque, {80, 111, 154, 10, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309620 4, DOT11F_EID_WFDIEOPAQUE, 0, 0, },
Kapil Gupta4b2efbb2016-10-03 13:07:20 +05309621 { offsetof(tDot11fAssocRequest, vendor_vht_ie),
9622 offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie",
Kiran Kumar Lokere81722632017-09-26 12:11:43 -07009623 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 4, 0},
9624 4, DOT11F_EID_VENDOR_VHT_IE, 0, 0, },
Nitesh Shah0ddd4f62016-05-27 10:07:32 +05309625 { offsetof(tDot11fAssocRequest, hs20vendor_ie),
9626 offsetof(tDot11fIEhs20vendor_ie, present), 0, "hs20vendor_ie",
Selvaraj, Sridhar7f42b5f2016-09-16 20:23:53 +05309627 0, 7, 9, SigIehs20vendor_ie, {80, 111, 154, 16, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309628 4, DOT11F_EID_HS20VENDOR_IE, 0, 0, },
Selvaraj, Sridharc2fe7a32017-02-02 19:20:16 +05309629 { offsetof(tDot11fAssocRequest, QCN_IE), offsetof(tDot11fIEQCN_IE,
9630 present), 0, "QCN_IE", 0, 10, 10, SigIeQCN_IE, {140, 253, 240, 1, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309631 4, DOT11F_EID_QCN_IE, 0, 0, },
Naveen Rawatea921ce2017-09-08 15:07:58 -07009632 { offsetof(tDot11fAssocRequest, he_cap), offsetof(tDot11fIEhe_cap,
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07009633 present), 0, "he_cap", 0, 23, 56, SigIehe_cap, {0, 0, 0, 0, 0},
Naveen Rawatea921ce2017-09-08 15:07:58 -07009634 0, DOT11F_EID_HE_CAP, 35, 0, },
Kapil Guptaeb38bfc2017-05-30 18:51:17 +05309635 { offsetof(tDot11fAssocRequest, MBO_IE), offsetof(tDot11fIEMBO_IE,
Abhishek Singh951eed82017-07-06 16:53:19 +05309636 present), 0, "MBO_IE", 0, 6, 295, SigIeMBO_IE, {80, 111, 154, 22, 0},
Kapil Guptaeb38bfc2017-05-30 18:51:17 +05309637 4, DOT11F_EID_MBO_IE, 0, 0, },
Selvaraj, Sridhar99edbc32017-06-22 10:49:59 +05309638 { offsetof(tDot11fAssocRequest, osen_ie), offsetof(tDot11fIEosen_ie,
9639 present), 0, "osen_ie", 0, 6, 261, SigIeosen_ie, {80, 111, 154, 18, 0},
9640 4, DOT11F_EID_OSEN_IE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009641 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
9642
9643uint32_t dot11f_unpack_assoc_request(tpAniSirGlobal pCtx,
9644 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309645 tDot11fAssocRequest *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009646{
9647 uint32_t i = 0;
9648 uint32_t status = 0;
9649 status = unpack_core(pCtx, pBuf, nBuf,
9650 FFS_AssocRequest, IES_AssocRequest,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309651 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009652
9653 (void)i;
9654 return status;
9655
9656} /* End dot11f_unpack_assoc_request. */
9657
9658static const tFFDefn FFS_AssocResponse[] = {
9659 { "Capabilities", offsetof(tDot11fAssocResponse, Capabilities),
9660 SigFfCapabilities, DOT11F_FF_CAPABILITIES_LEN, },
9661 { "Status", offsetof(tDot11fAssocResponse, Status), SigFfStatus,
9662 DOT11F_FF_STATUS_LEN, },
9663 { "AID", offsetof(tDot11fAssocResponse, AID), SigFfAID,
9664 DOT11F_FF_AID_LEN, },
9665 { NULL, 0, 0, 0,},
9666};
9667
9668static const tIEDefn IES_AssocResponse[] = {
9669 { offsetof(tDot11fAssocResponse, SuppRates), offsetof(tDot11fIESuppRates,
9670 present), 0, "SuppRates", 0, 2, 14, SigIeSuppRates, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309671 0, DOT11F_EID_SUPPRATES, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009672 { offsetof(tDot11fAssocResponse, ExtSuppRates),
9673 offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates",
9674 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309675 0, DOT11F_EID_EXTSUPPRATES, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009676 { offsetof(tDot11fAssocResponse, EDCAParamSet),
9677 offsetof(tDot11fIEEDCAParamSet, present), 0, "EDCAParamSet",
9678 0, 20, 20, SigIeEDCAParamSet, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309679 0, DOT11F_EID_EDCAPARAMSET, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009680 { offsetof(tDot11fAssocResponse, RCPIIE), offsetof(tDot11fIERCPIIE,
9681 present), 0, "RCPIIE", 0, 3, 3, SigIeRCPIIE, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309682 0, DOT11F_EID_RCPIIE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009683 { offsetof(tDot11fAssocResponse, RSNIIE), offsetof(tDot11fIERSNIIE,
9684 present), 0, "RSNIIE", 0, 3, 3, SigIeRSNIIE, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309685 0, DOT11F_EID_RSNIIE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009686 { offsetof(tDot11fAssocResponse, RRMEnabledCap),
9687 offsetof(tDot11fIERRMEnabledCap, present), 0, "RRMEnabledCap",
9688 0, 7, 7, SigIeRRMEnabledCap, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309689 0, DOT11F_EID_RRMENABLEDCAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009690 { offsetof(tDot11fAssocResponse, MobilityDomain),
9691 offsetof(tDot11fIEMobilityDomain, present), 0, "MobilityDomain",
9692 0, 5, 5, SigIeMobilityDomain, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309693 0, DOT11F_EID_MOBILITYDOMAIN, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009694 { offsetof(tDot11fAssocResponse, FTInfo), offsetof(tDot11fIEFTInfo,
9695 present), 0, "FTInfo", 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309696 0, DOT11F_EID_FTINFO, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009697 { offsetof(tDot11fAssocResponse, RICDataDesc),
9698 offsetof(tDot11fIERICDataDesc, present),
9699 offsetof(tDot11fAssocResponse, num_RICDataDesc), "RICDataDesc",
9700 2, 2, 550, SigIeRICDataDesc, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309701 0, DOT11F_EID_RICDATADESC, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009702 { offsetof(tDot11fAssocResponse, WPA), offsetof(tDot11fIEWPA, present), 0,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309703 "WPA", 0, 8, 50, SigIeWPA, {0, 80, 242, 1, 0}, 4, DOT11F_EID_WPA, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009704 { offsetof(tDot11fAssocResponse, TimeoutInterval),
9705 offsetof(tDot11fIETimeoutInterval, present), 0, "TimeoutInterval",
9706 0, 7, 7, SigIeTimeoutInterval, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309707 0, DOT11F_EID_TIMEOUTINTERVAL, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009708 { offsetof(tDot11fAssocResponse, HTCaps), offsetof(tDot11fIEHTCaps,
9709 present), 0, "HTCaps", 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309710 0, DOT11F_EID_HTCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009711 { offsetof(tDot11fAssocResponse, HTInfo), offsetof(tDot11fIEHTInfo,
9712 present), 0, "HTInfo", 0, 24, 56, SigIeHTInfo, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309713 0, DOT11F_EID_HTINFO, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009714 { offsetof(tDot11fAssocResponse, WMMParams), offsetof(tDot11fIEWMMParams,
9715 present), 0, "WMMParams", 0, 26, 26, SigIeWMMParams, {0, 80, 242, 2, 1},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309716 5, DOT11F_EID_WMMPARAMS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009717 { offsetof(tDot11fAssocResponse, WMMCaps), offsetof(tDot11fIEWMMCaps,
9718 present), 0, "WMMCaps", 0, 9, 9, SigIeWMMCaps, {0, 80, 242, 2, 5},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309719 5, DOT11F_EID_WMMCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009720 { offsetof(tDot11fAssocResponse, ESERadMgmtCap),
9721 offsetof(tDot11fIEESERadMgmtCap, present), 0, "ESERadMgmtCap",
9722 0, 8, 8, SigIeESERadMgmtCap, {0, 64, 150, 1, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309723 4, DOT11F_EID_ESERADMGMTCAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009724 { offsetof(tDot11fAssocResponse, ESETrafStrmMet),
9725 offsetof(tDot11fIEESETrafStrmMet, present), 0, "ESETrafStrmMet",
9726 0, 10, 10, SigIeESETrafStrmMet, {0, 64, 150, 7, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309727 4, DOT11F_EID_ESETRAFSTRMMET, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009728 { offsetof(tDot11fAssocResponse, ESETxmitPower),
9729 offsetof(tDot11fIEESETxmitPower, present), 0, "ESETxmitPower",
9730 0, 8, 8, SigIeESETxmitPower, {0, 64, 150, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309731 4, DOT11F_EID_ESETXMITPOWER, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009732 { offsetof(tDot11fAssocResponse, WMMTSPEC), offsetof(tDot11fIEWMMTSPEC,
9733 present), offsetof(tDot11fAssocResponse, num_WMMTSPEC), "WMMTSPEC",
9734 4, 63, 63, SigIeWMMTSPEC, {0, 80, 242, 2, 2},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309735 5, DOT11F_EID_WMMTSPEC, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009736 { offsetof(tDot11fAssocResponse, WscAssocRes),
9737 offsetof(tDot11fIEWscAssocRes, present), 0, "WscAssocRes",
9738 0, 6, 37, SigIeWscAssocRes, {0, 80, 242, 4, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309739 4, DOT11F_EID_WSCASSOCRES, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009740 { offsetof(tDot11fAssocResponse, P2PAssocRes),
9741 offsetof(tDot11fIEP2PAssocRes, present), 0, "P2PAssocRes",
9742 0, 6, 17, SigIeP2PAssocRes, {80, 111, 154, 9, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309743 4, DOT11F_EID_P2PASSOCRES, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009744 { offsetof(tDot11fAssocResponse, VHTCaps), offsetof(tDot11fIEVHTCaps,
9745 present), 0, "VHTCaps", 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309746 0, DOT11F_EID_VHTCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009747 { offsetof(tDot11fAssocResponse, VHTOperation),
9748 offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation",
9749 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309750 0, DOT11F_EID_VHTOPERATION, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009751 { offsetof(tDot11fAssocResponse, ExtCap), offsetof(tDot11fIEExtCap,
Selvaraj, Sridhar2c46d832017-03-13 17:55:48 +05309752 present), 0, "ExtCap", 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309753 0, DOT11F_EID_EXTCAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009754 { offsetof(tDot11fAssocResponse, OBSSScanParameters),
9755 offsetof(tDot11fIEOBSSScanParameters, present), 0, "OBSSScanParameters",
9756 0, 16, 16, SigIeOBSSScanParameters, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309757 0, DOT11F_EID_OBSSSCANPARAMETERS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009758 { offsetof(tDot11fAssocResponse, QosMapSet), offsetof(tDot11fIEQosMapSet,
9759 present), 0, "QosMapSet", 0, 2, 62, SigIeQosMapSet, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309760 0, DOT11F_EID_QOSMAPSET, 0, 0, },
9761 { offsetof(tDot11fAssocResponse, fils_session),
9762 offsetof(tDot11fIEfils_session, present), 0, "fils_session",
9763 0, 10, 10, SigIefils_session, {0, 0, 0, 0, 0},
9764 0, DOT11F_EID_FILS_SESSION, 4, 0, },
9765 { offsetof(tDot11fAssocResponse, fils_public_key),
9766 offsetof(tDot11fIEfils_public_key, present), 0, "fils_public_key",
9767 0, 3, 258, SigIefils_public_key, {0, 0, 0, 0, 0},
9768 0, DOT11F_EID_FILS_PUBLIC_KEY, 12, 0, },
9769 { offsetof(tDot11fAssocResponse, fils_key_confirmation),
9770 offsetof(tDot11fIEfils_key_confirmation, present), 0,
9771 "fils_key_confirmation", 0, 2, 257, SigIefils_key_confirmation,
9772 {0, 0, 0, 0, 0}, 0, DOT11F_EID_FILS_KEY_CONFIRMATION, 3, 0, },
9773 { offsetof(tDot11fAssocResponse, fils_hlp_container),
9774 offsetof(tDot11fIEfils_hlp_container, present), 0, "fils_hlp_container",
9775 0, 14, 269, SigIefils_hlp_container, {0, 0, 0, 0, 0},
9776 0, DOT11F_EID_FILS_HLP_CONTAINER, 5, 0, },
Vignesh Viswanathan34cf4752017-09-15 12:54:04 +05309777 { offsetof(tDot11fAssocResponse, fragment_ie),
9778 offsetof(tDot11fIEfragment_ie, present), 0, "fragment_ie",
9779 0, 2, 257, SigIefragment_ie, {0, 0, 0, 0, 0},
9780 0, DOT11F_EID_FRAGMENT_IE, 0, 0, },
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309781 { offsetof(tDot11fAssocResponse, fils_kde), offsetof(tDot11fIEfils_kde,
9782 present), 0, "fils_kde", 0, 10, 265, SigIefils_kde, {0, 0, 0, 0, 0},
9783 0, DOT11F_EID_FILS_KDE, 7, 0, },
Kapil Gupta4b2efbb2016-10-03 13:07:20 +05309784 { offsetof(tDot11fAssocResponse, vendor_vht_ie),
9785 offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie",
Kiran Kumar Lokere81722632017-09-26 12:11:43 -07009786 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 4, 0},
9787 4, DOT11F_EID_VENDOR_VHT_IE, 0, 0, },
Selvaraj, Sridharc2fe7a32017-02-02 19:20:16 +05309788 { offsetof(tDot11fAssocResponse, QCN_IE), offsetof(tDot11fIEQCN_IE,
9789 present), 0, "QCN_IE", 0, 10, 10, SigIeQCN_IE, {140, 253, 240, 1, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309790 4, DOT11F_EID_QCN_IE, 0, 0, },
Naveen Rawatea921ce2017-09-08 15:07:58 -07009791 { offsetof(tDot11fAssocResponse, he_cap), offsetof(tDot11fIEhe_cap,
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -07009792 present), 0, "he_cap", 0, 23, 56, SigIehe_cap, {0, 0, 0, 0, 0},
Naveen Rawatea921ce2017-09-08 15:07:58 -07009793 0, DOT11F_EID_HE_CAP, 35, 0, },
9794 { offsetof(tDot11fAssocResponse, he_op), offsetof(tDot11fIEhe_op,
Naveen Rawate795f452017-11-13 14:47:39 -08009795 present), 0, "he_op", 0, 8, 12, SigIehe_op, {0, 0, 0, 0, 0},
Naveen Rawatea921ce2017-09-08 15:07:58 -07009796 0, DOT11F_EID_HE_OP, 36, 0, },
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -07009797 { offsetof(tDot11fAssocResponse, bss_color_change),
9798 offsetof(tDot11fIEbss_color_change, present), 0, "bss_color_change",
Arif Hussain3a30fdc2018-02-08 20:00:41 -08009799 0, 4, 4, SigIebss_color_change, {0, 0, 0, 0, 0},
9800 0, DOT11F_EID_BSS_COLOR_CHANGE, 42, 0, },
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -07009801 { offsetof(tDot11fAssocResponse, mu_edca_param_set),
9802 offsetof(tDot11fIEmu_edca_param_set, present), 0, "mu_edca_param_set",
Kiran Kumar Lokere27026ae2018-03-09 11:38:19 -08009803 0, 15, 15, SigIemu_edca_param_set, {0, 0, 0, 0, 0},
9804 0, DOT11F_EID_MU_EDCA_PARAM_SET, 38, 0, },
Abhishek Singh4c1ec992017-07-14 14:09:27 +05309805 { offsetof(tDot11fAssocResponse, MBO_IE), offsetof(tDot11fIEMBO_IE,
9806 present), 0, "MBO_IE", 0, 6, 295, SigIeMBO_IE, {80, 111, 154, 22, 0},
9807 4, DOT11F_EID_MBO_IE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009808 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
9809
9810uint32_t dot11f_unpack_assoc_response(tpAniSirGlobal pCtx,
9811 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309812 tDot11fAssocResponse *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009813{
9814 uint32_t i = 0;
9815 uint32_t status = 0;
9816 status = unpack_core(pCtx, pBuf, nBuf,
9817 FFS_AssocResponse, IES_AssocResponse,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309818 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009819
9820 (void)i;
9821 return status;
9822
9823} /* End dot11f_unpack_assoc_response. */
9824
9825static const tFFDefn FFS_Authentication[] = {
9826 { "AuthAlgo", offsetof(tDot11fAuthentication, AuthAlgo), SigFfAuthAlgo,
9827 DOT11F_FF_AUTHALGO_LEN, },
9828 { "AuthSeqNo", offsetof(tDot11fAuthentication, AuthSeqNo), SigFfAuthSeqNo,
9829 DOT11F_FF_AUTHSEQNO_LEN, },
9830 { "Status", offsetof(tDot11fAuthentication, Status), SigFfStatus,
9831 DOT11F_FF_STATUS_LEN, },
9832 { NULL, 0, 0, 0,},
9833};
9834
9835static const tIEDefn IES_Authentication[] = {
9836 { offsetof(tDot11fAuthentication, ChallengeText),
9837 offsetof(tDot11fIEChallengeText, present), 0, "ChallengeText",
9838 0, 3, 255, SigIeChallengeText, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309839 0, DOT11F_EID_CHALLENGETEXT, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009840 { offsetof(tDot11fAuthentication, RSNOpaque),
9841 offsetof(tDot11fIERSNOpaque, present), 0, "RSNOpaque",
Liangwei Dong5b25e342018-08-22 00:55:41 -04009842 0, 2, 255, SigIeRSNOpaque, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309843 0, DOT11F_EID_RSNOPAQUE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009844 { offsetof(tDot11fAuthentication, MobilityDomain),
9845 offsetof(tDot11fIEMobilityDomain, present), 0, "MobilityDomain",
9846 0, 5, 5, SigIeMobilityDomain, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309847 0, DOT11F_EID_MOBILITYDOMAIN, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009848 { offsetof(tDot11fAuthentication, FTInfo), offsetof(tDot11fIEFTInfo,
9849 present), 0, "FTInfo", 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309850 0, DOT11F_EID_FTINFO, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009851 { offsetof(tDot11fAuthentication, TimeoutInterval),
9852 offsetof(tDot11fIETimeoutInterval, present), 0, "TimeoutInterval",
9853 0, 7, 7, SigIeTimeoutInterval, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309854 0, DOT11F_EID_TIMEOUTINTERVAL, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009855 { offsetof(tDot11fAuthentication, RICDataDesc),
9856 offsetof(tDot11fIERICDataDesc, present),
9857 offsetof(tDot11fAuthentication, num_RICDataDesc), "RICDataDesc",
9858 2, 2, 550, SigIeRICDataDesc, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309859 0, DOT11F_EID_RICDATADESC, 0, 0, },
9860 { offsetof(tDot11fAuthentication, fils_nonce),
9861 offsetof(tDot11fIEfils_nonce, present), 0, "fils_nonce",
9862 0, 18, 18, SigIefils_nonce, {0, 0, 0, 0, 0},
9863 0, DOT11F_EID_FILS_NONCE, 13, 0, },
9864 { offsetof(tDot11fAuthentication, fils_session),
9865 offsetof(tDot11fIEfils_session, present), 0, "fils_session",
9866 0, 10, 10, SigIefils_session, {0, 0, 0, 0, 0},
9867 0, DOT11F_EID_FILS_SESSION, 4, 0, },
9868 { offsetof(tDot11fAuthentication, fils_wrapped_data),
9869 offsetof(tDot11fIEfils_wrapped_data, present), 0, "fils_wrapped_data",
9870 0, 2, 257, SigIefils_wrapped_data, {0, 0, 0, 0, 0},
9871 0, DOT11F_EID_FILS_WRAPPED_DATA, 8, 0, },
9872 { offsetof(tDot11fAuthentication, fils_assoc_delay_info),
9873 offsetof(tDot11fIEfils_assoc_delay_info, present), 0,
9874 "fils_assoc_delay_info", 0, 3, 3, SigIefils_assoc_delay_info,
9875 {0, 0, 0, 0, 0}, 0, DOT11F_EID_FILS_ASSOC_DELAY_INFO, 1, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009876 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
9877
9878uint32_t dot11f_unpack_authentication(tpAniSirGlobal pCtx,
9879 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309880 tDot11fAuthentication *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009881{
9882 uint32_t i = 0;
9883 uint32_t status = 0;
9884 status = unpack_core(pCtx, pBuf, nBuf,
9885 FFS_Authentication, IES_Authentication,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309886 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009887
9888 (void)i;
9889 return status;
9890
9891} /* End dot11f_unpack_authentication. */
9892
9893static const tFFDefn FFS_Beacon[] = {
9894 { "TimeStamp", offsetof(tDot11fBeacon, TimeStamp), SigFfTimeStamp,
9895 DOT11F_FF_TIMESTAMP_LEN, },
9896 { "BeaconInterval", offsetof(tDot11fBeacon, BeaconInterval),
9897 SigFfBeaconInterval, DOT11F_FF_BEACONINTERVAL_LEN, },
9898 { "Capabilities", offsetof(tDot11fBeacon, Capabilities),
9899 SigFfCapabilities, DOT11F_FF_CAPABILITIES_LEN, },
9900 { NULL, 0, 0, 0,},
9901};
9902
9903static const tIEDefn IES_Beacon[] = {
9904 { offsetof(tDot11fBeacon, SSID), offsetof(tDot11fIESSID, present), 0,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309905 "SSID", 0, 2, 34, SigIeSSID, {0, 0, 0, 0, 0}, 0, DOT11F_EID_SSID, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009906 { offsetof(tDot11fBeacon, SuppRates), offsetof(tDot11fIESuppRates,
9907 present), 0, "SuppRates", 0, 2, 14, SigIeSuppRates, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309908 0, DOT11F_EID_SUPPRATES, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009909 { offsetof(tDot11fBeacon, FHParamSet), offsetof(tDot11fIEFHParamSet,
9910 present), 0, "FHParamSet", 0, 7, 7, SigIeFHParamSet, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309911 0, DOT11F_EID_FHPARAMSET, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009912 { offsetof(tDot11fBeacon, DSParams), offsetof(tDot11fIEDSParams, present),
9913 0, "DSParams", 0, 3, 3, SigIeDSParams, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309914 0, DOT11F_EID_DSPARAMS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009915 { offsetof(tDot11fBeacon, CFParams), offsetof(tDot11fIECFParams, present),
9916 0, "CFParams", 0, 8, 8, SigIeCFParams, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309917 0, DOT11F_EID_CFPARAMS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009918 { offsetof(tDot11fBeacon, IBSSParams), offsetof(tDot11fIEIBSSParams,
9919 present), 0, "IBSSParams", 0, 4, 4, SigIeIBSSParams, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309920 0, DOT11F_EID_IBSSPARAMS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009921 { offsetof(tDot11fBeacon, TIM), offsetof(tDot11fIETIM, present), 0, "TIM",
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309922 0, 6, 256, SigIeTIM, {0, 0, 0, 0, 0}, 0, DOT11F_EID_TIM, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009923 { offsetof(tDot11fBeacon, Country), offsetof(tDot11fIECountry, present), 0,
9924 "Country", 0, 5, 257, SigIeCountry, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309925 0, DOT11F_EID_COUNTRY, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009926 { offsetof(tDot11fBeacon, FHParams), offsetof(tDot11fIEFHParams, present),
9927 0, "FHParams", 0, 4, 4, SigIeFHParams, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309928 0, DOT11F_EID_FHPARAMS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009929 { offsetof(tDot11fBeacon, FHPattTable), offsetof(tDot11fIEFHPattTable,
9930 present), 0, "FHPattTable", 0, 6, 257, SigIeFHPattTable, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309931 0, DOT11F_EID_FHPATTTABLE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009932 { offsetof(tDot11fBeacon, PowerConstraints),
9933 offsetof(tDot11fIEPowerConstraints, present), 0, "PowerConstraints",
9934 0, 3, 3, SigIePowerConstraints, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309935 0, DOT11F_EID_POWERCONSTRAINTS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009936 { offsetof(tDot11fBeacon, ChanSwitchAnn),
9937 offsetof(tDot11fIEChanSwitchAnn, present), 0, "ChanSwitchAnn",
9938 0, 5, 5, SigIeChanSwitchAnn, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309939 0, DOT11F_EID_CHANSWITCHANN, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009940 { offsetof(tDot11fBeacon, ext_chan_switch_ann),
9941 offsetof(tDot11fIEext_chan_switch_ann, present), 0, "ext_chan_switch_ann",
9942 0, 6, 6, SigIeext_chan_switch_ann, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309943 0, DOT11F_EID_EXT_CHAN_SWITCH_ANN, 0, 0, },
Edhar, Mahesh Kumar5cd1e0e2015-11-16 14:32:33 +05309944 { offsetof(tDot11fBeacon, SuppOperatingClasses),
9945 offsetof(tDot11fIESuppOperatingClasses, present), 0,
9946 "SuppOperatingClasses", 0, 3, 34, SigIeSuppOperatingClasses,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309947 {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPOPERATINGCLASSES, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009948 { offsetof(tDot11fBeacon, Quiet), offsetof(tDot11fIEQuiet, present), 0,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309949 "Quiet", 0, 8, 8, SigIeQuiet, {0, 0, 0, 0, 0},
9950 0, DOT11F_EID_QUIET, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009951 { offsetof(tDot11fBeacon, TPCReport), offsetof(tDot11fIETPCReport,
9952 present), 0, "TPCReport", 0, 4, 4, SigIeTPCReport, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309953 0, DOT11F_EID_TPCREPORT, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009954 { offsetof(tDot11fBeacon, ERPInfo), offsetof(tDot11fIEERPInfo, present), 0,
9955 "ERPInfo", 0, 3, 3, SigIeERPInfo, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309956 0, DOT11F_EID_ERPINFO, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009957 { offsetof(tDot11fBeacon, ExtSuppRates), offsetof(tDot11fIEExtSuppRates,
9958 present), 0, "ExtSuppRates", 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309959 0, DOT11F_EID_EXTSUPPRATES, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009960 { offsetof(tDot11fBeacon, RSN), offsetof(tDot11fIERSN, present), 0, "RSN",
Abhishek Singh7dcb85b2017-12-27 15:15:01 +05309961 0, 4, 132, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009962 { offsetof(tDot11fBeacon, QBSSLoad), offsetof(tDot11fIEQBSSLoad, present),
9963 0, "QBSSLoad", 0, 7, 7, SigIeQBSSLoad, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309964 0, DOT11F_EID_QBSSLOAD, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009965 { offsetof(tDot11fBeacon, EDCAParamSet), offsetof(tDot11fIEEDCAParamSet,
9966 present), 0, "EDCAParamSet", 0, 20, 20, SigIeEDCAParamSet, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309967 0, DOT11F_EID_EDCAPARAMSET, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009968 { offsetof(tDot11fBeacon, QOSCapsAp), offsetof(tDot11fIEQOSCapsAp,
9969 present), 0, "QOSCapsAp", 0, 3, 3, SigIeQOSCapsAp, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309970 0, DOT11F_EID_QOSCAPSAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009971 { offsetof(tDot11fBeacon, APChannelReport),
9972 offsetof(tDot11fIEAPChannelReport, present), 0, "APChannelReport",
9973 0, 3, 53, SigIeAPChannelReport, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309974 0, DOT11F_EID_APCHANNELREPORT, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009975 { offsetof(tDot11fBeacon, RRMEnabledCap),
9976 offsetof(tDot11fIERRMEnabledCap, present), 0, "RRMEnabledCap",
9977 0, 7, 7, SigIeRRMEnabledCap, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309978 0, DOT11F_EID_RRMENABLEDCAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009979 { offsetof(tDot11fBeacon, MobilityDomain),
9980 offsetof(tDot11fIEMobilityDomain, present), 0, "MobilityDomain",
9981 0, 5, 5, SigIeMobilityDomain, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309982 0, DOT11F_EID_MOBILITYDOMAIN, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009983 { offsetof(tDot11fBeacon, WPA), offsetof(tDot11fIEWPA, present), 0, "WPA",
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309984 0, 8, 50, SigIeWPA, {0, 80, 242, 1, 0}, 4, DOT11F_EID_WPA, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009985 { offsetof(tDot11fBeacon, HTCaps), offsetof(tDot11fIEHTCaps, present), 0,
9986 "HTCaps", 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309987 0, DOT11F_EID_HTCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009988 { offsetof(tDot11fBeacon, HTInfo), offsetof(tDot11fIEHTInfo, present), 0,
9989 "HTInfo", 0, 24, 56, SigIeHTInfo, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309990 0, DOT11F_EID_HTINFO, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009991 { offsetof(tDot11fBeacon, sec_chan_offset_ele),
9992 offsetof(tDot11fIEsec_chan_offset_ele, present), 0, "sec_chan_offset_ele",
9993 0, 3, 3, SigIesec_chan_offset_ele, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309994 0, DOT11F_EID_SEC_CHAN_OFFSET_ELE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009995 { offsetof(tDot11fBeacon, WMMInfoAp), offsetof(tDot11fIEWMMInfoAp,
9996 present), 0, "WMMInfoAp", 0, 9, 9, SigIeWMMInfoAp, {0, 80, 242, 2, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +05309997 5, DOT11F_EID_WMMINFOAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08009998 { offsetof(tDot11fBeacon, WMMParams), offsetof(tDot11fIEWMMParams,
9999 present), 0, "WMMParams", 0, 26, 26, SigIeWMMParams, {0, 80, 242, 2, 1},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010000 5, DOT11F_EID_WMMPARAMS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010001 { offsetof(tDot11fBeacon, WMMCaps), offsetof(tDot11fIEWMMCaps, present), 0,
10002 "WMMCaps", 0, 9, 9, SigIeWMMCaps, {0, 80, 242, 2, 5},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010003 5, DOT11F_EID_WMMCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010004 { offsetof(tDot11fBeacon, WAPI), offsetof(tDot11fIEWAPI, present), 0,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010005 "WAPI", 0, 14, 112, SigIeWAPI, {0, 0, 0, 0, 0},
10006 0, DOT11F_EID_WAPI, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010007 { offsetof(tDot11fBeacon, ESERadMgmtCap),
10008 offsetof(tDot11fIEESERadMgmtCap, present), 0, "ESERadMgmtCap",
10009 0, 8, 8, SigIeESERadMgmtCap, {0, 64, 150, 1, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010010 4, DOT11F_EID_ESERADMGMTCAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010011 { offsetof(tDot11fBeacon, ESETrafStrmMet),
10012 offsetof(tDot11fIEESETrafStrmMet, present), 0, "ESETrafStrmMet",
10013 0, 10, 10, SigIeESETrafStrmMet, {0, 64, 150, 7, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010014 4, DOT11F_EID_ESETRAFSTRMMET, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010015 { offsetof(tDot11fBeacon, ESETxmitPower),
10016 offsetof(tDot11fIEESETxmitPower, present), 0, "ESETxmitPower",
10017 0, 8, 8, SigIeESETxmitPower, {0, 64, 150, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010018 4, DOT11F_EID_ESETXMITPOWER, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010019 { offsetof(tDot11fBeacon, WscBeacon), offsetof(tDot11fIEWscBeacon,
10020 present), 0, "WscBeacon", 0, 6, 84, SigIeWscBeacon, {0, 80, 242, 4, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010021 4, DOT11F_EID_WSCBEACON, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010022 { offsetof(tDot11fBeacon, P2PBeacon), offsetof(tDot11fIEP2PBeacon,
10023 present), 0, "P2PBeacon", 0, 6, 61, SigIeP2PBeacon, {80, 111, 154, 9, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010024 4, DOT11F_EID_P2PBEACON, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010025 { offsetof(tDot11fBeacon, VHTCaps), offsetof(tDot11fIEVHTCaps, present), 0,
10026 "VHTCaps", 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010027 0, DOT11F_EID_VHTCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010028 { offsetof(tDot11fBeacon, VHTOperation), offsetof(tDot11fIEVHTOperation,
10029 present), 0, "VHTOperation", 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010030 0, DOT11F_EID_VHTOPERATION, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010031 { offsetof(tDot11fBeacon, VHTExtBssLoad),
10032 offsetof(tDot11fIEVHTExtBssLoad, present), 0, "VHTExtBssLoad",
10033 0, 7, 7, SigIeVHTExtBssLoad, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010034 0, DOT11F_EID_VHTEXTBSSLOAD, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010035 { offsetof(tDot11fBeacon, ExtCap), offsetof(tDot11fIEExtCap, present), 0,
Selvaraj, Sridhar2c46d832017-03-13 17:55:48 +053010036 "ExtCap", 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010037 0, DOT11F_EID_EXTCAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010038 { offsetof(tDot11fBeacon, OperatingMode),
10039 offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode",
10040 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010041 0, DOT11F_EID_OPERATINGMODE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010042 { offsetof(tDot11fBeacon, WiderBWChanSwitchAnn),
10043 offsetof(tDot11fIEWiderBWChanSwitchAnn, present), 0,
10044 "WiderBWChanSwitchAnn", 0, 5, 5, SigIeWiderBWChanSwitchAnn,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010045 {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010046 { offsetof(tDot11fBeacon, OBSSScanParameters),
10047 offsetof(tDot11fIEOBSSScanParameters, present), 0, "OBSSScanParameters",
10048 0, 16, 16, SigIeOBSSScanParameters, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010049 0, DOT11F_EID_OBSSSCANPARAMETERS, 0, 0, },
10050 { offsetof(tDot11fBeacon, fils_indication),
10051 offsetof(tDot11fIEfils_indication, present), 0, "fils_indication",
Vignesh Viswanathan44857312017-12-19 18:06:57 +053010052 0, 6, 259, SigIefils_indication, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010053 0, DOT11F_EID_FILS_INDICATION, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010054 { offsetof(tDot11fBeacon, Vendor1IE), offsetof(tDot11fIEVendor1IE,
10055 present), 0, "Vendor1IE", 0, 5, 5, SigIeVendor1IE, {0, 16, 24, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010056 3, DOT11F_EID_VENDOR1IE, 0, 0, },
Kapil Gupta4b2efbb2016-10-03 13:07:20 +053010057 { offsetof(tDot11fBeacon, vendor_vht_ie),
10058 offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie",
Kiran Kumar Lokere81722632017-09-26 12:11:43 -070010059 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 4, 0},
10060 4, DOT11F_EID_VENDOR_VHT_IE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010061 { offsetof(tDot11fBeacon, Vendor3IE), offsetof(tDot11fIEVendor3IE,
10062 present), 0, "Vendor3IE", 0, 5, 5, SigIeVendor3IE, {0, 22, 50, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010063 3, DOT11F_EID_VENDOR3IE, 0, 0, },
Nitesh Shah0ddd4f62016-05-27 10:07:32 +053010064 { offsetof(tDot11fBeacon, hs20vendor_ie),
10065 offsetof(tDot11fIEhs20vendor_ie, present), 0, "hs20vendor_ie",
Selvaraj, Sridhar7f42b5f2016-09-16 20:23:53 +053010066 0, 7, 9, SigIehs20vendor_ie, {80, 111, 154, 16, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010067 4, DOT11F_EID_HS20VENDOR_IE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010068 { offsetof(tDot11fBeacon, ChannelSwitchWrapper),
10069 offsetof(tDot11fIEChannelSwitchWrapper, present), 0,
Abhishek Singh37456d22016-08-29 16:05:11 +053010070 "ChannelSwitchWrapper", 0, 2, 14, SigIeChannelSwitchWrapper,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010071 {0, 0, 0, 0, 0}, 0, DOT11F_EID_CHANNELSWITCHWRAPPER, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010072 { offsetof(tDot11fBeacon, QComVendorIE), offsetof(tDot11fIEQComVendorIE,
10073 present), 0, "QComVendorIE", 0, 7, 7, SigIeQComVendorIE,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010074 {0, 160, 198, 0, 0}, 3, DOT11F_EID_QCOMVENDORIE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010075 { offsetof(tDot11fBeacon, ESEVersion), offsetof(tDot11fIEESEVersion,
10076 present), 0, "ESEVersion", 0, 7, 7, SigIeESEVersion, {0, 64, 150, 3, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010077 4, DOT11F_EID_ESEVERSION, 0, 0, },
Selvaraj, Sridharba726cb2016-07-22 13:41:03 +053010078 { offsetof(tDot11fBeacon, MBO_IE), offsetof(tDot11fIEMBO_IE, present), 0,
Abhishek Singh951eed82017-07-06 16:53:19 +053010079 "MBO_IE", 0, 6, 295, SigIeMBO_IE, {80, 111, 154, 22, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010080 4, DOT11F_EID_MBO_IE, 0, 0, },
Selvaraj, Sridharc2fe7a32017-02-02 19:20:16 +053010081 { offsetof(tDot11fBeacon, QCN_IE), offsetof(tDot11fIEQCN_IE, present), 0,
10082 "QCN_IE", 0, 10, 10, SigIeQCN_IE, {140, 253, 240, 1, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010083 4, DOT11F_EID_QCN_IE, 0, 0, },
Naveen Rawatea921ce2017-09-08 15:07:58 -070010084 { offsetof(tDot11fBeacon, he_cap), offsetof(tDot11fIEhe_cap, present), 0,
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070010085 "he_cap", 0, 23, 56, SigIehe_cap, {0, 0, 0, 0, 0},
Naveen Rawatea921ce2017-09-08 15:07:58 -070010086 0, DOT11F_EID_HE_CAP, 35, 0, },
10087 { offsetof(tDot11fBeacon, he_op), offsetof(tDot11fIEhe_op, present), 0,
Naveen Rawate795f452017-11-13 14:47:39 -080010088 "he_op", 0, 8, 12, SigIehe_op, {0, 0, 0, 0, 0},
Naveen Rawatea921ce2017-09-08 15:07:58 -070010089 0, DOT11F_EID_HE_OP, 36, 0, },
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070010090 { offsetof(tDot11fBeacon, bss_color_change),
10091 offsetof(tDot11fIEbss_color_change, present), 0, "bss_color_change",
Arif Hussain3a30fdc2018-02-08 20:00:41 -080010092 0, 4, 4, SigIebss_color_change, {0, 0, 0, 0, 0},
10093 0, DOT11F_EID_BSS_COLOR_CHANGE, 42, 0, },
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070010094 { offsetof(tDot11fBeacon, mu_edca_param_set),
10095 offsetof(tDot11fIEmu_edca_param_set, present), 0, "mu_edca_param_set",
Kiran Kumar Lokere27026ae2018-03-09 11:38:19 -080010096 0, 15, 15, SigIemu_edca_param_set, {0, 0, 0, 0, 0},
10097 0, DOT11F_EID_MU_EDCA_PARAM_SET, 38, 0, },
Abhishek Singhd8c3f102017-07-29 14:10:37 +053010098 { offsetof(tDot11fBeacon, esp_information),
10099 offsetof(tDot11fIEesp_information, present), 0, "esp_information",
10100 0, 2, 98, SigIeesp_information, {0, 0, 0, 0, 0},
10101 0, DOT11F_EID_ESP_INFORMATION, 11, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010102 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
10103
10104uint32_t dot11f_unpack_beacon(tpAniSirGlobal pCtx,
10105 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010106 tDot11fBeacon *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010107{
10108 uint32_t i = 0;
10109 uint32_t status = 0;
10110 status = unpack_core(pCtx, pBuf, nBuf,
10111 FFS_Beacon, IES_Beacon,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010112 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010113
10114 (void)i;
10115 return status;
10116
10117} /* End dot11f_unpack_beacon. */
10118
10119static const tFFDefn FFS_Beacon1[] = {
10120 { "TimeStamp", offsetof(tDot11fBeacon1, TimeStamp), SigFfTimeStamp,
10121 DOT11F_FF_TIMESTAMP_LEN, },
10122 { "BeaconInterval", offsetof(tDot11fBeacon1, BeaconInterval),
10123 SigFfBeaconInterval, DOT11F_FF_BEACONINTERVAL_LEN, },
10124 { "Capabilities", offsetof(tDot11fBeacon1, Capabilities),
10125 SigFfCapabilities, DOT11F_FF_CAPABILITIES_LEN, },
10126 { NULL, 0, 0, 0,},
10127};
10128
10129static const tIEDefn IES_Beacon1[] = {
10130 { offsetof(tDot11fBeacon1, SSID), offsetof(tDot11fIESSID, present), 0,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010131 "SSID", 0, 2, 34, SigIeSSID, {0, 0, 0, 0, 0}, 0, DOT11F_EID_SSID, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010132 { offsetof(tDot11fBeacon1, SuppRates), offsetof(tDot11fIESuppRates,
10133 present), 0, "SuppRates", 0, 2, 14, SigIeSuppRates, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010134 0, DOT11F_EID_SUPPRATES, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010135 { offsetof(tDot11fBeacon1, DSParams), offsetof(tDot11fIEDSParams,
10136 present), 0, "DSParams", 0, 3, 3, SigIeDSParams, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010137 0, DOT11F_EID_DSPARAMS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010138 { offsetof(tDot11fBeacon1, IBSSParams), offsetof(tDot11fIEIBSSParams,
10139 present), 0, "IBSSParams", 0, 4, 4, SigIeIBSSParams, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010140 0, DOT11F_EID_IBSSPARAMS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010141 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
10142
10143uint32_t dot11f_unpack_beacon1(tpAniSirGlobal pCtx,
10144 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010145 tDot11fBeacon1 *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010146{
10147 uint32_t i = 0;
10148 uint32_t status = 0;
10149 status = unpack_core(pCtx, pBuf, nBuf,
10150 FFS_Beacon1, IES_Beacon1,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010151 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010152
10153 (void)i;
10154 return status;
10155
10156} /* End dot11f_unpack_beacon1. */
10157
10158static const tFFDefn FFS_Beacon2[] = {
10159 { NULL, 0, 0, 0,},
10160};
10161
10162static const tIEDefn IES_Beacon2[] = {
10163 { offsetof(tDot11fBeacon2, Country), offsetof(tDot11fIECountry, present),
10164 0, "Country", 0, 5, 257, SigIeCountry, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010165 0, DOT11F_EID_COUNTRY, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010166 { offsetof(tDot11fBeacon2, PowerConstraints),
10167 offsetof(tDot11fIEPowerConstraints, present), 0, "PowerConstraints",
10168 0, 3, 3, SigIePowerConstraints, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010169 0, DOT11F_EID_POWERCONSTRAINTS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010170 { offsetof(tDot11fBeacon2, ChanSwitchAnn),
10171 offsetof(tDot11fIEChanSwitchAnn, present), 0, "ChanSwitchAnn",
10172 0, 5, 5, SigIeChanSwitchAnn, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010173 0, DOT11F_EID_CHANSWITCHANN, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010174 { offsetof(tDot11fBeacon2, ext_chan_switch_ann),
10175 offsetof(tDot11fIEext_chan_switch_ann, present), 0, "ext_chan_switch_ann",
10176 0, 6, 6, SigIeext_chan_switch_ann, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010177 0, DOT11F_EID_EXT_CHAN_SWITCH_ANN, 0, 0, },
Edhar, Mahesh Kumar5cd1e0e2015-11-16 14:32:33 +053010178 { offsetof(tDot11fBeacon2, SuppOperatingClasses),
10179 offsetof(tDot11fIESuppOperatingClasses, present), 0,
10180 "SuppOperatingClasses", 0, 3, 34, SigIeSuppOperatingClasses,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010181 {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPOPERATINGCLASSES, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010182 { offsetof(tDot11fBeacon2, Quiet), offsetof(tDot11fIEQuiet, present), 0,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010183 "Quiet", 0, 8, 8, SigIeQuiet, {0, 0, 0, 0, 0},
10184 0, DOT11F_EID_QUIET, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010185 { offsetof(tDot11fBeacon2, TPCReport), offsetof(tDot11fIETPCReport,
10186 present), 0, "TPCReport", 0, 4, 4, SigIeTPCReport, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010187 0, DOT11F_EID_TPCREPORT, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010188 { offsetof(tDot11fBeacon2, ERPInfo), offsetof(tDot11fIEERPInfo, present),
10189 0, "ERPInfo", 0, 3, 3, SigIeERPInfo, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010190 0, DOT11F_EID_ERPINFO, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010191 { offsetof(tDot11fBeacon2, ExtSuppRates), offsetof(tDot11fIEExtSuppRates,
10192 present), 0, "ExtSuppRates", 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010193 0, DOT11F_EID_EXTSUPPRATES, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010194 { offsetof(tDot11fBeacon2, RSNOpaque), offsetof(tDot11fIERSNOpaque,
Liangwei Dong5b25e342018-08-22 00:55:41 -040010195 present), 0, "RSNOpaque", 0, 2, 255, SigIeRSNOpaque, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010196 0, DOT11F_EID_RSNOPAQUE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010197 { offsetof(tDot11fBeacon2, EDCAParamSet), offsetof(tDot11fIEEDCAParamSet,
10198 present), 0, "EDCAParamSet", 0, 20, 20, SigIeEDCAParamSet, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010199 0, DOT11F_EID_EDCAPARAMSET, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010200 { offsetof(tDot11fBeacon2, APChannelReport),
10201 offsetof(tDot11fIEAPChannelReport, present), 0, "APChannelReport",
10202 0, 3, 53, SigIeAPChannelReport, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010203 0, DOT11F_EID_APCHANNELREPORT, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010204 { offsetof(tDot11fBeacon2, RRMEnabledCap),
10205 offsetof(tDot11fIERRMEnabledCap, present), 0, "RRMEnabledCap",
10206 0, 7, 7, SigIeRRMEnabledCap, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010207 0, DOT11F_EID_RRMENABLEDCAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010208 { offsetof(tDot11fBeacon2, MobilityDomain),
10209 offsetof(tDot11fIEMobilityDomain, present), 0, "MobilityDomain",
10210 0, 5, 5, SigIeMobilityDomain, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010211 0, DOT11F_EID_MOBILITYDOMAIN, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010212 { offsetof(tDot11fBeacon2, WPA), offsetof(tDot11fIEWPA, present), 0, "WPA",
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010213 0, 8, 50, SigIeWPA, {0, 80, 242, 1, 0}, 4, DOT11F_EID_WPA, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010214 { offsetof(tDot11fBeacon2, HTCaps), offsetof(tDot11fIEHTCaps, present), 0,
10215 "HTCaps", 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010216 0, DOT11F_EID_HTCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010217 { offsetof(tDot11fBeacon2, HTInfo), offsetof(tDot11fIEHTInfo, present), 0,
10218 "HTInfo", 0, 24, 56, SigIeHTInfo, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010219 0, DOT11F_EID_HTINFO, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010220 { offsetof(tDot11fBeacon2, sec_chan_offset_ele),
10221 offsetof(tDot11fIEsec_chan_offset_ele, present), 0, "sec_chan_offset_ele",
10222 0, 3, 3, SigIesec_chan_offset_ele, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010223 0, DOT11F_EID_SEC_CHAN_OFFSET_ELE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010224 { offsetof(tDot11fBeacon2, WMMInfoAp), offsetof(tDot11fIEWMMInfoAp,
10225 present), 0, "WMMInfoAp", 0, 9, 9, SigIeWMMInfoAp, {0, 80, 242, 2, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010226 5, DOT11F_EID_WMMINFOAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010227 { offsetof(tDot11fBeacon2, WMMParams), offsetof(tDot11fIEWMMParams,
10228 present), 0, "WMMParams", 0, 26, 26, SigIeWMMParams, {0, 80, 242, 2, 1},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010229 5, DOT11F_EID_WMMPARAMS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010230 { offsetof(tDot11fBeacon2, WMMCaps), offsetof(tDot11fIEWMMCaps, present),
10231 0, "WMMCaps", 0, 9, 9, SigIeWMMCaps, {0, 80, 242, 2, 5},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010232 5, DOT11F_EID_WMMCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010233 { offsetof(tDot11fBeacon2, WscBeacon), offsetof(tDot11fIEWscBeacon,
10234 present), 0, "WscBeacon", 0, 6, 84, SigIeWscBeacon, {0, 80, 242, 4, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010235 4, DOT11F_EID_WSCBEACON, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010236 { offsetof(tDot11fBeacon2, WAPI), offsetof(tDot11fIEWAPI, present), 0,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010237 "WAPI", 0, 14, 112, SigIeWAPI, {0, 0, 0, 0, 0},
10238 0, DOT11F_EID_WAPI, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010239 { offsetof(tDot11fBeacon2, ESERadMgmtCap),
10240 offsetof(tDot11fIEESERadMgmtCap, present), 0, "ESERadMgmtCap",
10241 0, 8, 8, SigIeESERadMgmtCap, {0, 64, 150, 1, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010242 4, DOT11F_EID_ESERADMGMTCAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010243 { offsetof(tDot11fBeacon2, ESETrafStrmMet),
10244 offsetof(tDot11fIEESETrafStrmMet, present), 0, "ESETrafStrmMet",
10245 0, 10, 10, SigIeESETrafStrmMet, {0, 64, 150, 7, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010246 4, DOT11F_EID_ESETRAFSTRMMET, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010247 { offsetof(tDot11fBeacon2, ESETxmitPower),
10248 offsetof(tDot11fIEESETxmitPower, present), 0, "ESETxmitPower",
10249 0, 8, 8, SigIeESETxmitPower, {0, 64, 150, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010250 4, DOT11F_EID_ESETXMITPOWER, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010251 { offsetof(tDot11fBeacon2, P2PBeacon), offsetof(tDot11fIEP2PBeacon,
10252 present), 0, "P2PBeacon", 0, 6, 61, SigIeP2PBeacon, {80, 111, 154, 9, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010253 4, DOT11F_EID_P2PBEACON, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010254 { offsetof(tDot11fBeacon2, VHTCaps), offsetof(tDot11fIEVHTCaps, present),
10255 0, "VHTCaps", 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010256 0, DOT11F_EID_VHTCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010257 { offsetof(tDot11fBeacon2, VHTOperation), offsetof(tDot11fIEVHTOperation,
10258 present), 0, "VHTOperation", 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010259 0, DOT11F_EID_VHTOPERATION, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010260 { offsetof(tDot11fBeacon2, VHTExtBssLoad),
10261 offsetof(tDot11fIEVHTExtBssLoad, present), 0, "VHTExtBssLoad",
10262 0, 7, 7, SigIeVHTExtBssLoad, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010263 0, DOT11F_EID_VHTEXTBSSLOAD, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010264 { offsetof(tDot11fBeacon2, ExtCap), offsetof(tDot11fIEExtCap, present), 0,
Selvaraj, Sridhar2c46d832017-03-13 17:55:48 +053010265 "ExtCap", 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010266 0, DOT11F_EID_EXTCAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010267 { offsetof(tDot11fBeacon2, OperatingMode),
10268 offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode",
10269 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010270 0, DOT11F_EID_OPERATINGMODE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010271 { offsetof(tDot11fBeacon2, WiderBWChanSwitchAnn),
10272 offsetof(tDot11fIEWiderBWChanSwitchAnn, present), 0,
10273 "WiderBWChanSwitchAnn", 0, 5, 5, SigIeWiderBWChanSwitchAnn,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010274 {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010275 { offsetof(tDot11fBeacon2, OBSSScanParameters),
10276 offsetof(tDot11fIEOBSSScanParameters, present), 0, "OBSSScanParameters",
10277 0, 16, 16, SigIeOBSSScanParameters, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010278 0, DOT11F_EID_OBSSSCANPARAMETERS, 0, 0, },
10279 { offsetof(tDot11fBeacon2, fils_indication),
10280 offsetof(tDot11fIEfils_indication, present), 0, "fils_indication",
Vignesh Viswanathan44857312017-12-19 18:06:57 +053010281 0, 6, 259, SigIefils_indication, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010282 0, DOT11F_EID_FILS_INDICATION, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010283 { offsetof(tDot11fBeacon2, Vendor1IE), offsetof(tDot11fIEVendor1IE,
10284 present), 0, "Vendor1IE", 0, 5, 5, SigIeVendor1IE, {0, 16, 24, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010285 3, DOT11F_EID_VENDOR1IE, 0, 0, },
Kapil Gupta4b2efbb2016-10-03 13:07:20 +053010286 { offsetof(tDot11fBeacon2, vendor_vht_ie),
10287 offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie",
Kiran Kumar Lokere81722632017-09-26 12:11:43 -070010288 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 4, 0},
10289 4, DOT11F_EID_VENDOR_VHT_IE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010290 { offsetof(tDot11fBeacon2, Vendor3IE), offsetof(tDot11fIEVendor3IE,
10291 present), 0, "Vendor3IE", 0, 5, 5, SigIeVendor3IE, {0, 22, 50, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010292 3, DOT11F_EID_VENDOR3IE, 0, 0, },
Nitesh Shah0ddd4f62016-05-27 10:07:32 +053010293 { offsetof(tDot11fBeacon2, hs20vendor_ie),
10294 offsetof(tDot11fIEhs20vendor_ie, present), 0, "hs20vendor_ie",
Selvaraj, Sridhar7f42b5f2016-09-16 20:23:53 +053010295 0, 7, 9, SigIehs20vendor_ie, {80, 111, 154, 16, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010296 4, DOT11F_EID_HS20VENDOR_IE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010297 { offsetof(tDot11fBeacon2, ChannelSwitchWrapper),
10298 offsetof(tDot11fIEChannelSwitchWrapper, present), 0,
Abhishek Singh37456d22016-08-29 16:05:11 +053010299 "ChannelSwitchWrapper", 0, 2, 14, SigIeChannelSwitchWrapper,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010300 {0, 0, 0, 0, 0}, 0, DOT11F_EID_CHANNELSWITCHWRAPPER, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010301 { offsetof(tDot11fBeacon2, QComVendorIE), offsetof(tDot11fIEQComVendorIE,
10302 present), 0, "QComVendorIE", 0, 7, 7, SigIeQComVendorIE,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010303 {0, 160, 198, 0, 0}, 3, DOT11F_EID_QCOMVENDORIE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010304 { offsetof(tDot11fBeacon2, ESEVersion), offsetof(tDot11fIEESEVersion,
10305 present), 0, "ESEVersion", 0, 7, 7, SigIeESEVersion, {0, 64, 150, 3, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010306 4, DOT11F_EID_ESEVERSION, 0, 0, },
Selvaraj, Sridharc2fe7a32017-02-02 19:20:16 +053010307 { offsetof(tDot11fBeacon2, QCN_IE), offsetof(tDot11fIEQCN_IE, present), 0,
10308 "QCN_IE", 0, 10, 10, SigIeQCN_IE, {140, 253, 240, 1, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010309 4, DOT11F_EID_QCN_IE, 0, 0, },
Naveen Rawatea921ce2017-09-08 15:07:58 -070010310 { offsetof(tDot11fBeacon2, he_cap), offsetof(tDot11fIEhe_cap, present), 0,
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070010311 "he_cap", 0, 23, 56, SigIehe_cap, {0, 0, 0, 0, 0},
Naveen Rawatea921ce2017-09-08 15:07:58 -070010312 0, DOT11F_EID_HE_CAP, 35, 0, },
10313 { offsetof(tDot11fBeacon2, he_op), offsetof(tDot11fIEhe_op, present), 0,
Naveen Rawate795f452017-11-13 14:47:39 -080010314 "he_op", 0, 8, 12, SigIehe_op, {0, 0, 0, 0, 0},
Naveen Rawatea921ce2017-09-08 15:07:58 -070010315 0, DOT11F_EID_HE_OP, 36, 0, },
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070010316 { offsetof(tDot11fBeacon2, bss_color_change),
10317 offsetof(tDot11fIEbss_color_change, present), 0, "bss_color_change",
Arif Hussain3a30fdc2018-02-08 20:00:41 -080010318 0, 4, 4, SigIebss_color_change, {0, 0, 0, 0, 0},
10319 0, DOT11F_EID_BSS_COLOR_CHANGE, 42, 0, },
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070010320 { offsetof(tDot11fBeacon2, mu_edca_param_set),
10321 offsetof(tDot11fIEmu_edca_param_set, present), 0, "mu_edca_param_set",
Kiran Kumar Lokere27026ae2018-03-09 11:38:19 -080010322 0, 15, 15, SigIemu_edca_param_set, {0, 0, 0, 0, 0},
10323 0, DOT11F_EID_MU_EDCA_PARAM_SET, 38, 0, },
Abhishek Singhd8c3f102017-07-29 14:10:37 +053010324 { offsetof(tDot11fBeacon2, esp_information),
10325 offsetof(tDot11fIEesp_information, present), 0, "esp_information",
10326 0, 2, 98, SigIeesp_information, {0, 0, 0, 0, 0},
10327 0, DOT11F_EID_ESP_INFORMATION, 11, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010328 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
10329
10330uint32_t dot11f_unpack_beacon2(tpAniSirGlobal pCtx,
10331 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010332 tDot11fBeacon2 *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010333{
10334 uint32_t i = 0;
10335 uint32_t status = 0;
10336 status = unpack_core(pCtx, pBuf, nBuf,
10337 FFS_Beacon2, IES_Beacon2,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010338 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010339
10340 (void)i;
10341 return status;
10342
10343} /* End dot11f_unpack_beacon2. */
10344
10345static const tFFDefn FFS_BeaconIEs[] = {
10346 { NULL, 0, 0, 0,},
10347};
10348
10349static const tIEDefn IES_BeaconIEs[] = {
10350 { offsetof(tDot11fBeaconIEs, SSID), offsetof(tDot11fIESSID, present), 0,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010351 "SSID", 0, 2, 34, SigIeSSID, {0, 0, 0, 0, 0}, 0, DOT11F_EID_SSID, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010352 { offsetof(tDot11fBeaconIEs, SuppRates), offsetof(tDot11fIESuppRates,
10353 present), 0, "SuppRates", 0, 2, 14, SigIeSuppRates, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010354 0, DOT11F_EID_SUPPRATES, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010355 { offsetof(tDot11fBeaconIEs, FHParamSet), offsetof(tDot11fIEFHParamSet,
10356 present), 0, "FHParamSet", 0, 7, 7, SigIeFHParamSet, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010357 0, DOT11F_EID_FHPARAMSET, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010358 { offsetof(tDot11fBeaconIEs, DSParams), offsetof(tDot11fIEDSParams,
10359 present), 0, "DSParams", 0, 3, 3, SigIeDSParams, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010360 0, DOT11F_EID_DSPARAMS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010361 { offsetof(tDot11fBeaconIEs, CFParams), offsetof(tDot11fIECFParams,
10362 present), 0, "CFParams", 0, 8, 8, SigIeCFParams, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010363 0, DOT11F_EID_CFPARAMS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010364 { offsetof(tDot11fBeaconIEs, IBSSParams), offsetof(tDot11fIEIBSSParams,
10365 present), 0, "IBSSParams", 0, 4, 4, SigIeIBSSParams, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010366 0, DOT11F_EID_IBSSPARAMS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010367 { offsetof(tDot11fBeaconIEs, TIM), offsetof(tDot11fIETIM, present), 0,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010368 "TIM", 0, 6, 256, SigIeTIM, {0, 0, 0, 0, 0}, 0, DOT11F_EID_TIM, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010369 { offsetof(tDot11fBeaconIEs, Country), offsetof(tDot11fIECountry,
10370 present), 0, "Country", 0, 5, 257, SigIeCountry, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010371 0, DOT11F_EID_COUNTRY, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010372 { offsetof(tDot11fBeaconIEs, FHParams), offsetof(tDot11fIEFHParams,
10373 present), 0, "FHParams", 0, 4, 4, SigIeFHParams, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010374 0, DOT11F_EID_FHPARAMS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010375 { offsetof(tDot11fBeaconIEs, FHPattTable), offsetof(tDot11fIEFHPattTable,
10376 present), 0, "FHPattTable", 0, 6, 257, SigIeFHPattTable, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010377 0, DOT11F_EID_FHPATTTABLE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010378 { offsetof(tDot11fBeaconIEs, PowerConstraints),
10379 offsetof(tDot11fIEPowerConstraints, present), 0, "PowerConstraints",
10380 0, 3, 3, SigIePowerConstraints, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010381 0, DOT11F_EID_POWERCONSTRAINTS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010382 { offsetof(tDot11fBeaconIEs, ChanSwitchAnn),
10383 offsetof(tDot11fIEChanSwitchAnn, present), 0, "ChanSwitchAnn",
10384 0, 5, 5, SigIeChanSwitchAnn, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010385 0, DOT11F_EID_CHANSWITCHANN, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010386 { offsetof(tDot11fBeaconIEs, ext_chan_switch_ann),
10387 offsetof(tDot11fIEext_chan_switch_ann, present), 0, "ext_chan_switch_ann",
10388 0, 6, 6, SigIeext_chan_switch_ann, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010389 0, DOT11F_EID_EXT_CHAN_SWITCH_ANN, 0, 0, },
Edhar, Mahesh Kumar5cd1e0e2015-11-16 14:32:33 +053010390 { offsetof(tDot11fBeaconIEs, SuppOperatingClasses),
10391 offsetof(tDot11fIESuppOperatingClasses, present), 0,
10392 "SuppOperatingClasses", 0, 3, 34, SigIeSuppOperatingClasses,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010393 {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPOPERATINGCLASSES, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010394 { offsetof(tDot11fBeaconIEs, Quiet), offsetof(tDot11fIEQuiet, present), 0,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010395 "Quiet", 0, 8, 8, SigIeQuiet, {0, 0, 0, 0, 0},
10396 0, DOT11F_EID_QUIET, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010397 { offsetof(tDot11fBeaconIEs, TPCReport), offsetof(tDot11fIETPCReport,
10398 present), 0, "TPCReport", 0, 4, 4, SigIeTPCReport, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010399 0, DOT11F_EID_TPCREPORT, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010400 { offsetof(tDot11fBeaconIEs, ERPInfo), offsetof(tDot11fIEERPInfo,
10401 present), 0, "ERPInfo", 0, 3, 3, SigIeERPInfo, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010402 0, DOT11F_EID_ERPINFO, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010403 { offsetof(tDot11fBeaconIEs, ExtSuppRates),
10404 offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates",
10405 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010406 0, DOT11F_EID_EXTSUPPRATES, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010407 { offsetof(tDot11fBeaconIEs, RSN), offsetof(tDot11fIERSN, present), 0,
Abhishek Singh7dcb85b2017-12-27 15:15:01 +053010408 "RSN", 0, 4, 132, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010409 { offsetof(tDot11fBeaconIEs, QBSSLoad), offsetof(tDot11fIEQBSSLoad,
10410 present), 0, "QBSSLoad", 0, 7, 7, SigIeQBSSLoad, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010411 0, DOT11F_EID_QBSSLOAD, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010412 { offsetof(tDot11fBeaconIEs, EDCAParamSet),
10413 offsetof(tDot11fIEEDCAParamSet, present), 0, "EDCAParamSet",
10414 0, 20, 20, SigIeEDCAParamSet, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010415 0, DOT11F_EID_EDCAPARAMSET, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010416 { offsetof(tDot11fBeaconIEs, QOSCapsAp), offsetof(tDot11fIEQOSCapsAp,
10417 present), 0, "QOSCapsAp", 0, 3, 3, SigIeQOSCapsAp, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010418 0, DOT11F_EID_QOSCAPSAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010419 { offsetof(tDot11fBeaconIEs, APChannelReport),
10420 offsetof(tDot11fIEAPChannelReport, present), 0, "APChannelReport",
10421 0, 3, 53, SigIeAPChannelReport, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010422 0, DOT11F_EID_APCHANNELREPORT, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010423 { offsetof(tDot11fBeaconIEs, RRMEnabledCap),
10424 offsetof(tDot11fIERRMEnabledCap, present), 0, "RRMEnabledCap",
10425 0, 7, 7, SigIeRRMEnabledCap, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010426 0, DOT11F_EID_RRMENABLEDCAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010427 { offsetof(tDot11fBeaconIEs, MobilityDomain),
10428 offsetof(tDot11fIEMobilityDomain, present), 0, "MobilityDomain",
10429 0, 5, 5, SigIeMobilityDomain, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010430 0, DOT11F_EID_MOBILITYDOMAIN, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010431 { offsetof(tDot11fBeaconIEs, WPA), offsetof(tDot11fIEWPA, present), 0,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010432 "WPA", 0, 8, 50, SigIeWPA, {0, 80, 242, 1, 0}, 4, DOT11F_EID_WPA, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010433 { offsetof(tDot11fBeaconIEs, HTCaps), offsetof(tDot11fIEHTCaps, present),
10434 0, "HTCaps", 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010435 0, DOT11F_EID_HTCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010436 { offsetof(tDot11fBeaconIEs, HTInfo), offsetof(tDot11fIEHTInfo, present),
10437 0, "HTInfo", 0, 24, 56, SigIeHTInfo, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010438 0, DOT11F_EID_HTINFO, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010439 { offsetof(tDot11fBeaconIEs, sec_chan_offset_ele),
10440 offsetof(tDot11fIEsec_chan_offset_ele, present), 0, "sec_chan_offset_ele",
10441 0, 3, 3, SigIesec_chan_offset_ele, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010442 0, DOT11F_EID_SEC_CHAN_OFFSET_ELE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010443 { offsetof(tDot11fBeaconIEs, WMMInfoAp), offsetof(tDot11fIEWMMInfoAp,
10444 present), 0, "WMMInfoAp", 0, 9, 9, SigIeWMMInfoAp, {0, 80, 242, 2, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010445 5, DOT11F_EID_WMMINFOAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010446 { offsetof(tDot11fBeaconIEs, WMMParams), offsetof(tDot11fIEWMMParams,
10447 present), 0, "WMMParams", 0, 26, 26, SigIeWMMParams, {0, 80, 242, 2, 1},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010448 5, DOT11F_EID_WMMPARAMS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010449 { offsetof(tDot11fBeaconIEs, WMMCaps), offsetof(tDot11fIEWMMCaps,
10450 present), 0, "WMMCaps", 0, 9, 9, SigIeWMMCaps, {0, 80, 242, 2, 5},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010451 5, DOT11F_EID_WMMCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010452 { offsetof(tDot11fBeaconIEs, WAPI), offsetof(tDot11fIEWAPI, present), 0,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010453 "WAPI", 0, 14, 112, SigIeWAPI, {0, 0, 0, 0, 0},
10454 0, DOT11F_EID_WAPI, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010455 { offsetof(tDot11fBeaconIEs, ESEVersion), offsetof(tDot11fIEESEVersion,
10456 present), 0, "ESEVersion", 0, 7, 7, SigIeESEVersion, {0, 64, 150, 3, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010457 4, DOT11F_EID_ESEVERSION, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010458 { offsetof(tDot11fBeaconIEs, ESERadMgmtCap),
10459 offsetof(tDot11fIEESERadMgmtCap, present), 0, "ESERadMgmtCap",
10460 0, 8, 8, SigIeESERadMgmtCap, {0, 64, 150, 1, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010461 4, DOT11F_EID_ESERADMGMTCAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010462 { offsetof(tDot11fBeaconIEs, ESETrafStrmMet),
10463 offsetof(tDot11fIEESETrafStrmMet, present), 0, "ESETrafStrmMet",
10464 0, 10, 10, SigIeESETrafStrmMet, {0, 64, 150, 7, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010465 4, DOT11F_EID_ESETRAFSTRMMET, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010466 { offsetof(tDot11fBeaconIEs, ESETxmitPower),
10467 offsetof(tDot11fIEESETxmitPower, present), 0, "ESETxmitPower",
10468 0, 8, 8, SigIeESETxmitPower, {0, 64, 150, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010469 4, DOT11F_EID_ESETXMITPOWER, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010470 { offsetof(tDot11fBeaconIEs, WscBeaconProbeRes),
10471 offsetof(tDot11fIEWscBeaconProbeRes, present), 0, "WscBeaconProbeRes",
10472 0, 6, 319, SigIeWscBeaconProbeRes, {0, 80, 242, 4, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010473 4, DOT11F_EID_WSCBEACONPROBERES, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010474 { offsetof(tDot11fBeaconIEs, P2PBeaconProbeRes),
10475 offsetof(tDot11fIEP2PBeaconProbeRes, present), 0, "P2PBeaconProbeRes",
10476 0, 6, 1150, SigIeP2PBeaconProbeRes, {80, 111, 154, 9, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010477 4, DOT11F_EID_P2PBEACONPROBERES, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010478 { offsetof(tDot11fBeaconIEs, VHTCaps), offsetof(tDot11fIEVHTCaps,
10479 present), 0, "VHTCaps", 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010480 0, DOT11F_EID_VHTCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010481 { offsetof(tDot11fBeaconIEs, VHTOperation),
10482 offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation",
10483 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010484 0, DOT11F_EID_VHTOPERATION, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010485 { offsetof(tDot11fBeaconIEs, VHTExtBssLoad),
10486 offsetof(tDot11fIEVHTExtBssLoad, present), 0, "VHTExtBssLoad",
10487 0, 7, 7, SigIeVHTExtBssLoad, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010488 0, DOT11F_EID_VHTEXTBSSLOAD, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010489 { offsetof(tDot11fBeaconIEs, ExtCap), offsetof(tDot11fIEExtCap, present),
Selvaraj, Sridhar2c46d832017-03-13 17:55:48 +053010490 0, "ExtCap", 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010491 0, DOT11F_EID_EXTCAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010492 { offsetof(tDot11fBeaconIEs, OperatingMode),
10493 offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode",
10494 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010495 0, DOT11F_EID_OPERATINGMODE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010496 { offsetof(tDot11fBeaconIEs, WiderBWChanSwitchAnn),
10497 offsetof(tDot11fIEWiderBWChanSwitchAnn, present), 0,
10498 "WiderBWChanSwitchAnn", 0, 5, 5, SigIeWiderBWChanSwitchAnn,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010499 {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010500 { offsetof(tDot11fBeaconIEs, OBSSScanParameters),
10501 offsetof(tDot11fIEOBSSScanParameters, present), 0, "OBSSScanParameters",
10502 0, 16, 16, SigIeOBSSScanParameters, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010503 0, DOT11F_EID_OBSSSCANPARAMETERS, 0, 0, },
10504 { offsetof(tDot11fBeaconIEs, fils_indication),
10505 offsetof(tDot11fIEfils_indication, present), 0, "fils_indication",
Vignesh Viswanathan44857312017-12-19 18:06:57 +053010506 0, 6, 259, SigIefils_indication, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010507 0, DOT11F_EID_FILS_INDICATION, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010508 { offsetof(tDot11fBeaconIEs, Vendor1IE), offsetof(tDot11fIEVendor1IE,
10509 present), 0, "Vendor1IE", 0, 5, 5, SigIeVendor1IE, {0, 16, 24, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010510 3, DOT11F_EID_VENDOR1IE, 0, 0, },
Kapil Gupta4b2efbb2016-10-03 13:07:20 +053010511 { offsetof(tDot11fBeaconIEs, vendor_vht_ie),
10512 offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie",
Kiran Kumar Lokere81722632017-09-26 12:11:43 -070010513 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 4, 0},
10514 4, DOT11F_EID_VENDOR_VHT_IE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010515 { offsetof(tDot11fBeaconIEs, Vendor3IE), offsetof(tDot11fIEVendor3IE,
10516 present), 0, "Vendor3IE", 0, 5, 5, SigIeVendor3IE, {0, 22, 50, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010517 3, DOT11F_EID_VENDOR3IE, 0, 0, },
Nitesh Shah0ddd4f62016-05-27 10:07:32 +053010518 { offsetof(tDot11fBeaconIEs, hs20vendor_ie),
10519 offsetof(tDot11fIEhs20vendor_ie, present), 0, "hs20vendor_ie",
Selvaraj, Sridhar7f42b5f2016-09-16 20:23:53 +053010520 0, 7, 9, SigIehs20vendor_ie, {80, 111, 154, 16, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010521 4, DOT11F_EID_HS20VENDOR_IE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010522 { offsetof(tDot11fBeaconIEs, ChannelSwitchWrapper),
10523 offsetof(tDot11fIEChannelSwitchWrapper, present), 0,
Abhishek Singh37456d22016-08-29 16:05:11 +053010524 "ChannelSwitchWrapper", 0, 2, 14, SigIeChannelSwitchWrapper,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010525 {0, 0, 0, 0, 0}, 0, DOT11F_EID_CHANNELSWITCHWRAPPER, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010526 { offsetof(tDot11fBeaconIEs, QComVendorIE),
10527 offsetof(tDot11fIEQComVendorIE, present), 0, "QComVendorIE",
10528 0, 7, 7, SigIeQComVendorIE, {0, 160, 198, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010529 3, DOT11F_EID_QCOMVENDORIE, 0, 0, },
Selvaraj, Sridharba726cb2016-07-22 13:41:03 +053010530 { offsetof(tDot11fBeaconIEs, MBO_IE), offsetof(tDot11fIEMBO_IE, present),
Abhishek Singh951eed82017-07-06 16:53:19 +053010531 0, "MBO_IE", 0, 6, 295, SigIeMBO_IE, {80, 111, 154, 22, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010532 4, DOT11F_EID_MBO_IE, 0, 0, },
Selvaraj, Sridharc2fe7a32017-02-02 19:20:16 +053010533 { offsetof(tDot11fBeaconIEs, QCN_IE), offsetof(tDot11fIEQCN_IE, present),
10534 0, "QCN_IE", 0, 10, 10, SigIeQCN_IE, {140, 253, 240, 1, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010535 4, DOT11F_EID_QCN_IE, 0, 0, },
Naveen Rawatea921ce2017-09-08 15:07:58 -070010536 { offsetof(tDot11fBeaconIEs, he_cap), offsetof(tDot11fIEhe_cap, present),
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070010537 0, "he_cap", 0, 23, 56, SigIehe_cap, {0, 0, 0, 0, 0},
Naveen Rawatea921ce2017-09-08 15:07:58 -070010538 0, DOT11F_EID_HE_CAP, 35, 0, },
10539 { offsetof(tDot11fBeaconIEs, he_op), offsetof(tDot11fIEhe_op, present), 0,
Naveen Rawate795f452017-11-13 14:47:39 -080010540 "he_op", 0, 8, 12, SigIehe_op, {0, 0, 0, 0, 0},
Naveen Rawatea921ce2017-09-08 15:07:58 -070010541 0, DOT11F_EID_HE_OP, 36, 0, },
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070010542 { offsetof(tDot11fBeaconIEs, bss_color_change),
10543 offsetof(tDot11fIEbss_color_change, present), 0, "bss_color_change",
Arif Hussain3a30fdc2018-02-08 20:00:41 -080010544 0, 4, 4, SigIebss_color_change, {0, 0, 0, 0, 0},
10545 0, DOT11F_EID_BSS_COLOR_CHANGE, 42, 0, },
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070010546 { offsetof(tDot11fBeaconIEs, mu_edca_param_set),
10547 offsetof(tDot11fIEmu_edca_param_set, present), 0, "mu_edca_param_set",
Kiran Kumar Lokere27026ae2018-03-09 11:38:19 -080010548 0, 15, 15, SigIemu_edca_param_set, {0, 0, 0, 0, 0},
10549 0, DOT11F_EID_MU_EDCA_PARAM_SET, 38, 0, },
Abhishek Singhd8c3f102017-07-29 14:10:37 +053010550 { offsetof(tDot11fBeaconIEs, esp_information),
10551 offsetof(tDot11fIEesp_information, present), 0, "esp_information",
10552 0, 2, 98, SigIeesp_information, {0, 0, 0, 0, 0},
10553 0, DOT11F_EID_ESP_INFORMATION, 11, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010554 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
10555
10556uint32_t dot11f_unpack_beacon_i_es(tpAniSirGlobal pCtx,
10557 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010558 tDot11fBeaconIEs *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010559{
10560 uint32_t i = 0;
10561 uint32_t status = 0;
10562 status = unpack_core(pCtx, pBuf, nBuf,
10563 FFS_BeaconIEs, IES_BeaconIEs,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010564 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010565
10566 (void)i;
10567 return status;
10568
10569} /* End dot11f_unpack_beacon_i_es. */
10570
10571static const tFFDefn FFS_ChannelSwitch[] = {
10572 { "Category", offsetof(tDot11fChannelSwitch, Category), SigFfCategory,
10573 DOT11F_FF_CATEGORY_LEN, },
10574 { "Action", offsetof(tDot11fChannelSwitch, Action), SigFfAction,
10575 DOT11F_FF_ACTION_LEN, },
10576 { NULL, 0, 0, 0,},
10577};
10578
10579static const tIEDefn IES_ChannelSwitch[] = {
10580 { offsetof(tDot11fChannelSwitch, ChanSwitchAnn),
10581 offsetof(tDot11fIEChanSwitchAnn, present), 0, "ChanSwitchAnn",
10582 0, 5, 5, SigIeChanSwitchAnn, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010583 0, DOT11F_EID_CHANSWITCHANN, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010584 { offsetof(tDot11fChannelSwitch, sec_chan_offset_ele),
10585 offsetof(tDot11fIEsec_chan_offset_ele, present), 0, "sec_chan_offset_ele",
10586 0, 3, 3, SigIesec_chan_offset_ele, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010587 0, DOT11F_EID_SEC_CHAN_OFFSET_ELE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010588 { offsetof(tDot11fChannelSwitch, WiderBWChanSwitchAnn),
10589 offsetof(tDot11fIEWiderBWChanSwitchAnn, present), 0,
10590 "WiderBWChanSwitchAnn", 0, 5, 5, SigIeWiderBWChanSwitchAnn,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010591 {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010592 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
10593
10594uint32_t dot11f_unpack_channel_switch(tpAniSirGlobal pCtx,
10595 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010596 tDot11fChannelSwitch *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010597{
10598 uint32_t i = 0;
10599 uint32_t status = 0;
10600 status = unpack_core(pCtx, pBuf, nBuf,
10601 FFS_ChannelSwitch, IES_ChannelSwitch,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010602 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010603
10604 (void)i;
10605 return status;
10606
10607} /* End dot11f_unpack_channel_switch. */
10608
10609static const tFFDefn FFS_DeAuth[] = {
10610 { "Reason", offsetof(tDot11fDeAuth, Reason), SigFfReason,
10611 DOT11F_FF_REASON_LEN, },
10612 { NULL, 0, 0, 0,},
10613};
10614
10615static const tIEDefn IES_DeAuth[] = {
10616 { offsetof(tDot11fDeAuth, P2PDeAuth), offsetof(tDot11fIEP2PDeAuth,
10617 present), 0, "P2PDeAuth", 0, 6, 10, SigIeP2PDeAuth, {80, 111, 154, 9, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010618 4, DOT11F_EID_P2PDEAUTH, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010619 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
10620
10621uint32_t dot11f_unpack_de_auth(tpAniSirGlobal pCtx,
10622 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010623 tDot11fDeAuth *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010624{
10625 uint32_t i = 0;
10626 uint32_t status = 0;
10627 status = unpack_core(pCtx, pBuf, nBuf,
10628 FFS_DeAuth, IES_DeAuth,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010629 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010630
10631 (void)i;
10632 return status;
10633
10634} /* End dot11f_unpack_de_auth. */
10635
10636static const tFFDefn FFS_DelTS[] = {
10637 { "Category", offsetof(tDot11fDelTS, Category), SigFfCategory,
10638 DOT11F_FF_CATEGORY_LEN, },
10639 { "Action", offsetof(tDot11fDelTS, Action), SigFfAction,
10640 DOT11F_FF_ACTION_LEN, },
10641 { "TSInfo", offsetof(tDot11fDelTS, TSInfo), SigFfTSInfo,
10642 DOT11F_FF_TSINFO_LEN, },
10643 { "Reason", offsetof(tDot11fDelTS, Reason), SigFfReason,
10644 DOT11F_FF_REASON_LEN, },
10645 { NULL, 0, 0, 0,},
10646};
10647
10648static const tIEDefn IES_DelTS[] = {
10649 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
10650
10651uint32_t dot11f_unpack_del_ts(tpAniSirGlobal pCtx,
10652 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010653 tDot11fDelTS *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010654{
10655 uint32_t i = 0;
10656 uint32_t status = 0;
10657 status = unpack_core(pCtx, pBuf, nBuf,
10658 FFS_DelTS, IES_DelTS,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010659 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010660
10661 (void)i;
10662 return status;
10663
10664} /* End dot11f_unpack_del_ts. */
10665
10666static const tFFDefn FFS_Disassociation[] = {
10667 { "Reason", offsetof(tDot11fDisassociation, Reason), SigFfReason,
10668 DOT11F_FF_REASON_LEN, },
10669 { NULL, 0, 0, 0,},
10670};
10671
10672static const tIEDefn IES_Disassociation[] = {
10673 { offsetof(tDot11fDisassociation, P2PDisAssoc),
10674 offsetof(tDot11fIEP2PDisAssoc, present), 0, "P2PDisAssoc",
10675 0, 6, 10, SigIeP2PDisAssoc, {80, 111, 154, 9, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010676 4, DOT11F_EID_P2PDISASSOC, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010677 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
10678
10679uint32_t dot11f_unpack_disassociation(tpAniSirGlobal pCtx,
10680 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010681 tDot11fDisassociation *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010682{
10683 uint32_t i = 0;
10684 uint32_t status = 0;
10685 status = unpack_core(pCtx, pBuf, nBuf,
10686 FFS_Disassociation, IES_Disassociation,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010687 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010688
10689 (void)i;
10690 return status;
10691
10692} /* End dot11f_unpack_disassociation. */
10693
10694static const tFFDefn FFS_LinkMeasurementReport[] = {
10695 { "Category", offsetof(tDot11fLinkMeasurementReport, Category),
10696 SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
10697 { "Action", offsetof(tDot11fLinkMeasurementReport, Action), SigFfAction,
10698 DOT11F_FF_ACTION_LEN, },
10699 { "DialogToken", offsetof(tDot11fLinkMeasurementReport, DialogToken),
10700 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
10701 { "TPCEleID", offsetof(tDot11fLinkMeasurementReport, TPCEleID),
10702 SigFfTPCEleID, DOT11F_FF_TPCELEID_LEN, },
10703 { "TPCEleLen", offsetof(tDot11fLinkMeasurementReport, TPCEleLen),
10704 SigFfTPCEleLen, DOT11F_FF_TPCELELEN_LEN, },
10705 { "TxPower", offsetof(tDot11fLinkMeasurementReport, TxPower),
10706 SigFfTxPower, DOT11F_FF_TXPOWER_LEN, },
10707 { "LinkMargin", offsetof(tDot11fLinkMeasurementReport, LinkMargin),
10708 SigFfLinkMargin, DOT11F_FF_LINKMARGIN_LEN, },
10709 { "RxAntennaId", offsetof(tDot11fLinkMeasurementReport, RxAntennaId),
10710 SigFfRxAntennaId, DOT11F_FF_RXANTENNAID_LEN, },
10711 { "TxAntennaId", offsetof(tDot11fLinkMeasurementReport, TxAntennaId),
10712 SigFfTxAntennaId, DOT11F_FF_TXANTENNAID_LEN, },
10713 { "RCPI", offsetof(tDot11fLinkMeasurementReport, RCPI), SigFfRCPI,
10714 DOT11F_FF_RCPI_LEN, },
10715 { "RSNI", offsetof(tDot11fLinkMeasurementReport, RSNI), SigFfRSNI,
10716 DOT11F_FF_RSNI_LEN, },
10717 { NULL, 0, 0, 0,},
10718};
10719
10720static const tIEDefn IES_LinkMeasurementReport[] = {
10721 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
10722
10723uint32_t dot11f_unpack_link_measurement_report(tpAniSirGlobal pCtx,
10724 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010725 tDot11fLinkMeasurementReport *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010726{
10727 uint32_t i = 0;
10728 uint32_t status = 0;
10729 status = unpack_core(pCtx, pBuf, nBuf,
10730 FFS_LinkMeasurementReport, IES_LinkMeasurementReport,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010731 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010732
10733 (void)i;
10734 return status;
10735
10736} /* End dot11f_unpack_link_measurement_report. */
10737
10738static const tFFDefn FFS_LinkMeasurementRequest[] = {
10739 { "Category", offsetof(tDot11fLinkMeasurementRequest, Category),
10740 SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
10741 { "Action", offsetof(tDot11fLinkMeasurementRequest, Action), SigFfAction,
10742 DOT11F_FF_ACTION_LEN, },
10743 { "DialogToken", offsetof(tDot11fLinkMeasurementRequest, DialogToken),
10744 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
10745 { "TxPower", offsetof(tDot11fLinkMeasurementRequest, TxPower),
10746 SigFfTxPower, DOT11F_FF_TXPOWER_LEN, },
10747 { "MaxTxPower", offsetof(tDot11fLinkMeasurementRequest, MaxTxPower),
10748 SigFfMaxTxPower, DOT11F_FF_MAXTXPOWER_LEN, },
10749 { NULL, 0, 0, 0,},
10750};
10751
10752static const tIEDefn IES_LinkMeasurementRequest[] = {
10753 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
10754
10755uint32_t dot11f_unpack_link_measurement_request(tpAniSirGlobal pCtx,
10756 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010757 tDot11fLinkMeasurementRequest *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010758{
10759 uint32_t i = 0;
10760 uint32_t status = 0;
10761 status = unpack_core(pCtx, pBuf, nBuf,
10762 FFS_LinkMeasurementRequest, IES_LinkMeasurementRequest,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010763 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010764
10765 (void)i;
10766 return status;
10767
10768} /* End dot11f_unpack_link_measurement_request. */
10769
10770static const tFFDefn FFS_MeasurementReport[] = {
10771 { "Category", offsetof(tDot11fMeasurementReport, Category), SigFfCategory,
10772 DOT11F_FF_CATEGORY_LEN, },
10773 { "Action", offsetof(tDot11fMeasurementReport, Action), SigFfAction,
10774 DOT11F_FF_ACTION_LEN, },
10775 { "DialogToken", offsetof(tDot11fMeasurementReport, DialogToken),
10776 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
10777 { NULL, 0, 0, 0,},
10778};
10779
10780static const tIEDefn IES_MeasurementReport[] = {
10781 { offsetof(tDot11fMeasurementReport, MeasurementReport),
10782 offsetof(tDot11fIEMeasurementReport, present), 0, "MeasurementReport",
10783 0, 5, 31, SigIeMeasurementReport, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010784 0, DOT11F_EID_MEASUREMENTREPORT, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010785 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
10786
10787uint32_t dot11f_unpack_measurement_report(tpAniSirGlobal pCtx,
10788 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010789 tDot11fMeasurementReport *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010790{
10791 uint32_t i = 0;
10792 uint32_t status = 0;
10793 status = unpack_core(pCtx, pBuf, nBuf,
10794 FFS_MeasurementReport, IES_MeasurementReport,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010795 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010796
10797 (void)i;
10798 return status;
10799
10800} /* End dot11f_unpack_measurement_report. */
10801
10802static const tFFDefn FFS_MeasurementRequest[] = {
10803 { "Category", offsetof(tDot11fMeasurementRequest, Category),
10804 SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
10805 { "Action", offsetof(tDot11fMeasurementRequest, Action), SigFfAction,
10806 DOT11F_FF_ACTION_LEN, },
10807 { "DialogToken", offsetof(tDot11fMeasurementRequest, DialogToken),
10808 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
10809 { NULL, 0, 0, 0,},
10810};
10811
10812static const tIEDefn IES_MeasurementRequest[] = {
10813 { offsetof(tDot11fMeasurementRequest, MeasurementRequest),
10814 offsetof(tDot11fIEMeasurementRequest, present),
10815 offsetof(tDot11fMeasurementRequest, num_MeasurementRequest),
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080010816 "MeasurementRequest", 4, 6, 18, SigIeMeasurementRequest, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010817 0, DOT11F_EID_MEASUREMENTREQUEST, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010818 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
10819
10820uint32_t dot11f_unpack_measurement_request(tpAniSirGlobal pCtx,
10821 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010822 tDot11fMeasurementRequest *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010823{
10824 uint32_t i = 0;
10825 uint32_t status = 0;
10826 status = unpack_core(pCtx, pBuf, nBuf,
10827 FFS_MeasurementRequest, IES_MeasurementRequest,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010828 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010829
10830 (void)i;
10831 return status;
10832
10833} /* End dot11f_unpack_measurement_request. */
10834
10835static const tFFDefn FFS_NeighborReportRequest[] = {
10836 { "Category", offsetof(tDot11fNeighborReportRequest, Category),
10837 SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
10838 { "Action", offsetof(tDot11fNeighborReportRequest, Action), SigFfAction,
10839 DOT11F_FF_ACTION_LEN, },
10840 { "DialogToken", offsetof(tDot11fNeighborReportRequest, DialogToken),
10841 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
10842 { NULL, 0, 0, 0,},
10843};
10844
10845static const tIEDefn IES_NeighborReportRequest[] = {
10846 { offsetof(tDot11fNeighborReportRequest, SSID), offsetof(tDot11fIESSID,
10847 present), 0, "SSID", 0, 2, 34, SigIeSSID, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010848 0, DOT11F_EID_SSID, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010849 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
10850
10851uint32_t dot11f_unpack_neighbor_report_request(tpAniSirGlobal pCtx,
10852 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010853 tDot11fNeighborReportRequest *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010854{
10855 uint32_t i = 0;
10856 uint32_t status = 0;
10857 status = unpack_core(pCtx, pBuf, nBuf,
10858 FFS_NeighborReportRequest, IES_NeighborReportRequest,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010859 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010860
10861 (void)i;
10862 return status;
10863
10864} /* End dot11f_unpack_neighbor_report_request. */
10865
10866static const tFFDefn FFS_NeighborReportResponse[] = {
10867 { "Category", offsetof(tDot11fNeighborReportResponse, Category),
10868 SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
10869 { "Action", offsetof(tDot11fNeighborReportResponse, Action), SigFfAction,
10870 DOT11F_FF_ACTION_LEN, },
10871 { "DialogToken", offsetof(tDot11fNeighborReportResponse, DialogToken),
10872 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
10873 { NULL, 0, 0, 0,},
10874};
10875
10876static const tIEDefn IES_NeighborReportResponse[] = {
10877 { offsetof(tDot11fNeighborReportResponse, NeighborReport),
10878 offsetof(tDot11fIENeighborReport, present),
10879 offsetof(tDot11fNeighborReportResponse, num_NeighborReport),
10880 "NeighborReport", 15, 15, 548, SigIeNeighborReport, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010881 0, DOT11F_EID_NEIGHBORREPORT, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010882 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
10883
10884uint32_t dot11f_unpack_neighbor_report_response(tpAniSirGlobal pCtx,
10885 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010886 tDot11fNeighborReportResponse *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010887{
10888 uint32_t i = 0;
10889 uint32_t status = 0;
10890 status = unpack_core(pCtx, pBuf, nBuf,
10891 FFS_NeighborReportResponse, IES_NeighborReportResponse,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010892 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010893
10894 (void)i;
10895 return status;
10896
10897} /* End dot11f_unpack_neighbor_report_response. */
10898
10899static const tFFDefn FFS_OperatingMode[] = {
10900 { "Category", offsetof(tDot11fOperatingMode, Category), SigFfCategory,
10901 DOT11F_FF_CATEGORY_LEN, },
10902 { "Action", offsetof(tDot11fOperatingMode, Action), SigFfAction,
10903 DOT11F_FF_ACTION_LEN, },
10904 { "OperatingMode", offsetof(tDot11fOperatingMode, OperatingMode),
10905 SigFfOperatingMode, DOT11F_FF_OPERATINGMODE_LEN, },
10906 { NULL, 0, 0, 0,},
10907};
10908
10909static const tIEDefn IES_OperatingMode[] = {
10910 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
10911
10912uint32_t dot11f_unpack_operating_mode(tpAniSirGlobal pCtx,
10913 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010914 tDot11fOperatingMode *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010915{
10916 uint32_t i = 0;
10917 uint32_t status = 0;
10918 status = unpack_core(pCtx, pBuf, nBuf,
10919 FFS_OperatingMode, IES_OperatingMode,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010920 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010921
10922 (void)i;
10923 return status;
10924
10925} /* End dot11f_unpack_operating_mode. */
10926
10927static const tFFDefn FFS_ProbeRequest[] = {
10928 { NULL, 0, 0, 0,},
10929};
10930
10931static const tIEDefn IES_ProbeRequest[] = {
10932 { offsetof(tDot11fProbeRequest, SSID), offsetof(tDot11fIESSID, present), 0,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010933 "SSID", 0, 2, 34, SigIeSSID, {0, 0, 0, 0, 0}, 0, DOT11F_EID_SSID, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010934 { offsetof(tDot11fProbeRequest, SuppRates), offsetof(tDot11fIESuppRates,
10935 present), 0, "SuppRates", 0, 2, 14, SigIeSuppRates, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010936 0, DOT11F_EID_SUPPRATES, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010937 { offsetof(tDot11fProbeRequest, RequestedInfo),
10938 offsetof(tDot11fIERequestedInfo, present), 0, "RequestedInfo",
10939 0, 2, 257, SigIeRequestedInfo, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010940 0, DOT11F_EID_REQUESTEDINFO, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010941 { offsetof(tDot11fProbeRequest, ExtSuppRates),
10942 offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates",
10943 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010944 0, DOT11F_EID_EXTSUPPRATES, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010945 { offsetof(tDot11fProbeRequest, DSParams), offsetof(tDot11fIEDSParams,
10946 present), 0, "DSParams", 0, 3, 3, SigIeDSParams, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010947 0, DOT11F_EID_DSPARAMS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010948 { offsetof(tDot11fProbeRequest, HTCaps), offsetof(tDot11fIEHTCaps,
10949 present), 0, "HTCaps", 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010950 0, DOT11F_EID_HTCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010951 { offsetof(tDot11fProbeRequest, WscProbeReq),
10952 offsetof(tDot11fIEWscProbeReq, present), 0, "WscProbeReq",
10953 0, 6, 286, SigIeWscProbeReq, {0, 80, 242, 4, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010954 4, DOT11F_EID_WSCPROBEREQ, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010955 { offsetof(tDot11fProbeRequest, WFATPC), offsetof(tDot11fIEWFATPC,
10956 present), 0, "WFATPC", 0, 9, 9, SigIeWFATPC, {0, 80, 242, 8, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010957 5, DOT11F_EID_WFATPC, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010958 { offsetof(tDot11fProbeRequest, P2PProbeReq),
10959 offsetof(tDot11fIEP2PProbeReq, present), 0, "P2PProbeReq",
10960 0, 6, 43, SigIeP2PProbeReq, {80, 111, 154, 9, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010961 4, DOT11F_EID_P2PPROBEREQ, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010962 { offsetof(tDot11fProbeRequest, VHTCaps), offsetof(tDot11fIEVHTCaps,
10963 present), 0, "VHTCaps", 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010964 0, DOT11F_EID_VHTCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010965 { offsetof(tDot11fProbeRequest, ExtCap), offsetof(tDot11fIEExtCap,
Selvaraj, Sridhar2c46d832017-03-13 17:55:48 +053010966 present), 0, "ExtCap", 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010967 0, DOT11F_EID_EXTCAP, 0, 0, },
Selvaraj, Sridharc2fe7a32017-02-02 19:20:16 +053010968 { offsetof(tDot11fProbeRequest, QCN_IE), offsetof(tDot11fIEQCN_IE,
10969 present), 0, "QCN_IE", 0, 10, 10, SigIeQCN_IE, {140, 253, 240, 1, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010970 4, DOT11F_EID_QCN_IE, 0, 0, },
Naveen Rawatea921ce2017-09-08 15:07:58 -070010971 { offsetof(tDot11fProbeRequest, he_cap), offsetof(tDot11fIEhe_cap,
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070010972 present), 0, "he_cap", 0, 23, 56, SigIehe_cap, {0, 0, 0, 0, 0},
Naveen Rawatea921ce2017-09-08 15:07:58 -070010973 0, DOT11F_EID_HE_CAP, 35, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010974 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
10975
10976uint32_t dot11f_unpack_probe_request(tpAniSirGlobal pCtx,
10977 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010978 tDot11fProbeRequest *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010979{
10980 uint32_t i = 0;
10981 uint32_t status = 0;
10982 status = unpack_core(pCtx, pBuf, nBuf,
10983 FFS_ProbeRequest, IES_ProbeRequest,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053010984 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080010985
10986 (void)i;
10987 return status;
10988
10989} /* End dot11f_unpack_probe_request. */
10990
10991static const tFFDefn FFS_ProbeResponse[] = {
10992 { "TimeStamp", offsetof(tDot11fProbeResponse, TimeStamp), SigFfTimeStamp,
10993 DOT11F_FF_TIMESTAMP_LEN, },
10994 { "BeaconInterval", offsetof(tDot11fProbeResponse, BeaconInterval),
10995 SigFfBeaconInterval, DOT11F_FF_BEACONINTERVAL_LEN, },
10996 { "Capabilities", offsetof(tDot11fProbeResponse, Capabilities),
10997 SigFfCapabilities, DOT11F_FF_CAPABILITIES_LEN, },
10998 { NULL, 0, 0, 0,},
10999};
11000
11001static const tIEDefn IES_ProbeResponse[] = {
11002 { offsetof(tDot11fProbeResponse, SSID), offsetof(tDot11fIESSID, present),
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011003 0, "SSID", 0, 2, 34, SigIeSSID, {0, 0, 0, 0, 0},
11004 0, DOT11F_EID_SSID, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011005 { offsetof(tDot11fProbeResponse, SuppRates), offsetof(tDot11fIESuppRates,
11006 present), 0, "SuppRates", 0, 2, 14, SigIeSuppRates, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011007 0, DOT11F_EID_SUPPRATES, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011008 { offsetof(tDot11fProbeResponse, FHParamSet),
11009 offsetof(tDot11fIEFHParamSet, present), 0, "FHParamSet",
11010 0, 7, 7, SigIeFHParamSet, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011011 0, DOT11F_EID_FHPARAMSET, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011012 { offsetof(tDot11fProbeResponse, DSParams), offsetof(tDot11fIEDSParams,
11013 present), 0, "DSParams", 0, 3, 3, SigIeDSParams, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011014 0, DOT11F_EID_DSPARAMS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011015 { offsetof(tDot11fProbeResponse, CFParams), offsetof(tDot11fIECFParams,
11016 present), 0, "CFParams", 0, 8, 8, SigIeCFParams, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011017 0, DOT11F_EID_CFPARAMS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011018 { offsetof(tDot11fProbeResponse, IBSSParams),
11019 offsetof(tDot11fIEIBSSParams, present), 0, "IBSSParams",
11020 0, 4, 4, SigIeIBSSParams, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011021 0, DOT11F_EID_IBSSPARAMS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011022 { offsetof(tDot11fProbeResponse, Country), offsetof(tDot11fIECountry,
11023 present), 0, "Country", 0, 5, 257, SigIeCountry, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011024 0, DOT11F_EID_COUNTRY, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011025 { offsetof(tDot11fProbeResponse, FHParams), offsetof(tDot11fIEFHParams,
11026 present), 0, "FHParams", 0, 4, 4, SigIeFHParams, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011027 0, DOT11F_EID_FHPARAMS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011028 { offsetof(tDot11fProbeResponse, FHPattTable),
11029 offsetof(tDot11fIEFHPattTable, present), 0, "FHPattTable",
11030 0, 6, 257, SigIeFHPattTable, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011031 0, DOT11F_EID_FHPATTTABLE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011032 { offsetof(tDot11fProbeResponse, PowerConstraints),
11033 offsetof(tDot11fIEPowerConstraints, present), 0, "PowerConstraints",
11034 0, 3, 3, SigIePowerConstraints, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011035 0, DOT11F_EID_POWERCONSTRAINTS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011036 { offsetof(tDot11fProbeResponse, ChanSwitchAnn),
11037 offsetof(tDot11fIEChanSwitchAnn, present), 0, "ChanSwitchAnn",
11038 0, 5, 5, SigIeChanSwitchAnn, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011039 0, DOT11F_EID_CHANSWITCHANN, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011040 { offsetof(tDot11fProbeResponse, ext_chan_switch_ann),
11041 offsetof(tDot11fIEext_chan_switch_ann, present), 0, "ext_chan_switch_ann",
11042 0, 6, 6, SigIeext_chan_switch_ann, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011043 0, DOT11F_EID_EXT_CHAN_SWITCH_ANN, 0, 0, },
Edhar, Mahesh Kumar5cd1e0e2015-11-16 14:32:33 +053011044 { offsetof(tDot11fProbeResponse, SuppOperatingClasses),
11045 offsetof(tDot11fIESuppOperatingClasses, present), 0,
11046 "SuppOperatingClasses", 0, 3, 34, SigIeSuppOperatingClasses,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011047 {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPOPERATINGCLASSES, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011048 { offsetof(tDot11fProbeResponse, Quiet), offsetof(tDot11fIEQuiet,
11049 present), 0, "Quiet", 0, 8, 8, SigIeQuiet, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011050 0, DOT11F_EID_QUIET, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011051 { offsetof(tDot11fProbeResponse, TPCReport), offsetof(tDot11fIETPCReport,
11052 present), 0, "TPCReport", 0, 4, 4, SigIeTPCReport, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011053 0, DOT11F_EID_TPCREPORT, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011054 { offsetof(tDot11fProbeResponse, ERPInfo), offsetof(tDot11fIEERPInfo,
11055 present), 0, "ERPInfo", 0, 3, 3, SigIeERPInfo, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011056 0, DOT11F_EID_ERPINFO, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011057 { offsetof(tDot11fProbeResponse, ExtSuppRates),
11058 offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates",
11059 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011060 0, DOT11F_EID_EXTSUPPRATES, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011061 { offsetof(tDot11fProbeResponse, RSNOpaque), offsetof(tDot11fIERSNOpaque,
Liangwei Dong5b25e342018-08-22 00:55:41 -040011062 present), 0, "RSNOpaque", 0, 2, 255, SigIeRSNOpaque, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011063 0, DOT11F_EID_RSNOPAQUE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011064 { offsetof(tDot11fProbeResponse, QBSSLoad), offsetof(tDot11fIEQBSSLoad,
11065 present), 0, "QBSSLoad", 0, 7, 7, SigIeQBSSLoad, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011066 0, DOT11F_EID_QBSSLOAD, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011067 { offsetof(tDot11fProbeResponse, EDCAParamSet),
11068 offsetof(tDot11fIEEDCAParamSet, present), 0, "EDCAParamSet",
11069 0, 20, 20, SigIeEDCAParamSet, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011070 0, DOT11F_EID_EDCAPARAMSET, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011071 { offsetof(tDot11fProbeResponse, RRMEnabledCap),
11072 offsetof(tDot11fIERRMEnabledCap, present), 0, "RRMEnabledCap",
11073 0, 7, 7, SigIeRRMEnabledCap, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011074 0, DOT11F_EID_RRMENABLEDCAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011075 { offsetof(tDot11fProbeResponse, APChannelReport),
11076 offsetof(tDot11fIEAPChannelReport, present), 0, "APChannelReport",
11077 0, 3, 53, SigIeAPChannelReport, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011078 0, DOT11F_EID_APCHANNELREPORT, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011079 { offsetof(tDot11fProbeResponse, MobilityDomain),
11080 offsetof(tDot11fIEMobilityDomain, present), 0, "MobilityDomain",
11081 0, 5, 5, SigIeMobilityDomain, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011082 0, DOT11F_EID_MOBILITYDOMAIN, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011083 { offsetof(tDot11fProbeResponse, WPA), offsetof(tDot11fIEWPA, present), 0,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011084 "WPA", 0, 8, 50, SigIeWPA, {0, 80, 242, 1, 0}, 4, DOT11F_EID_WPA, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011085 { offsetof(tDot11fProbeResponse, HTCaps), offsetof(tDot11fIEHTCaps,
11086 present), 0, "HTCaps", 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011087 0, DOT11F_EID_HTCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011088 { offsetof(tDot11fProbeResponse, HTInfo), offsetof(tDot11fIEHTInfo,
11089 present), 0, "HTInfo", 0, 24, 56, SigIeHTInfo, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011090 0, DOT11F_EID_HTINFO, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011091 { offsetof(tDot11fProbeResponse, sec_chan_offset_ele),
11092 offsetof(tDot11fIEsec_chan_offset_ele, present), 0, "sec_chan_offset_ele",
11093 0, 3, 3, SigIesec_chan_offset_ele, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011094 0, DOT11F_EID_SEC_CHAN_OFFSET_ELE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011095 { offsetof(tDot11fProbeResponse, WMMInfoAp), offsetof(tDot11fIEWMMInfoAp,
11096 present), 0, "WMMInfoAp", 0, 9, 9, SigIeWMMInfoAp, {0, 80, 242, 2, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011097 5, DOT11F_EID_WMMINFOAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011098 { offsetof(tDot11fProbeResponse, WMMParams), offsetof(tDot11fIEWMMParams,
11099 present), 0, "WMMParams", 0, 26, 26, SigIeWMMParams, {0, 80, 242, 2, 1},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011100 5, DOT11F_EID_WMMPARAMS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011101 { offsetof(tDot11fProbeResponse, WMMCaps), offsetof(tDot11fIEWMMCaps,
11102 present), 0, "WMMCaps", 0, 9, 9, SigIeWMMCaps, {0, 80, 242, 2, 5},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011103 5, DOT11F_EID_WMMCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011104 { offsetof(tDot11fProbeResponse, WAPI), offsetof(tDot11fIEWAPI, present),
11105 0, "WAPI", 0, 14, 112, SigIeWAPI, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011106 0, DOT11F_EID_WAPI, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011107 { offsetof(tDot11fProbeResponse, ESERadMgmtCap),
11108 offsetof(tDot11fIEESERadMgmtCap, present), 0, "ESERadMgmtCap",
11109 0, 8, 8, SigIeESERadMgmtCap, {0, 64, 150, 1, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011110 4, DOT11F_EID_ESERADMGMTCAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011111 { offsetof(tDot11fProbeResponse, ESETrafStrmMet),
11112 offsetof(tDot11fIEESETrafStrmMet, present), 0, "ESETrafStrmMet",
11113 0, 10, 10, SigIeESETrafStrmMet, {0, 64, 150, 7, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011114 4, DOT11F_EID_ESETRAFSTRMMET, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011115 { offsetof(tDot11fProbeResponse, ESETxmitPower),
11116 offsetof(tDot11fIEESETxmitPower, present), 0, "ESETxmitPower",
11117 0, 8, 8, SigIeESETxmitPower, {0, 64, 150, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011118 4, DOT11F_EID_ESETXMITPOWER, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011119 { offsetof(tDot11fProbeResponse, WscProbeRes),
11120 offsetof(tDot11fIEWscProbeRes, present), 0, "WscProbeRes",
11121 0, 6, 319, SigIeWscProbeRes, {0, 80, 242, 4, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011122 4, DOT11F_EID_WSCPROBERES, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011123 { offsetof(tDot11fProbeResponse, P2PProbeRes),
11124 offsetof(tDot11fIEP2PProbeRes, present), 0, "P2PProbeRes",
11125 0, 6, 1141, SigIeP2PProbeRes, {80, 111, 154, 9, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011126 4, DOT11F_EID_P2PPROBERES, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011127 { offsetof(tDot11fProbeResponse, VHTCaps), offsetof(tDot11fIEVHTCaps,
11128 present), 0, "VHTCaps", 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011129 0, DOT11F_EID_VHTCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011130 { offsetof(tDot11fProbeResponse, VHTOperation),
11131 offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation",
11132 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011133 0, DOT11F_EID_VHTOPERATION, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011134 { offsetof(tDot11fProbeResponse, VHTExtBssLoad),
11135 offsetof(tDot11fIEVHTExtBssLoad, present), 0, "VHTExtBssLoad",
11136 0, 7, 7, SigIeVHTExtBssLoad, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011137 0, DOT11F_EID_VHTEXTBSSLOAD, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011138 { offsetof(tDot11fProbeResponse, ExtCap), offsetof(tDot11fIEExtCap,
Selvaraj, Sridhar2c46d832017-03-13 17:55:48 +053011139 present), 0, "ExtCap", 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011140 0, DOT11F_EID_EXTCAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011141 { offsetof(tDot11fProbeResponse, OBSSScanParameters),
11142 offsetof(tDot11fIEOBSSScanParameters, present), 0, "OBSSScanParameters",
11143 0, 16, 16, SigIeOBSSScanParameters, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011144 0, DOT11F_EID_OBSSSCANPARAMETERS, 0, 0, },
11145 { offsetof(tDot11fProbeResponse, fils_indication),
11146 offsetof(tDot11fIEfils_indication, present), 0, "fils_indication",
Vignesh Viswanathan44857312017-12-19 18:06:57 +053011147 0, 6, 259, SigIefils_indication, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011148 0, DOT11F_EID_FILS_INDICATION, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011149 { offsetof(tDot11fProbeResponse, Vendor1IE), offsetof(tDot11fIEVendor1IE,
11150 present), 0, "Vendor1IE", 0, 5, 5, SigIeVendor1IE, {0, 16, 24, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011151 3, DOT11F_EID_VENDOR1IE, 0, 0, },
Kapil Gupta4b2efbb2016-10-03 13:07:20 +053011152 { offsetof(tDot11fProbeResponse, vendor_vht_ie),
11153 offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie",
Kiran Kumar Lokere81722632017-09-26 12:11:43 -070011154 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 4, 0},
11155 4, DOT11F_EID_VENDOR_VHT_IE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011156 { offsetof(tDot11fProbeResponse, Vendor3IE), offsetof(tDot11fIEVendor3IE,
11157 present), 0, "Vendor3IE", 0, 5, 5, SigIeVendor3IE, {0, 22, 50, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011158 3, DOT11F_EID_VENDOR3IE, 0, 0, },
Nitesh Shah0ddd4f62016-05-27 10:07:32 +053011159 { offsetof(tDot11fProbeResponse, hs20vendor_ie),
11160 offsetof(tDot11fIEhs20vendor_ie, present), 0, "hs20vendor_ie",
Selvaraj, Sridhar7f42b5f2016-09-16 20:23:53 +053011161 0, 7, 9, SigIehs20vendor_ie, {80, 111, 154, 16, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011162 4, DOT11F_EID_HS20VENDOR_IE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011163 { offsetof(tDot11fProbeResponse, ChannelSwitchWrapper),
11164 offsetof(tDot11fIEChannelSwitchWrapper, present), 0,
Abhishek Singh37456d22016-08-29 16:05:11 +053011165 "ChannelSwitchWrapper", 0, 2, 14, SigIeChannelSwitchWrapper,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011166 {0, 0, 0, 0, 0}, 0, DOT11F_EID_CHANNELSWITCHWRAPPER, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011167 { offsetof(tDot11fProbeResponse, QComVendorIE),
11168 offsetof(tDot11fIEQComVendorIE, present), 0, "QComVendorIE",
11169 0, 7, 7, SigIeQComVendorIE, {0, 160, 198, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011170 3, DOT11F_EID_QCOMVENDORIE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011171 { offsetof(tDot11fProbeResponse, ESEVersion),
11172 offsetof(tDot11fIEESEVersion, present), 0, "ESEVersion",
11173 0, 7, 7, SigIeESEVersion, {0, 64, 150, 3, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011174 4, DOT11F_EID_ESEVERSION, 0, 0, },
Selvaraj, Sridharba726cb2016-07-22 13:41:03 +053011175 { offsetof(tDot11fProbeResponse, MBO_IE), offsetof(tDot11fIEMBO_IE,
Abhishek Singh951eed82017-07-06 16:53:19 +053011176 present), 0, "MBO_IE", 0, 6, 295, SigIeMBO_IE, {80, 111, 154, 22, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011177 4, DOT11F_EID_MBO_IE, 0, 0, },
Selvaraj, Sridharc2fe7a32017-02-02 19:20:16 +053011178 { offsetof(tDot11fProbeResponse, QCN_IE), offsetof(tDot11fIEQCN_IE,
11179 present), 0, "QCN_IE", 0, 10, 10, SigIeQCN_IE, {140, 253, 240, 1, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011180 4, DOT11F_EID_QCN_IE, 0, 0, },
Naveen Rawatea921ce2017-09-08 15:07:58 -070011181 { offsetof(tDot11fProbeResponse, he_cap), offsetof(tDot11fIEhe_cap,
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070011182 present), 0, "he_cap", 0, 23, 56, SigIehe_cap, {0, 0, 0, 0, 0},
Naveen Rawatea921ce2017-09-08 15:07:58 -070011183 0, DOT11F_EID_HE_CAP, 35, 0, },
11184 { offsetof(tDot11fProbeResponse, he_op), offsetof(tDot11fIEhe_op,
Naveen Rawate795f452017-11-13 14:47:39 -080011185 present), 0, "he_op", 0, 8, 12, SigIehe_op, {0, 0, 0, 0, 0},
Naveen Rawatea921ce2017-09-08 15:07:58 -070011186 0, DOT11F_EID_HE_OP, 36, 0, },
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070011187 { offsetof(tDot11fProbeResponse, bss_color_change),
11188 offsetof(tDot11fIEbss_color_change, present), 0, "bss_color_change",
Arif Hussain3a30fdc2018-02-08 20:00:41 -080011189 0, 4, 4, SigIebss_color_change, {0, 0, 0, 0, 0},
11190 0, DOT11F_EID_BSS_COLOR_CHANGE, 42, 0, },
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070011191 { offsetof(tDot11fProbeResponse, mu_edca_param_set),
11192 offsetof(tDot11fIEmu_edca_param_set, present), 0, "mu_edca_param_set",
Kiran Kumar Lokere27026ae2018-03-09 11:38:19 -080011193 0, 15, 15, SigIemu_edca_param_set, {0, 0, 0, 0, 0},
11194 0, DOT11F_EID_MU_EDCA_PARAM_SET, 38, 0, },
Abhishek Singhd8c3f102017-07-29 14:10:37 +053011195 { offsetof(tDot11fProbeResponse, esp_information),
11196 offsetof(tDot11fIEesp_information, present), 0, "esp_information",
11197 0, 2, 98, SigIeesp_information, {0, 0, 0, 0, 0},
11198 0, DOT11F_EID_ESP_INFORMATION, 11, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011199 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
11200
11201uint32_t dot11f_unpack_probe_response(tpAniSirGlobal pCtx,
11202 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011203 tDot11fProbeResponse *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011204{
11205 uint32_t i = 0;
11206 uint32_t status = 0;
11207 status = unpack_core(pCtx, pBuf, nBuf,
11208 FFS_ProbeResponse, IES_ProbeResponse,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011209 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011210
11211 (void)i;
11212 return status;
11213
11214} /* End dot11f_unpack_probe_response. */
11215
11216static const tFFDefn FFS_QosMapConfigure[] = {
11217 { "Category", offsetof(tDot11fQosMapConfigure, Category), SigFfCategory,
11218 DOT11F_FF_CATEGORY_LEN, },
11219 { "Action", offsetof(tDot11fQosMapConfigure, Action), SigFfAction,
11220 DOT11F_FF_ACTION_LEN, },
11221 { NULL, 0, 0, 0,},
11222};
11223
11224static const tIEDefn IES_QosMapConfigure[] = {
11225 { offsetof(tDot11fQosMapConfigure, QosMapSet),
11226 offsetof(tDot11fIEQosMapSet, present), 0, "QosMapSet",
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011227 0, 2, 62, SigIeQosMapSet, {0, 0, 0, 0, 0},
11228 0, DOT11F_EID_QOSMAPSET, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011229 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
11230
11231uint32_t dot11f_unpack_qos_map_configure(tpAniSirGlobal pCtx,
11232 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011233 tDot11fQosMapConfigure *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011234{
11235 uint32_t i = 0;
11236 uint32_t status = 0;
11237 status = unpack_core(pCtx, pBuf, nBuf,
11238 FFS_QosMapConfigure, IES_QosMapConfigure,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011239 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011240
11241 (void)i;
11242 return status;
11243
11244} /* End dot11f_unpack_qos_map_configure. */
11245
11246static const tFFDefn FFS_RadioMeasurementReport[] = {
11247 { "Category", offsetof(tDot11fRadioMeasurementReport, Category),
11248 SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
11249 { "Action", offsetof(tDot11fRadioMeasurementReport, Action), SigFfAction,
11250 DOT11F_FF_ACTION_LEN, },
11251 { "DialogToken", offsetof(tDot11fRadioMeasurementReport, DialogToken),
11252 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
11253 { NULL, 0, 0, 0,},
11254};
11255
11256static const tIEDefn IES_RadioMeasurementReport[] = {
11257 { offsetof(tDot11fRadioMeasurementReport, MeasurementReport),
11258 offsetof(tDot11fIEMeasurementReport, present),
11259 offsetof(tDot11fRadioMeasurementReport, num_MeasurementReport),
11260 "MeasurementReport", 4, 5, 31, SigIeMeasurementReport, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011261 0, DOT11F_EID_MEASUREMENTREPORT, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011262 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
11263
11264uint32_t dot11f_unpack_radio_measurement_report(tpAniSirGlobal pCtx,
11265 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011266 tDot11fRadioMeasurementReport *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011267{
11268 uint32_t i = 0;
11269 uint32_t status = 0;
11270 status = unpack_core(pCtx, pBuf, nBuf,
11271 FFS_RadioMeasurementReport, IES_RadioMeasurementReport,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011272 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011273
11274 (void)i;
11275 return status;
11276
11277} /* End dot11f_unpack_radio_measurement_report. */
11278
11279static const tFFDefn FFS_RadioMeasurementRequest[] = {
11280 { "Category", offsetof(tDot11fRadioMeasurementRequest, Category),
11281 SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
11282 { "Action", offsetof(tDot11fRadioMeasurementRequest, Action), SigFfAction,
11283 DOT11F_FF_ACTION_LEN, },
11284 { "DialogToken", offsetof(tDot11fRadioMeasurementRequest, DialogToken),
11285 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
11286 { "NumOfRepetitions", offsetof(tDot11fRadioMeasurementRequest,
11287 NumOfRepetitions), SigFfNumOfRepetitions,
11288 DOT11F_FF_NUMOFREPETITIONS_LEN, },
11289 { NULL, 0, 0, 0,},
11290};
11291
11292static const tIEDefn IES_RadioMeasurementRequest[] = {
11293 { offsetof(tDot11fRadioMeasurementRequest, MeasurementRequest),
11294 offsetof(tDot11fIEMeasurementRequest, present),
11295 offsetof(tDot11fRadioMeasurementRequest, num_MeasurementRequest),
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080011296 "MeasurementRequest", 2, 6, 18, SigIeMeasurementRequest, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011297 0, DOT11F_EID_MEASUREMENTREQUEST, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011298 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
11299
11300uint32_t dot11f_unpack_radio_measurement_request(tpAniSirGlobal pCtx,
11301 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011302 tDot11fRadioMeasurementRequest *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011303{
11304 uint32_t i = 0;
11305 uint32_t status = 0;
11306 status = unpack_core(pCtx, pBuf, nBuf,
11307 FFS_RadioMeasurementRequest, IES_RadioMeasurementRequest,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011308 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011309
11310 (void)i;
11311 return status;
11312
11313} /* End dot11f_unpack_radio_measurement_request. */
11314
11315static const tFFDefn FFS_ReAssocRequest[] = {
11316 { "Capabilities", offsetof(tDot11fReAssocRequest, Capabilities),
11317 SigFfCapabilities, DOT11F_FF_CAPABILITIES_LEN, },
11318 { "ListenInterval", offsetof(tDot11fReAssocRequest, ListenInterval),
11319 SigFfListenInterval, DOT11F_FF_LISTENINTERVAL_LEN, },
11320 { "CurrentAPAddress", offsetof(tDot11fReAssocRequest, CurrentAPAddress),
11321 SigFfCurrentAPAddress, DOT11F_FF_CURRENTAPADDRESS_LEN, },
11322 { NULL, 0, 0, 0,},
11323};
11324
11325static const tIEDefn IES_ReAssocRequest[] = {
11326 { offsetof(tDot11fReAssocRequest, SSID), offsetof(tDot11fIESSID, present),
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011327 0, "SSID", 0, 2, 34, SigIeSSID, {0, 0, 0, 0, 0},
11328 0, DOT11F_EID_SSID, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011329 { offsetof(tDot11fReAssocRequest, SuppRates),
11330 offsetof(tDot11fIESuppRates, present), 0, "SuppRates",
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011331 0, 2, 14, SigIeSuppRates, {0, 0, 0, 0, 0},
11332 0, DOT11F_EID_SUPPRATES, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011333 { offsetof(tDot11fReAssocRequest, ExtSuppRates),
11334 offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates",
11335 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011336 0, DOT11F_EID_EXTSUPPRATES, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011337 { offsetof(tDot11fReAssocRequest, PowerCaps),
11338 offsetof(tDot11fIEPowerCaps, present), 0, "PowerCaps",
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011339 0, 4, 4, SigIePowerCaps, {0, 0, 0, 0, 0},
11340 0, DOT11F_EID_POWERCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011341 { offsetof(tDot11fReAssocRequest, SuppChannels),
11342 offsetof(tDot11fIESuppChannels, present), 0, "SuppChannels",
Vignesh Viswanathan7813a3d2018-08-27 19:09:00 +053011343 0, 2, 98, SigIeSuppChannels, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011344 0, DOT11F_EID_SUPPCHANNELS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011345 { offsetof(tDot11fReAssocRequest, RSNOpaque),
11346 offsetof(tDot11fIERSNOpaque, present), 0, "RSNOpaque",
Liangwei Dong5b25e342018-08-22 00:55:41 -040011347 0, 2, 255, SigIeRSNOpaque, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011348 0, DOT11F_EID_RSNOPAQUE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011349 { offsetof(tDot11fReAssocRequest, QOSCapsStation),
11350 offsetof(tDot11fIEQOSCapsStation, present), 0, "QOSCapsStation",
11351 0, 3, 3, SigIeQOSCapsStation, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011352 0, DOT11F_EID_QOSCAPSSTATION, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011353 { offsetof(tDot11fReAssocRequest, RRMEnabledCap),
11354 offsetof(tDot11fIERRMEnabledCap, present), 0, "RRMEnabledCap",
11355 0, 7, 7, SigIeRRMEnabledCap, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011356 0, DOT11F_EID_RRMENABLEDCAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011357 { offsetof(tDot11fReAssocRequest, MobilityDomain),
11358 offsetof(tDot11fIEMobilityDomain, present), 0, "MobilityDomain",
11359 0, 5, 5, SigIeMobilityDomain, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011360 0, DOT11F_EID_MOBILITYDOMAIN, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011361 { offsetof(tDot11fReAssocRequest, FTInfo), offsetof(tDot11fIEFTInfo,
11362 present), 0, "FTInfo", 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011363 0, DOT11F_EID_FTINFO, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011364 { offsetof(tDot11fReAssocRequest, RICDataDesc),
11365 offsetof(tDot11fIERICDataDesc, present),
11366 offsetof(tDot11fReAssocRequest, num_RICDataDesc), "RICDataDesc",
11367 2, 2, 550, SigIeRICDataDesc, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011368 0, DOT11F_EID_RICDATADESC, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011369 { offsetof(tDot11fReAssocRequest, WPAOpaque),
11370 offsetof(tDot11fIEWPAOpaque, present), 0, "WPAOpaque",
11371 0, 8, 255, SigIeWPAOpaque, {0, 80, 242, 1, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011372 4, DOT11F_EID_WPAOPAQUE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011373 { offsetof(tDot11fReAssocRequest, HTCaps), offsetof(tDot11fIEHTCaps,
11374 present), 0, "HTCaps", 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011375 0, DOT11F_EID_HTCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011376 { offsetof(tDot11fReAssocRequest, WMMCaps), offsetof(tDot11fIEWMMCaps,
11377 present), 0, "WMMCaps", 0, 9, 9, SigIeWMMCaps, {0, 80, 242, 2, 5},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011378 5, DOT11F_EID_WMMCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011379 { offsetof(tDot11fReAssocRequest, WMMInfoStation),
11380 offsetof(tDot11fIEWMMInfoStation, present), 0, "WMMInfoStation",
11381 0, 9, 9, SigIeWMMInfoStation, {0, 80, 242, 2, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011382 5, DOT11F_EID_WMMINFOSTATION, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011383 { offsetof(tDot11fReAssocRequest, WscIEOpaque),
11384 offsetof(tDot11fIEWscIEOpaque, present), 0, "WscIEOpaque",
11385 0, 8, 255, SigIeWscIEOpaque, {0, 80, 242, 4, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011386 4, DOT11F_EID_WSCIEOPAQUE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011387 { offsetof(tDot11fReAssocRequest, WAPIOpaque),
11388 offsetof(tDot11fIEWAPIOpaque, present), 0, "WAPIOpaque",
11389 0, 8, 255, SigIeWAPIOpaque, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011390 0, DOT11F_EID_WAPIOPAQUE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011391 { offsetof(tDot11fReAssocRequest, WAPI), offsetof(tDot11fIEWAPI, present),
11392 0, "WAPI", 0, 14, 112, SigIeWAPI, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011393 0, DOT11F_EID_WAPI, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011394 { offsetof(tDot11fReAssocRequest, ESERadMgmtCap),
11395 offsetof(tDot11fIEESERadMgmtCap, present), 0, "ESERadMgmtCap",
11396 0, 8, 8, SigIeESERadMgmtCap, {0, 64, 150, 1, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011397 4, DOT11F_EID_ESERADMGMTCAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011398 { offsetof(tDot11fReAssocRequest, ESEVersion),
11399 offsetof(tDot11fIEESEVersion, present), 0, "ESEVersion",
11400 0, 7, 7, SigIeESEVersion, {0, 64, 150, 3, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011401 4, DOT11F_EID_ESEVERSION, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011402 { offsetof(tDot11fReAssocRequest, ESECckmOpaque),
11403 offsetof(tDot11fIEESECckmOpaque, present), 0, "ESECckmOpaque",
11404 0, 12, 26, SigIeESECckmOpaque, {0, 64, 150, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011405 4, DOT11F_EID_ESECCKMOPAQUE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011406 { offsetof(tDot11fReAssocRequest, WMMTSPEC), offsetof(tDot11fIEWMMTSPEC,
11407 present), offsetof(tDot11fReAssocRequest, num_WMMTSPEC), "WMMTSPEC",
11408 4, 63, 63, SigIeWMMTSPEC, {0, 80, 242, 2, 2},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011409 5, DOT11F_EID_WMMTSPEC, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011410 { offsetof(tDot11fReAssocRequest, ESETrafStrmRateSet),
11411 offsetof(tDot11fIEESETrafStrmRateSet, present), 0, "ESETrafStrmRateSet",
11412 0, 7, 15, SigIeESETrafStrmRateSet, {0, 64, 150, 8, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011413 4, DOT11F_EID_ESETRAFSTRMRATESET, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011414 { offsetof(tDot11fReAssocRequest, P2PIEOpaque),
11415 offsetof(tDot11fIEP2PIEOpaque, present), 0, "P2PIEOpaque",
11416 0, 8, 255, SigIeP2PIEOpaque, {80, 111, 154, 9, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011417 4, DOT11F_EID_P2PIEOPAQUE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011418 { offsetof(tDot11fReAssocRequest, WFDIEOpaque),
11419 offsetof(tDot11fIEWFDIEOpaque, present), 0, "WFDIEOpaque",
11420 0, 8, 255, SigIeWFDIEOpaque, {80, 111, 154, 10, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011421 4, DOT11F_EID_WFDIEOPAQUE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011422 { offsetof(tDot11fReAssocRequest, VHTCaps), offsetof(tDot11fIEVHTCaps,
11423 present), 0, "VHTCaps", 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011424 0, DOT11F_EID_VHTCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011425 { offsetof(tDot11fReAssocRequest, ExtCap), offsetof(tDot11fIEExtCap,
Selvaraj, Sridhar2c46d832017-03-13 17:55:48 +053011426 present), 0, "ExtCap", 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011427 0, DOT11F_EID_EXTCAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011428 { offsetof(tDot11fReAssocRequest, OperatingMode),
11429 offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode",
11430 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011431 0, DOT11F_EID_OPERATINGMODE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011432 { offsetof(tDot11fReAssocRequest, QosMapSet),
11433 offsetof(tDot11fIEQosMapSet, present), 0, "QosMapSet",
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011434 0, 2, 62, SigIeQosMapSet, {0, 0, 0, 0, 0},
11435 0, DOT11F_EID_QOSMAPSET, 0, 0, },
Kapil Gupta4b2efbb2016-10-03 13:07:20 +053011436 { offsetof(tDot11fReAssocRequest, vendor_vht_ie),
11437 offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie",
Kiran Kumar Lokere81722632017-09-26 12:11:43 -070011438 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 4, 0},
11439 4, DOT11F_EID_VENDOR_VHT_IE, 0, 0, },
Nitesh Shah0ddd4f62016-05-27 10:07:32 +053011440 { offsetof(tDot11fReAssocRequest, hs20vendor_ie),
11441 offsetof(tDot11fIEhs20vendor_ie, present), 0, "hs20vendor_ie",
Selvaraj, Sridhar7f42b5f2016-09-16 20:23:53 +053011442 0, 7, 9, SigIehs20vendor_ie, {80, 111, 154, 16, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011443 4, DOT11F_EID_HS20VENDOR_IE, 0, 0, },
Naveen Rawatea921ce2017-09-08 15:07:58 -070011444 { offsetof(tDot11fReAssocRequest, he_cap), offsetof(tDot11fIEhe_cap,
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070011445 present), 0, "he_cap", 0, 23, 56, SigIehe_cap, {0, 0, 0, 0, 0},
Naveen Rawatea921ce2017-09-08 15:07:58 -070011446 0, DOT11F_EID_HE_CAP, 35, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011447 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
11448
11449uint32_t dot11f_unpack_re_assoc_request(tpAniSirGlobal pCtx,
11450 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011451 tDot11fReAssocRequest *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011452{
11453 uint32_t i = 0;
11454 uint32_t status = 0;
11455 status = unpack_core(pCtx, pBuf, nBuf,
11456 FFS_ReAssocRequest, IES_ReAssocRequest,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011457 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011458
11459 (void)i;
11460 return status;
11461
11462} /* End dot11f_unpack_re_assoc_request. */
11463
11464static const tFFDefn FFS_ReAssocResponse[] = {
11465 { "Capabilities", offsetof(tDot11fReAssocResponse, Capabilities),
11466 SigFfCapabilities, DOT11F_FF_CAPABILITIES_LEN, },
11467 { "Status", offsetof(tDot11fReAssocResponse, Status), SigFfStatus,
11468 DOT11F_FF_STATUS_LEN, },
11469 { "AID", offsetof(tDot11fReAssocResponse, AID), SigFfAID,
11470 DOT11F_FF_AID_LEN, },
11471 { NULL, 0, 0, 0,},
11472};
11473
11474static const tIEDefn IES_ReAssocResponse[] = {
11475 { offsetof(tDot11fReAssocResponse, SuppRates),
11476 offsetof(tDot11fIESuppRates, present), 0, "SuppRates",
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011477 0, 2, 14, SigIeSuppRates, {0, 0, 0, 0, 0},
11478 0, DOT11F_EID_SUPPRATES, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011479 { offsetof(tDot11fReAssocResponse, ExtSuppRates),
11480 offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates",
11481 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011482 0, DOT11F_EID_EXTSUPPRATES, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011483 { offsetof(tDot11fReAssocResponse, EDCAParamSet),
11484 offsetof(tDot11fIEEDCAParamSet, present), 0, "EDCAParamSet",
11485 0, 20, 20, SigIeEDCAParamSet, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011486 0, DOT11F_EID_EDCAPARAMSET, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011487 { offsetof(tDot11fReAssocResponse, RCPIIE), offsetof(tDot11fIERCPIIE,
11488 present), 0, "RCPIIE", 0, 3, 3, SigIeRCPIIE, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011489 0, DOT11F_EID_RCPIIE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011490 { offsetof(tDot11fReAssocResponse, RSNIIE), offsetof(tDot11fIERSNIIE,
11491 present), 0, "RSNIIE", 0, 3, 3, SigIeRSNIIE, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011492 0, DOT11F_EID_RSNIIE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011493 { offsetof(tDot11fReAssocResponse, RRMEnabledCap),
11494 offsetof(tDot11fIERRMEnabledCap, present), 0, "RRMEnabledCap",
11495 0, 7, 7, SigIeRRMEnabledCap, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011496 0, DOT11F_EID_RRMENABLEDCAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011497 { offsetof(tDot11fReAssocResponse, RSNOpaque),
11498 offsetof(tDot11fIERSNOpaque, present), 0, "RSNOpaque",
Liangwei Dong5b25e342018-08-22 00:55:41 -040011499 0, 2, 255, SigIeRSNOpaque, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011500 0, DOT11F_EID_RSNOPAQUE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011501 { offsetof(tDot11fReAssocResponse, MobilityDomain),
11502 offsetof(tDot11fIEMobilityDomain, present), 0, "MobilityDomain",
11503 0, 5, 5, SigIeMobilityDomain, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011504 0, DOT11F_EID_MOBILITYDOMAIN, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011505 { offsetof(tDot11fReAssocResponse, FTInfo), offsetof(tDot11fIEFTInfo,
11506 present), 0, "FTInfo", 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011507 0, DOT11F_EID_FTINFO, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011508 { offsetof(tDot11fReAssocResponse, RICDataDesc),
11509 offsetof(tDot11fIERICDataDesc, present),
11510 offsetof(tDot11fReAssocResponse, num_RICDataDesc), "RICDataDesc",
11511 2, 2, 550, SigIeRICDataDesc, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011512 0, DOT11F_EID_RICDATADESC, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011513 { offsetof(tDot11fReAssocResponse, WPA), offsetof(tDot11fIEWPA, present),
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011514 0, "WPA", 0, 8, 50, SigIeWPA, {0, 80, 242, 1, 0},
11515 4, DOT11F_EID_WPA, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011516 { offsetof(tDot11fReAssocResponse, TimeoutInterval),
11517 offsetof(tDot11fIETimeoutInterval, present), 0, "TimeoutInterval",
11518 0, 7, 7, SigIeTimeoutInterval, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011519 0, DOT11F_EID_TIMEOUTINTERVAL, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011520 { offsetof(tDot11fReAssocResponse, HTCaps), offsetof(tDot11fIEHTCaps,
11521 present), 0, "HTCaps", 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011522 0, DOT11F_EID_HTCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011523 { offsetof(tDot11fReAssocResponse, HTInfo), offsetof(tDot11fIEHTInfo,
11524 present), 0, "HTInfo", 0, 24, 56, SigIeHTInfo, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011525 0, DOT11F_EID_HTINFO, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011526 { offsetof(tDot11fReAssocResponse, WMMParams),
11527 offsetof(tDot11fIEWMMParams, present), 0, "WMMParams",
11528 0, 26, 26, SigIeWMMParams, {0, 80, 242, 2, 1},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011529 5, DOT11F_EID_WMMPARAMS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011530 { offsetof(tDot11fReAssocResponse, ESERadMgmtCap),
11531 offsetof(tDot11fIEESERadMgmtCap, present), 0, "ESERadMgmtCap",
11532 0, 8, 8, SigIeESERadMgmtCap, {0, 64, 150, 1, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011533 4, DOT11F_EID_ESERADMGMTCAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011534 { offsetof(tDot11fReAssocResponse, ESETrafStrmMet),
11535 offsetof(tDot11fIEESETrafStrmMet, present), 0, "ESETrafStrmMet",
11536 0, 10, 10, SigIeESETrafStrmMet, {0, 64, 150, 7, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011537 4, DOT11F_EID_ESETRAFSTRMMET, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011538 { offsetof(tDot11fReAssocResponse, ESETxmitPower),
11539 offsetof(tDot11fIEESETxmitPower, present), 0, "ESETxmitPower",
11540 0, 8, 8, SigIeESETxmitPower, {0, 64, 150, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011541 4, DOT11F_EID_ESETXMITPOWER, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011542 { offsetof(tDot11fReAssocResponse, WMMTSPEC), offsetof(tDot11fIEWMMTSPEC,
11543 present), offsetof(tDot11fReAssocResponse, num_WMMTSPEC), "WMMTSPEC",
11544 4, 63, 63, SigIeWMMTSPEC, {0, 80, 242, 2, 2},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011545 5, DOT11F_EID_WMMTSPEC, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011546 { offsetof(tDot11fReAssocResponse, ESETrafStrmRateSet),
11547 offsetof(tDot11fIEESETrafStrmRateSet, present), 0, "ESETrafStrmRateSet",
11548 0, 7, 15, SigIeESETrafStrmRateSet, {0, 64, 150, 8, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011549 4, DOT11F_EID_ESETRAFSTRMRATESET, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011550 { offsetof(tDot11fReAssocResponse, WscReassocRes),
11551 offsetof(tDot11fIEWscReassocRes, present), 0, "WscReassocRes",
11552 0, 6, 37, SigIeWscReassocRes, {0, 80, 242, 4, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011553 4, DOT11F_EID_WSCREASSOCRES, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011554 { offsetof(tDot11fReAssocResponse, P2PAssocRes),
11555 offsetof(tDot11fIEP2PAssocRes, present), 0, "P2PAssocRes",
11556 0, 6, 17, SigIeP2PAssocRes, {80, 111, 154, 9, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011557 4, DOT11F_EID_P2PASSOCRES, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011558 { offsetof(tDot11fReAssocResponse, VHTCaps), offsetof(tDot11fIEVHTCaps,
11559 present), 0, "VHTCaps", 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011560 0, DOT11F_EID_VHTCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011561 { offsetof(tDot11fReAssocResponse, VHTOperation),
11562 offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation",
11563 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011564 0, DOT11F_EID_VHTOPERATION, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011565 { offsetof(tDot11fReAssocResponse, ExtCap), offsetof(tDot11fIEExtCap,
Selvaraj, Sridhar2c46d832017-03-13 17:55:48 +053011566 present), 0, "ExtCap", 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011567 0, DOT11F_EID_EXTCAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011568 { offsetof(tDot11fReAssocResponse, OBSSScanParameters),
11569 offsetof(tDot11fIEOBSSScanParameters, present), 0, "OBSSScanParameters",
11570 0, 16, 16, SigIeOBSSScanParameters, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011571 0, DOT11F_EID_OBSSSCANPARAMETERS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011572 { offsetof(tDot11fReAssocResponse, QosMapSet),
11573 offsetof(tDot11fIEQosMapSet, present), 0, "QosMapSet",
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011574 0, 2, 62, SigIeQosMapSet, {0, 0, 0, 0, 0},
11575 0, DOT11F_EID_QOSMAPSET, 0, 0, },
Kapil Gupta4b2efbb2016-10-03 13:07:20 +053011576 { offsetof(tDot11fReAssocResponse, vendor_vht_ie),
11577 offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie",
Kiran Kumar Lokere81722632017-09-26 12:11:43 -070011578 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 4, 0},
11579 4, DOT11F_EID_VENDOR_VHT_IE, 0, 0, },
Naveen Rawatea921ce2017-09-08 15:07:58 -070011580 { offsetof(tDot11fReAssocResponse, he_cap), offsetof(tDot11fIEhe_cap,
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070011581 present), 0, "he_cap", 0, 23, 56, SigIehe_cap, {0, 0, 0, 0, 0},
Naveen Rawatea921ce2017-09-08 15:07:58 -070011582 0, DOT11F_EID_HE_CAP, 35, 0, },
11583 { offsetof(tDot11fReAssocResponse, he_op), offsetof(tDot11fIEhe_op,
Naveen Rawate795f452017-11-13 14:47:39 -080011584 present), 0, "he_op", 0, 8, 12, SigIehe_op, {0, 0, 0, 0, 0},
Naveen Rawatea921ce2017-09-08 15:07:58 -070011585 0, DOT11F_EID_HE_OP, 36, 0, },
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070011586 { offsetof(tDot11fReAssocResponse, bss_color_change),
11587 offsetof(tDot11fIEbss_color_change, present), 0, "bss_color_change",
Arif Hussain3a30fdc2018-02-08 20:00:41 -080011588 0, 4, 4, SigIebss_color_change, {0, 0, 0, 0, 0},
11589 0, DOT11F_EID_BSS_COLOR_CHANGE, 42, 0, },
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070011590 { offsetof(tDot11fReAssocResponse, mu_edca_param_set),
11591 offsetof(tDot11fIEmu_edca_param_set, present), 0, "mu_edca_param_set",
Kiran Kumar Lokere27026ae2018-03-09 11:38:19 -080011592 0, 15, 15, SigIemu_edca_param_set, {0, 0, 0, 0, 0},
11593 0, DOT11F_EID_MU_EDCA_PARAM_SET, 38, 0, },
Abhishek Singh4c1ec992017-07-14 14:09:27 +053011594 { offsetof(tDot11fReAssocResponse, MBO_IE), offsetof(tDot11fIEMBO_IE,
11595 present), 0, "MBO_IE", 0, 6, 295, SigIeMBO_IE, {80, 111, 154, 22, 0},
11596 4, DOT11F_EID_MBO_IE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011597 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
11598
11599uint32_t dot11f_unpack_re_assoc_response(tpAniSirGlobal pCtx,
11600 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011601 tDot11fReAssocResponse *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011602{
11603 uint32_t i = 0;
11604 uint32_t status = 0;
11605 status = unpack_core(pCtx, pBuf, nBuf,
11606 FFS_ReAssocResponse, IES_ReAssocResponse,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011607 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011608
11609 (void)i;
11610 return status;
11611
11612} /* End dot11f_unpack_re_assoc_response. */
11613
11614static const tFFDefn FFS_SMPowerSave[] = {
11615 { "Category", offsetof(tDot11fSMPowerSave, Category), SigFfCategory,
11616 DOT11F_FF_CATEGORY_LEN, },
11617 { "Action", offsetof(tDot11fSMPowerSave, Action), SigFfAction,
11618 DOT11F_FF_ACTION_LEN, },
11619 { "SMPowerModeSet", offsetof(tDot11fSMPowerSave, SMPowerModeSet),
11620 SigFfSMPowerModeSet, DOT11F_FF_SMPOWERMODESET_LEN, },
11621 { NULL, 0, 0, 0,},
11622};
11623
11624static const tIEDefn IES_SMPowerSave[] = {
11625 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
11626
11627uint32_t dot11f_unpack_sm_power_save(tpAniSirGlobal pCtx,
11628 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011629 tDot11fSMPowerSave *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011630{
11631 uint32_t i = 0;
11632 uint32_t status = 0;
11633 status = unpack_core(pCtx, pBuf, nBuf,
11634 FFS_SMPowerSave, IES_SMPowerSave,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011635 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011636
11637 (void)i;
11638 return status;
11639
11640} /* End dot11f_unpack_sm_power_save. */
11641
11642static const tFFDefn FFS_SaQueryReq[] = {
11643 { "Category", offsetof(tDot11fSaQueryReq, Category), SigFfCategory,
11644 DOT11F_FF_CATEGORY_LEN, },
11645 { "Action", offsetof(tDot11fSaQueryReq, Action), SigFfAction,
11646 DOT11F_FF_ACTION_LEN, },
11647 { "TransactionId", offsetof(tDot11fSaQueryReq, TransactionId),
11648 SigFfTransactionId, DOT11F_FF_TRANSACTIONID_LEN, },
11649 { NULL, 0, 0, 0,},
11650};
11651
11652static const tIEDefn IES_SaQueryReq[] = {
11653 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
11654
11655uint32_t dot11f_unpack_sa_query_req(tpAniSirGlobal pCtx,
11656 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011657 tDot11fSaQueryReq *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011658{
11659 uint32_t i = 0;
11660 uint32_t status = 0;
11661 status = unpack_core(pCtx, pBuf, nBuf,
11662 FFS_SaQueryReq, IES_SaQueryReq,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011663 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011664
11665 (void)i;
11666 return status;
11667
11668} /* End dot11f_unpack_sa_query_req. */
11669
11670static const tFFDefn FFS_SaQueryRsp[] = {
11671 { "Category", offsetof(tDot11fSaQueryRsp, Category), SigFfCategory,
11672 DOT11F_FF_CATEGORY_LEN, },
11673 { "Action", offsetof(tDot11fSaQueryRsp, Action), SigFfAction,
11674 DOT11F_FF_ACTION_LEN, },
11675 { "TransactionId", offsetof(tDot11fSaQueryRsp, TransactionId),
11676 SigFfTransactionId, DOT11F_FF_TRANSACTIONID_LEN, },
11677 { NULL, 0, 0, 0,},
11678};
11679
11680static const tIEDefn IES_SaQueryRsp[] = {
11681 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
11682
11683uint32_t dot11f_unpack_sa_query_rsp(tpAniSirGlobal pCtx,
11684 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011685 tDot11fSaQueryRsp *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011686{
11687 uint32_t i = 0;
11688 uint32_t status = 0;
11689 status = unpack_core(pCtx, pBuf, nBuf,
11690 FFS_SaQueryRsp, IES_SaQueryRsp,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011691 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011692
11693 (void)i;
11694 return status;
11695
11696} /* End dot11f_unpack_sa_query_rsp. */
11697
11698static const tFFDefn FFS_TDLSDisReq[] = {
11699 { "Category", offsetof(tDot11fTDLSDisReq, Category), SigFfCategory,
11700 DOT11F_FF_CATEGORY_LEN, },
11701 { "Action", offsetof(tDot11fTDLSDisReq, Action), SigFfAction,
11702 DOT11F_FF_ACTION_LEN, },
11703 { "DialogToken", offsetof(tDot11fTDLSDisReq, DialogToken),
11704 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
11705 { NULL, 0, 0, 0,},
11706};
11707
11708static const tIEDefn IES_TDLSDisReq[] = {
11709 { offsetof(tDot11fTDLSDisReq, LinkIdentifier),
11710 offsetof(tDot11fIELinkIdentifier, present), 0, "LinkIdentifier",
11711 0, 20, 20, SigIeLinkIdentifier, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011712 0, DOT11F_EID_LINKIDENTIFIER, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011713 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
11714
11715uint32_t dot11f_unpack_tdls_dis_req(tpAniSirGlobal pCtx,
11716 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011717 tDot11fTDLSDisReq *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011718{
11719 uint32_t i = 0;
11720 uint32_t status = 0;
11721 status = unpack_core(pCtx, pBuf, nBuf,
11722 FFS_TDLSDisReq, IES_TDLSDisReq,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011723 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011724
11725 (void)i;
11726 return status;
11727
11728} /* End dot11f_unpack_tdls_dis_req. */
11729
11730static const tFFDefn FFS_TDLSDisRsp[] = {
11731 { "Category", offsetof(tDot11fTDLSDisRsp, Category), SigFfCategory,
11732 DOT11F_FF_CATEGORY_LEN, },
11733 { "Action", offsetof(tDot11fTDLSDisRsp, Action), SigFfAction,
11734 DOT11F_FF_ACTION_LEN, },
11735 { "DialogToken", offsetof(tDot11fTDLSDisRsp, DialogToken),
11736 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
11737 { "Capabilities", offsetof(tDot11fTDLSDisRsp, Capabilities),
11738 SigFfCapabilities, DOT11F_FF_CAPABILITIES_LEN, },
11739 { NULL, 0, 0, 0,},
11740};
11741
11742static const tIEDefn IES_TDLSDisRsp[] = {
11743 { offsetof(tDot11fTDLSDisRsp, SuppRates), offsetof(tDot11fIESuppRates,
11744 present), 0, "SuppRates", 0, 2, 14, SigIeSuppRates, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011745 0, DOT11F_EID_SUPPRATES, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011746 { offsetof(tDot11fTDLSDisRsp, ExtSuppRates),
11747 offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates",
11748 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011749 0, DOT11F_EID_EXTSUPPRATES, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011750 { offsetof(tDot11fTDLSDisRsp, SuppChannels),
11751 offsetof(tDot11fIESuppChannels, present), 0, "SuppChannels",
Vignesh Viswanathan7813a3d2018-08-27 19:09:00 +053011752 0, 2, 98, SigIeSuppChannels, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011753 0, DOT11F_EID_SUPPCHANNELS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011754 { offsetof(tDot11fTDLSDisRsp, SuppOperatingClasses),
11755 offsetof(tDot11fIESuppOperatingClasses, present), 0,
11756 "SuppOperatingClasses", 0, 3, 34, SigIeSuppOperatingClasses,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011757 {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPOPERATINGCLASSES, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011758 { offsetof(tDot11fTDLSDisRsp, RSN), offsetof(tDot11fIERSN, present), 0,
Abhishek Singh7dcb85b2017-12-27 15:15:01 +053011759 "RSN", 0, 4, 132, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011760 { offsetof(tDot11fTDLSDisRsp, ExtCap), offsetof(tDot11fIEExtCap, present),
Selvaraj, Sridhar2c46d832017-03-13 17:55:48 +053011761 0, "ExtCap", 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011762 0, DOT11F_EID_EXTCAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011763 { offsetof(tDot11fTDLSDisRsp, FTInfo), offsetof(tDot11fIEFTInfo, present),
11764 0, "FTInfo", 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011765 0, DOT11F_EID_FTINFO, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011766 { offsetof(tDot11fTDLSDisRsp, TimeoutInterval),
11767 offsetof(tDot11fIETimeoutInterval, present), 0, "TimeoutInterval",
11768 0, 7, 7, SigIeTimeoutInterval, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011769 0, DOT11F_EID_TIMEOUTINTERVAL, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011770 { offsetof(tDot11fTDLSDisRsp, RICData), offsetof(tDot11fIERICData,
11771 present), 0, "RICData", 0, 6, 6, SigIeRICData, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011772 0, DOT11F_EID_RICDATA, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011773 { offsetof(tDot11fTDLSDisRsp, HTCaps), offsetof(tDot11fIEHTCaps, present),
11774 0, "HTCaps", 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011775 0, DOT11F_EID_HTCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011776 { offsetof(tDot11fTDLSDisRsp, ht2040_bss_coexistence),
11777 offsetof(tDot11fIEht2040_bss_coexistence, present), 0,
11778 "ht2040_bss_coexistence", 0, 3, 3, SigIeht2040_bss_coexistence,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011779 {0, 0, 0, 0, 0}, 0, DOT11F_EID_HT2040_BSS_COEXISTENCE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011780 { offsetof(tDot11fTDLSDisRsp, LinkIdentifier),
11781 offsetof(tDot11fIELinkIdentifier, present), 0, "LinkIdentifier",
11782 0, 20, 20, SigIeLinkIdentifier, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011783 0, DOT11F_EID_LINKIDENTIFIER, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011784 { offsetof(tDot11fTDLSDisRsp, VHTCaps), offsetof(tDot11fIEVHTCaps,
11785 present), 0, "VHTCaps", 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011786 0, DOT11F_EID_VHTCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011787 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
11788
11789uint32_t dot11f_unpack_tdls_dis_rsp(tpAniSirGlobal pCtx,
11790 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011791 tDot11fTDLSDisRsp *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011792{
11793 uint32_t i = 0;
11794 uint32_t status = 0;
11795 status = unpack_core(pCtx, pBuf, nBuf,
11796 FFS_TDLSDisRsp, IES_TDLSDisRsp,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011797 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011798
11799 (void)i;
11800 return status;
11801
11802} /* End dot11f_unpack_tdls_dis_rsp. */
11803
11804static const tFFDefn FFS_TDLSPeerTrafficInd[] = {
11805 { "Category", offsetof(tDot11fTDLSPeerTrafficInd, Category),
11806 SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
11807 { "Action", offsetof(tDot11fTDLSPeerTrafficInd, Action), SigFfAction,
11808 DOT11F_FF_ACTION_LEN, },
11809 { "DialogToken", offsetof(tDot11fTDLSPeerTrafficInd, DialogToken),
11810 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
11811 { NULL, 0, 0, 0,},
11812};
11813
11814static const tIEDefn IES_TDLSPeerTrafficInd[] = {
11815 { offsetof(tDot11fTDLSPeerTrafficInd, LinkIdentifier),
11816 offsetof(tDot11fIELinkIdentifier, present), 0, "LinkIdentifier",
11817 0, 20, 20, SigIeLinkIdentifier, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011818 0, DOT11F_EID_LINKIDENTIFIER, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011819 { offsetof(tDot11fTDLSPeerTrafficInd, PTIControl),
11820 offsetof(tDot11fIEPTIControl, present), 0, "PTIControl",
11821 0, 5, 5, SigIePTIControl, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011822 0, DOT11F_EID_PTICONTROL, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011823 { offsetof(tDot11fTDLSPeerTrafficInd, PUBufferStatus),
11824 offsetof(tDot11fIEPUBufferStatus, present), 0, "PUBufferStatus",
11825 0, 3, 3, SigIePUBufferStatus, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011826 0, DOT11F_EID_PUBUFFERSTATUS, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011827 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
11828
11829uint32_t dot11f_unpack_tdls_peer_traffic_ind(tpAniSirGlobal pCtx,
11830 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011831 tDot11fTDLSPeerTrafficInd *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011832{
11833 uint32_t i = 0;
11834 uint32_t status = 0;
11835 status = unpack_core(pCtx, pBuf, nBuf,
11836 FFS_TDLSPeerTrafficInd, IES_TDLSPeerTrafficInd,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011837 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011838
11839 (void)i;
11840 return status;
11841
11842} /* End dot11f_unpack_tdls_peer_traffic_ind. */
11843
11844static const tFFDefn FFS_TDLSPeerTrafficRsp[] = {
11845 { "Category", offsetof(tDot11fTDLSPeerTrafficRsp, Category),
11846 SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
11847 { "Action", offsetof(tDot11fTDLSPeerTrafficRsp, Action), SigFfAction,
11848 DOT11F_FF_ACTION_LEN, },
11849 { "DialogToken", offsetof(tDot11fTDLSPeerTrafficRsp, DialogToken),
11850 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
11851 { NULL, 0, 0, 0,},
11852};
11853
11854static const tIEDefn IES_TDLSPeerTrafficRsp[] = {
11855 { offsetof(tDot11fTDLSPeerTrafficRsp, LinkIdentifier),
11856 offsetof(tDot11fIELinkIdentifier, present), 0, "LinkIdentifier",
11857 0, 20, 20, SigIeLinkIdentifier, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011858 0, DOT11F_EID_LINKIDENTIFIER, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011859 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
11860
11861uint32_t dot11f_unpack_tdls_peer_traffic_rsp(tpAniSirGlobal pCtx,
11862 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011863 tDot11fTDLSPeerTrafficRsp *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011864{
11865 uint32_t i = 0;
11866 uint32_t status = 0;
11867 status = unpack_core(pCtx, pBuf, nBuf,
11868 FFS_TDLSPeerTrafficRsp, IES_TDLSPeerTrafficRsp,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011869 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011870
11871 (void)i;
11872 return status;
11873
11874} /* End dot11f_unpack_tdls_peer_traffic_rsp. */
11875
11876static const tFFDefn FFS_TDLSSetupCnf[] = {
11877 { "Category", offsetof(tDot11fTDLSSetupCnf, Category), SigFfCategory,
11878 DOT11F_FF_CATEGORY_LEN, },
11879 { "Action", offsetof(tDot11fTDLSSetupCnf, Action), SigFfAction,
11880 DOT11F_FF_ACTION_LEN, },
11881 { "Status", offsetof(tDot11fTDLSSetupCnf, Status), SigFfStatus,
11882 DOT11F_FF_STATUS_LEN, },
11883 { "DialogToken", offsetof(tDot11fTDLSSetupCnf, DialogToken),
11884 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
11885 { NULL, 0, 0, 0,},
11886};
11887
11888static const tIEDefn IES_TDLSSetupCnf[] = {
11889 { offsetof(tDot11fTDLSSetupCnf, RSN), offsetof(tDot11fIERSN, present), 0,
Abhishek Singh7dcb85b2017-12-27 15:15:01 +053011890 "RSN", 0, 4, 132, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011891 { offsetof(tDot11fTDLSSetupCnf, EDCAParamSet),
11892 offsetof(tDot11fIEEDCAParamSet, present), 0, "EDCAParamSet",
11893 0, 20, 20, SigIeEDCAParamSet, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011894 0, DOT11F_EID_EDCAPARAMSET, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011895 { offsetof(tDot11fTDLSSetupCnf, FTInfo), offsetof(tDot11fIEFTInfo,
11896 present), 0, "FTInfo", 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011897 0, DOT11F_EID_FTINFO, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011898 { offsetof(tDot11fTDLSSetupCnf, TimeoutInterval),
11899 offsetof(tDot11fIETimeoutInterval, present), 0, "TimeoutInterval",
11900 0, 7, 7, SigIeTimeoutInterval, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011901 0, DOT11F_EID_TIMEOUTINTERVAL, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011902 { offsetof(tDot11fTDLSSetupCnf, HTInfo), offsetof(tDot11fIEHTInfo,
11903 present), 0, "HTInfo", 0, 24, 56, SigIeHTInfo, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011904 0, DOT11F_EID_HTINFO, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011905 { offsetof(tDot11fTDLSSetupCnf, LinkIdentifier),
11906 offsetof(tDot11fIELinkIdentifier, present), 0, "LinkIdentifier",
11907 0, 20, 20, SigIeLinkIdentifier, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011908 0, DOT11F_EID_LINKIDENTIFIER, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011909 { offsetof(tDot11fTDLSSetupCnf, WMMParams), offsetof(tDot11fIEWMMParams,
11910 present), 0, "WMMParams", 0, 26, 26, SigIeWMMParams, {0, 80, 242, 2, 1},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011911 5, DOT11F_EID_WMMPARAMS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011912 { offsetof(tDot11fTDLSSetupCnf, VHTOperation),
11913 offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation",
11914 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011915 0, DOT11F_EID_VHTOPERATION, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011916 { offsetof(tDot11fTDLSSetupCnf, OperatingMode),
11917 offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode",
11918 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011919 0, DOT11F_EID_OPERATINGMODE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011920 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
11921
11922uint32_t dot11f_unpack_tdls_setup_cnf(tpAniSirGlobal pCtx,
11923 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011924 tDot11fTDLSSetupCnf *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011925{
11926 uint32_t i = 0;
11927 uint32_t status = 0;
11928 status = unpack_core(pCtx, pBuf, nBuf,
11929 FFS_TDLSSetupCnf, IES_TDLSSetupCnf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011930 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011931
11932 (void)i;
11933 return status;
11934
11935} /* End dot11f_unpack_tdls_setup_cnf. */
11936
11937static const tFFDefn FFS_TDLSSetupReq[] = {
11938 { "Category", offsetof(tDot11fTDLSSetupReq, Category), SigFfCategory,
11939 DOT11F_FF_CATEGORY_LEN, },
11940 { "Action", offsetof(tDot11fTDLSSetupReq, Action), SigFfAction,
11941 DOT11F_FF_ACTION_LEN, },
11942 { "DialogToken", offsetof(tDot11fTDLSSetupReq, DialogToken),
11943 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
11944 { "Capabilities", offsetof(tDot11fTDLSSetupReq, Capabilities),
11945 SigFfCapabilities, DOT11F_FF_CAPABILITIES_LEN, },
11946 { NULL, 0, 0, 0,},
11947};
11948
11949static const tIEDefn IES_TDLSSetupReq[] = {
11950 { offsetof(tDot11fTDLSSetupReq, SuppRates), offsetof(tDot11fIESuppRates,
11951 present), 0, "SuppRates", 0, 2, 14, SigIeSuppRates, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011952 0, DOT11F_EID_SUPPRATES, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011953 { offsetof(tDot11fTDLSSetupReq, Country), offsetof(tDot11fIECountry,
11954 present), 0, "Country", 0, 5, 257, SigIeCountry, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011955 0, DOT11F_EID_COUNTRY, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011956 { offsetof(tDot11fTDLSSetupReq, ExtSuppRates),
11957 offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates",
11958 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011959 0, DOT11F_EID_EXTSUPPRATES, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011960 { offsetof(tDot11fTDLSSetupReq, SuppChannels),
11961 offsetof(tDot11fIESuppChannels, present), 0, "SuppChannels",
Vignesh Viswanathan7813a3d2018-08-27 19:09:00 +053011962 0, 2, 98, SigIeSuppChannels, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011963 0, DOT11F_EID_SUPPCHANNELS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011964 { offsetof(tDot11fTDLSSetupReq, RSN), offsetof(tDot11fIERSN, present), 0,
Abhishek Singh7dcb85b2017-12-27 15:15:01 +053011965 "RSN", 0, 4, 132, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011966 { offsetof(tDot11fTDLSSetupReq, ExtCap), offsetof(tDot11fIEExtCap,
Selvaraj, Sridhar2c46d832017-03-13 17:55:48 +053011967 present), 0, "ExtCap", 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011968 0, DOT11F_EID_EXTCAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011969 { offsetof(tDot11fTDLSSetupReq, SuppOperatingClasses),
11970 offsetof(tDot11fIESuppOperatingClasses, present), 0,
11971 "SuppOperatingClasses", 0, 3, 34, SigIeSuppOperatingClasses,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011972 {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPOPERATINGCLASSES, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011973 { offsetof(tDot11fTDLSSetupReq, QOSCapsStation),
11974 offsetof(tDot11fIEQOSCapsStation, present), 0, "QOSCapsStation",
11975 0, 3, 3, SigIeQOSCapsStation, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011976 0, DOT11F_EID_QOSCAPSSTATION, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011977 { offsetof(tDot11fTDLSSetupReq, FTInfo), offsetof(tDot11fIEFTInfo,
11978 present), 0, "FTInfo", 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011979 0, DOT11F_EID_FTINFO, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011980 { offsetof(tDot11fTDLSSetupReq, TimeoutInterval),
11981 offsetof(tDot11fIETimeoutInterval, present), 0, "TimeoutInterval",
11982 0, 7, 7, SigIeTimeoutInterval, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011983 0, DOT11F_EID_TIMEOUTINTERVAL, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011984 { offsetof(tDot11fTDLSSetupReq, RICData), offsetof(tDot11fIERICData,
11985 present), 0, "RICData", 0, 6, 6, SigIeRICData, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011986 0, DOT11F_EID_RICDATA, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011987 { offsetof(tDot11fTDLSSetupReq, HTCaps), offsetof(tDot11fIEHTCaps,
11988 present), 0, "HTCaps", 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011989 0, DOT11F_EID_HTCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011990 { offsetof(tDot11fTDLSSetupReq, ht2040_bss_coexistence),
11991 offsetof(tDot11fIEht2040_bss_coexistence, present), 0,
11992 "ht2040_bss_coexistence", 0, 3, 3, SigIeht2040_bss_coexistence,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011993 {0, 0, 0, 0, 0}, 0, DOT11F_EID_HT2040_BSS_COEXISTENCE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011994 { offsetof(tDot11fTDLSSetupReq, LinkIdentifier),
11995 offsetof(tDot11fIELinkIdentifier, present), 0, "LinkIdentifier",
11996 0, 20, 20, SigIeLinkIdentifier, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053011997 0, DOT11F_EID_LINKIDENTIFIER, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080011998 { offsetof(tDot11fTDLSSetupReq, WMMInfoStation),
11999 offsetof(tDot11fIEWMMInfoStation, present), 0, "WMMInfoStation",
12000 0, 9, 9, SigIeWMMInfoStation, {0, 80, 242, 2, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012001 5, DOT11F_EID_WMMINFOSTATION, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012002 { offsetof(tDot11fTDLSSetupReq, AID), offsetof(tDot11fIEAID, present), 0,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012003 "AID", 0, 4, 4, SigIeAID, {0, 0, 0, 0, 0}, 0, DOT11F_EID_AID, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012004 { offsetof(tDot11fTDLSSetupReq, VHTCaps), offsetof(tDot11fIEVHTCaps,
12005 present), 0, "VHTCaps", 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012006 0, DOT11F_EID_VHTCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012007 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
12008
12009uint32_t dot11f_unpack_tdls_setup_req(tpAniSirGlobal pCtx,
12010 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012011 tDot11fTDLSSetupReq *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012012{
12013 uint32_t i = 0;
12014 uint32_t status = 0;
12015 status = unpack_core(pCtx, pBuf, nBuf,
12016 FFS_TDLSSetupReq, IES_TDLSSetupReq,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012017 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012018
12019 (void)i;
12020 return status;
12021
12022} /* End dot11f_unpack_tdls_setup_req. */
12023
12024static const tFFDefn FFS_TDLSSetupRsp[] = {
12025 { "Category", offsetof(tDot11fTDLSSetupRsp, Category), SigFfCategory,
12026 DOT11F_FF_CATEGORY_LEN, },
12027 { "Action", offsetof(tDot11fTDLSSetupRsp, Action), SigFfAction,
12028 DOT11F_FF_ACTION_LEN, },
12029 { "Status", offsetof(tDot11fTDLSSetupRsp, Status), SigFfStatus,
12030 DOT11F_FF_STATUS_LEN, },
12031 { "DialogToken", offsetof(tDot11fTDLSSetupRsp, DialogToken),
12032 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
12033 { "Capabilities", offsetof(tDot11fTDLSSetupRsp, Capabilities),
12034 SigFfCapabilities, DOT11F_FF_CAPABILITIES_LEN, },
12035 { NULL, 0, 0, 0,},
12036};
12037
12038static const tIEDefn IES_TDLSSetupRsp[] = {
12039 { offsetof(tDot11fTDLSSetupRsp, SuppRates), offsetof(tDot11fIESuppRates,
12040 present), 0, "SuppRates", 0, 2, 14, SigIeSuppRates, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012041 0, DOT11F_EID_SUPPRATES, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012042 { offsetof(tDot11fTDLSSetupRsp, Country), offsetof(tDot11fIECountry,
12043 present), 0, "Country", 0, 5, 257, SigIeCountry, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012044 0, DOT11F_EID_COUNTRY, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012045 { offsetof(tDot11fTDLSSetupRsp, ExtSuppRates),
12046 offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates",
12047 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012048 0, DOT11F_EID_EXTSUPPRATES, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012049 { offsetof(tDot11fTDLSSetupRsp, SuppChannels),
12050 offsetof(tDot11fIESuppChannels, present), 0, "SuppChannels",
Vignesh Viswanathan7813a3d2018-08-27 19:09:00 +053012051 0, 2, 98, SigIeSuppChannels, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012052 0, DOT11F_EID_SUPPCHANNELS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012053 { offsetof(tDot11fTDLSSetupRsp, RSN), offsetof(tDot11fIERSN, present), 0,
Abhishek Singh7dcb85b2017-12-27 15:15:01 +053012054 "RSN", 0, 4, 132, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012055 { offsetof(tDot11fTDLSSetupRsp, ExtCap), offsetof(tDot11fIEExtCap,
Selvaraj, Sridhar2c46d832017-03-13 17:55:48 +053012056 present), 0, "ExtCap", 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012057 0, DOT11F_EID_EXTCAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012058 { offsetof(tDot11fTDLSSetupRsp, SuppOperatingClasses),
12059 offsetof(tDot11fIESuppOperatingClasses, present), 0,
12060 "SuppOperatingClasses", 0, 3, 34, SigIeSuppOperatingClasses,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012061 {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPOPERATINGCLASSES, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012062 { offsetof(tDot11fTDLSSetupRsp, QOSCapsStation),
12063 offsetof(tDot11fIEQOSCapsStation, present), 0, "QOSCapsStation",
12064 0, 3, 3, SigIeQOSCapsStation, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012065 0, DOT11F_EID_QOSCAPSSTATION, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012066 { offsetof(tDot11fTDLSSetupRsp, FTInfo), offsetof(tDot11fIEFTInfo,
12067 present), 0, "FTInfo", 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012068 0, DOT11F_EID_FTINFO, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012069 { offsetof(tDot11fTDLSSetupRsp, TimeoutInterval),
12070 offsetof(tDot11fIETimeoutInterval, present), 0, "TimeoutInterval",
12071 0, 7, 7, SigIeTimeoutInterval, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012072 0, DOT11F_EID_TIMEOUTINTERVAL, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012073 { offsetof(tDot11fTDLSSetupRsp, RICData), offsetof(tDot11fIERICData,
12074 present), 0, "RICData", 0, 6, 6, SigIeRICData, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012075 0, DOT11F_EID_RICDATA, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012076 { offsetof(tDot11fTDLSSetupRsp, HTCaps), offsetof(tDot11fIEHTCaps,
12077 present), 0, "HTCaps", 0, 28, 60, SigIeHTCaps, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012078 0, DOT11F_EID_HTCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012079 { offsetof(tDot11fTDLSSetupRsp, ht2040_bss_coexistence),
12080 offsetof(tDot11fIEht2040_bss_coexistence, present), 0,
12081 "ht2040_bss_coexistence", 0, 3, 3, SigIeht2040_bss_coexistence,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012082 {0, 0, 0, 0, 0}, 0, DOT11F_EID_HT2040_BSS_COEXISTENCE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012083 { offsetof(tDot11fTDLSSetupRsp, LinkIdentifier),
12084 offsetof(tDot11fIELinkIdentifier, present), 0, "LinkIdentifier",
12085 0, 20, 20, SigIeLinkIdentifier, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012086 0, DOT11F_EID_LINKIDENTIFIER, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012087 { offsetof(tDot11fTDLSSetupRsp, WMMInfoStation),
12088 offsetof(tDot11fIEWMMInfoStation, present), 0, "WMMInfoStation",
12089 0, 9, 9, SigIeWMMInfoStation, {0, 80, 242, 2, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012090 5, DOT11F_EID_WMMINFOSTATION, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012091 { offsetof(tDot11fTDLSSetupRsp, AID), offsetof(tDot11fIEAID, present), 0,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012092 "AID", 0, 4, 4, SigIeAID, {0, 0, 0, 0, 0}, 0, DOT11F_EID_AID, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012093 { offsetof(tDot11fTDLSSetupRsp, VHTCaps), offsetof(tDot11fIEVHTCaps,
12094 present), 0, "VHTCaps", 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012095 0, DOT11F_EID_VHTCAPS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012096 { offsetof(tDot11fTDLSSetupRsp, OperatingMode),
12097 offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode",
12098 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012099 0, DOT11F_EID_OPERATINGMODE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012100 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
12101
12102uint32_t dot11f_unpack_tdls_setup_rsp(tpAniSirGlobal pCtx,
12103 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012104 tDot11fTDLSSetupRsp *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012105{
12106 uint32_t i = 0;
12107 uint32_t status = 0;
12108 status = unpack_core(pCtx, pBuf, nBuf,
12109 FFS_TDLSSetupRsp, IES_TDLSSetupRsp,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012110 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012111
12112 (void)i;
12113 return status;
12114
12115} /* End dot11f_unpack_tdls_setup_rsp. */
12116
12117static const tFFDefn FFS_TDLSTeardown[] = {
12118 { "Category", offsetof(tDot11fTDLSTeardown, Category), SigFfCategory,
12119 DOT11F_FF_CATEGORY_LEN, },
12120 { "Action", offsetof(tDot11fTDLSTeardown, Action), SigFfAction,
12121 DOT11F_FF_ACTION_LEN, },
12122 { "Reason", offsetof(tDot11fTDLSTeardown, Reason), SigFfReason,
12123 DOT11F_FF_REASON_LEN, },
12124 { NULL, 0, 0, 0,},
12125};
12126
12127static const tIEDefn IES_TDLSTeardown[] = {
12128 { offsetof(tDot11fTDLSTeardown, FTInfo), offsetof(tDot11fIEFTInfo,
12129 present), 0, "FTInfo", 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012130 0, DOT11F_EID_FTINFO, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012131 { offsetof(tDot11fTDLSTeardown, LinkIdentifier),
12132 offsetof(tDot11fIELinkIdentifier, present), 0, "LinkIdentifier",
12133 0, 20, 20, SigIeLinkIdentifier, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012134 0, DOT11F_EID_LINKIDENTIFIER, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012135 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
12136
12137uint32_t dot11f_unpack_tdls_teardown(tpAniSirGlobal pCtx,
12138 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012139 tDot11fTDLSTeardown *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012140{
12141 uint32_t i = 0;
12142 uint32_t status = 0;
12143 status = unpack_core(pCtx, pBuf, nBuf,
12144 FFS_TDLSTeardown, IES_TDLSTeardown,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012145 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012146
12147 (void)i;
12148 return status;
12149
12150} /* End dot11f_unpack_tdls_teardown. */
12151
12152static const tFFDefn FFS_TPCReport[] = {
12153 { "Category", offsetof(tDot11fTPCReport, Category), SigFfCategory,
12154 DOT11F_FF_CATEGORY_LEN, },
12155 { "Action", offsetof(tDot11fTPCReport, Action), SigFfAction,
12156 DOT11F_FF_ACTION_LEN, },
12157 { "DialogToken", offsetof(tDot11fTPCReport, DialogToken),
12158 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
12159 { NULL, 0, 0, 0,},
12160};
12161
12162static const tIEDefn IES_TPCReport[] = {
12163 { offsetof(tDot11fTPCReport, TPCReport), offsetof(tDot11fIETPCReport,
12164 present), 0, "TPCReport", 0, 4, 4, SigIeTPCReport, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012165 0, DOT11F_EID_TPCREPORT, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012166 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
12167
12168uint32_t dot11f_unpack_tpc_report(tpAniSirGlobal pCtx,
12169 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012170 tDot11fTPCReport *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012171{
12172 uint32_t i = 0;
12173 uint32_t status = 0;
12174 status = unpack_core(pCtx, pBuf, nBuf,
12175 FFS_TPCReport, IES_TPCReport,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012176 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012177
12178 (void)i;
12179 return status;
12180
12181} /* End dot11f_unpack_tpc_report. */
12182
12183static const tFFDefn FFS_TPCRequest[] = {
12184 { "Category", offsetof(tDot11fTPCRequest, Category), SigFfCategory,
12185 DOT11F_FF_CATEGORY_LEN, },
12186 { "Action", offsetof(tDot11fTPCRequest, Action), SigFfAction,
12187 DOT11F_FF_ACTION_LEN, },
12188 { "DialogToken", offsetof(tDot11fTPCRequest, DialogToken),
12189 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
12190 { NULL, 0, 0, 0,},
12191};
12192
12193static const tIEDefn IES_TPCRequest[] = {
12194 { offsetof(tDot11fTPCRequest, TPCRequest), offsetof(tDot11fIETPCRequest,
12195 present), 0, "TPCRequest", 0, 2, 2, SigIeTPCRequest, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012196 0, DOT11F_EID_TPCREQUEST, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012197 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
12198
12199uint32_t dot11f_unpack_tpc_request(tpAniSirGlobal pCtx,
12200 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012201 tDot11fTPCRequest *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012202{
12203 uint32_t i = 0;
12204 uint32_t status = 0;
12205 status = unpack_core(pCtx, pBuf, nBuf,
12206 FFS_TPCRequest, IES_TPCRequest,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012207 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012208
12209 (void)i;
12210 return status;
12211
12212} /* End dot11f_unpack_tpc_request. */
12213
12214static const tFFDefn FFS_TimingAdvertisementFrame[] = {
12215 { "TimeStamp", offsetof(tDot11fTimingAdvertisementFrame, TimeStamp),
12216 SigFfTimeStamp, DOT11F_FF_TIMESTAMP_LEN, },
12217 { "Capabilities", offsetof(tDot11fTimingAdvertisementFrame,
12218 Capabilities), SigFfCapabilities, DOT11F_FF_CAPABILITIES_LEN, },
12219 { NULL, 0, 0, 0,},
12220};
12221
12222static const tIEDefn IES_TimingAdvertisementFrame[] = {
12223 { offsetof(tDot11fTimingAdvertisementFrame, Country),
12224 offsetof(tDot11fIECountry, present), 0, "Country", 0, 5, 257, SigIeCountry,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012225 {0, 0, 0, 0, 0}, 0, DOT11F_EID_COUNTRY, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012226 { offsetof(tDot11fTimingAdvertisementFrame, PowerConstraints),
12227 offsetof(tDot11fIEPowerConstraints, present), 0, "PowerConstraints",
12228 0, 3, 3, SigIePowerConstraints, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012229 0, DOT11F_EID_POWERCONSTRAINTS, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012230 { offsetof(tDot11fTimingAdvertisementFrame, TimeAdvertisement),
12231 offsetof(tDot11fIETimeAdvertisement, present), 0, "TimeAdvertisement",
12232 0, 18, 18, SigIeTimeAdvertisement, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012233 0, DOT11F_EID_TIMEADVERTISEMENT, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012234 { offsetof(tDot11fTimingAdvertisementFrame, ExtCap),
Selvaraj, Sridhar2c46d832017-03-13 17:55:48 +053012235 offsetof(tDot11fIEExtCap, present), 0, "ExtCap", 0, 3, 17, SigIeExtCap,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012236 {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012237 { offsetof(tDot11fTimingAdvertisementFrame, Vendor1IE),
12238 offsetof(tDot11fIEVendor1IE, present), 0, "Vendor1IE",
12239 0, 5, 5, SigIeVendor1IE, {0, 16, 24, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012240 3, DOT11F_EID_VENDOR1IE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012241 { offsetof(tDot11fTimingAdvertisementFrame, Vendor3IE),
12242 offsetof(tDot11fIEVendor3IE, present), 0, "Vendor3IE",
12243 0, 5, 5, SigIeVendor3IE, {0, 22, 50, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012244 3, DOT11F_EID_VENDOR3IE, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012245 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
12246
12247uint32_t dot11f_unpack_timing_advertisement_frame(tpAniSirGlobal pCtx,
12248 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012249 tDot11fTimingAdvertisementFrame *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012250{
12251 uint32_t i = 0;
12252 uint32_t status = 0;
12253 status = unpack_core(pCtx, pBuf, nBuf,
12254 FFS_TimingAdvertisementFrame, IES_TimingAdvertisementFrame,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012255 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012256
12257 (void)i;
12258 return status;
12259
12260} /* End dot11f_unpack_timing_advertisement_frame. */
12261
12262static const tFFDefn FFS_VHTGidManagementActionFrame[] = {
12263 { "Category", offsetof(tDot11fVHTGidManagementActionFrame, Category),
12264 SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
12265 { "Action", offsetof(tDot11fVHTGidManagementActionFrame, Action),
12266 SigFfAction, DOT11F_FF_ACTION_LEN, },
12267 { "VhtMembershipStatusArray",
12268 offsetof(tDot11fVHTGidManagementActionFrame, VhtMembershipStatusArray),
12269 SigFfVhtMembershipStatusArray,
12270 DOT11F_FF_VHTMEMBERSHIPSTATUSARRAY_LEN, },
12271 { "VhtUserPositionArray", offsetof(tDot11fVHTGidManagementActionFrame,
12272 VhtUserPositionArray), SigFfVhtUserPositionArray,
12273 DOT11F_FF_VHTUSERPOSITIONARRAY_LEN, },
12274 { NULL, 0, 0, 0,},
12275};
12276
12277static const tIEDefn IES_VHTGidManagementActionFrame[] = {
12278 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
12279
12280uint32_t dot11f_unpack_vht_gid_management_action_frame(tpAniSirGlobal pCtx,
12281 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012282 tDot11fVHTGidManagementActionFrame *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012283{
12284 uint32_t i = 0;
12285 uint32_t status = 0;
12286 status = unpack_core(pCtx, pBuf, nBuf,
12287 FFS_VHTGidManagementActionFrame, IES_VHTGidManagementActionFrame,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012288 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012289
12290 (void)i;
12291 return status;
12292
12293} /* End dot11f_unpack_vht_gid_management_action_frame. */
12294
12295static const tFFDefn FFS_WMMAddTSRequest[] = {
12296 { "Category", offsetof(tDot11fWMMAddTSRequest, Category), SigFfCategory,
12297 DOT11F_FF_CATEGORY_LEN, },
12298 { "Action", offsetof(tDot11fWMMAddTSRequest, Action), SigFfAction,
12299 DOT11F_FF_ACTION_LEN, },
12300 { "DialogToken", offsetof(tDot11fWMMAddTSRequest, DialogToken),
12301 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
12302 { "StatusCode", offsetof(tDot11fWMMAddTSRequest, StatusCode),
12303 SigFfStatusCode, DOT11F_FF_STATUSCODE_LEN, },
12304 { NULL, 0, 0, 0,},
12305};
12306
12307static const tIEDefn IES_WMMAddTSRequest[] = {
12308 { offsetof(tDot11fWMMAddTSRequest, WMMTSPEC), offsetof(tDot11fIEWMMTSPEC,
12309 present), 0, "WMMTSPEC", 0, 63, 63, SigIeWMMTSPEC, {0, 80, 242, 2, 2},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012310 5, DOT11F_EID_WMMTSPEC, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012311 { offsetof(tDot11fWMMAddTSRequest, ESETrafStrmRateSet),
12312 offsetof(tDot11fIEESETrafStrmRateSet, present), 0, "ESETrafStrmRateSet",
12313 0, 7, 15, SigIeESETrafStrmRateSet, {0, 64, 150, 8, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012314 4, DOT11F_EID_ESETRAFSTRMRATESET, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012315 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
12316
12317uint32_t dot11f_unpack_wmm_add_ts_request(tpAniSirGlobal pCtx,
12318 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012319 tDot11fWMMAddTSRequest *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012320{
12321 uint32_t i = 0;
12322 uint32_t status = 0;
12323 status = unpack_core(pCtx, pBuf, nBuf,
12324 FFS_WMMAddTSRequest, IES_WMMAddTSRequest,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012325 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012326
12327 (void)i;
12328 return status;
12329
12330} /* End dot11f_unpack_wmm_add_ts_request. */
12331
12332static const tFFDefn FFS_WMMAddTSResponse[] = {
12333 { "Category", offsetof(tDot11fWMMAddTSResponse, Category), SigFfCategory,
12334 DOT11F_FF_CATEGORY_LEN, },
12335 { "Action", offsetof(tDot11fWMMAddTSResponse, Action), SigFfAction,
12336 DOT11F_FF_ACTION_LEN, },
12337 { "DialogToken", offsetof(tDot11fWMMAddTSResponse, DialogToken),
12338 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
12339 { "StatusCode", offsetof(tDot11fWMMAddTSResponse, StatusCode),
12340 SigFfStatusCode, DOT11F_FF_STATUSCODE_LEN, },
12341 { NULL, 0, 0, 0,},
12342};
12343
12344static const tIEDefn IES_WMMAddTSResponse[] = {
12345 { offsetof(tDot11fWMMAddTSResponse, WMMTSPEC),
12346 offsetof(tDot11fIEWMMTSPEC, present), 0, "WMMTSPEC",
12347 0, 63, 63, SigIeWMMTSPEC, {0, 80, 242, 2, 2},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012348 5, DOT11F_EID_WMMTSPEC, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012349 { offsetof(tDot11fWMMAddTSResponse, ESETrafStrmMet),
12350 offsetof(tDot11fIEESETrafStrmMet, present), 0, "ESETrafStrmMet",
12351 0, 10, 10, SigIeESETrafStrmMet, {0, 64, 150, 7, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012352 4, DOT11F_EID_ESETRAFSTRMMET, 0, 0, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012353 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
12354
12355uint32_t dot11f_unpack_wmm_add_ts_response(tpAniSirGlobal pCtx,
12356 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012357 tDot11fWMMAddTSResponse *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012358{
12359 uint32_t i = 0;
12360 uint32_t status = 0;
12361 status = unpack_core(pCtx, pBuf, nBuf,
12362 FFS_WMMAddTSResponse, IES_WMMAddTSResponse,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012363 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012364
12365 (void)i;
12366 return status;
12367
12368} /* End dot11f_unpack_wmm_add_ts_response. */
12369
12370static const tFFDefn FFS_WMMDelTS[] = {
12371 { "Category", offsetof(tDot11fWMMDelTS, Category), SigFfCategory,
12372 DOT11F_FF_CATEGORY_LEN, },
12373 { "Action", offsetof(tDot11fWMMDelTS, Action), SigFfAction,
12374 DOT11F_FF_ACTION_LEN, },
12375 { "DialogToken", offsetof(tDot11fWMMDelTS, DialogToken), SigFfDialogToken,
12376 DOT11F_FF_DIALOGTOKEN_LEN, },
12377 { "StatusCode", offsetof(tDot11fWMMDelTS, StatusCode), SigFfStatusCode,
12378 DOT11F_FF_STATUSCODE_LEN, },
12379 { NULL, 0, 0, 0,},
12380};
12381
12382static const tIEDefn IES_WMMDelTS[] = {
12383 { offsetof(tDot11fWMMDelTS, WMMTSPEC), offsetof(tDot11fIEWMMTSPEC,
12384 present), 0, "WMMTSPEC", 0, 63, 63, SigIeWMMTSPEC, {0, 80, 242, 2, 2},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012385 5, DOT11F_EID_WMMTSPEC, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012386 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
12387
12388uint32_t dot11f_unpack_wmm_del_ts(tpAniSirGlobal pCtx,
12389 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012390 tDot11fWMMDelTS *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012391{
12392 uint32_t i = 0;
12393 uint32_t status = 0;
12394 status = unpack_core(pCtx, pBuf, nBuf,
12395 FFS_WMMDelTS, IES_WMMDelTS,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012396 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012397
12398 (void)i;
12399 return status;
12400
12401} /* End dot11f_unpack_wmm_del_ts. */
12402
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -080012403static const tFFDefn FFS_addba_req[] = {
12404 { "Category", offsetof(tDot11faddba_req, Category), SigFfCategory,
12405 DOT11F_FF_CATEGORY_LEN, },
12406 { "Action", offsetof(tDot11faddba_req, Action), SigFfAction,
12407 DOT11F_FF_ACTION_LEN, },
12408 { "DialogToken", offsetof(tDot11faddba_req, DialogToken),
12409 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
12410 { "addba_param_set", offsetof(tDot11faddba_req, addba_param_set),
12411 SigFfaddba_param_set, DOT11F_FF_ADDBA_PARAM_SET_LEN, },
12412 { "ba_timeout", offsetof(tDot11faddba_req, ba_timeout), SigFfba_timeout,
12413 DOT11F_FF_BA_TIMEOUT_LEN, },
12414 { "ba_start_seq_ctrl", offsetof(tDot11faddba_req, ba_start_seq_ctrl),
12415 SigFfba_start_seq_ctrl, DOT11F_FF_BA_START_SEQ_CTRL_LEN, },
12416 { NULL, 0, 0, 0,},
12417};
12418
12419static const tIEDefn IES_addba_req[] = {
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080012420 { offsetof(tDot11faddba_req, addba_extn_element),
12421 offsetof(tDot11fIEaddba_extn_element, present), 0, "addba_extn_element",
12422 0, 3, 3, SigIeaddba_extn_element, {0, 0, 0, 0, 0},
12423 0, DOT11F_EID_ADDBA_EXTN_ELEMENT, 0, 0, },
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -080012424 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
12425
12426uint32_t dot11f_unpack_addba_req(tpAniSirGlobal pCtx,
12427 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012428 tDot11faddba_req *pFrm, bool append_ie)
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -080012429{
12430 uint32_t i = 0;
12431 uint32_t status = 0;
12432 status = unpack_core(pCtx, pBuf, nBuf,
12433 FFS_addba_req, IES_addba_req,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012434 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -080012435
12436 (void)i;
12437 return status;
12438
12439} /* End dot11f_unpack_addba_req. */
12440
12441static const tFFDefn FFS_addba_rsp[] = {
12442 { "Category", offsetof(tDot11faddba_rsp, Category), SigFfCategory,
12443 DOT11F_FF_CATEGORY_LEN, },
12444 { "Action", offsetof(tDot11faddba_rsp, Action), SigFfAction,
12445 DOT11F_FF_ACTION_LEN, },
12446 { "DialogToken", offsetof(tDot11faddba_rsp, DialogToken),
12447 SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
12448 { "Status", offsetof(tDot11faddba_rsp, Status), SigFfStatus,
12449 DOT11F_FF_STATUS_LEN, },
12450 { "addba_param_set", offsetof(tDot11faddba_rsp, addba_param_set),
12451 SigFfaddba_param_set, DOT11F_FF_ADDBA_PARAM_SET_LEN, },
12452 { "ba_timeout", offsetof(tDot11faddba_rsp, ba_timeout), SigFfba_timeout,
12453 DOT11F_FF_BA_TIMEOUT_LEN, },
12454 { NULL, 0, 0, 0,},
12455};
12456
12457static const tIEDefn IES_addba_rsp[] = {
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080012458 { offsetof(tDot11faddba_rsp, addba_extn_element),
12459 offsetof(tDot11fIEaddba_extn_element, present), 0, "addba_extn_element",
12460 0, 3, 3, SigIeaddba_extn_element, {0, 0, 0, 0, 0},
12461 0, DOT11F_EID_ADDBA_EXTN_ELEMENT, 0, 0, },
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -080012462 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
12463
12464uint32_t dot11f_unpack_addba_rsp(tpAniSirGlobal pCtx,
12465 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012466 tDot11faddba_rsp *pFrm, bool append_ie)
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -080012467{
12468 uint32_t i = 0;
12469 uint32_t status = 0;
12470 status = unpack_core(pCtx, pBuf, nBuf,
12471 FFS_addba_rsp, IES_addba_rsp,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012472 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -080012473
12474 (void)i;
12475 return status;
12476
12477} /* End dot11f_unpack_addba_rsp. */
12478
12479static const tFFDefn FFS_delba_req[] = {
12480 { "Category", offsetof(tDot11fdelba_req, Category), SigFfCategory,
12481 DOT11F_FF_CATEGORY_LEN, },
12482 { "Action", offsetof(tDot11fdelba_req, Action), SigFfAction,
12483 DOT11F_FF_ACTION_LEN, },
12484 { "delba_param_set", offsetof(tDot11fdelba_req, delba_param_set),
12485 SigFfdelba_param_set, DOT11F_FF_DELBA_PARAM_SET_LEN, },
12486 { "Reason", offsetof(tDot11fdelba_req, Reason), SigFfReason,
12487 DOT11F_FF_REASON_LEN, },
12488 { NULL, 0, 0, 0,},
12489};
12490
12491static const tIEDefn IES_delba_req[] = {
12492 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
12493
12494uint32_t dot11f_unpack_delba_req(tpAniSirGlobal pCtx,
12495 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012496 tDot11fdelba_req *pFrm, bool append_ie)
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -080012497{
12498 uint32_t i = 0;
12499 uint32_t status = 0;
12500 status = unpack_core(pCtx, pBuf, nBuf,
12501 FFS_delba_req, IES_delba_req,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012502 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -080012503
12504 (void)i;
12505 return status;
12506
12507} /* End dot11f_unpack_delba_req. */
12508
Abhishek Singh518323d2015-10-19 17:42:01 +053012509static const tFFDefn FFS_ext_channel_switch_action_frame[] = {
12510 { "Category", offsetof(tDot11fext_channel_switch_action_frame, Category),
12511 SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
12512 { "Action", offsetof(tDot11fext_channel_switch_action_frame, Action),
12513 SigFfAction, DOT11F_FF_ACTION_LEN, },
12514 { "ext_chan_switch_ann_action",
12515 offsetof(tDot11fext_channel_switch_action_frame,
12516 ext_chan_switch_ann_action), SigFfext_chan_switch_ann_action,
12517 DOT11F_FF_EXT_CHAN_SWITCH_ANN_ACTION_LEN, },
12518 { NULL, 0, 0, 0,},
12519};
12520
12521static const tIEDefn IES_ext_channel_switch_action_frame[] = {
Vignesh Viswanathan93b7f702017-12-19 17:48:45 +053012522 { offsetof(tDot11fext_channel_switch_action_frame,
12523 WiderBWChanSwitchAnn), offsetof(tDot11fIEWiderBWChanSwitchAnn, present),
12524 0, "WiderBWChanSwitchAnn", 0, 5, 5, SigIeWiderBWChanSwitchAnn,
12525 {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, 0, },
Abhishek Singh518323d2015-10-19 17:42:01 +053012526 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
12527
12528uint32_t dot11f_unpack_ext_channel_switch_action_frame(tpAniSirGlobal pCtx,
12529 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012530 tDot11fext_channel_switch_action_frame *pFrm, bool append_ie)
Abhishek Singh518323d2015-10-19 17:42:01 +053012531{
12532 uint32_t i = 0;
12533 uint32_t status = 0;
12534 status = unpack_core(pCtx, pBuf, nBuf,
12535 FFS_ext_channel_switch_action_frame, IES_ext_channel_switch_action_frame,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012536 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Abhishek Singh518323d2015-10-19 17:42:01 +053012537
12538 (void)i;
12539 return status;
12540
12541} /* End dot11f_unpack_ext_channel_switch_action_frame. */
12542
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012543static const tFFDefn FFS_ht2040_bss_coexistence_mgmt_action_frame[] = {
12544 { "Category", offsetof(tDot11fht2040_bss_coexistence_mgmt_action_frame,
12545 Category), SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
12546 { "Action", offsetof(tDot11fht2040_bss_coexistence_mgmt_action_frame,
12547 Action), SigFfAction, DOT11F_FF_ACTION_LEN, },
12548 { NULL, 0, 0, 0,},
12549};
12550
12551static const tIEDefn IES_ht2040_bss_coexistence_mgmt_action_frame[] = {
12552 { offsetof(tDot11fht2040_bss_coexistence_mgmt_action_frame,
12553 ht2040_bss_coexistence), offsetof(tDot11fIEht2040_bss_coexistence,
12554 present), 0, "ht2040_bss_coexistence",
12555 0, 3, 3, SigIeht2040_bss_coexistence, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012556 0, DOT11F_EID_HT2040_BSS_COEXISTENCE, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012557 { offsetof(tDot11fht2040_bss_coexistence_mgmt_action_frame,
12558 ht2040_bss_intolerant_report),
12559 offsetof(tDot11fIEht2040_bss_intolerant_report, present), 0,
12560 "ht2040_bss_intolerant_report",
12561 0, 3, 53, SigIeht2040_bss_intolerant_report, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012562 0, DOT11F_EID_HT2040_BSS_INTOLERANT_REPORT, 0, 1, },
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012563 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
12564
12565uint32_t dot11f_unpack_ht2040_bss_coexistence_mgmt_action_frame(tpAniSirGlobal pCtx,
12566 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012567 tDot11fht2040_bss_coexistence_mgmt_action_frame *pFrm, bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012568{
12569 uint32_t i = 0;
12570 uint32_t status = 0;
12571 status = unpack_core(pCtx, pBuf, nBuf,
12572 FFS_ht2040_bss_coexistence_mgmt_action_frame, IES_ht2040_bss_coexistence_mgmt_action_frame,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012573 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012574
12575 (void)i;
12576 return status;
12577
12578} /* End dot11f_unpack_ht2040_bss_coexistence_mgmt_action_frame. */
12579
Abhishek Singh5695e2a2016-10-28 10:39:12 +053012580static const tFFDefn FFS_p2p_oper_chan_change_confirm[] = {
12581 { "Category", offsetof(tDot11fp2p_oper_chan_change_confirm, Category),
12582 SigFfCategory, DOT11F_FF_CATEGORY_LEN, },
12583 { "p2p_action_oui", offsetof(tDot11fp2p_oper_chan_change_confirm,
12584 p2p_action_oui), SigFfp2p_action_oui, DOT11F_FF_P2P_ACTION_OUI_LEN, },
12585 { "p2p_action_subtype", offsetof(tDot11fp2p_oper_chan_change_confirm,
12586 p2p_action_subtype), SigFfp2p_action_subtype,
12587 DOT11F_FF_P2P_ACTION_SUBTYPE_LEN, },
12588 { "DialogToken", offsetof(tDot11fp2p_oper_chan_change_confirm,
12589 DialogToken), SigFfDialogToken, DOT11F_FF_DIALOGTOKEN_LEN, },
12590 { NULL, 0, 0, 0,},
12591};
12592
12593static const tIEDefn IES_p2p_oper_chan_change_confirm[] = {
12594 { offsetof(tDot11fp2p_oper_chan_change_confirm, HTCaps),
12595 offsetof(tDot11fIEHTCaps, present), 0, "HTCaps", 0, 28, 60, SigIeHTCaps,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012596 {0, 0, 0, 0, 0}, 0, DOT11F_EID_HTCAPS, 0, 0, },
Abhishek Singh5695e2a2016-10-28 10:39:12 +053012597 { offsetof(tDot11fp2p_oper_chan_change_confirm, VHTCaps),
12598 offsetof(tDot11fIEVHTCaps, present), 0, "VHTCaps", 0, 14, 14, SigIeVHTCaps,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012599 {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTCAPS, 0, 0, },
Abhishek Singh5695e2a2016-10-28 10:39:12 +053012600 { offsetof(tDot11fp2p_oper_chan_change_confirm, OperatingMode),
12601 offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode",
12602 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0},
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012603 0, DOT11F_EID_OPERATINGMODE, 0, 0, },
Abhishek Singh5695e2a2016-10-28 10:39:12 +053012604 {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
12605
12606uint32_t dot11f_unpack_p2p_oper_chan_change_confirm(tpAniSirGlobal pCtx,
12607 uint8_t *pBuf, uint32_t nBuf,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012608 tDot11fp2p_oper_chan_change_confirm *pFrm, bool append_ie)
Abhishek Singh5695e2a2016-10-28 10:39:12 +053012609{
12610 uint32_t i = 0;
12611 uint32_t status = 0;
12612 status = unpack_core(pCtx, pBuf, nBuf,
12613 FFS_p2p_oper_chan_change_confirm, IES_p2p_oper_chan_change_confirm,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012614 (uint8_t *)pFrm, sizeof(*pFrm), append_ie);
Abhishek Singh5695e2a2016-10-28 10:39:12 +053012615
12616 (void)i;
12617 return status;
12618
12619} /* End dot11f_unpack_p2p_oper_chan_change_confirm. */
12620
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012621/**
12622 * Note: If @append_ie is set TRUE, pFrm will not be reset to zero,
12623 * but parsed IE's would be populated to pFrm with already
12624 * populated IE's in pFrm
12625 */
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012626static uint32_t unpack_core(tpAniSirGlobal pCtx,
12627 uint8_t *pBuf,
12628 uint32_t nBuf,
12629 const tFFDefn FFs[],
12630 const tIEDefn IEs[],
12631 uint8_t *pFrm,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012632 size_t nFrm,
12633 bool append_ie)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012634{
12635 const tFFDefn *pFf;
12636 const tIEDefn *pIe;
12637 uint8_t *pBufRemaining;
Naveen Rawat9c13ac52017-10-20 13:48:03 -070012638 uint32_t nBufRemaining, status;
12639 uint8_t eid, len, extn_eid;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012640 tFRAMES_BOOL *pfFound;
12641 uint32_t countOffset = 0;
12642
12643 DOT11F_PARAMETER_CHECK(pBuf, nBuf, pFrm, nFrm);
12644 (void)nFrm;
12645
12646 (void)pCtx;
12647 status = DOT11F_PARSE_SUCCESS;
12648 pBufRemaining = pBuf;
12649 nBufRemaining = nBuf;
12650
12651 pIe = &IEs[0];
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012652 while (!append_ie && (0xff != pIe->eid || pIe->extn_eid)) {
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012653 pfFound = (tFRAMES_BOOL *)(pFrm + pIe->offset +
12654 pIe->presenceOffset);
12655 *pfFound = 0U;
12656 if (pIe->countOffset)
12657 *(uint16_t *)(pFrm + pIe->countOffset) = 0U;
12658 ++pIe;
12659 }
12660
12661 pFf = &FFs[0];
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012662 while (!append_ie && pFf->size) {
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012663 if (pFf->size > nBufRemaining) {
12664 FRAMES_LOG3(pCtx, FRLOGE, FRFL("Fixed field %s is %d"
12665 "bytes in size, but there are only %d bytes left i"
12666 "n this frame.\n"), pFf->name, pFf->size,
12667 nBufRemaining);
12668 FRAMES_DBG_BREAK();
12669 return DOT11F_MISSING_FIXED_FIELD;
12670 }
12671
12672 switch (pFf->sig) {
12673
12674 case SigFfAID:
12675 dot11f_unpack_ff_common_func(pCtx,
12676 pBufRemaining, (uint16_t *)&(((tDot11fFfAID *)
12677 (pFrm + pFf->offset))->associd));
12678 break;
12679 case SigFfAction:
12680 dot11f_unpack_ff_action(pCtx,
12681 pBufRemaining, (tDot11fFfAction *)
12682 (pFrm + pFf->offset));
12683 break;
12684 case SigFfAuthAlgo:
12685 dot11f_unpack_ff_common_func(pCtx,
12686 pBufRemaining, (uint16_t *)&(((tDot11fFfAuthAlgo *)
12687 (pFrm + pFf->offset))->algo));
12688 break;
12689 case SigFfAuthSeqNo:
12690 dot11f_unpack_ff_common_func(pCtx,
12691 pBufRemaining, (uint16_t *)&(((tDot11fFfAuthSeqNo *)
12692 (pFrm + pFf->offset))->no));
12693 break;
12694 case SigFfBeaconInterval:
12695 dot11f_unpack_ff_common_func(pCtx,
12696 pBufRemaining, (uint16_t *)&(((tDot11fFfBeaconInterval *)
12697 (pFrm + pFf->offset))->interval));
12698 break;
12699 case SigFfCapabilities:
12700 dot11f_unpack_ff_capabilities(pCtx,
12701 pBufRemaining, (tDot11fFfCapabilities *)
12702 (pFrm + pFf->offset));
12703 break;
12704 case SigFfCategory:
12705 dot11f_unpack_ff_category(pCtx,
12706 pBufRemaining, (tDot11fFfCategory *)
12707 (pFrm + pFf->offset));
12708 break;
12709 case SigFfCurrentAPAddress:
12710 dot11f_unpack_ff_current_ap_address(pCtx,
12711 pBufRemaining, (tDot11fFfCurrentAPAddress *)
12712 (pFrm + pFf->offset));
12713 break;
12714 case SigFfDialogToken:
12715 dot11f_unpack_ff_dialog_token(pCtx,
12716 pBufRemaining, (tDot11fFfDialogToken *)
12717 (pFrm + pFf->offset));
12718 break;
12719 case SigFfLinkMargin:
12720 dot11f_unpack_ff_link_margin(pCtx,
12721 pBufRemaining, (tDot11fFfLinkMargin *)
12722 (pFrm + pFf->offset));
12723 break;
12724 case SigFfListenInterval:
12725 dot11f_unpack_ff_common_func(pCtx,
12726 pBufRemaining, (uint16_t *)&(((tDot11fFfListenInterval *)
12727 (pFrm + pFf->offset))->interval));
12728 break;
12729 case SigFfMaxTxPower:
12730 dot11f_unpack_ff_max_tx_power(pCtx,
12731 pBufRemaining, (tDot11fFfMaxTxPower *)
12732 (pFrm + pFf->offset));
12733 break;
12734 case SigFfNumOfRepetitions:
12735 dot11f_unpack_ff_num_of_repetitions(pCtx,
12736 pBufRemaining, (tDot11fFfNumOfRepetitions *)
12737 (pFrm + pFf->offset));
12738 break;
12739 case SigFfOperatingMode:
12740 dot11f_unpack_ff_operating_mode(pCtx,
12741 pBufRemaining, (tDot11fFfOperatingMode *)
12742 (pFrm + pFf->offset));
12743 break;
12744 case SigFfRCPI:
12745 dot11f_unpack_ff_rcpi(pCtx,
12746 pBufRemaining, (tDot11fFfRCPI *)
12747 (pFrm + pFf->offset));
12748 break;
12749 case SigFfRSNI:
12750 dot11f_unpack_ff_rsni(pCtx,
12751 pBufRemaining, (tDot11fFfRSNI *)
12752 (pFrm + pFf->offset));
12753 break;
12754 case SigFfReason:
12755 dot11f_unpack_ff_common_func(pCtx,
12756 pBufRemaining, (uint16_t *)&(((tDot11fFfReason *)
12757 (pFrm + pFf->offset))->code));
12758 break;
12759 case SigFfRxAntennaId:
12760 dot11f_unpack_ff_rx_antenna_id(pCtx,
12761 pBufRemaining, (tDot11fFfRxAntennaId *)
12762 (pFrm + pFf->offset));
12763 break;
12764 case SigFfSMPowerModeSet:
12765 dot11f_unpack_ff_sm_power_mode_set(pCtx,
12766 pBufRemaining, (tDot11fFfSMPowerModeSet *)
12767 (pFrm + pFf->offset));
12768 break;
12769 case SigFfStatus:
12770 dot11f_unpack_ff_common_func(pCtx,
12771 pBufRemaining, (uint16_t *)&(((tDot11fFfStatus *)
12772 (pFrm + pFf->offset))->status));
12773 break;
12774 case SigFfStatusCode:
12775 dot11f_unpack_ff_status_code(pCtx,
12776 pBufRemaining, (tDot11fFfStatusCode *)
12777 (pFrm + pFf->offset));
12778 break;
12779 case SigFfTPCEleID:
12780 dot11f_unpack_ff_tpc_ele_id(pCtx,
12781 pBufRemaining, (tDot11fFfTPCEleID *)
12782 (pFrm + pFf->offset));
12783 break;
12784 case SigFfTPCEleLen:
12785 dot11f_unpack_ff_tpc_ele_len(pCtx,
12786 pBufRemaining, (tDot11fFfTPCEleLen *)
12787 (pFrm + pFf->offset));
12788 break;
12789 case SigFfTSInfo:
12790 dot11f_unpack_ff_ts_info(pCtx,
12791 pBufRemaining, (tDot11fFfTSInfo *)
12792 (pFrm + pFf->offset));
12793 break;
12794 case SigFfTimeStamp:
12795 dot11f_unpack_ff_time_stamp(pCtx,
12796 pBufRemaining, (tDot11fFfTimeStamp *)
12797 (pFrm + pFf->offset));
12798 break;
12799 case SigFfTransactionId:
12800 dot11f_unpack_ff_transaction_id(pCtx,
12801 pBufRemaining, (tDot11fFfTransactionId *)
12802 (pFrm + pFf->offset));
12803 break;
12804 case SigFfTxAntennaId:
12805 dot11f_unpack_ff_tx_antenna_id(pCtx,
12806 pBufRemaining, (tDot11fFfTxAntennaId *)
12807 (pFrm + pFf->offset));
12808 break;
12809 case SigFfTxPower:
12810 dot11f_unpack_ff_tx_power(pCtx,
12811 pBufRemaining, (tDot11fFfTxPower *)
12812 (pFrm + pFf->offset));
12813 break;
12814 case SigFfVhtMembershipStatusArray:
12815 dot11f_unpack_ff_vht_membership_status_array(pCtx,
12816 pBufRemaining, (tDot11fFfVhtMembershipStatusArray *)
12817 (pFrm + pFf->offset));
12818 break;
12819 case SigFfVhtUserPositionArray:
12820 dot11f_unpack_ff_vht_user_position_array(pCtx,
12821 pBufRemaining, (tDot11fFfVhtUserPositionArray *)
12822 (pFrm + pFf->offset));
12823 break;
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -080012824 case SigFfaddba_param_set:
12825 dot11f_unpack_ff_addba_param_set(pCtx,
12826 pBufRemaining, (tDot11fFfaddba_param_set *)
12827 (pFrm + pFf->offset));
12828 break;
12829 case SigFfba_start_seq_ctrl:
12830 dot11f_unpack_ff_ba_start_seq_ctrl(pCtx,
12831 pBufRemaining, (tDot11fFfba_start_seq_ctrl *)
12832 (pFrm + pFf->offset));
12833 break;
12834 case SigFfba_timeout:
12835 dot11f_unpack_ff_ba_timeout(pCtx,
12836 pBufRemaining, (tDot11fFfba_timeout *)
12837 (pFrm + pFf->offset));
12838 break;
12839 case SigFfdelba_param_set:
12840 dot11f_unpack_ff_delba_param_set(pCtx,
12841 pBufRemaining, (tDot11fFfdelba_param_set *)
12842 (pFrm + pFf->offset));
12843 break;
Abhishek Singh518323d2015-10-19 17:42:01 +053012844 case SigFfext_chan_switch_ann_action:
12845 dot11f_unpack_ff_ext_chan_switch_ann_action(pCtx,
12846 pBufRemaining, (tDot11fFfext_chan_switch_ann_action *)
12847 (pFrm + pFf->offset));
12848 break;
Abhishek Singh5695e2a2016-10-28 10:39:12 +053012849 case SigFfp2p_action_oui:
12850 dot11f_unpack_ff_p2p_action_oui(pCtx,
12851 pBufRemaining, (tDot11fFfp2p_action_oui *)
12852 (pFrm + pFf->offset));
12853 break;
12854 case SigFfp2p_action_subtype:
12855 dot11f_unpack_ff_p2p_action_subtype(pCtx,
12856 pBufRemaining, (tDot11fFfp2p_action_subtype *)
12857 (pFrm + pFf->offset));
12858 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012859 default:
12860 FRAMES_LOG1(pCtx, FRLOGE, FRFL("INTERNAL ERROR: I don'"
12861 "t know about the FF signature %d-- this is most "
12862 "likely a 'framesc' bug.\n"), pFf->sig);
12863 return DOT11F_INTERNAL_ERROR;
12864 }
12865
12866 pBufRemaining += pFf->size;
12867 nBufRemaining -= pFf->size;
12868 ++pFf;
12869 }
12870
12871 while (nBufRemaining) {
12872 if (1 == nBufRemaining) {
12873 FRAMES_LOG0(pCtx, FRLOGE, FRFL("This frame reports "
12874 "only one byte remaining after it's fixed fields.\n"));
12875 status |= DOT11F_INCOMPLETE_IE;
12876 FRAMES_DBG_BREAK();
12877 goto MandatoryCheck;
12878 }
12879
12880 pIe = find_ie_defn(pCtx, pBufRemaining, nBufRemaining, IEs);
12881
12882 eid = *pBufRemaining++; --nBufRemaining;
12883 len = *pBufRemaining++; --nBufRemaining;
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012884 if (pIe && pIe->extn_eid) {
12885 extn_eid = *pBufRemaining++; --nBufRemaining;
12886 len--;
12887 }
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012888
12889 if (pIe && pIe->noui) {
12890 if (pIe->noui > nBufRemaining) {
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012891 FRAMES_LOG4(pCtx, FRLOGW, FRFL("IE %d extn id %d reports "
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012892 "length %d, but it has an OUI of %d bytes.\n"),
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012893 eid, extn_eid, len, pIe->noui);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012894 FRAMES_DUMP(pCtx, FRLOG1, pBuf, nBuf);
12895 FRAMES_LOG2(pCtx, FRLOG1, FRFL("We've parsed %d by"
12896 "tes of this buffer, and show %d left.\n"),
12897 pBufRemaining - pBuf, nBufRemaining);
12898 status |= DOT11F_INCOMPLETE_IE;
12899 FRAMES_DBG_BREAK();
12900 goto MandatoryCheck;
12901 }
12902 pBufRemaining += pIe->noui;
12903 nBufRemaining -= pIe->noui;
12904 len -= pIe->noui;
12905 }
12906
12907 if (len > nBufRemaining) {
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012908 FRAMES_LOG4(pCtx, FRLOGW, FRFL("IE %d extn id %d reports length %"
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012909 "d, but there are only %d bytes remaining in this"
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012910 " frame.\n"), eid, extn_eid, len, nBufRemaining);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012911 FRAMES_DUMP(pCtx, FRLOG1, pBuf, nBuf);
12912 FRAMES_LOG2(pCtx, FRLOG1, FRFL("We've parsed %d by"
12913 "tes of this buffer, and show %d left.\n"),
12914 pBufRemaining - pBuf, nBufRemaining);
12915 status |= DOT11F_INCOMPLETE_IE;
12916 FRAMES_DBG_BREAK();
12917 goto MandatoryCheck;
12918 }
12919
12920 if (pIe) {
Vignesh Viswanathanac6f2c32017-12-13 10:11:09 +053012921 if ((nBufRemaining < pIe->minSize - pIe->noui - 2U) ||
12922 (len < pIe->minSize - pIe->noui - 2U)) {
12923 FRAMES_LOG4(pCtx, FRLOGW, FRFL("The IE %s must "
12924 "be at least %d bytes in size, but "
12925 "there are only %d bytes remaining in "
12926 "this frame or the IE reports a size "
12927 "of %d bytes.\n"),
12928 pIe->name, pIe->minSize, nBufRemaining,
12929 (len + pIe->noui + 2U));
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012930 FRAMES_DUMP(pCtx, FRLOG1, pBuf, nBuf);
12931 status |= DOT11F_INCOMPLETE_IE;
12932 FRAMES_DBG_BREAK();
12933 goto MandatoryCheck;
12934 } else {
12935 if (len > pIe->maxSize - pIe->noui - 2U) {
12936 FRAMES_LOG1(pCtx, FRLOGW, FRFL("The IE %s reports "
12937 "an unexpectedly large size; it is presumably "
12938 "more up-to-date than this parser, but this wa"
12939 "rning may also indicate a corrupt frame.\n"),
12940 pIe->name);
12941 FRAMES_DUMP(pCtx, FRLOG1, pBuf, nBuf);
12942 }
12943
12944 countOffset = ((0 != pIe->arraybound) *
12945 (*(uint16_t *)(pFrm + pIe->countOffset)));
Naveen Rawat9ff3e242017-06-09 14:25:45 -070012946 if (0 != pIe->arraybound && countOffset >= pIe->arraybound) {
12947 status |= DOT11F_DUPLICATE_IE;
12948 goto skip_dup_ie;
12949 }
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012950 switch (pIe->sig) {
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012951 case SigIeGTK:
12952 status |=
12953 dot11f_unpack_ie_gtk(
12954 pCtx, pBufRemaining, len,
12955 (tDot11fIEGTK *)
12956 (pFrm + pIe->offset +
12957 sizeof(tDot11fIEGTK) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012958 countOffset),
12959 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012960 break;
12961 case SigIeIGTK:
12962 status |=
12963 dot11f_unpack_ie_igtk(
12964 pCtx, pBufRemaining, len,
12965 (tDot11fIEIGTK *)
12966 (pFrm + pIe->offset +
12967 sizeof(tDot11fIEIGTK) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012968 countOffset),
12969 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012970 break;
12971 case SigIeR0KH_ID:
12972 status |=
12973 dot11f_unpack_ie_r0_kh_id(
12974 pCtx, pBufRemaining, len,
12975 (tDot11fIER0KH_ID *)
12976 (pFrm + pIe->offset +
12977 sizeof(tDot11fIER0KH_ID) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012978 countOffset),
12979 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012980 break;
12981 case SigIeR1KH_ID:
12982 status |=
12983 dot11f_unpack_ie_r1_kh_id(
12984 pCtx, pBufRemaining, len,
12985 (tDot11fIER1KH_ID *)
12986 (pFrm + pIe->offset +
12987 sizeof(tDot11fIER1KH_ID) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012988 countOffset),
12989 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012990 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080012991 case SigIeAPChannelReport:
12992 status |=
12993 dot11f_unpack_ie_ap_channel_report(
12994 pCtx, pBufRemaining, len,
12995 (tDot11fIEAPChannelReport *)
12996 (pFrm + pIe->offset +
12997 sizeof(tDot11fIEAPChannelReport) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053012998 countOffset),
12999 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013000 break;
13001 case SigIeBcnReportingDetail:
13002 status |=
13003 dot11f_unpack_ie_bcn_reporting_detail(
13004 pCtx, pBufRemaining, len,
13005 (tDot11fIEBcnReportingDetail *)
13006 (pFrm + pIe->offset +
13007 sizeof(tDot11fIEBcnReportingDetail) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013008 countOffset),
13009 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013010 break;
13011 case SigIeBeaconReportFrmBody:
13012 status |=
13013 dot11f_unpack_ie_beacon_report_frm_body(
13014 pCtx, pBufRemaining, len,
13015 (tDot11fIEBeaconReportFrmBody *)
13016 (pFrm + pIe->offset +
13017 sizeof(tDot11fIEBeaconReportFrmBody) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013018 countOffset),
13019 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013020 break;
13021 case SigIeBeaconReporting:
13022 status |=
13023 dot11f_unpack_ie_beacon_reporting(
13024 pCtx, pBufRemaining, len,
13025 (tDot11fIEBeaconReporting *)
13026 (pFrm + pIe->offset +
13027 sizeof(tDot11fIEBeaconReporting) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013028 countOffset),
13029 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013030 break;
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080013031 case SigIeCondensedCountryStr:
13032 status |=
13033 dot11f_unpack_ie_condensed_country_str(
13034 pCtx, pBufRemaining, len,
13035 (tDot11fIECondensedCountryStr *)
13036 (pFrm + pIe->offset +
13037 sizeof(tDot11fIECondensedCountryStr) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013038 countOffset),
13039 append_ie);
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080013040 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013041 case SigIeMeasurementPilot:
13042 status |=
13043 dot11f_unpack_ie_measurement_pilot(
13044 pCtx, pBufRemaining, len,
13045 (tDot11fIEMeasurementPilot *)
13046 (pFrm + pIe->offset +
13047 sizeof(tDot11fIEMeasurementPilot) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013048 countOffset),
13049 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013050 break;
13051 case SigIeMultiBssid:
13052 status |=
13053 dot11f_unpack_ie_multi_bssid(
13054 pCtx, pBufRemaining, len,
13055 (tDot11fIEMultiBssid *)
13056 (pFrm + pIe->offset +
13057 sizeof(tDot11fIEMultiBssid) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013058 countOffset),
13059 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013060 break;
13061 case SigIeRICData:
13062 status |=
13063 dot11f_unpack_ie_ric_data(
13064 pCtx, pBufRemaining, len,
13065 (tDot11fIERICData *)
13066 (pFrm + pIe->offset +
13067 sizeof(tDot11fIERICData) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013068 countOffset),
13069 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013070 break;
13071 case SigIeRICDescriptor:
13072 status |=
13073 dot11f_unpack_ie_ric_descriptor(
13074 pCtx, pBufRemaining, len,
13075 (tDot11fIERICDescriptor *)
13076 (pFrm + pIe->offset +
13077 sizeof(tDot11fIERICDescriptor) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013078 countOffset),
13079 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013080 break;
13081 case SigIeRRMEnabledCap:
13082 status |=
13083 dot11f_unpack_ie_rrm_enabled_cap(
13084 pCtx, pBufRemaining, len,
13085 (tDot11fIERRMEnabledCap *)
13086 (pFrm + pIe->offset +
13087 sizeof(tDot11fIERRMEnabledCap) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013088 countOffset),
13089 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013090 break;
13091 case SigIeRequestedInfo:
13092 status |=
13093 dot11f_unpack_ie_requested_info(
13094 pCtx, pBufRemaining, len,
13095 (tDot11fIERequestedInfo *)
13096 (pFrm + pIe->offset +
13097 sizeof(tDot11fIERequestedInfo) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013098 countOffset),
13099 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013100 break;
13101 case SigIeSSID:
13102 status |=
13103 dot11f_unpack_ie_ssid(
13104 pCtx, pBufRemaining, len,
13105 (tDot11fIESSID *)
13106 (pFrm + pIe->offset +
13107 sizeof(tDot11fIESSID) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013108 countOffset),
13109 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013110 break;
13111 case SigIeSchedule:
13112 status |=
13113 dot11f_unpack_ie_schedule(
13114 pCtx, pBufRemaining, len,
13115 (tDot11fIESchedule *)
13116 (pFrm + pIe->offset +
13117 sizeof(tDot11fIESchedule) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013118 countOffset),
13119 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013120 break;
13121 case SigIeTCLAS:
13122 status |=
13123 dot11f_unpack_ie_tclas(
13124 pCtx, pBufRemaining, len,
13125 (tDot11fIETCLAS *)
13126 (pFrm + pIe->offset +
13127 sizeof(tDot11fIETCLAS) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013128 countOffset),
13129 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013130 break;
13131 case SigIeTCLASSPROC:
13132 status |= dot11f_unpack_ie_common_func(pCtx, pBufRemaining, len,
13133 (uint8_t *) &(((tDot11fIETCLASSPROC *)(pFrm + pIe->offset + sizeof(tDot11fIETCLASSPROC)*countOffset))->present),
13134 (uint8_t *) &(((tDot11fIETCLASSPROC *)(pFrm + pIe->offset + sizeof(tDot11fIETCLASSPROC)*countOffset))->processing));
13135 break;
13136 case SigIeTSDelay:
13137 status |=
13138 dot11f_unpack_ie_ts_delay(
13139 pCtx, pBufRemaining, len,
13140 (tDot11fIETSDelay *)
13141 (pFrm + pIe->offset +
13142 sizeof(tDot11fIETSDelay) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013143 countOffset),
13144 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013145 break;
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080013146 case SigIeTSFInfo:
13147 status |=
13148 dot11f_unpack_ie_tsf_info(
13149 pCtx, pBufRemaining, len,
13150 (tDot11fIETSFInfo *)
13151 (pFrm + pIe->offset +
13152 sizeof(tDot11fIETSFInfo) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013153 countOffset),
13154 append_ie);
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080013155 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013156 case SigIeTSPEC:
13157 status |=
13158 dot11f_unpack_ie_tspec(
13159 pCtx, pBufRemaining, len,
13160 (tDot11fIETSPEC *)
13161 (pFrm + pIe->offset +
13162 sizeof(tDot11fIETSPEC) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013163 countOffset),
13164 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013165 break;
13166 case SigIeVHTCaps:
13167 status |=
13168 dot11f_unpack_ie_vht_caps(
13169 pCtx, pBufRemaining, len,
13170 (tDot11fIEVHTCaps *)
13171 (pFrm + pIe->offset +
13172 sizeof(tDot11fIEVHTCaps) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013173 countOffset),
13174 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013175 break;
13176 case SigIeVHTOperation:
13177 status |=
13178 dot11f_unpack_ie_vht_operation(
13179 pCtx, pBufRemaining, len,
13180 (tDot11fIEVHTOperation *)
13181 (pFrm + pIe->offset +
13182 sizeof(tDot11fIEVHTOperation) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013183 countOffset),
13184 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013185 break;
13186 case SigIeWMMSchedule:
13187 status |=
13188 dot11f_unpack_ie_wmm_schedule(
13189 pCtx, pBufRemaining, len,
13190 (tDot11fIEWMMSchedule *)
13191 (pFrm + pIe->offset +
13192 sizeof(tDot11fIEWMMSchedule) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013193 countOffset),
13194 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013195 break;
13196 case SigIeWMMTCLAS:
13197 status |=
13198 dot11f_unpack_ie_wmmtclas(
13199 pCtx, pBufRemaining, len,
13200 (tDot11fIEWMMTCLAS *)
13201 (pFrm + pIe->offset +
13202 sizeof(tDot11fIEWMMTCLAS) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013203 countOffset),
13204 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013205 break;
13206 case SigIeWMMTCLASPROC:
13207 status |=
13208 dot11f_unpack_ie_wmmtclasproc(
13209 pCtx, pBufRemaining, len,
13210 (tDot11fIEWMMTCLASPROC *)
13211 (pFrm + pIe->offset +
13212 sizeof(tDot11fIEWMMTCLASPROC) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013213 countOffset),
13214 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013215 break;
13216 case SigIeWMMTSDelay:
13217 status |=
13218 dot11f_unpack_ie_wmmts_delay(
13219 pCtx, pBufRemaining, len,
13220 (tDot11fIEWMMTSDelay *)
13221 (pFrm + pIe->offset +
13222 sizeof(tDot11fIEWMMTSDelay) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013223 countOffset),
13224 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013225 break;
13226 case SigIeWMMTSPEC:
13227 status |=
13228 dot11f_unpack_ie_wmmtspec(
13229 pCtx, pBufRemaining, len,
13230 (tDot11fIEWMMTSPEC *)
13231 (pFrm + pIe->offset +
13232 sizeof(tDot11fIEWMMTSPEC) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013233 countOffset),
13234 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013235 break;
13236 case SigIeWiderBWChanSwitchAnn:
13237 status |=
13238 dot11f_unpack_ie_wider_bw_chan_switch_ann(
13239 pCtx, pBufRemaining, len,
13240 (tDot11fIEWiderBWChanSwitchAnn *)
13241 (pFrm + pIe->offset +
13242 sizeof(tDot11fIEWiderBWChanSwitchAnn) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013243 countOffset),
13244 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013245 break;
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080013246 case SigIeazimuth_req:
13247 status |=
13248 dot11f_unpack_ie_azimuth_req(
13249 pCtx, pBufRemaining, len,
13250 (tDot11fIEazimuth_req *)
13251 (pFrm + pIe->offset +
13252 sizeof(tDot11fIEazimuth_req) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013253 countOffset),
13254 append_ie);
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080013255 break;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053013256 case SigIebeacon_report_frm_body_fragment_id:
13257 status |=
13258 dot11f_unpack_ie_beacon_report_frm_body_fragment_id(
13259 pCtx, pBufRemaining, len,
13260 (tDot11fIEbeacon_report_frm_body_fragment_id *)
13261 (pFrm + pIe->offset +
13262 sizeof(tDot11fIEbeacon_report_frm_body_fragment_id) *
13263 countOffset),
13264 append_ie);
13265 break;
13266 case SigIelast_beacon_report_indication:
13267 status |=
13268 dot11f_unpack_ie_last_beacon_report_indication(
13269 pCtx, pBufRemaining, len,
13270 (tDot11fIElast_beacon_report_indication *)
13271 (pFrm + pIe->offset +
13272 sizeof(tDot11fIElast_beacon_report_indication) *
13273 countOffset),
13274 append_ie);
13275 break;
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080013276 case SigIemax_age:
13277 status |=
13278 dot11f_unpack_ie_max_age(
13279 pCtx, pBufRemaining, len,
13280 (tDot11fIEmax_age *)
13281 (pFrm + pIe->offset +
13282 sizeof(tDot11fIEmax_age) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013283 countOffset),
13284 append_ie);
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080013285 break;
13286 case SigIeneighbor_rpt:
13287 status |=
13288 dot11f_unpack_ie_neighbor_rpt(
13289 pCtx, pBufRemaining, len,
13290 (tDot11fIEneighbor_rpt *)
13291 (pFrm + pIe->offset +
13292 sizeof(tDot11fIEneighbor_rpt) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013293 countOffset),
13294 append_ie);
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080013295 break;
13296 case SigIereq_mac_addr:
13297 status |=
13298 dot11f_unpack_ie_req_mac_addr(
13299 pCtx, pBufRemaining, len,
13300 (tDot11fIEreq_mac_addr *)
13301 (pFrm + pIe->offset +
13302 sizeof(tDot11fIEreq_mac_addr) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013303 countOffset),
13304 append_ie);
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080013305 break;
13306 case SigIetgt_mac_addr:
13307 status |=
13308 dot11f_unpack_ie_tgt_mac_addr(
13309 pCtx, pBufRemaining, len,
13310 (tDot11fIEtgt_mac_addr *)
13311 (pFrm + pIe->offset +
13312 sizeof(tDot11fIEtgt_mac_addr) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013313 countOffset),
13314 append_ie);
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080013315 break;
Abhishek Singh37456d22016-08-29 16:05:11 +053013316 case SigIevht_transmit_power_env:
13317 status |=
13318 dot11f_unpack_ie_vht_transmit_power_env(
13319 pCtx, pBufRemaining, len,
13320 (tDot11fIEvht_transmit_power_env *)
13321 (pFrm + pIe->offset +
13322 sizeof(tDot11fIEvht_transmit_power_env) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013323 countOffset),
13324 append_ie);
Abhishek Singh37456d22016-08-29 16:05:11 +053013325 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013326 case SigIeAID:
13327 status |=
13328 dot11f_unpack_ie_aid(
13329 pCtx, pBufRemaining, len,
13330 (tDot11fIEAID *)
13331 (pFrm + pIe->offset +
13332 sizeof(tDot11fIEAID) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013333 countOffset),
13334 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013335 break;
13336 case SigIeCFParams:
13337 status |=
13338 dot11f_unpack_ie_cf_params(
13339 pCtx, pBufRemaining, len,
13340 (tDot11fIECFParams *)
13341 (pFrm + pIe->offset +
13342 sizeof(tDot11fIECFParams) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013343 countOffset),
13344 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013345 break;
13346 case SigIeChallengeText:
13347 status |=
13348 dot11f_unpack_ie_challenge_text(
13349 pCtx, pBufRemaining, len,
13350 (tDot11fIEChallengeText *)
13351 (pFrm + pIe->offset +
13352 sizeof(tDot11fIEChallengeText) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013353 countOffset),
13354 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013355 break;
13356 case SigIeChanSwitchAnn:
13357 status |=
13358 dot11f_unpack_ie_chan_switch_ann(
13359 pCtx, pBufRemaining, len,
13360 (tDot11fIEChanSwitchAnn *)
13361 (pFrm + pIe->offset +
13362 sizeof(tDot11fIEChanSwitchAnn) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013363 countOffset),
13364 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013365 break;
13366 case SigIeChannelSwitchWrapper:
13367 status |=
13368 dot11f_unpack_ie_channel_switch_wrapper(
13369 pCtx, pBufRemaining, len,
13370 (tDot11fIEChannelSwitchWrapper *)
13371 (pFrm + pIe->offset +
13372 sizeof(tDot11fIEChannelSwitchWrapper) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013373 countOffset),
13374 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013375 break;
13376 case SigIeCountry:
13377 status |=
13378 dot11f_unpack_ie_country(
13379 pCtx, pBufRemaining, len,
13380 (tDot11fIECountry *)
13381 (pFrm + pIe->offset +
13382 sizeof(tDot11fIECountry) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013383 countOffset),
13384 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013385 break;
13386 case SigIeDSParams:
13387 status |= dot11f_unpack_ie_common_func(pCtx, pBufRemaining, len,
13388 (uint8_t *) &(((tDot11fIEDSParams *)(pFrm + pIe->offset + sizeof(tDot11fIEDSParams)*countOffset))->present),
13389 (uint8_t *) &(((tDot11fIEDSParams *)(pFrm + pIe->offset + sizeof(tDot11fIEDSParams)*countOffset))->curr_channel));
13390 break;
13391 case SigIeEDCAParamSet:
13392 status |=
13393 dot11f_unpack_ie_edca_param_set(
13394 pCtx, pBufRemaining, len,
13395 (tDot11fIEEDCAParamSet *)
13396 (pFrm + pIe->offset +
13397 sizeof(tDot11fIEEDCAParamSet) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013398 countOffset),
13399 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013400 break;
13401 case SigIeERPInfo:
13402 status |=
13403 dot11f_unpack_ie_erp_info(
13404 pCtx, pBufRemaining, len,
13405 (tDot11fIEERPInfo *)
13406 (pFrm + pIe->offset +
13407 sizeof(tDot11fIEERPInfo) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013408 countOffset),
13409 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013410 break;
13411 case SigIeESECckmOpaque:
13412 status |=
13413 dot11f_unpack_ie_ese_cckm_opaque(
13414 pCtx, pBufRemaining, len,
13415 (tDot11fIEESECckmOpaque *)
13416 (pFrm + pIe->offset +
13417 sizeof(tDot11fIEESECckmOpaque) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013418 countOffset),
13419 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013420 break;
13421 case SigIeESERadMgmtCap:
13422 status |=
13423 dot11f_unpack_ie_ese_rad_mgmt_cap(
13424 pCtx, pBufRemaining, len,
13425 (tDot11fIEESERadMgmtCap *)
13426 (pFrm + pIe->offset +
13427 sizeof(tDot11fIEESERadMgmtCap) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013428 countOffset),
13429 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013430 break;
13431 case SigIeESETrafStrmMet:
13432 status |=
13433 dot11f_unpack_ie_ese_traf_strm_met(
13434 pCtx, pBufRemaining, len,
13435 (tDot11fIEESETrafStrmMet *)
13436 (pFrm + pIe->offset +
13437 sizeof(tDot11fIEESETrafStrmMet) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013438 countOffset),
13439 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013440 break;
13441 case SigIeESETrafStrmRateSet:
13442 status |=
13443 dot11f_unpack_ie_ese_traf_strm_rate_set(
13444 pCtx, pBufRemaining, len,
13445 (tDot11fIEESETrafStrmRateSet *)
13446 (pFrm + pIe->offset +
13447 sizeof(tDot11fIEESETrafStrmRateSet) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013448 countOffset),
13449 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013450 break;
13451 case SigIeESETxmitPower:
13452 status |=
13453 dot11f_unpack_ie_ese_txmit_power(
13454 pCtx, pBufRemaining, len,
13455 (tDot11fIEESETxmitPower *)
13456 (pFrm + pIe->offset +
13457 sizeof(tDot11fIEESETxmitPower) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013458 countOffset),
13459 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013460 break;
13461 case SigIeESEVersion:
13462 status |=
13463 dot11f_unpack_ie_ese_version(
13464 pCtx, pBufRemaining, len,
13465 (tDot11fIEESEVersion *)
13466 (pFrm + pIe->offset +
13467 sizeof(tDot11fIEESEVersion) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013468 countOffset),
13469 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013470 break;
13471 case SigIeExtCap:
13472 status |=
13473 dot11f_unpack_ie_ext_cap(
13474 pCtx, pBufRemaining, len,
13475 (tDot11fIEExtCap *)
13476 (pFrm + pIe->offset +
13477 sizeof(tDot11fIEExtCap) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013478 countOffset),
13479 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013480 break;
13481 case SigIeExtSuppRates:
13482 status |=
13483 dot11f_unpack_ie_ext_supp_rates(
13484 pCtx, pBufRemaining, len,
13485 (tDot11fIEExtSuppRates *)
13486 (pFrm + pIe->offset +
13487 sizeof(tDot11fIEExtSuppRates) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013488 countOffset),
13489 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013490 break;
13491 case SigIeFHParamSet:
13492 status |=
13493 dot11f_unpack_ie_fh_param_set(
13494 pCtx, pBufRemaining, len,
13495 (tDot11fIEFHParamSet *)
13496 (pFrm + pIe->offset +
13497 sizeof(tDot11fIEFHParamSet) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013498 countOffset),
13499 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013500 break;
13501 case SigIeFHParams:
13502 status |=
13503 dot11f_unpack_ie_fh_params(
13504 pCtx, pBufRemaining, len,
13505 (tDot11fIEFHParams *)
13506 (pFrm + pIe->offset +
13507 sizeof(tDot11fIEFHParams) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013508 countOffset),
13509 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013510 break;
13511 case SigIeFHPattTable:
13512 status |=
13513 dot11f_unpack_ie_fh_patt_table(
13514 pCtx, pBufRemaining, len,
13515 (tDot11fIEFHPattTable *)
13516 (pFrm + pIe->offset +
13517 sizeof(tDot11fIEFHPattTable) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013518 countOffset),
13519 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013520 break;
13521 case SigIeFTInfo:
13522 status |=
13523 dot11f_unpack_ie_ft_info(
13524 pCtx, pBufRemaining, len,
13525 (tDot11fIEFTInfo *)
13526 (pFrm + pIe->offset +
13527 sizeof(tDot11fIEFTInfo) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013528 countOffset),
13529 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013530 break;
13531 case SigIeHTCaps:
13532 status |=
13533 dot11f_unpack_ie_ht_caps(
13534 pCtx, pBufRemaining, len,
13535 (tDot11fIEHTCaps *)
13536 (pFrm + pIe->offset +
13537 sizeof(tDot11fIEHTCaps) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013538 countOffset),
13539 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013540 break;
13541 case SigIeHTInfo:
13542 status |=
13543 dot11f_unpack_ie_ht_info(
13544 pCtx, pBufRemaining, len,
13545 (tDot11fIEHTInfo *)
13546 (pFrm + pIe->offset +
13547 sizeof(tDot11fIEHTInfo) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013548 countOffset),
13549 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013550 break;
13551 case SigIeIBSSParams:
13552 status |=
13553 dot11f_unpack_ie_ibss_params(
13554 pCtx, pBufRemaining, len,
13555 (tDot11fIEIBSSParams *)
13556 (pFrm + pIe->offset +
13557 sizeof(tDot11fIEIBSSParams) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013558 countOffset),
13559 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013560 break;
13561 case SigIeLinkIdentifier:
13562 status |=
13563 dot11f_unpack_ie_link_identifier(
13564 pCtx, pBufRemaining, len,
13565 (tDot11fIELinkIdentifier *)
13566 (pFrm + pIe->offset +
13567 sizeof(tDot11fIELinkIdentifier) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013568 countOffset),
13569 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013570 break;
Selvaraj, Sridharba726cb2016-07-22 13:41:03 +053013571 case SigIeMBO_IE:
13572 status |=
13573 dot11f_unpack_ie_MBO_IE(
13574 pCtx, pBufRemaining, len,
13575 (tDot11fIEMBO_IE *)
13576 (pFrm + pIe->offset +
13577 sizeof(tDot11fIEMBO_IE) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013578 countOffset),
13579 append_ie);
Selvaraj, Sridharba726cb2016-07-22 13:41:03 +053013580 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013581 case SigIeMeasurementReport:
13582 status |=
13583 dot11f_unpack_ie_measurement_report(
13584 pCtx, pBufRemaining, len,
13585 (tDot11fIEMeasurementReport *)
13586 (pFrm + pIe->offset +
13587 sizeof(tDot11fIEMeasurementReport) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013588 countOffset),
13589 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013590 break;
13591 case SigIeMeasurementRequest:
13592 status |=
13593 dot11f_unpack_ie_measurement_request(
13594 pCtx, pBufRemaining, len,
13595 (tDot11fIEMeasurementRequest *)
13596 (pFrm + pIe->offset +
13597 sizeof(tDot11fIEMeasurementRequest) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013598 countOffset),
13599 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013600 break;
13601 case SigIeMobilityDomain:
13602 status |=
13603 dot11f_unpack_ie_mobility_domain(
13604 pCtx, pBufRemaining, len,
13605 (tDot11fIEMobilityDomain *)
13606 (pFrm + pIe->offset +
13607 sizeof(tDot11fIEMobilityDomain) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013608 countOffset),
13609 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013610 break;
13611 case SigIeNeighborReport:
Naveen Rawat9ff3e242017-06-09 14:25:45 -070013612 status |=
13613 dot11f_unpack_ie_neighbor_report(
13614 pCtx, pBufRemaining, len,
13615 (tDot11fIENeighborReport *)
13616 (pFrm + pIe->offset +
13617 sizeof(tDot11fIENeighborReport) *
13618 countOffset),
13619 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013620 break;
13621 case SigIeOBSSScanParameters:
13622 status |=
13623 dot11f_unpack_ie_obss_scan_parameters(
13624 pCtx, pBufRemaining, len,
13625 (tDot11fIEOBSSScanParameters *)
13626 (pFrm + pIe->offset +
13627 sizeof(tDot11fIEOBSSScanParameters) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013628 countOffset),
13629 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013630 break;
13631 case SigIeOperatingMode:
13632 status |=
13633 dot11f_unpack_ie_operating_mode(
13634 pCtx, pBufRemaining, len,
13635 (tDot11fIEOperatingMode *)
13636 (pFrm + pIe->offset +
13637 sizeof(tDot11fIEOperatingMode) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013638 countOffset),
13639 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013640 break;
13641 case SigIeP2PAssocReq:
13642 status |=
13643 dot11f_unpack_ie_p2_p_assoc_req(
13644 pCtx, pBufRemaining, len,
13645 (tDot11fIEP2PAssocReq *)
13646 (pFrm + pIe->offset +
13647 sizeof(tDot11fIEP2PAssocReq) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013648 countOffset),
13649 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013650 break;
13651 case SigIeP2PAssocRes:
13652 status |=
13653 dot11f_unpack_ie_p2_p_assoc_res(
13654 pCtx, pBufRemaining, len,
13655 (tDot11fIEP2PAssocRes *)
13656 (pFrm + pIe->offset +
13657 sizeof(tDot11fIEP2PAssocRes) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013658 countOffset),
13659 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013660 break;
13661 case SigIeP2PBeacon:
13662 status |=
13663 dot11f_unpack_ie_p2_p_beacon(
13664 pCtx, pBufRemaining, len,
13665 (tDot11fIEP2PBeacon *)
13666 (pFrm + pIe->offset +
13667 sizeof(tDot11fIEP2PBeacon) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013668 countOffset),
13669 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013670 break;
13671 case SigIeP2PBeaconProbeRes:
13672 status |=
13673 dot11f_unpack_ie_p2_p_beacon_probe_res(
13674 pCtx, pBufRemaining, len,
13675 (tDot11fIEP2PBeaconProbeRes *)
13676 (pFrm + pIe->offset +
13677 sizeof(tDot11fIEP2PBeaconProbeRes) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013678 countOffset),
13679 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013680 break;
13681 case SigIeP2PDeAuth:
13682 status |=
13683 dot11f_unpack_ie_p2_p_de_auth(
13684 pCtx, pBufRemaining, len,
13685 (tDot11fIEP2PDeAuth *)
13686 (pFrm + pIe->offset +
13687 sizeof(tDot11fIEP2PDeAuth) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013688 countOffset),
13689 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013690 break;
13691 case SigIeP2PDisAssoc:
13692 status |=
13693 dot11f_unpack_ie_p2_p_dis_assoc(
13694 pCtx, pBufRemaining, len,
13695 (tDot11fIEP2PDisAssoc *)
13696 (pFrm + pIe->offset +
13697 sizeof(tDot11fIEP2PDisAssoc) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013698 countOffset),
13699 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013700 break;
13701 case SigIeP2PIEOpaque:
13702 status |=
13703 dot11f_unpack_ie_p2_pie_opaque(
13704 pCtx, pBufRemaining, len,
13705 (tDot11fIEP2PIEOpaque *)
13706 (pFrm + pIe->offset +
13707 sizeof(tDot11fIEP2PIEOpaque) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013708 countOffset),
13709 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013710 break;
13711 case SigIeP2PProbeReq:
13712 status |=
13713 dot11f_unpack_ie_p2_p_probe_req(
13714 pCtx, pBufRemaining, len,
13715 (tDot11fIEP2PProbeReq *)
13716 (pFrm + pIe->offset +
13717 sizeof(tDot11fIEP2PProbeReq) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013718 countOffset),
13719 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013720 break;
13721 case SigIeP2PProbeRes:
13722 status |=
13723 dot11f_unpack_ie_p2_p_probe_res(
13724 pCtx, pBufRemaining, len,
13725 (tDot11fIEP2PProbeRes *)
13726 (pFrm + pIe->offset +
13727 sizeof(tDot11fIEP2PProbeRes) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013728 countOffset),
13729 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013730 break;
13731 case SigIePTIControl:
13732 status |=
13733 dot11f_unpack_ie_pti_control(
13734 pCtx, pBufRemaining, len,
13735 (tDot11fIEPTIControl *)
13736 (pFrm + pIe->offset +
13737 sizeof(tDot11fIEPTIControl) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013738 countOffset),
13739 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013740 break;
13741 case SigIePUBufferStatus:
13742 status |=
13743 dot11f_unpack_ie_pu_buffer_status(
13744 pCtx, pBufRemaining, len,
13745 (tDot11fIEPUBufferStatus *)
13746 (pFrm + pIe->offset +
13747 sizeof(tDot11fIEPUBufferStatus) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013748 countOffset),
13749 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013750 break;
13751 case SigIePowerCaps:
13752 status |=
13753 dot11f_unpack_ie_power_caps(
13754 pCtx, pBufRemaining, len,
13755 (tDot11fIEPowerCaps *)
13756 (pFrm + pIe->offset +
13757 sizeof(tDot11fIEPowerCaps) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013758 countOffset),
13759 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013760 break;
13761 case SigIePowerConstraints:
13762 status |=
13763 dot11f_unpack_ie_power_constraints(
13764 pCtx, pBufRemaining, len,
13765 (tDot11fIEPowerConstraints *)
13766 (pFrm + pIe->offset +
13767 sizeof(tDot11fIEPowerConstraints) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013768 countOffset),
13769 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013770 break;
13771 case SigIeQBSSLoad:
13772 status |=
13773 dot11f_unpack_ie_qbss_load(
13774 pCtx, pBufRemaining, len,
13775 (tDot11fIEQBSSLoad *)
13776 (pFrm + pIe->offset +
13777 sizeof(tDot11fIEQBSSLoad) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013778 countOffset),
13779 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013780 break;
Selvaraj, Sridharc2fe7a32017-02-02 19:20:16 +053013781 case SigIeQCN_IE:
13782 status |=
13783 dot11f_unpack_ie_QCN_IE(
13784 pCtx, pBufRemaining, len,
13785 (tDot11fIEQCN_IE *)
13786 (pFrm + pIe->offset +
13787 sizeof(tDot11fIEQCN_IE) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013788 countOffset),
13789 append_ie);
Selvaraj, Sridharc2fe7a32017-02-02 19:20:16 +053013790 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013791 case SigIeQComVendorIE:
13792 status |=
13793 dot11f_unpack_ie_QComVendorIE(
13794 pCtx, pBufRemaining, len,
13795 (tDot11fIEQComVendorIE *)
13796 (pFrm + pIe->offset +
13797 sizeof(tDot11fIEQComVendorIE) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013798 countOffset),
13799 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013800 break;
13801 case SigIeQOSCapsAp:
13802 status |=
13803 dot11f_unpack_ie_qos_caps_ap(
13804 pCtx, pBufRemaining, len,
13805 (tDot11fIEQOSCapsAp *)
13806 (pFrm + pIe->offset +
13807 sizeof(tDot11fIEQOSCapsAp) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013808 countOffset),
13809 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013810 break;
13811 case SigIeQOSCapsStation:
13812 status |=
13813 dot11f_unpack_ie_qos_caps_station(
13814 pCtx, pBufRemaining, len,
13815 (tDot11fIEQOSCapsStation *)
13816 (pFrm + pIe->offset +
13817 sizeof(tDot11fIEQOSCapsStation) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013818 countOffset),
13819 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013820 break;
13821 case SigIeQosMapSet:
13822 status |=
13823 dot11f_unpack_ie_qos_map_set(
13824 pCtx, pBufRemaining, len,
13825 (tDot11fIEQosMapSet *)
13826 (pFrm + pIe->offset +
13827 sizeof(tDot11fIEQosMapSet) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013828 countOffset),
13829 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013830 break;
13831 case SigIeQuiet:
13832 status |=
13833 dot11f_unpack_ie_quiet(
13834 pCtx, pBufRemaining, len,
13835 (tDot11fIEQuiet *)
13836 (pFrm + pIe->offset +
13837 sizeof(tDot11fIEQuiet) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013838 countOffset),
13839 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013840 break;
13841 case SigIeRCPIIE:
13842 status |=
13843 dot11f_unpack_ie_rcpiie(
13844 pCtx, pBufRemaining, len,
13845 (tDot11fIERCPIIE *)
13846 (pFrm + pIe->offset +
13847 sizeof(tDot11fIERCPIIE) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013848 countOffset),
13849 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013850 break;
13851 case SigIeRICDataDesc:
Naveen Rawat86936772018-06-01 09:49:08 -070013852 /* reset the pointers back since this is a container IE and it doesn't have its own EID and Len. */
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013853 pBufRemaining -= 2;
13854 nBufRemaining += 2;
13855 if (pIe && pIe->noui) {
13856 pBufRemaining -= pIe->noui;
13857 nBufRemaining += pIe->noui;
13858 len += pIe->noui;
13859 }
13860 status |= get_container_ies_len(pCtx, pBufRemaining, nBufRemaining, &len, IES_RICDataDesc);
13861 if (status != DOT11F_PARSE_SUCCESS && status != DOT11F_UNKNOWN_IES)
13862 break;
13863 status |=
13864 dot11f_unpack_ie_ric_data_desc(
13865 pCtx, pBufRemaining, len,
13866 (tDot11fIERICDataDesc *)
13867 (pFrm + pIe->offset +
13868 sizeof(tDot11fIERICDataDesc) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013869 countOffset),
13870 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013871 break;
13872 case SigIeRSN:
13873 status |=
13874 dot11f_unpack_ie_rsn(
13875 pCtx, pBufRemaining, len,
13876 (tDot11fIERSN *)
13877 (pFrm + pIe->offset +
13878 sizeof(tDot11fIERSN) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013879 countOffset),
13880 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013881 break;
13882 case SigIeRSNIIE:
13883 status |=
13884 dot11f_unpack_ie_rsniie(
13885 pCtx, pBufRemaining, len,
13886 (tDot11fIERSNIIE *)
13887 (pFrm + pIe->offset +
13888 sizeof(tDot11fIERSNIIE) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013889 countOffset),
13890 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013891 break;
13892 case SigIeRSNOpaque:
13893 status |=
13894 dot11f_unpack_ie_rsn_opaque(
13895 pCtx, pBufRemaining, len,
13896 (tDot11fIERSNOpaque *)
13897 (pFrm + pIe->offset +
13898 sizeof(tDot11fIERSNOpaque) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013899 countOffset),
13900 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013901 break;
13902 case SigIeSuppChannels:
13903 status |=
13904 dot11f_unpack_ie_supp_channels(
13905 pCtx, pBufRemaining, len,
13906 (tDot11fIESuppChannels *)
13907 (pFrm + pIe->offset +
13908 sizeof(tDot11fIESuppChannels) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013909 countOffset),
13910 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013911 break;
13912 case SigIeSuppOperatingClasses:
13913 status |=
13914 dot11f_unpack_ie_supp_operating_classes(
13915 pCtx, pBufRemaining, len,
13916 (tDot11fIESuppOperatingClasses *)
13917 (pFrm + pIe->offset +
13918 sizeof(tDot11fIESuppOperatingClasses) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013919 countOffset),
13920 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013921 break;
13922 case SigIeSuppRates:
13923 status |=
13924 dot11f_unpack_ie_supp_rates(
13925 pCtx, pBufRemaining, len,
13926 (tDot11fIESuppRates *)
13927 (pFrm + pIe->offset +
13928 sizeof(tDot11fIESuppRates) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013929 countOffset),
13930 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013931 break;
13932 case SigIeTIM:
13933 status |=
13934 dot11f_unpack_ie_tim(
13935 pCtx, pBufRemaining, len,
13936 (tDot11fIETIM *)
13937 (pFrm + pIe->offset +
13938 sizeof(tDot11fIETIM) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013939 countOffset),
13940 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013941 break;
13942 case SigIeTPCReport:
13943 status |=
13944 dot11f_unpack_ie_tpc_report(
13945 pCtx, pBufRemaining, len,
13946 (tDot11fIETPCReport *)
13947 (pFrm + pIe->offset +
13948 sizeof(tDot11fIETPCReport) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013949 countOffset),
13950 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013951 break;
13952 case SigIeTPCRequest:
13953 status |=
13954 dot11f_unpack_ie_tpc_request(
13955 pCtx, pBufRemaining, len,
13956 (tDot11fIETPCRequest *)
13957 (pFrm + pIe->offset +
13958 sizeof(tDot11fIETPCRequest) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013959 countOffset),
13960 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013961 break;
13962 case SigIeTimeAdvertisement:
13963 status |=
13964 dot11f_unpack_ie_time_advertisement(
13965 pCtx, pBufRemaining, len,
13966 (tDot11fIETimeAdvertisement *)
13967 (pFrm + pIe->offset +
13968 sizeof(tDot11fIETimeAdvertisement) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013969 countOffset),
13970 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013971 break;
13972 case SigIeTimeoutInterval:
13973 status |=
13974 dot11f_unpack_ie_timeout_interval(
13975 pCtx, pBufRemaining, len,
13976 (tDot11fIETimeoutInterval *)
13977 (pFrm + pIe->offset +
13978 sizeof(tDot11fIETimeoutInterval) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013979 countOffset),
13980 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013981 break;
13982 case SigIeVHTExtBssLoad:
13983 status |=
13984 dot11f_unpack_ie_vht_ext_bss_load(
13985 pCtx, pBufRemaining, len,
13986 (tDot11fIEVHTExtBssLoad *)
13987 (pFrm + pIe->offset +
13988 sizeof(tDot11fIEVHTExtBssLoad) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013989 countOffset),
13990 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080013991 break;
13992 case SigIeVendor1IE:
13993 status |=
13994 dot11f_unpack_ie_vendor1_ie(
13995 pCtx, pBufRemaining, len,
13996 (tDot11fIEVendor1IE *)
13997 (pFrm + pIe->offset +
13998 sizeof(tDot11fIEVendor1IE) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053013999 countOffset),
14000 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014001 break;
14002 case SigIeVendor3IE:
14003 status |=
14004 dot11f_unpack_ie_vendor3_ie(
14005 pCtx, pBufRemaining, len,
14006 (tDot11fIEVendor3IE *)
14007 (pFrm + pIe->offset +
14008 sizeof(tDot11fIEVendor3IE) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014009 countOffset),
14010 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014011 break;
14012 case SigIeWAPI:
14013 status |=
14014 dot11f_unpack_ie_wapi(
14015 pCtx, pBufRemaining, len,
14016 (tDot11fIEWAPI *)
14017 (pFrm + pIe->offset +
14018 sizeof(tDot11fIEWAPI) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014019 countOffset),
14020 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014021 break;
14022 case SigIeWAPIOpaque:
14023 status |=
14024 dot11f_unpack_ie_wapi_opaque(
14025 pCtx, pBufRemaining, len,
14026 (tDot11fIEWAPIOpaque *)
14027 (pFrm + pIe->offset +
14028 sizeof(tDot11fIEWAPIOpaque) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014029 countOffset),
14030 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014031 break;
14032 case SigIeWFATPC:
14033 status |=
14034 dot11f_unpack_ie_wfatpc(
14035 pCtx, pBufRemaining, len,
14036 (tDot11fIEWFATPC *)
14037 (pFrm + pIe->offset +
14038 sizeof(tDot11fIEWFATPC) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014039 countOffset),
14040 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014041 break;
14042 case SigIeWFDIEOpaque:
14043 status |=
14044 dot11f_unpack_ie_wfdie_opaque(
14045 pCtx, pBufRemaining, len,
14046 (tDot11fIEWFDIEOpaque *)
14047 (pFrm + pIe->offset +
14048 sizeof(tDot11fIEWFDIEOpaque) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014049 countOffset),
14050 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014051 break;
14052 case SigIeWMMCaps:
14053 status |=
14054 dot11f_unpack_ie_wmm_caps(
14055 pCtx, pBufRemaining, len,
14056 (tDot11fIEWMMCaps *)
14057 (pFrm + pIe->offset +
14058 sizeof(tDot11fIEWMMCaps) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014059 countOffset),
14060 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014061 break;
14062 case SigIeWMMInfoAp:
14063 status |=
14064 dot11f_unpack_ie_wmm_info_ap(
14065 pCtx, pBufRemaining, len,
14066 (tDot11fIEWMMInfoAp *)
14067 (pFrm + pIe->offset +
14068 sizeof(tDot11fIEWMMInfoAp) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014069 countOffset),
14070 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014071 break;
14072 case SigIeWMMInfoStation:
14073 status |=
14074 dot11f_unpack_ie_wmm_info_station(
14075 pCtx, pBufRemaining, len,
14076 (tDot11fIEWMMInfoStation *)
14077 (pFrm + pIe->offset +
14078 sizeof(tDot11fIEWMMInfoStation) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014079 countOffset),
14080 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014081 break;
14082 case SigIeWMMParams:
14083 status |=
14084 dot11f_unpack_ie_wmm_params(
14085 pCtx, pBufRemaining, len,
14086 (tDot11fIEWMMParams *)
14087 (pFrm + pIe->offset +
14088 sizeof(tDot11fIEWMMParams) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014089 countOffset),
14090 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014091 break;
14092 case SigIeWPA:
14093 status |=
14094 dot11f_unpack_ie_wpa(
14095 pCtx, pBufRemaining, len,
14096 (tDot11fIEWPA *)
14097 (pFrm + pIe->offset +
14098 sizeof(tDot11fIEWPA) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014099 countOffset),
14100 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014101 break;
14102 case SigIeWPAOpaque:
14103 status |=
14104 dot11f_unpack_ie_wpa_opaque(
14105 pCtx, pBufRemaining, len,
14106 (tDot11fIEWPAOpaque *)
14107 (pFrm + pIe->offset +
14108 sizeof(tDot11fIEWPAOpaque) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014109 countOffset),
14110 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014111 break;
14112 case SigIeWSC:
14113 status |=
14114 dot11f_unpack_ie_wsc(
14115 pCtx, pBufRemaining, len,
14116 (tDot11fIEWSC *)
14117 (pFrm + pIe->offset +
14118 sizeof(tDot11fIEWSC) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014119 countOffset),
14120 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014121 break;
14122 case SigIeWscAssocReq:
14123 status |=
14124 dot11f_unpack_ie_wsc_assoc_req(
14125 pCtx, pBufRemaining, len,
14126 (tDot11fIEWscAssocReq *)
14127 (pFrm + pIe->offset +
14128 sizeof(tDot11fIEWscAssocReq) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014129 countOffset),
14130 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014131 break;
14132 case SigIeWscAssocRes:
14133 status |=
14134 dot11f_unpack_ie_wsc_assoc_res(
14135 pCtx, pBufRemaining, len,
14136 (tDot11fIEWscAssocRes *)
14137 (pFrm + pIe->offset +
14138 sizeof(tDot11fIEWscAssocRes) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014139 countOffset),
14140 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014141 break;
14142 case SigIeWscBeacon:
14143 status |=
14144 dot11f_unpack_ie_wsc_beacon(
14145 pCtx, pBufRemaining, len,
14146 (tDot11fIEWscBeacon *)
14147 (pFrm + pIe->offset +
14148 sizeof(tDot11fIEWscBeacon) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014149 countOffset),
14150 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014151 break;
14152 case SigIeWscBeaconProbeRes:
14153 status |=
14154 dot11f_unpack_ie_wsc_beacon_probe_res(
14155 pCtx, pBufRemaining, len,
14156 (tDot11fIEWscBeaconProbeRes *)
14157 (pFrm + pIe->offset +
14158 sizeof(tDot11fIEWscBeaconProbeRes) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014159 countOffset),
14160 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014161 break;
14162 case SigIeWscIEOpaque:
14163 status |=
14164 dot11f_unpack_ie_wsc_ie_opaque(
14165 pCtx, pBufRemaining, len,
14166 (tDot11fIEWscIEOpaque *)
14167 (pFrm + pIe->offset +
14168 sizeof(tDot11fIEWscIEOpaque) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014169 countOffset),
14170 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014171 break;
14172 case SigIeWscProbeReq:
14173 status |=
14174 dot11f_unpack_ie_wsc_probe_req(
14175 pCtx, pBufRemaining, len,
14176 (tDot11fIEWscProbeReq *)
14177 (pFrm + pIe->offset +
14178 sizeof(tDot11fIEWscProbeReq) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014179 countOffset),
14180 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014181 break;
14182 case SigIeWscProbeRes:
14183 status |=
14184 dot11f_unpack_ie_wsc_probe_res(
14185 pCtx, pBufRemaining, len,
14186 (tDot11fIEWscProbeRes *)
14187 (pFrm + pIe->offset +
14188 sizeof(tDot11fIEWscProbeRes) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014189 countOffset),
14190 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014191 break;
14192 case SigIeWscReassocRes:
14193 status |=
14194 dot11f_unpack_ie_wsc_reassoc_res(
14195 pCtx, pBufRemaining, len,
14196 (tDot11fIEWscReassocRes *)
14197 (pFrm + pIe->offset +
14198 sizeof(tDot11fIEWscReassocRes) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014199 countOffset),
14200 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014201 break;
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080014202 case SigIeaddba_extn_element:
14203 status |=
14204 dot11f_unpack_ie_addba_extn_element(
14205 pCtx, pBufRemaining, len,
14206 (tDot11fIEaddba_extn_element *)
14207 (pFrm + pIe->offset +
14208 sizeof(tDot11fIEaddba_extn_element) *
14209 countOffset),
14210 append_ie);
14211 break;
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070014212 case SigIebss_color_change:
14213 status |=
14214 dot11f_unpack_ie_bss_color_change(
14215 pCtx, pBufRemaining, len,
14216 (tDot11fIEbss_color_change *)
14217 (pFrm + pIe->offset +
14218 sizeof(tDot11fIEbss_color_change) *
14219 countOffset),
14220 append_ie);
14221 break;
Padma, Santhosh Kumar666f96e2017-11-10 13:22:59 +053014222 case SigIedh_parameter_element:
14223 status |=
14224 dot11f_unpack_ie_dh_parameter_element(
14225 pCtx, pBufRemaining, len,
14226 (tDot11fIEdh_parameter_element *)
14227 (pFrm + pIe->offset +
14228 sizeof(tDot11fIEdh_parameter_element) *
14229 countOffset),
14230 append_ie);
14231 break;
Abhishek Singhd8c3f102017-07-29 14:10:37 +053014232 case SigIeesp_information:
14233 status |=
14234 dot11f_unpack_ie_esp_information(
14235 pCtx, pBufRemaining, len,
14236 (tDot11fIEesp_information *)
14237 (pFrm + pIe->offset +
14238 sizeof(tDot11fIEesp_information) *
14239 countOffset),
14240 append_ie);
14241 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014242 case SigIeext_chan_switch_ann:
14243 status |=
14244 dot11f_unpack_ie_ext_chan_switch_ann(
14245 pCtx, pBufRemaining, len,
14246 (tDot11fIEext_chan_switch_ann *)
14247 (pFrm + pIe->offset +
14248 sizeof(tDot11fIEext_chan_switch_ann) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014249 countOffset),
14250 append_ie);
14251 break;
14252 case SigIefils_assoc_delay_info:
14253 status |=
14254 dot11f_unpack_ie_fils_assoc_delay_info(
14255 pCtx, pBufRemaining, len,
14256 (tDot11fIEfils_assoc_delay_info *)
14257 (pFrm + pIe->offset +
14258 sizeof(tDot11fIEfils_assoc_delay_info) *
14259 countOffset),
14260 append_ie);
14261 break;
14262 case SigIefils_hlp_container:
14263 status |=
14264 dot11f_unpack_ie_fils_hlp_container(
14265 pCtx, pBufRemaining, len,
14266 (tDot11fIEfils_hlp_container *)
14267 (pFrm + pIe->offset +
14268 sizeof(tDot11fIEfils_hlp_container) *
14269 countOffset),
14270 append_ie);
14271 break;
14272 case SigIefils_indication:
14273 status |=
14274 dot11f_unpack_ie_fils_indication(
14275 pCtx, pBufRemaining, len,
14276 (tDot11fIEfils_indication *)
14277 (pFrm + pIe->offset +
14278 sizeof(tDot11fIEfils_indication) *
14279 countOffset),
14280 append_ie);
14281 break;
14282 case SigIefils_kde:
14283 status |=
14284 dot11f_unpack_ie_fils_kde(
14285 pCtx, pBufRemaining, len,
14286 (tDot11fIEfils_kde *)
14287 (pFrm + pIe->offset +
14288 sizeof(tDot11fIEfils_kde) *
14289 countOffset),
14290 append_ie);
14291 break;
14292 case SigIefils_key_confirmation:
14293 status |=
14294 dot11f_unpack_ie_fils_key_confirmation(
14295 pCtx, pBufRemaining, len,
14296 (tDot11fIEfils_key_confirmation *)
14297 (pFrm + pIe->offset +
14298 sizeof(tDot11fIEfils_key_confirmation) *
14299 countOffset),
14300 append_ie);
14301 break;
14302 case SigIefils_nonce:
14303 status |=
14304 dot11f_unpack_ie_fils_nonce(
14305 pCtx, pBufRemaining, len,
14306 (tDot11fIEfils_nonce *)
14307 (pFrm + pIe->offset +
14308 sizeof(tDot11fIEfils_nonce) *
14309 countOffset),
14310 append_ie);
14311 break;
14312 case SigIefils_public_key:
14313 status |=
14314 dot11f_unpack_ie_fils_public_key(
14315 pCtx, pBufRemaining, len,
14316 (tDot11fIEfils_public_key *)
14317 (pFrm + pIe->offset +
14318 sizeof(tDot11fIEfils_public_key) *
14319 countOffset),
14320 append_ie);
14321 break;
14322 case SigIefils_session:
14323 status |=
14324 dot11f_unpack_ie_fils_session(
14325 pCtx, pBufRemaining, len,
14326 (tDot11fIEfils_session *)
14327 (pFrm + pIe->offset +
14328 sizeof(tDot11fIEfils_session) *
14329 countOffset),
14330 append_ie);
14331 break;
14332 case SigIefils_wrapped_data:
14333 status |=
14334 dot11f_unpack_ie_fils_wrapped_data(
14335 pCtx, pBufRemaining, len,
14336 (tDot11fIEfils_wrapped_data *)
14337 (pFrm + pIe->offset +
14338 sizeof(tDot11fIEfils_wrapped_data) *
14339 countOffset),
14340 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014341 break;
Sridhar Selvaraj6d3e0d72017-08-17 17:32:37 +053014342 case SigIefragment_ie:
14343 status |=
14344 dot11f_unpack_ie_fragment_ie(
14345 pCtx, pBufRemaining, len,
14346 (tDot11fIEfragment_ie *)
14347 (pFrm + pIe->offset +
14348 sizeof(tDot11fIEfragment_ie) *
14349 countOffset),
14350 append_ie);
14351 break;
Naveen Rawatea921ce2017-09-08 15:07:58 -070014352 case SigIehe_cap:
14353 status |=
14354 dot11f_unpack_ie_he_cap(
14355 pCtx, pBufRemaining, len,
14356 (tDot11fIEhe_cap *)
14357 (pFrm + pIe->offset +
14358 sizeof(tDot11fIEhe_cap) *
14359 countOffset),
14360 append_ie);
14361 break;
14362 case SigIehe_op:
14363 status |=
14364 dot11f_unpack_ie_he_op(
14365 pCtx, pBufRemaining, len,
14366 (tDot11fIEhe_op *)
14367 (pFrm + pIe->offset +
14368 sizeof(tDot11fIEhe_op) *
14369 countOffset),
14370 append_ie);
14371 break;
Nitesh Shah0ddd4f62016-05-27 10:07:32 +053014372 case SigIehs20vendor_ie:
14373 status |=
14374 dot11f_unpack_ie_hs20vendor_ie(
14375 pCtx, pBufRemaining, len,
14376 (tDot11fIEhs20vendor_ie *)
14377 (pFrm + pIe->offset +
14378 sizeof(tDot11fIEhs20vendor_ie) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014379 countOffset),
14380 append_ie);
Nitesh Shah0ddd4f62016-05-27 10:07:32 +053014381 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014382 case SigIeht2040_bss_coexistence:
14383 status |=
14384 dot11f_unpack_ie_ht2040_bss_coexistence(
14385 pCtx, pBufRemaining, len,
14386 (tDot11fIEht2040_bss_coexistence *)
14387 (pFrm + pIe->offset +
14388 sizeof(tDot11fIEht2040_bss_coexistence) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014389 countOffset),
14390 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014391 break;
14392 case SigIeht2040_bss_intolerant_report:
14393 status |=
14394 dot11f_unpack_ie_ht2040_bss_intolerant_report(
14395 pCtx, pBufRemaining, len,
14396 (tDot11fIEht2040_bss_intolerant_report *)
14397 (pFrm + pIe->offset +
14398 sizeof(tDot11fIEht2040_bss_intolerant_report) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014399 countOffset),
14400 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014401 break;
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070014402 case SigIemu_edca_param_set:
14403 status |=
14404 dot11f_unpack_ie_mu_edca_param_set(
14405 pCtx, pBufRemaining, len,
14406 (tDot11fIEmu_edca_param_set *)
14407 (pFrm + pIe->offset +
14408 sizeof(tDot11fIEmu_edca_param_set) *
14409 countOffset),
14410 append_ie);
14411 break;
Selvaraj, Sridhar99edbc32017-06-22 10:49:59 +053014412 case SigIeosen_ie:
14413 status |=
14414 dot11f_unpack_ie_osen_ie(
14415 pCtx, pBufRemaining, len,
14416 (tDot11fIEosen_ie *)
14417 (pFrm + pIe->offset +
14418 sizeof(tDot11fIEosen_ie) *
14419 countOffset),
14420 append_ie);
14421 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014422 case SigIesec_chan_offset_ele:
14423 status |=
14424 dot11f_unpack_ie_sec_chan_offset_ele(
14425 pCtx, pBufRemaining, len,
14426 (tDot11fIEsec_chan_offset_ele *)
14427 (pFrm + pIe->offset +
14428 sizeof(tDot11fIEsec_chan_offset_ele) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014429 countOffset),
14430 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014431 break;
Kapil Gupta4b2efbb2016-10-03 13:07:20 +053014432 case SigIevendor_vht_ie:
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014433 status |=
Kapil Gupta4b2efbb2016-10-03 13:07:20 +053014434 dot11f_unpack_ie_vendor_vht_ie(
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014435 pCtx, pBufRemaining, len,
Kapil Gupta4b2efbb2016-10-03 13:07:20 +053014436 (tDot11fIEvendor_vht_ie *)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014437 (pFrm + pIe->offset +
Kapil Gupta4b2efbb2016-10-03 13:07:20 +053014438 sizeof(tDot11fIEvendor_vht_ie) *
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014439 countOffset),
14440 append_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014441 break;
14442 default:
14443 FRAMES_LOG1(pCtx, FRLOGE, FRFL("INTERNAL ERROR"
14444 ": I don't know about the IE signature %d"
14445 "-- this is most likely a 'framesc' bug.\n"),
14446 pIe->sig);
14447 FRAMES_DBG_BREAK();
14448 return DOT11F_INTERNAL_ERROR;
14449 }
14450 if (pIe->arraybound)
14451 (++(*(uint16_t *)(pFrm + pIe->countOffset)));
14452 }
14453 } else {
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014454 FRAMES_LOG3(pCtx, FRLOG3, FRFL("Skipping unknown IE %d extn ID %d"
14455 " (length %d)\n"), eid, extn_eid, len);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014456 FRAMES_DUMP(pCtx, FRLOG3, pBufRemaining - 2, len);
14457 status |= DOT11F_UNKNOWN_IES;
14458 }
14459
Naveen Rawat9ff3e242017-06-09 14:25:45 -070014460skip_dup_ie:
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014461 pBufRemaining += len;
14462
14463 if (len > nBufRemaining) {
14464 FRAMES_LOG0(pCtx, FRLOGW, FRFL("This IE extends past "
14465 "the buffer as it was defined to us. This could"
14466 "mean a corrupt frame, or just an incorrect leng"
14467 "th parameter.\n"));
14468 FRAMES_DBG_BREAK();
14469 status |= DOT11F_LAST_IE_TOO_LONG;
14470 goto MandatoryCheck;
14471 }
14472
14473 nBufRemaining -= len;
14474
14475 }
14476
14477MandatoryCheck:
14478 pIe = &IEs[0];
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014479 while (0xff != pIe->eid || pIe->extn_eid) {
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014480 if (pIe->fMandatory) {
14481 pfFound = (tFRAMES_BOOL *)(pFrm + pIe->offset +
14482 pIe->presenceOffset);
14483 if (!*pfFound) {
14484 FRAMES_LOG1(pCtx, FRLOGW, FRFL("ERROR: The mandato"
14485 "ry IE %s wasn't seen.\n"),
14486 pIe->name);
14487 FRAMES_DBG_BREAK();
14488 status |= DOT11F_MANDATORY_IE_MISSING;
14489 }
14490 }
14491 ++pIe;
14492 }
14493
14494 return status;
14495} /* End unpack_core. */
14496
14497static uint32_t unpack_tlv_core(tpAniSirGlobal pCtx,
14498 uint8_t *pBuf,
14499 uint32_t nBuf,
14500 const tTLVDefn TLVs[],
14501 uint8_t *pFrm,
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053014502 size_t nFrm)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014503{
14504 const tTLVDefn *pTlv;
14505 uint32_t nBufRemaining, status, npec;
14506 uint16_t id, len;
14507 uint8_t *pBufRemaining, *pfFound;
14508
14509 (void)pCtx; /* Shutup the compiler */
14510 (void)nFrm;
14511 status = DOT11F_PARSE_SUCCESS;
14512 pBufRemaining = pBuf;
14513 nBufRemaining = nBuf;
14514
14515 /* While we have data... */
14516 while (nBufRemaining) {
14517 if (3 > nBufRemaining) {
14518 FRAMES_LOG0(pCtx, FRLOGE, FRFL("This frame reports "
14519 "fewer three byte(s) remaining.\n"));
14520 status |= DOT11F_INCOMPLETE_TLV;
14521 FRAMES_DBG_BREAK();
14522 goto MandatoryCheck;
14523 }
14524
14525 npec = 0U;
14526
14527 /* Look for a matching TLV definition, */
14528 pTlv = find_tlv_defn(pCtx, pBufRemaining, nBufRemaining, TLVs);
14529 /* consume the type, */
14530 if (pTlv) {
14531 if (pTlv->sType == 2) {
14532 framesntohs(pCtx, &id, pBufRemaining, pTlv->fMsb);
14533 pBufRemaining += 2;
14534 nBufRemaining -= 2;
14535 } else {
14536 id = *pBufRemaining;
14537 pBufRemaining += 1;
14538 nBufRemaining -= 1;
14539 }
14540 /* & length, */
14541 if (pTlv->sLen == 2) {
14542 framesntohs(pCtx, &len, pBufRemaining, pTlv->fMsb);
14543 if (2 > nBufRemaining) {
14544 FRAMES_LOG0(pCtx, FRLOGE, FRFL("This frame reports "
14545 "fewer two byte(s) remaining.\n"));
14546 status |= DOT11F_INCOMPLETE_TLV;
14547 FRAMES_DBG_BREAK();
14548 goto MandatoryCheck;
14549 }
14550 pBufRemaining += 2;
14551 nBufRemaining -= 2;
14552 } else {
14553 len = *pBufRemaining;
14554 pBufRemaining += 1;
14555 nBufRemaining -= 1;
14556 }
14557 } else {
14558 pBufRemaining += TLVs[0].sType;
14559 nBufRemaining -= TLVs[0].sType;
14560 framesntohs(pCtx, &len, pBufRemaining, (TLVs[0].sType == 2));
14561 if (2 > nBufRemaining) {
14562 FRAMES_LOG0(pCtx, FRLOGE, FRFL("This frame reports "
14563 "fewer two byte(s) remaining.\n"));
14564 status |= DOT11F_INCOMPLETE_TLV;
14565 FRAMES_DBG_BREAK();
14566 goto MandatoryCheck;
14567 }
14568 pBufRemaining += 2;
14569 nBufRemaining -= 2;
14570 }
14571
14572 if (pTlv && pTlv->pec) {
14573 npec = 3U;
14574 if (3 > nBufRemaining) {
14575 FRAMES_LOG2(pCtx, FRLOGW, FRFL("TLV %d reports length"
14576 "%d, but it has a Private Enterprise Code (3 byte"
14577 "s.\n"), id, len);
14578 FRAMES_DUMP(pCtx, FRLOG1, pBuf, nBuf);
14579 FRAMES_LOG2(pCtx, FRLOG1, FRFL("We've parsed %d bytes"
14580 "of this buffer, and show %d left.\n"),
14581 pBufRemaining - pBuf, nBufRemaining);
14582 status |= DOT11F_INCOMPLETE_TLV;
14583 FRAMES_DBG_BREAK();
14584 goto MandatoryCheck;
14585 }
14586 pBufRemaining += 3;
14587 nBufRemaining -= 3;
14588 len -= 3;
14589 }
14590
14591 /* Whether we found a hit or not, we can validate the reported */
14592 /* length of this TLV: */
14593 if (len > nBufRemaining) {
14594 FRAMES_LOG3(pCtx, FRLOGW, FRFL("TLV %d reports length %"
14595 "d, but there are only %d bytes remaining in this f"
14596 "rame.\n"), id, len, nBufRemaining);
14597 FRAMES_DUMP(pCtx, FRLOG1, pBuf, nBuf);
14598 FRAMES_LOG2(pCtx, FRLOG1, FRFL("We've parsed %d bytes"
14599 " of this buffer, and show %d left.\n"),
14600 pBufRemaining - pBuf, nBufRemaining);
14601 status |= DOT11F_INCOMPLETE_TLV;
14602 FRAMES_DBG_BREAK();
14603 goto MandatoryCheck;
14604 }
14605
14606 /* Now, *if* we found a hit... */
14607 if (pTlv) {
Abhishek Singhf3cc0732017-07-26 14:40:04 +053014608 if (len + (pTlv->sType + pTlv->sLen) < pTlv->minSize - npec) {
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080014609 FRAMES_LOG3(pCtx, FRLOGW, FRFL("The IE %s must be "
14610 "at least %d bytes in size, but the size is only "
14611 "%d bytes.\n"),
14612 pTlv->name, pTlv->minSize, len);
14613 FRAMES_DUMP(pCtx, FRLOG1, pBuf, nBuf);
14614 status |= DOT11F_INCOMPLETE_TLV;
14615 FRAMES_DBG_BREAK();
14616 goto MandatoryCheck;
14617 }
14618 if (nBufRemaining < pTlv->minSize - npec - (pTlv->sType + pTlv->sLen)) {
14619 FRAMES_LOG3(pCtx, FRLOGW, FRFL("The IE %s must be "
14620 "at least %d bytes in size, but there are only "
14621 "%d bytes remaining in this frame.\n"),
14622 pTlv->name, pTlv->minSize, nBufRemaining);
14623 FRAMES_DUMP(pCtx, FRLOG1, pBuf, nBuf);
14624 status |= DOT11F_INCOMPLETE_TLV;
14625 FRAMES_DBG_BREAK();
14626 goto MandatoryCheck;
14627 } else if (len > pTlv->maxSize - npec - (pTlv->sType + pTlv->sLen)) {
14628 FRAMES_LOG1(pCtx, FRLOGW, FRFL("The TLV %s reports "
14629 "an illegally large size; this TLV is presumably"
14630 "corrupt or otherwise invalid & will be skipped "
14631 "ipped.\n"), pTlv->name);
14632 FRAMES_DUMP(pCtx, FRLOG1, pBuf, nBuf);
14633 FRAMES_LOG2(pCtx, FRLOG1, FRFL("We've parsed %d by"
14634 "tes of this buffer, and show %d left.\n"),
14635 pBufRemaining - pBuf, nBufRemaining);
14636 FRAMES_DBG_BREAK();
14637 status |= DOT11F_SKIPPED_BAD_TLV;
14638 } else {
14639 switch (pTlv->sig) {
14640 case SigTlvAuthorizedMACs:
14641 status |=
14642 dot11f_unpack_tlv_authorized_ma_cs(pCtx,
14643 pBufRemaining, len,
14644 (tDot11fTLVAuthorizedMACs *)
14645 (pFrm + pTlv->offset));
14646 break;
14647 case SigTlvRequestToEnroll:
14648 status |=
14649 dot11f_unpack_tlv_common_func(pCtx,
14650 pBufRemaining, len,
14651 (uint8_t *)&(((tDot11fTLVRequestToEnroll *)
14652 (pFrm + pTlv->offset))->present),
14653 (uint8_t *)&(((tDot11fTLVRequestToEnroll *)
14654 (pFrm + pTlv->offset))->req));
14655 break;
14656 case SigTlvVersion2:
14657 status |=
14658 dot11f_unpack_tlv_version2(pCtx,
14659 pBufRemaining, len,
14660 (tDot11fTLVVersion2 *)
14661 (pFrm + pTlv->offset));
14662 break;
14663 case SigTlvAPSetupLocked:
14664 status |=
14665 dot11f_unpack_tlv_common_func(pCtx,
14666 pBufRemaining, len,
14667 (uint8_t *)&(((tDot11fTLVAPSetupLocked *)
14668 (pFrm + pTlv->offset))->present),
14669 (uint8_t *)&(((tDot11fTLVAPSetupLocked *)
14670 (pFrm + pTlv->offset))->fLocked));
14671 break;
14672 case SigTlvAssociationState:
14673 status |=
14674 dot11f_unpack_tlv_common_func2(pCtx,
14675 pBufRemaining, len,
14676 (uint8_t *)&(((tDot11fTLVAssociationState *)
14677 (pFrm + pTlv->offset))->present),
14678 (uint16_t *)&(((tDot11fTLVAssociationState *)
14679 (pFrm + pTlv->offset))->state));
14680 break;
14681 case SigTlvConfigMethods:
14682 status |=
14683 dot11f_unpack_tlv_common_func2(pCtx,
14684 pBufRemaining, len,
14685 (uint8_t *)&(((tDot11fTLVConfigMethods *)
14686 (pFrm + pTlv->offset))->present),
14687 (uint16_t *)&(((tDot11fTLVConfigMethods *)
14688 (pFrm + pTlv->offset))->methods));
14689 break;
14690 case SigTlvConfigurationError:
14691 status |=
14692 dot11f_unpack_tlv_common_func2(pCtx,
14693 pBufRemaining, len,
14694 (uint8_t *)&(((tDot11fTLVConfigurationError *)
14695 (pFrm + pTlv->offset))->present),
14696 (uint16_t *)&(((tDot11fTLVConfigurationError *)
14697 (pFrm + pTlv->offset))->error));
14698 break;
14699 case SigTlvDeviceName:
14700 status |=
14701 dot11f_unpack_tlv_device_name(pCtx,
14702 pBufRemaining, len,
14703 (tDot11fTLVDeviceName *)
14704 (pFrm + pTlv->offset));
14705 break;
14706 case SigTlvDevicePasswordID:
14707 status |=
14708 dot11f_unpack_tlv_common_func2(pCtx,
14709 pBufRemaining, len,
14710 (uint8_t *)&(((tDot11fTLVDevicePasswordID *)
14711 (pFrm + pTlv->offset))->present),
14712 (uint16_t *)&(((tDot11fTLVDevicePasswordID *)
14713 (pFrm + pTlv->offset))->id));
14714 break;
14715 case SigTlvExtendedListenTiming:
14716 status |=
14717 dot11f_unpack_tlv_extended_listen_timing(pCtx,
14718 pBufRemaining, len,
14719 (tDot11fTLVExtendedListenTiming *)
14720 (pFrm + pTlv->offset));
14721 break;
14722 case SigTlvListenChannel:
14723 status |=
14724 dot11f_unpack_tlv_listen_channel(pCtx,
14725 pBufRemaining, len,
14726 (tDot11fTLVListenChannel *)
14727 (pFrm + pTlv->offset));
14728 break;
14729 case SigTlvManufacturer:
14730 status |=
14731 dot11f_unpack_tlv_manufacturer(pCtx,
14732 pBufRemaining, len,
14733 (tDot11fTLVManufacturer *)
14734 (pFrm + pTlv->offset));
14735 break;
14736 case SigTlvMinorReasonCode:
14737 status |=
14738 dot11f_unpack_tlv_common_func(pCtx,
14739 pBufRemaining, len,
14740 (uint8_t *)&(((tDot11fTLVMinorReasonCode *)
14741 (pFrm + pTlv->offset))->present),
14742 (uint8_t *)&(((tDot11fTLVMinorReasonCode *)
14743 (pFrm + pTlv->offset))->minorReasonCode));
14744 break;
14745 case SigTlvModelName:
14746 status |=
14747 dot11f_unpack_tlv_model_name(pCtx,
14748 pBufRemaining, len,
14749 (tDot11fTLVModelName *)
14750 (pFrm + pTlv->offset));
14751 break;
14752 case SigTlvModelNumber:
14753 status |=
14754 dot11f_unpack_tlv_model_number(pCtx,
14755 pBufRemaining, len,
14756 (tDot11fTLVModelNumber *)
14757 (pFrm + pTlv->offset));
14758 break;
14759 case SigTlvNoticeOfAbsence:
14760 status |=
14761 dot11f_unpack_tlv_notice_of_absence(pCtx,
14762 pBufRemaining, len,
14763 (tDot11fTLVNoticeOfAbsence *)
14764 (pFrm + pTlv->offset));
14765 break;
14766 case SigTlvOperatingChannel:
14767 status |=
14768 dot11f_unpack_tlv_operating_channel(pCtx,
14769 pBufRemaining, len,
14770 (tDot11fTLVOperatingChannel *)
14771 (pFrm + pTlv->offset));
14772 break;
14773 case SigTlvP2PCapability:
14774 status |=
14775 dot11f_unpack_tlv_p2_p_capability(pCtx,
14776 pBufRemaining, len,
14777 (tDot11fTLVP2PCapability *)
14778 (pFrm + pTlv->offset));
14779 break;
14780 case SigTlvP2PDeviceId:
14781 status |=
14782 dot11f_unpack_tlv_p2_p_device_id(pCtx,
14783 pBufRemaining, len,
14784 (tDot11fTLVP2PDeviceId *)
14785 (pFrm + pTlv->offset));
14786 break;
14787 case SigTlvP2PDeviceInfo:
14788 status |=
14789 dot11f_unpack_tlv_p2_p_device_info(pCtx,
14790 pBufRemaining, len,
14791 (tDot11fTLVP2PDeviceInfo *)
14792 (pFrm + pTlv->offset));
14793 break;
14794 case SigTlvP2PGroupInfo:
14795 status |=
14796 dot11f_unpack_tlv_p2_p_group_info(pCtx,
14797 pBufRemaining, len,
14798 (tDot11fTLVP2PGroupInfo *)
14799 (pFrm + pTlv->offset));
14800 break;
14801 case SigTlvP2PStatus:
14802 status |=
14803 dot11f_unpack_tlv_common_func(pCtx,
14804 pBufRemaining, len,
14805 (uint8_t *)&(((tDot11fTLVP2PStatus *)
14806 (pFrm + pTlv->offset))->present),
14807 (uint8_t *)&(((tDot11fTLVP2PStatus *)
14808 (pFrm + pTlv->offset))->status));
14809 break;
14810 case SigTlvPrimaryDeviceType:
14811 status |=
14812 dot11f_unpack_tlv_primary_device_type(pCtx,
14813 pBufRemaining, len,
14814 (tDot11fTLVPrimaryDeviceType *)
14815 (pFrm + pTlv->offset));
14816 break;
14817 case SigTlvRFBands:
14818 status |=
14819 dot11f_unpack_tlv_common_func(pCtx,
14820 pBufRemaining, len,
14821 (uint8_t *)&(((tDot11fTLVRFBands *)
14822 (pFrm + pTlv->offset))->present),
14823 (uint8_t *)&(((tDot11fTLVRFBands *)
14824 (pFrm + pTlv->offset))->bands));
14825 break;
14826 case SigTlvRequestDeviceType:
14827 status |=
14828 dot11f_unpack_tlv_request_device_type(pCtx,
14829 pBufRemaining, len,
14830 (tDot11fTLVRequestDeviceType *)
14831 (pFrm + pTlv->offset));
14832 break;
14833 case SigTlvRequestType:
14834 status |=
14835 dot11f_unpack_tlv_common_func(pCtx,
14836 pBufRemaining, len,
14837 (uint8_t *)&(((tDot11fTLVRequestType *)
14838 (pFrm + pTlv->offset))->present),
14839 (uint8_t *)&(((tDot11fTLVRequestType *)
14840 (pFrm + pTlv->offset))->reqType));
14841 break;
14842 case SigTlvResponseType:
14843 status |=
14844 dot11f_unpack_tlv_common_func(pCtx,
14845 pBufRemaining, len,
14846 (uint8_t *)&(((tDot11fTLVResponseType *)
14847 (pFrm + pTlv->offset))->present),
14848 (uint8_t *)&(((tDot11fTLVResponseType *)
14849 (pFrm + pTlv->offset))->resType));
14850 break;
14851 case SigTlvSelectedRegistrar:
14852 status |=
14853 dot11f_unpack_tlv_common_func(pCtx,
14854 pBufRemaining, len,
14855 (uint8_t *)&(((tDot11fTLVSelectedRegistrar *)
14856 (pFrm + pTlv->offset))->present),
14857 (uint8_t *)&(((tDot11fTLVSelectedRegistrar *)
14858 (pFrm + pTlv->offset))->selected));
14859 break;
14860 case SigTlvSelectedRegistrarConfigMethods:
14861 status |=
14862 dot11f_unpack_tlv_common_func2(pCtx,
14863 pBufRemaining, len,
14864 (uint8_t *)&(((tDot11fTLVSelectedRegistrarConfigMethods *)
14865 (pFrm + pTlv->offset))->present),
14866 (uint16_t *)&(((tDot11fTLVSelectedRegistrarConfigMethods *)
14867 (pFrm + pTlv->offset))->methods));
14868 break;
14869 case SigTlvSerialNumber:
14870 status |=
14871 dot11f_unpack_tlv_serial_number(pCtx,
14872 pBufRemaining, len,
14873 (tDot11fTLVSerialNumber *)
14874 (pFrm + pTlv->offset));
14875 break;
14876 case SigTlvUUID_E:
14877 status |=
14878 dot11f_unpack_tlv_uuid_e(pCtx,
14879 pBufRemaining, len,
14880 (tDot11fTLVUUID_E *)
14881 (pFrm + pTlv->offset));
14882 break;
14883 case SigTlvUUID_R:
14884 status |=
14885 dot11f_unpack_tlv_uuid_r(pCtx,
14886 pBufRemaining, len,
14887 (tDot11fTLVUUID_R *)
14888 (pFrm + pTlv->offset));
14889 break;
14890 case SigTlvVendorExtension:
14891 status |=
14892 dot11f_unpack_tlv_vendor_extension(pCtx,
14893 pBufRemaining, len,
14894 (tDot11fTLVVendorExtension *)
14895 (pFrm + pTlv->offset));
14896 break;
14897 case SigTlvVersion:
14898 status |=
14899 dot11f_unpack_tlv_version(pCtx,
14900 pBufRemaining, len,
14901 (tDot11fTLVVersion *)
14902 (pFrm + pTlv->offset));
14903 break;
14904 case SigTlvWPSState:
14905 status |=
14906 dot11f_unpack_tlv_common_func(pCtx,
14907 pBufRemaining, len,
14908 (uint8_t *)&(((tDot11fTLVWPSState *)
14909 (pFrm + pTlv->offset))->present),
14910 (uint8_t *)&(((tDot11fTLVWPSState *)
14911 (pFrm + pTlv->offset))->state));
14912 break;
Abhishek Singh951eed82017-07-06 16:53:19 +053014913 case SigTlvassoc_disallowed:
14914 status |=
14915 dot11f_unpack_tlv_common_func(pCtx,
14916 pBufRemaining, len,
14917 (uint8_t *)&(((tDot11fTLVassoc_disallowed *)
14918 (pFrm + pTlv->offset))->present),
14919 (uint8_t *)&(((tDot11fTLVassoc_disallowed *)
14920 (pFrm + pTlv->offset))->reason_code));
14921 break;
14922 case SigTlvassoc_retry_delay:
14923 status |=
14924 dot11f_unpack_tlv_common_func2(pCtx,
14925 pBufRemaining, len,
14926 (uint8_t *)&(((tDot11fTLVassoc_retry_delay *)
14927 (pFrm + pTlv->offset))->present),
14928 (uint16_t *)&(((tDot11fTLVassoc_retry_delay *)
14929 (pFrm + pTlv->offset))->delay));
14930 break;
14931 case SigTlvcellular_data_cap:
14932 status |=
14933 dot11f_unpack_tlv_common_func(pCtx,
14934 pBufRemaining, len,
14935 (uint8_t *)&(((tDot11fTLVcellular_data_cap *)
14936 (pFrm + pTlv->offset))->present),
14937 (uint8_t *)&(((tDot11fTLVcellular_data_cap *)
14938 (pFrm + pTlv->offset))->cellular_connectivity));
14939 break;
14940 case SigTlvcellular_data_con_pref:
14941 status |=
14942 dot11f_unpack_tlv_common_func(pCtx,
14943 pBufRemaining, len,
14944 (uint8_t *)&(((tDot11fTLVcellular_data_con_pref *)
14945 (pFrm + pTlv->offset))->present),
14946 (uint8_t *)&(((tDot11fTLVcellular_data_con_pref *)
14947 (pFrm + pTlv->offset))->cellular_preference));
14948 break;
14949 case SigTlvmbo_ap_cap:
14950 status |=
14951 dot11f_unpack_tlv_common_func(pCtx,
14952 pBufRemaining, len,
14953 (uint8_t *)&(((tDot11fTLVmbo_ap_cap *)
14954 (pFrm + pTlv->offset))->present),
14955 (uint8_t *)&(((tDot11fTLVmbo_ap_cap *)
14956 (pFrm + pTlv->offset))->mbo_cap_ind));
14957 break;
14958 case SigTlvnon_prefferd_chan_rep:
14959 status |=
14960 dot11f_unpack_tlv_non_prefferd_chan_rep(pCtx,
14961 pBufRemaining, len,
14962 (tDot11fTLVnon_prefferd_chan_rep *)
14963 (pFrm + pTlv->offset));
14964 break;
14965 case SigTlvoce_cap:
14966 status |=
14967 dot11f_unpack_tlv_oce_cap(pCtx,
14968 pBufRemaining, len,
14969 (tDot11fTLVoce_cap *)
14970 (pFrm + pTlv->offset));
14971 break;
14972 case SigTlvreduced_wan_metrics:
14973 status |=
14974 dot11f_unpack_tlv_reduced_wan_metrics(pCtx,
14975 pBufRemaining, len,
14976 (tDot11fTLVreduced_wan_metrics *)
14977 (pFrm + pTlv->offset));
14978 break;
14979 case SigTlvrssi_assoc_rej:
14980 status |=
14981 dot11f_unpack_tlv_rssi_assoc_rej(pCtx,
14982 pBufRemaining, len,
14983 (tDot11fTLVrssi_assoc_rej *)
14984 (pFrm + pTlv->offset));
14985 break;
14986 case SigTlvtransition_reason:
14987 status |=
14988 dot11f_unpack_tlv_common_func(pCtx,
14989 pBufRemaining, len,
14990 (uint8_t *)&(((tDot11fTLVtransition_reason *)
14991 (pFrm + pTlv->offset))->present),
14992 (uint8_t *)&(((tDot11fTLVtransition_reason *)
14993 (pFrm + pTlv->offset))->transition_reason_code));
14994 break;
14995 case SigTlvtransition_reject_reason:
14996 status |=
14997 dot11f_unpack_tlv_common_func(pCtx,
14998 pBufRemaining, len,
14999 (uint8_t *)&(((tDot11fTLVtransition_reject_reason *)
15000 (pFrm + pTlv->offset))->present),
15001 (uint8_t *)&(((tDot11fTLVtransition_reject_reason *)
15002 (pFrm + pTlv->offset))->transition_reject_code));
15003 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080015004 case SigTlvP2PInterface:
15005 status |=
15006 dot11f_unpack_tlv_p2_p_interface(pCtx,
15007 pBufRemaining, len,
15008 (tDot11fTLVP2PInterface *)
15009 (pFrm + pTlv->offset));
15010 break;
15011 case SigTlvP2PManageability:
15012 status |=
15013 dot11f_unpack_tlv_common_func(pCtx,
15014 pBufRemaining, len,
15015 (uint8_t *)&(((tDot11fTLVP2PManageability *)
15016 (pFrm + pTlv->offset))->present),
15017 (uint8_t *)&(((tDot11fTLVP2PManageability *)
15018 (pFrm + pTlv->offset))->manageability));
15019 break;
15020 default:
15021 FRAMES_LOG1(pCtx, FRLOGE, FRFL("INTERNAL ERROR: I"
15022 " don't know about the TLV signature %d-- thi"
15023 "s is most likely a 'framesc' bug.\n"),
15024 pTlv->sig);
15025 FRAMES_DBG_BREAK();
15026 return DOT11F_INTERNAL_ERROR;
15027 } /* End switch on sig. */
15028 } /* End if on length check. */
15029
15030 } else {
15031 FRAMES_LOG2(pCtx, FRLOG3, FRFL("Skipping unknown TLV %d ("
15032 "length %d)\n"), id, len);
15033 FRAMES_DUMP(pCtx, FRLOG3, pBufRemaining - (pTlv->sType + pTlv->sLen), len);
15034 status |= DOT11F_UNKNOWN_TLVS;
15035 }
15036
15037 /* Advance to the next TLV */
15038 pBufRemaining += len;
15039
15040 if (len > nBufRemaining) {
15041 FRAMES_LOG0(pCtx, FRLOGW, FRFL("This TLV extends past th"
15042 "e buffer as it was defined to us. This could mean "
15043 "a corrupt frame, or just an incorrect length parame"
15044 "ter.\n"));
15045 FRAMES_DBG_BREAK();
15046 status |= DOT11F_LAST_TLV_TOO_LONG;
15047 goto MandatoryCheck;
15048 }
15049
15050 nBufRemaining -= len;
15051
15052 } /* End iteration over TLVs.*/
15053
15054MandatoryCheck:
15055 pTlv = &TLVs[0];
15056 while (0xffff != pTlv->id) {
15057 if (pTlv->fMandatory) {
15058 pfFound = (uint8_t *)(pFrm + pTlv->offset +
15059 pTlv->presenceOffset);
15060 if (!*pfFound) {
15061 FRAMES_LOG1(pCtx, FRLOGW, FRFL("ERROR: The mandatory "
15062 "TLV %s wasn't seen.\n"),
15063 pTlv->name);
15064 FRAMES_DBG_BREAK();
15065 status |= DOT11F_MANDATORY_TLV_MISSING;
15066 }
15067
15068 }
15069 ++pTlv;
15070 }
15071
15072 return status;
15073} /* End UnpacTlvkCore. */
15074uint32_t dot11f_get_packed_ietclas(tpAniSirGlobal pCtx,
15075 tDot11fIETCLAS *pIe, uint32_t *pnNeeded)
15076{
15077 uint32_t status = DOT11F_PARSE_SUCCESS;
15078 (void)pCtx;
15079 while (pIe->present) {
15080 *pnNeeded += 1;
15081 *pnNeeded += 1;
15082 *pnNeeded += 1;
15083 switch (pIe->classifier_type) {
15084 case 0:
15085 *pnNeeded += 6;
15086 *pnNeeded += 6;
15087 *pnNeeded += 2;
15088 break;
15089 case 1:
15090 *pnNeeded += 1;
15091 switch (pIe->info.IpParams.version) {
15092 case 4:
15093 *pnNeeded += 4;
15094 *pnNeeded += 4;
15095 *pnNeeded += 2;
15096 *pnNeeded += 2;
15097 *pnNeeded += 1;
15098 *pnNeeded += 1;
15099 *pnNeeded += 1;
15100 break;
15101 case 6:
15102 *pnNeeded += 16;
15103 *pnNeeded += 16;
15104 *pnNeeded += 2;
15105 *pnNeeded += 2;
15106 *pnNeeded += 3;
15107 break;
15108 }
15109 break;
15110 case 2:
15111 *pnNeeded += 2;
15112 break;
15113 }
15114 break;
15115 }
15116 return status;
15117} /* End dot11f_get_packed_ietclas. */
15118
15119uint32_t dot11f_get_packed_iewmmtclas(tpAniSirGlobal pCtx,
15120 tDot11fIEWMMTCLAS *pIe, uint32_t *pnNeeded)
15121{
15122 uint32_t status = DOT11F_PARSE_SUCCESS;
15123 (void)pCtx;
15124 while (pIe->present) {
15125 *pnNeeded += 1;
15126 *pnNeeded += 1;
15127 *pnNeeded += 1;
15128 *pnNeeded += 1;
15129 switch (pIe->classifier_type) {
15130 case 0:
15131 *pnNeeded += 6;
15132 *pnNeeded += 6;
15133 *pnNeeded += 2;
15134 break;
15135 case 1:
15136 *pnNeeded += 1;
15137 switch (pIe->info.IpParams.version) {
15138 case 4:
15139 *pnNeeded += 4;
15140 *pnNeeded += 4;
15141 *pnNeeded += 2;
15142 *pnNeeded += 2;
15143 *pnNeeded += 1;
15144 *pnNeeded += 1;
15145 *pnNeeded += 1;
15146 break;
15147 case 6:
15148 *pnNeeded += 16;
15149 *pnNeeded += 16;
15150 *pnNeeded += 2;
15151 *pnNeeded += 2;
15152 *pnNeeded += 3;
15153 break;
15154 }
15155 break;
15156 case 2:
15157 *pnNeeded += 2;
15158 break;
15159 }
15160 break;
15161 }
15162 return status;
15163} /* End dot11f_get_packed_iewmmtclas. */
15164
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080015165uint32_t dot11f_get_packed_ie_neighbor_rpt(tpAniSirGlobal pCtx,
15166 tDot11fIEneighbor_rpt *pIe, uint32_t *pnNeeded)
15167{
15168 uint32_t status = DOT11F_PARSE_SUCCESS;
15169 (void)pCtx;
15170 while (pIe->present) {
15171 *pnNeeded += 6;
15172 *pnNeeded += 1;
15173 *pnNeeded += 1;
15174 *pnNeeded += 2;
15175 *pnNeeded += 1;
15176 *pnNeeded += 1;
15177 *pnNeeded += 1;
15178 status = get_packed_size_core(pCtx, (uint8_t *)pIe, pnNeeded,
15179 IES_neighbor_rpt);
15180 break;
15181 }
15182 return status;
15183} /* End dot11f_get_packed_ie_neighbor_rpt. */
15184
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080015185uint32_t dot11f_get_packed_ie_channel_switch_wrapper(tpAniSirGlobal pCtx,
15186 tDot11fIEChannelSwitchWrapper *pIe, uint32_t *pnNeeded)
15187{
15188 uint32_t status = DOT11F_PARSE_SUCCESS;
15189 (void)pCtx;
15190 while (pIe->present) {
15191 status = get_packed_size_core(pCtx, (uint8_t *)pIe, pnNeeded,
15192 IES_ChannelSwitchWrapper);
15193 break;
15194 }
15195 return status;
15196} /* End dot11f_get_packed_ie_channel_switch_wrapper. */
15197
15198uint32_t dot11f_get_packed_ie_country(tpAniSirGlobal pCtx,
15199 tDot11fIECountry *pIe, uint32_t *pnNeeded)
15200{
15201 uint32_t status = DOT11F_PARSE_SUCCESS;
15202 (void)pCtx;
15203 while (pIe->present) {
15204 *pnNeeded += 3;
15205 if (pIe->num_triplets) {
15206 *pnNeeded += (pIe->num_triplets * 3);
15207 } else {
15208 break;
15209 }
15210 break;
15211 }
15212 return status;
15213} /* End dot11f_get_packed_ie_country. */
15214
15215uint32_t dot11f_get_packed_ieft_info(tpAniSirGlobal pCtx,
15216 tDot11fIEFTInfo *pIe, uint32_t *pnNeeded)
15217{
15218 uint32_t status = DOT11F_PARSE_SUCCESS;
15219 (void)pCtx;
15220 while (pIe->present) {
15221 *pnNeeded += 2;
15222 *pnNeeded += 16;
15223 *pnNeeded += 32;
15224 *pnNeeded += 32;
15225 status = get_packed_size_core(pCtx, (uint8_t *)pIe, pnNeeded,
15226 IES_FTInfo);
15227 break;
15228 }
15229 return status;
15230} /* End dot11f_get_packed_ieft_info. */
15231
Abhishek Singh951eed82017-07-06 16:53:19 +053015232uint32_t dot11f_get_packed_ie_MBO_IE(tpAniSirGlobal pCtx,
15233 tDot11fIEMBO_IE *pIe, uint32_t *pnNeeded)
15234{
15235 uint32_t status = DOT11F_PARSE_SUCCESS;
15236 (void)pCtx;
15237 while (pIe->present) {
15238 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
15239 TLVS_MBO_IE);
15240 break;
15241 }
15242 return status;
15243} /* End dot11f_get_packed_ie_MBO_IE. */
15244
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080015245uint32_t dot11f_get_packed_ie_measurement_report(tpAniSirGlobal pCtx,
15246 tDot11fIEMeasurementReport *pIe, uint32_t *pnNeeded)
15247{
15248 uint32_t status = DOT11F_PARSE_SUCCESS;
15249 (void)pCtx;
15250 while (pIe->present) {
15251 *pnNeeded += 1;
15252 *pnNeeded += 1;
15253 *pnNeeded += 1;
15254 if (pIe->type) {
15255 switch (pIe->type) {
15256 case 0:
15257 *pnNeeded += 1;
15258 *pnNeeded += 8;
15259 *pnNeeded += 2;
15260 *pnNeeded += 1;
15261 break;
15262 case 1:
15263 *pnNeeded += 1;
15264 *pnNeeded += 8;
15265 *pnNeeded += 2;
15266 *pnNeeded += 1;
15267 break;
15268 case 2:
15269 *pnNeeded += 1;
15270 *pnNeeded += 8;
15271 *pnNeeded += 2;
15272 *pnNeeded += 1;
15273 *pnNeeded += 1;
15274 *pnNeeded += 1;
15275 *pnNeeded += 1;
15276 *pnNeeded += 1;
15277 *pnNeeded += 1;
15278 *pnNeeded += 1;
15279 *pnNeeded += 1;
15280 break;
15281 case 5:
15282 *pnNeeded += 1;
15283 *pnNeeded += 1;
15284 *pnNeeded += 8;
15285 *pnNeeded += 2;
15286 *pnNeeded += 1;
15287 *pnNeeded += 1;
15288 *pnNeeded += 1;
15289 *pnNeeded += 6;
15290 *pnNeeded += 1;
15291 *pnNeeded += 4;
15292 status = get_packed_size_core(pCtx, (uint8_t *)pIe, pnNeeded, IES_reportBeacon);
15293 break;
15294 }
15295 } else {
15296 break;
15297 }
15298 break;
15299 }
15300 return status;
15301} /* End dot11f_get_packed_ie_measurement_report. */
15302
15303uint32_t dot11f_get_packed_ie_measurement_request(tpAniSirGlobal pCtx,
15304 tDot11fIEMeasurementRequest *pIe, uint32_t *pnNeeded)
15305{
15306 uint32_t status = DOT11F_PARSE_SUCCESS;
15307 (void)pCtx;
15308 while (pIe->present) {
15309 *pnNeeded += 1;
15310 *pnNeeded += 1;
15311 *pnNeeded += 1;
15312 switch (pIe->measurement_type) {
15313 case 0:
15314 *pnNeeded += 1;
15315 *pnNeeded += 8;
15316 *pnNeeded += 2;
15317 break;
15318 case 1:
15319 *pnNeeded += 1;
15320 *pnNeeded += 8;
15321 *pnNeeded += 2;
15322 break;
15323 case 2:
15324 *pnNeeded += 1;
15325 *pnNeeded += 8;
15326 *pnNeeded += 2;
15327 break;
15328 case 5:
15329 *pnNeeded += 1;
15330 *pnNeeded += 1;
15331 *pnNeeded += 2;
15332 *pnNeeded += 2;
15333 *pnNeeded += 1;
15334 *pnNeeded += 6;
15335 status = get_packed_size_core(pCtx, (uint8_t *)pIe, pnNeeded, IES_measurement_requestBeacon);
15336 break;
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080015337 case 8:
15338 *pnNeeded += 1;
15339 status = get_packed_size_core(pCtx, (uint8_t *)pIe, pnNeeded, IES_measurement_requestlci);
15340 break;
15341 case 16:
15342 *pnNeeded += 2;
15343 *pnNeeded += 1;
15344 status = get_packed_size_core(pCtx, (uint8_t *)pIe, pnNeeded, IES_measurement_requestftmrr);
15345 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080015346 }
15347 break;
15348 }
15349 return status;
15350} /* End dot11f_get_packed_ie_measurement_request. */
15351
15352uint32_t dot11f_get_packed_ie_neighbor_report(tpAniSirGlobal pCtx,
15353 tDot11fIENeighborReport *pIe, uint32_t *pnNeeded)
15354{
15355 uint32_t status = DOT11F_PARSE_SUCCESS;
15356 (void)pCtx;
15357 while (pIe->present) {
15358 *pnNeeded += 6;
15359 *pnNeeded += 1;
15360 *pnNeeded += 1;
15361 *pnNeeded += 2;
15362 *pnNeeded += 1;
15363 *pnNeeded += 1;
15364 *pnNeeded += 1;
15365 status = get_packed_size_core(pCtx, (uint8_t *)pIe, pnNeeded,
15366 IES_NeighborReport);
15367 break;
15368 }
15369 return status;
15370} /* End dot11f_get_packed_ie_neighbor_report. */
15371
15372uint32_t dot11f_get_packed_iep2_p_assoc_req(tpAniSirGlobal pCtx,
15373 tDot11fIEP2PAssocReq *pIe, uint32_t *pnNeeded)
15374{
15375 uint32_t status = DOT11F_PARSE_SUCCESS;
15376 (void)pCtx;
15377 while (pIe->present) {
15378 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
15379 TLVS_P2PAssocReq);
15380 break;
15381 }
15382 return status;
15383} /* End dot11f_get_packed_iep2_p_assoc_req. */
15384
15385uint32_t dot11f_get_packed_iep2_p_assoc_res(tpAniSirGlobal pCtx,
15386 tDot11fIEP2PAssocRes *pIe, uint32_t *pnNeeded)
15387{
15388 uint32_t status = DOT11F_PARSE_SUCCESS;
15389 (void)pCtx;
15390 while (pIe->present) {
15391 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
15392 TLVS_P2PAssocRes);
15393 break;
15394 }
15395 return status;
15396} /* End dot11f_get_packed_iep2_p_assoc_res. */
15397
15398uint32_t dot11f_get_packed_iep2_p_beacon(tpAniSirGlobal pCtx,
15399 tDot11fIEP2PBeacon *pIe, uint32_t *pnNeeded)
15400{
15401 uint32_t status = DOT11F_PARSE_SUCCESS;
15402 (void)pCtx;
15403 while (pIe->present) {
15404 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
15405 TLVS_P2PBeacon);
15406 break;
15407 }
15408 return status;
15409} /* End dot11f_get_packed_iep2_p_beacon. */
15410
15411uint32_t dot11f_get_packed_iep2_p_beacon_probe_res(tpAniSirGlobal pCtx,
15412 tDot11fIEP2PBeaconProbeRes *pIe, uint32_t *pnNeeded)
15413{
15414 uint32_t status = DOT11F_PARSE_SUCCESS;
15415 (void)pCtx;
15416 while (pIe->present) {
15417 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
15418 TLVS_P2PBeaconProbeRes);
15419 break;
15420 }
15421 return status;
15422} /* End dot11f_get_packed_iep2_p_beacon_probe_res. */
15423
15424uint32_t dot11f_get_packed_iep2_p_de_auth(tpAniSirGlobal pCtx,
15425 tDot11fIEP2PDeAuth *pIe, uint32_t *pnNeeded)
15426{
15427 uint32_t status = DOT11F_PARSE_SUCCESS;
15428 (void)pCtx;
15429 while (pIe->present) {
15430 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
15431 TLVS_P2PDeAuth);
15432 break;
15433 }
15434 return status;
15435} /* End dot11f_get_packed_iep2_p_de_auth. */
15436
15437uint32_t dot11f_get_packed_iep2_p_dis_assoc(tpAniSirGlobal pCtx,
15438 tDot11fIEP2PDisAssoc *pIe, uint32_t *pnNeeded)
15439{
15440 uint32_t status = DOT11F_PARSE_SUCCESS;
15441 (void)pCtx;
15442 while (pIe->present) {
15443 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
15444 TLVS_P2PDisAssoc);
15445 break;
15446 }
15447 return status;
15448} /* End dot11f_get_packed_iep2_p_dis_assoc. */
15449
15450uint32_t dot11f_get_packed_iep2_p_probe_req(tpAniSirGlobal pCtx,
15451 tDot11fIEP2PProbeReq *pIe, uint32_t *pnNeeded)
15452{
15453 uint32_t status = DOT11F_PARSE_SUCCESS;
15454 (void)pCtx;
15455 while (pIe->present) {
15456 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
15457 TLVS_P2PProbeReq);
15458 break;
15459 }
15460 return status;
15461} /* End dot11f_get_packed_iep2_p_probe_req. */
15462
15463uint32_t dot11f_get_packed_iep2_p_probe_res(tpAniSirGlobal pCtx,
15464 tDot11fIEP2PProbeRes *pIe, uint32_t *pnNeeded)
15465{
15466 uint32_t status = DOT11F_PARSE_SUCCESS;
15467 (void)pCtx;
15468 while (pIe->present) {
15469 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
15470 TLVS_P2PProbeRes);
15471 break;
15472 }
15473 return status;
15474} /* End dot11f_get_packed_iep2_p_probe_res. */
15475
15476uint32_t dot11f_get_packed_ieric_data_desc(tpAniSirGlobal pCtx,
15477 tDot11fIERICDataDesc *pIe, uint32_t *pnNeeded)
15478{
15479 uint32_t status = DOT11F_PARSE_SUCCESS;
15480 (void)pCtx;
15481 while (pIe->present) {
15482 status = get_packed_size_core(pCtx, (uint8_t *)pIe, pnNeeded,
15483 IES_RICDataDesc);
15484 break;
15485 }
15486 return status;
15487} /* End dot11f_get_packed_ieric_data_desc. */
15488
15489uint32_t dot11f_get_packed_iersn(tpAniSirGlobal pCtx,
15490 tDot11fIERSN *pIe, uint32_t *pnNeeded)
15491{
15492 uint32_t status = DOT11F_PARSE_SUCCESS;
15493 (void)pCtx;
15494 while (pIe->present) {
15495 *pnNeeded += 2;
Abhishek Singh3f13a812018-01-16 14:24:44 +053015496 if (pIe->gp_cipher_suite_present) {
15497
Abhishek Singh7dcb85b2017-12-27 15:15:01 +053015498 *pnNeeded += 4;
15499 } else {
15500 break;
15501 }
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080015502 if (pIe->pwise_cipher_suite_count) {
15503 *pnNeeded += 2;
15504 } else {
15505 break;
15506 }
15507 *pnNeeded += (pIe->pwise_cipher_suite_count * 4);
Abhishek Singh3f13a812018-01-16 14:24:44 +053015508 if (pIe->akm_suite_cnt) {
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080015509 *pnNeeded += 2;
15510 } else {
15511 break;
15512 }
Abhishek Singh3f13a812018-01-16 14:24:44 +053015513 *pnNeeded += (pIe->akm_suite_cnt * 4);
15514 if (pIe->RSN_Cap_present) {
15515
15516 *pnNeeded += 2;
15517 } else {
15518 break;
15519 }
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080015520 if (pIe->pmkid_count) {
15521 *pnNeeded += 2;
15522 } else {
15523 break;
15524 }
15525 *pnNeeded += (pIe->pmkid_count * 16);
Abhishek Singh3f13a812018-01-16 14:24:44 +053015526 if (pIe->gp_mgmt_cipher_suite_present) {
15527
15528 *pnNeeded += 4;
15529 } else {
15530 break;
15531 }
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080015532 break;
15533 }
15534 return status;
15535} /* End dot11f_get_packed_iersn. */
15536
15537uint32_t dot11f_get_packed_iewapi(tpAniSirGlobal pCtx,
15538 tDot11fIEWAPI *pIe, uint32_t *pnNeeded)
15539{
15540 uint32_t status = DOT11F_PARSE_SUCCESS;
15541 (void)pCtx;
15542 while (pIe->present) {
15543 *pnNeeded += 2;
15544 *pnNeeded += 2;
15545 *pnNeeded += (pIe->akm_suite_count * 4);
15546 *pnNeeded += 2;
15547 *pnNeeded += (pIe->unicast_cipher_suite_count * 4);
15548 *pnNeeded += 4;
15549 *pnNeeded += 2;
15550 if (pIe->bkid_count) {
15551 *pnNeeded += 2;
15552 } else {
15553 break;
15554 }
15555 *pnNeeded += (pIe->bkid_count * 16);
15556 break;
15557 }
15558 return status;
15559} /* End dot11f_get_packed_iewapi. */
15560
15561uint32_t dot11f_get_packed_iewpa(tpAniSirGlobal pCtx,
15562 tDot11fIEWPA *pIe, uint32_t *pnNeeded)
15563{
15564 uint32_t status = DOT11F_PARSE_SUCCESS;
15565 (void)pCtx;
15566 while (pIe->present) {
15567 *pnNeeded += 2;
15568 if (pIe->multicast_cipher_present) {
15569
15570 *pnNeeded += 4;
15571 } else {
15572 break;
15573 }
15574 if (pIe->unicast_cipher_count) {
15575 *pnNeeded += 2;
15576 } else {
15577 break;
15578 }
15579 *pnNeeded += (pIe->unicast_cipher_count * 4);
15580 if (pIe->auth_suite_count) {
15581 *pnNeeded += 2;
15582 } else {
15583 break;
15584 }
15585 *pnNeeded += (pIe->auth_suite_count * 4);
15586 if (pIe->caps) {
15587 *pnNeeded += 2;
15588 } else {
15589 break;
15590 }
15591 break;
15592 }
15593 return status;
15594} /* End dot11f_get_packed_iewpa. */
15595
15596uint32_t dot11f_get_packed_iewsc(tpAniSirGlobal pCtx,
15597 tDot11fIEWSC *pIe, uint32_t *pnNeeded)
15598{
15599 uint32_t status = DOT11F_PARSE_SUCCESS;
15600 (void)pCtx;
15601 while (pIe->present) {
15602 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
15603 TLVS_WSC);
15604 break;
15605 }
15606 return status;
15607} /* End dot11f_get_packed_iewsc. */
15608
15609uint32_t dot11f_get_packed_ie_wsc_assoc_req(tpAniSirGlobal pCtx,
15610 tDot11fIEWscAssocReq *pIe, uint32_t *pnNeeded)
15611{
15612 uint32_t status = DOT11F_PARSE_SUCCESS;
15613 (void)pCtx;
15614 while (pIe->present) {
15615 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
15616 TLVS_WscAssocReq);
15617 break;
15618 }
15619 return status;
15620} /* End dot11f_get_packed_ie_wsc_assoc_req. */
15621
15622uint32_t dot11f_get_packed_ie_wsc_assoc_res(tpAniSirGlobal pCtx,
15623 tDot11fIEWscAssocRes *pIe, uint32_t *pnNeeded)
15624{
15625 uint32_t status = DOT11F_PARSE_SUCCESS;
15626 (void)pCtx;
15627 while (pIe->present) {
15628 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
15629 TLVS_WscAssocRes);
15630 break;
15631 }
15632 return status;
15633} /* End dot11f_get_packed_ie_wsc_assoc_res. */
15634
15635uint32_t dot11f_get_packed_ie_wsc_beacon(tpAniSirGlobal pCtx,
15636 tDot11fIEWscBeacon *pIe, uint32_t *pnNeeded)
15637{
15638 uint32_t status = DOT11F_PARSE_SUCCESS;
15639 (void)pCtx;
15640 while (pIe->present) {
15641 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
15642 TLVS_WscBeacon);
15643 break;
15644 }
15645 return status;
15646} /* End dot11f_get_packed_ie_wsc_beacon. */
15647
15648uint32_t dot11f_get_packed_ie_wsc_beacon_probe_res(tpAniSirGlobal pCtx,
15649 tDot11fIEWscBeaconProbeRes *pIe, uint32_t *pnNeeded)
15650{
15651 uint32_t status = DOT11F_PARSE_SUCCESS;
15652 (void)pCtx;
15653 while (pIe->present) {
15654 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
15655 TLVS_WscBeaconProbeRes);
15656 break;
15657 }
15658 return status;
15659} /* End dot11f_get_packed_ie_wsc_beacon_probe_res. */
15660
15661uint32_t dot11f_get_packed_ie_wsc_probe_req(tpAniSirGlobal pCtx,
15662 tDot11fIEWscProbeReq *pIe, uint32_t *pnNeeded)
15663{
15664 uint32_t status = DOT11F_PARSE_SUCCESS;
15665 (void)pCtx;
15666 while (pIe->present) {
15667 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
15668 TLVS_WscProbeReq);
15669 break;
15670 }
15671 return status;
15672} /* End dot11f_get_packed_ie_wsc_probe_req. */
15673
15674uint32_t dot11f_get_packed_ie_wsc_probe_res(tpAniSirGlobal pCtx,
15675 tDot11fIEWscProbeRes *pIe, uint32_t *pnNeeded)
15676{
15677 uint32_t status = DOT11F_PARSE_SUCCESS;
15678 (void)pCtx;
15679 while (pIe->present) {
15680 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
15681 TLVS_WscProbeRes);
15682 break;
15683 }
15684 return status;
15685} /* End dot11f_get_packed_ie_wsc_probe_res. */
15686
15687uint32_t dot11f_get_packed_ie_wsc_reassoc_res(tpAniSirGlobal pCtx,
15688 tDot11fIEWscReassocRes *pIe, uint32_t *pnNeeded)
15689{
15690 uint32_t status = DOT11F_PARSE_SUCCESS;
15691 (void)pCtx;
15692 while (pIe->present) {
15693 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pIe, pnNeeded,
15694 TLVS_WscReassocRes);
15695 break;
15696 }
15697 return status;
15698} /* End dot11f_get_packed_ie_wsc_reassoc_res. */
15699
Naveen Rawatea921ce2017-09-08 15:07:58 -070015700uint32_t dot11f_get_packed_ie_he_cap(tpAniSirGlobal pCtx,
15701 tDot11fIEhe_cap *pIe, uint32_t *pnNeeded)
Krishna Kumaar Natarajan7ee45232016-08-29 17:13:47 -070015702{
15703 uint32_t status = DOT11F_PARSE_SUCCESS;
15704 (void)pCtx;
15705 while (pIe->present) {
15706 *pnNeeded += 4;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070015707 *pnNeeded += 2;
Krishna Kumaar Natarajan7ee45232016-08-29 17:13:47 -070015708 *pnNeeded += 4;
15709 *pnNeeded += 4;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070015710 *pnNeeded += 2;
Krishna Kumaar Natarajan7ee45232016-08-29 17:13:47 -070015711 *pnNeeded += 1;
15712 *pnNeeded += 2;
Naveen Rawat215dad62017-10-16 16:55:18 -070015713 *pnNeeded += 2;
15714 *pnNeeded += (pIe->chan_width_2 * 2);
15715 *pnNeeded += (pIe->chan_width_2 * 2);
15716 *pnNeeded += (pIe->chan_width_3 * 2);
15717 *pnNeeded += (pIe->chan_width_3 * 2);
Naveen Rawat819158d2018-01-16 10:56:45 -080015718 if (pIe->ppet_present) {
15719 switch (pIe->ppet_present) {
15720 case 1:
15721 *pnNeeded += pIe->ppet.ppe_threshold.num_ppe_th;
15722 break;
15723 }
15724 } else {
15725 break;
15726 }
Krishna Kumaar Natarajan7ee45232016-08-29 17:13:47 -070015727 break;
15728 }
15729 return status;
Naveen Rawatea921ce2017-09-08 15:07:58 -070015730} /* End dot11f_get_packed_ie_he_cap. */
Krishna Kumaar Natarajan7ee45232016-08-29 17:13:47 -070015731
Naveen Rawatea921ce2017-09-08 15:07:58 -070015732uint32_t dot11f_get_packed_ie_he_op(tpAniSirGlobal pCtx,
15733 tDot11fIEhe_op *pIe, uint32_t *pnNeeded)
Krishna Kumaar Natarajan7ee45232016-08-29 17:13:47 -070015734{
15735 uint32_t status = DOT11F_PARSE_SUCCESS;
15736 (void)pCtx;
15737 while (pIe->present) {
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070015738 *pnNeeded += 2;
15739 *pnNeeded += 1;
15740 *pnNeeded += 1;
Naveen Rawate795f452017-11-13 14:47:39 -080015741 *pnNeeded += 2;
Naveen Rawat25b76df2017-09-08 15:07:53 -070015742 if (pIe->vht_oper_present) {
15743 switch (pIe->vht_oper_present) {
15744 case 1:
15745 *pnNeeded += 1;
15746 *pnNeeded += 1;
15747 *pnNeeded += 1;
15748 break;
15749 }
15750 } else {
15751 break;
15752 }
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070015753 if (pIe->co_located_bss) {
15754 switch (pIe->co_located_bss) {
Naveen Rawat25b76df2017-09-08 15:07:53 -070015755 case 1:
15756 *pnNeeded += 1;
15757 break;
15758 }
15759 } else {
15760 break;
15761 }
Krishna Kumaar Natarajan7ee45232016-08-29 17:13:47 -070015762 break;
15763 }
15764 return status;
Naveen Rawatea921ce2017-09-08 15:07:58 -070015765} /* End dot11f_get_packed_ie_he_op. */
15766
15767uint32_t dot11f_get_packed_ie_hs20vendor_ie(tpAniSirGlobal pCtx,
15768 tDot11fIEhs20vendor_ie *pIe, uint32_t *pnNeeded)
15769{
15770 uint32_t status = DOT11F_PARSE_SUCCESS;
15771 (void)pCtx;
15772 while (pIe->present) {
15773 *pnNeeded += 1;
15774 if (pIe->hs_id_present) {
15775 switch (pIe->hs_id_present) {
15776 case 1:
15777 *pnNeeded += 2;
15778 break;
15779 case 2:
15780 *pnNeeded += 2;
15781 break;
15782 }
15783 } else {
15784 break;
15785 }
15786 break;
15787 }
15788 return status;
15789} /* End dot11f_get_packed_ie_hs20vendor_ie. */
Krishna Kumaar Natarajan7ee45232016-08-29 17:13:47 -070015790
Kapil Gupta4b2efbb2016-10-03 13:07:20 +053015791uint32_t dot11f_get_packed_ie_vendor_vht_ie(tpAniSirGlobal pCtx,
15792 tDot11fIEvendor_vht_ie *pIe, uint32_t *pnNeeded)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080015793{
15794 uint32_t status = DOT11F_PARSE_SUCCESS;
15795 (void)pCtx;
15796 while (pIe->present) {
Kiran Kumar Lokere81722632017-09-26 12:11:43 -070015797 *pnNeeded += 1;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080015798 status = get_packed_size_core(pCtx, (uint8_t *)pIe, pnNeeded,
Kapil Gupta4b2efbb2016-10-03 13:07:20 +053015799 IES_vendor_vht_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080015800 break;
15801 }
15802 return status;
Kapil Gupta4b2efbb2016-10-03 13:07:20 +053015803} /* End dot11f_get_packed_ie_vendor_vht_ie. */
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080015804
15805uint32_t dot11f_get_packed_add_ts_request_size(tpAniSirGlobal pCtx,
15806 tDot11fAddTSRequest *pFrm, uint32_t *pnNeeded)
15807{
15808 uint32_t status = 0;
15809 *pnNeeded = 3;
15810 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
15811 IES_AddTSRequest);
15812 return status;
15813} /* End dot11f_get_packed_add_ts_request_size. */
15814
15815uint32_t dot11f_get_packed_add_ts_response_size(tpAniSirGlobal pCtx,
15816 tDot11fAddTSResponse *pFrm, uint32_t *pnNeeded)
15817{
15818 uint32_t status = 0;
15819 *pnNeeded = 5;
15820 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
15821 IES_AddTSResponse);
15822 return status;
15823} /* End dot11f_get_packed_add_ts_response_size. */
15824
15825uint32_t dot11f_get_packed_assoc_request_size(tpAniSirGlobal pCtx,
15826 tDot11fAssocRequest *pFrm, uint32_t *pnNeeded)
15827{
15828 uint32_t status = 0;
15829 *pnNeeded = 4;
15830 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
15831 IES_AssocRequest);
15832 return status;
15833} /* End dot11f_get_packed_assoc_request_size. */
15834
15835uint32_t dot11f_get_packed_assoc_response_size(tpAniSirGlobal pCtx,
15836 tDot11fAssocResponse *pFrm, uint32_t *pnNeeded)
15837{
15838 uint32_t status = 0;
15839 *pnNeeded = 6;
15840 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
15841 IES_AssocResponse);
15842 return status;
15843} /* End dot11f_get_packed_assoc_response_size. */
15844
15845uint32_t dot11f_get_packed_authentication_size(tpAniSirGlobal pCtx,
15846 tDot11fAuthentication *pFrm, uint32_t *pnNeeded)
15847{
15848 uint32_t status = 0;
15849 *pnNeeded = 6;
15850 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
15851 IES_Authentication);
15852 return status;
15853} /* End dot11f_get_packed_authentication_size. */
15854
15855uint32_t dot11f_get_packed_beacon_size(tpAniSirGlobal pCtx,
15856 tDot11fBeacon *pFrm, uint32_t *pnNeeded)
15857{
15858 uint32_t status = 0;
15859 *pnNeeded = 12;
15860 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
15861 IES_Beacon);
15862 return status;
15863} /* End dot11f_get_packed_beacon_size. */
15864
15865uint32_t dot11f_get_packed_beacon1_size(tpAniSirGlobal pCtx,
15866 tDot11fBeacon1 *pFrm, uint32_t *pnNeeded)
15867{
15868 uint32_t status = 0;
15869 *pnNeeded = 12;
15870 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
15871 IES_Beacon1);
15872 return status;
15873} /* End dot11f_get_packed_beacon1_size. */
15874
15875uint32_t dot11f_get_packed_beacon2_size(tpAniSirGlobal pCtx,
15876 tDot11fBeacon2 *pFrm, uint32_t *pnNeeded)
15877{
15878 uint32_t status = 0;
15879 *pnNeeded = 0;
15880 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
15881 IES_Beacon2);
15882 return status;
15883} /* End dot11f_get_packed_beacon2_size. */
15884
15885uint32_t dot11f_get_packed_beacon_i_es_size(tpAniSirGlobal pCtx,
15886 tDot11fBeaconIEs *pFrm, uint32_t *pnNeeded)
15887{
15888 uint32_t status = 0;
15889 *pnNeeded = 0;
15890 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
15891 IES_BeaconIEs);
15892 return status;
15893} /* End dot11f_get_packed_beacon_i_es_size. */
15894
15895uint32_t dot11f_get_packed_channel_switch_size(tpAniSirGlobal pCtx,
15896 tDot11fChannelSwitch *pFrm, uint32_t *pnNeeded)
15897{
15898 uint32_t status = 0;
15899 *pnNeeded = 2;
15900 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
15901 IES_ChannelSwitch);
15902 return status;
15903} /* End dot11f_get_packed_channel_switch_size. */
15904
15905uint32_t dot11f_get_packed_de_auth_size(tpAniSirGlobal pCtx,
15906 tDot11fDeAuth *pFrm, uint32_t *pnNeeded)
15907{
15908 uint32_t status = 0;
15909 *pnNeeded = 2;
15910 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
15911 IES_DeAuth);
15912 return status;
15913} /* End dot11f_get_packed_de_auth_size. */
15914
15915uint32_t dot11f_get_packed_del_ts_size(tpAniSirGlobal pCtx,
15916 tDot11fDelTS *pFrm, uint32_t *pnNeeded)
15917{
15918 uint32_t status = 0;
15919 *pnNeeded = 7;
15920 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
15921 IES_DelTS);
15922 return status;
15923} /* End dot11f_get_packed_del_ts_size. */
15924
15925uint32_t dot11f_get_packed_disassociation_size(tpAniSirGlobal pCtx,
15926 tDot11fDisassociation *pFrm, uint32_t *pnNeeded)
15927{
15928 uint32_t status = 0;
15929 *pnNeeded = 2;
15930 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
15931 IES_Disassociation);
15932 return status;
15933} /* End dot11f_get_packed_disassociation_size. */
15934
15935uint32_t dot11f_get_packed_link_measurement_report_size(tpAniSirGlobal pCtx,
15936 tDot11fLinkMeasurementReport *pFrm, uint32_t *pnNeeded)
15937{
15938 uint32_t status = 0;
15939 *pnNeeded = 11;
15940 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
15941 IES_LinkMeasurementReport);
15942 return status;
15943} /* End dot11f_get_packed_link_measurement_report_size. */
15944
15945uint32_t dot11f_get_packed_link_measurement_request_size(tpAniSirGlobal pCtx,
15946 tDot11fLinkMeasurementRequest *pFrm, uint32_t *pnNeeded)
15947{
15948 uint32_t status = 0;
15949 *pnNeeded = 5;
15950 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
15951 IES_LinkMeasurementRequest);
15952 return status;
15953} /* End dot11f_get_packed_link_measurement_request_size. */
15954
15955uint32_t dot11f_get_packed_measurement_report_size(tpAniSirGlobal pCtx,
15956 tDot11fMeasurementReport *pFrm, uint32_t *pnNeeded)
15957{
15958 uint32_t status = 0;
15959 *pnNeeded = 3;
15960 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
15961 IES_MeasurementReport);
15962 return status;
15963} /* End dot11f_get_packed_measurement_report_size. */
15964
15965uint32_t dot11f_get_packed_measurement_request_size(tpAniSirGlobal pCtx,
15966 tDot11fMeasurementRequest *pFrm, uint32_t *pnNeeded)
15967{
15968 uint32_t status = 0;
15969 *pnNeeded = 3;
15970 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
15971 IES_MeasurementRequest);
15972 return status;
15973} /* End dot11f_get_packed_measurement_request_size. */
15974
15975uint32_t dot11f_get_packed_neighbor_report_request_size(tpAniSirGlobal pCtx,
15976 tDot11fNeighborReportRequest *pFrm, uint32_t *pnNeeded)
15977{
15978 uint32_t status = 0;
15979 *pnNeeded = 3;
15980 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
15981 IES_NeighborReportRequest);
15982 return status;
15983} /* End dot11f_get_packed_neighbor_report_request_size. */
15984
15985uint32_t dot11f_get_packed_neighbor_report_response_size(tpAniSirGlobal pCtx,
15986 tDot11fNeighborReportResponse *pFrm, uint32_t *pnNeeded)
15987{
15988 uint32_t status = 0;
15989 *pnNeeded = 3;
15990 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
15991 IES_NeighborReportResponse);
15992 return status;
15993} /* End dot11f_get_packed_neighbor_report_response_size. */
15994
15995uint32_t dot11f_get_packed_operating_mode_size(tpAniSirGlobal pCtx,
15996 tDot11fOperatingMode *pFrm, uint32_t *pnNeeded)
15997{
15998 uint32_t status = 0;
15999 *pnNeeded = 3;
16000 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16001 IES_OperatingMode);
16002 return status;
16003} /* End dot11f_get_packed_operating_mode_size. */
16004
16005uint32_t dot11f_get_packed_probe_request_size(tpAniSirGlobal pCtx,
16006 tDot11fProbeRequest *pFrm, uint32_t *pnNeeded)
16007{
16008 uint32_t status = 0;
16009 *pnNeeded = 0;
16010 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16011 IES_ProbeRequest);
16012 return status;
16013} /* End dot11f_get_packed_probe_request_size. */
16014
16015uint32_t dot11f_get_packed_probe_response_size(tpAniSirGlobal pCtx,
16016 tDot11fProbeResponse *pFrm, uint32_t *pnNeeded)
16017{
16018 uint32_t status = 0;
16019 *pnNeeded = 12;
16020 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16021 IES_ProbeResponse);
16022 return status;
16023} /* End dot11f_get_packed_probe_response_size. */
16024
16025uint32_t dot11f_get_packed_qos_map_configure_size(tpAniSirGlobal pCtx,
16026 tDot11fQosMapConfigure *pFrm, uint32_t *pnNeeded)
16027{
16028 uint32_t status = 0;
16029 *pnNeeded = 2;
16030 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16031 IES_QosMapConfigure);
16032 return status;
16033} /* End dot11f_get_packed_qos_map_configure_size. */
16034
16035uint32_t dot11f_get_packed_radio_measurement_report_size(tpAniSirGlobal pCtx,
16036 tDot11fRadioMeasurementReport *pFrm, uint32_t *pnNeeded)
16037{
16038 uint32_t status = 0;
16039 *pnNeeded = 3;
16040 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16041 IES_RadioMeasurementReport);
16042 return status;
16043} /* End dot11f_get_packed_radio_measurement_report_size. */
16044
16045uint32_t dot11f_get_packed_radio_measurement_request_size(tpAniSirGlobal pCtx,
16046 tDot11fRadioMeasurementRequest *pFrm, uint32_t *pnNeeded)
16047{
16048 uint32_t status = 0;
16049 *pnNeeded = 5;
16050 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16051 IES_RadioMeasurementRequest);
16052 return status;
16053} /* End dot11f_get_packed_radio_measurement_request_size. */
16054
16055uint32_t dot11f_get_packed_re_assoc_request_size(tpAniSirGlobal pCtx,
16056 tDot11fReAssocRequest *pFrm, uint32_t *pnNeeded)
16057{
16058 uint32_t status = 0;
16059 *pnNeeded = 10;
16060 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16061 IES_ReAssocRequest);
16062 return status;
16063} /* End dot11f_get_packed_re_assoc_request_size. */
16064
16065uint32_t dot11f_get_packed_re_assoc_response_size(tpAniSirGlobal pCtx,
16066 tDot11fReAssocResponse *pFrm, uint32_t *pnNeeded)
16067{
16068 uint32_t status = 0;
16069 *pnNeeded = 6;
16070 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16071 IES_ReAssocResponse);
16072 return status;
16073} /* End dot11f_get_packed_re_assoc_response_size. */
16074
16075uint32_t dot11f_get_packed_sm_power_save_size(tpAniSirGlobal pCtx,
16076 tDot11fSMPowerSave *pFrm, uint32_t *pnNeeded)
16077{
16078 uint32_t status = 0;
16079 *pnNeeded = 3;
16080 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16081 IES_SMPowerSave);
16082 return status;
16083} /* End dot11f_get_packed_sm_power_save_size. */
16084
16085uint32_t dot11f_get_packed_sa_query_req_size(tpAniSirGlobal pCtx,
16086 tDot11fSaQueryReq *pFrm, uint32_t *pnNeeded)
16087{
16088 uint32_t status = 0;
16089 *pnNeeded = 4;
16090 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16091 IES_SaQueryReq);
16092 return status;
16093} /* End dot11f_get_packed_sa_query_req_size. */
16094
16095uint32_t dot11f_get_packed_sa_query_rsp_size(tpAniSirGlobal pCtx,
16096 tDot11fSaQueryRsp *pFrm, uint32_t *pnNeeded)
16097{
16098 uint32_t status = 0;
16099 *pnNeeded = 4;
16100 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16101 IES_SaQueryRsp);
16102 return status;
16103} /* End dot11f_get_packed_sa_query_rsp_size. */
16104
16105uint32_t dot11f_get_packed_tdls_dis_req_size(tpAniSirGlobal pCtx,
16106 tDot11fTDLSDisReq *pFrm, uint32_t *pnNeeded)
16107{
16108 uint32_t status = 0;
16109 *pnNeeded = 3;
16110 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16111 IES_TDLSDisReq);
16112 return status;
16113} /* End dot11f_get_packed_tdls_dis_req_size. */
16114
16115uint32_t dot11f_get_packed_tdls_dis_rsp_size(tpAniSirGlobal pCtx,
16116 tDot11fTDLSDisRsp *pFrm, uint32_t *pnNeeded)
16117{
16118 uint32_t status = 0;
16119 *pnNeeded = 5;
16120 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16121 IES_TDLSDisRsp);
16122 return status;
16123} /* End dot11f_get_packed_tdls_dis_rsp_size. */
16124
16125uint32_t dot11f_get_packed_tdls_peer_traffic_ind_size(tpAniSirGlobal pCtx,
16126 tDot11fTDLSPeerTrafficInd *pFrm, uint32_t *pnNeeded)
16127{
16128 uint32_t status = 0;
16129 *pnNeeded = 3;
16130 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16131 IES_TDLSPeerTrafficInd);
16132 return status;
16133} /* End dot11f_get_packed_tdls_peer_traffic_ind_size. */
16134
16135uint32_t dot11f_get_packed_tdls_peer_traffic_rsp_size(tpAniSirGlobal pCtx,
16136 tDot11fTDLSPeerTrafficRsp *pFrm, uint32_t *pnNeeded)
16137{
16138 uint32_t status = 0;
16139 *pnNeeded = 3;
16140 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16141 IES_TDLSPeerTrafficRsp);
16142 return status;
16143} /* End dot11f_get_packed_tdls_peer_traffic_rsp_size. */
16144
16145uint32_t dot11f_get_packed_tdls_setup_cnf_size(tpAniSirGlobal pCtx,
16146 tDot11fTDLSSetupCnf *pFrm, uint32_t *pnNeeded)
16147{
16148 uint32_t status = 0;
16149 *pnNeeded = 5;
16150 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16151 IES_TDLSSetupCnf);
16152 return status;
16153} /* End dot11f_get_packed_tdls_setup_cnf_size. */
16154
16155uint32_t dot11f_get_packed_tdls_setup_req_size(tpAniSirGlobal pCtx,
16156 tDot11fTDLSSetupReq *pFrm, uint32_t *pnNeeded)
16157{
16158 uint32_t status = 0;
16159 *pnNeeded = 5;
16160 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16161 IES_TDLSSetupReq);
16162 return status;
16163} /* End dot11f_get_packed_tdls_setup_req_size. */
16164
16165uint32_t dot11f_get_packed_tdls_setup_rsp_size(tpAniSirGlobal pCtx,
16166 tDot11fTDLSSetupRsp *pFrm, uint32_t *pnNeeded)
16167{
16168 uint32_t status = 0;
16169 *pnNeeded = 7;
16170 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16171 IES_TDLSSetupRsp);
16172 return status;
16173} /* End dot11f_get_packed_tdls_setup_rsp_size. */
16174
16175uint32_t dot11f_get_packed_tdls_teardown_size(tpAniSirGlobal pCtx,
16176 tDot11fTDLSTeardown *pFrm, uint32_t *pnNeeded)
16177{
16178 uint32_t status = 0;
16179 *pnNeeded = 4;
16180 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16181 IES_TDLSTeardown);
16182 return status;
16183} /* End dot11f_get_packed_tdls_teardown_size. */
16184
16185uint32_t dot11f_get_packed_tpc_report_size(tpAniSirGlobal pCtx,
16186 tDot11fTPCReport *pFrm, uint32_t *pnNeeded)
16187{
16188 uint32_t status = 0;
16189 *pnNeeded = 3;
16190 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16191 IES_TPCReport);
16192 return status;
16193} /* End dot11f_get_packed_tpc_report_size. */
16194
16195uint32_t dot11f_get_packed_tpc_request_size(tpAniSirGlobal pCtx,
16196 tDot11fTPCRequest *pFrm, uint32_t *pnNeeded)
16197{
16198 uint32_t status = 0;
16199 *pnNeeded = 3;
16200 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16201 IES_TPCRequest);
16202 return status;
16203} /* End dot11f_get_packed_tpc_request_size. */
16204
16205uint32_t dot11f_get_packed_timing_advertisement_frame_size(tpAniSirGlobal pCtx,
16206 tDot11fTimingAdvertisementFrame *pFrm, uint32_t *pnNeeded)
16207{
16208 uint32_t status = 0;
16209 *pnNeeded = 10;
16210 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16211 IES_TimingAdvertisementFrame);
16212 return status;
16213} /* End dot11f_get_packed_timing_advertisement_frame_size. */
16214
16215uint32_t dot11f_get_packed_vht_gid_management_action_frame_size(tpAniSirGlobal pCtx,
16216 tDot11fVHTGidManagementActionFrame *pFrm, uint32_t *pnNeeded)
16217{
16218 uint32_t status = 0;
16219 *pnNeeded = 26;
16220 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16221 IES_VHTGidManagementActionFrame);
16222 return status;
16223} /* End dot11f_get_packed_vht_gid_management_action_frame_size. */
16224
16225uint32_t dot11f_get_packed_wmm_add_ts_request_size(tpAniSirGlobal pCtx,
16226 tDot11fWMMAddTSRequest *pFrm, uint32_t *pnNeeded)
16227{
16228 uint32_t status = 0;
16229 *pnNeeded = 4;
16230 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16231 IES_WMMAddTSRequest);
16232 return status;
16233} /* End dot11f_get_packed_wmm_add_ts_request_size. */
16234
16235uint32_t dot11f_get_packed_wmm_add_ts_response_size(tpAniSirGlobal pCtx,
16236 tDot11fWMMAddTSResponse *pFrm, uint32_t *pnNeeded)
16237{
16238 uint32_t status = 0;
16239 *pnNeeded = 4;
16240 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16241 IES_WMMAddTSResponse);
16242 return status;
16243} /* End dot11f_get_packed_wmm_add_ts_response_size. */
16244
16245uint32_t dot11f_get_packed_wmm_del_ts_size(tpAniSirGlobal pCtx,
16246 tDot11fWMMDelTS *pFrm, uint32_t *pnNeeded)
16247{
16248 uint32_t status = 0;
16249 *pnNeeded = 4;
16250 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16251 IES_WMMDelTS);
16252 return status;
16253} /* End dot11f_get_packed_wmm_del_ts_size. */
16254
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -080016255uint32_t dot11f_get_packed_addba_req_size(tpAniSirGlobal pCtx,
16256 tDot11faddba_req *pFrm, uint32_t *pnNeeded)
16257{
16258 uint32_t status = 0;
16259 *pnNeeded = 9;
16260 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16261 IES_addba_req);
16262 return status;
16263} /* End dot11f_get_packed_addba_req_size. */
16264
16265uint32_t dot11f_get_packed_addba_rsp_size(tpAniSirGlobal pCtx,
16266 tDot11faddba_rsp *pFrm, uint32_t *pnNeeded)
16267{
16268 uint32_t status = 0;
16269 *pnNeeded = 9;
16270 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16271 IES_addba_rsp);
16272 return status;
16273} /* End dot11f_get_packed_addba_rsp_size. */
16274
16275uint32_t dot11f_get_packed_delba_req_size(tpAniSirGlobal pCtx,
16276 tDot11fdelba_req *pFrm, uint32_t *pnNeeded)
16277{
16278 uint32_t status = 0;
16279 *pnNeeded = 6;
16280 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16281 IES_delba_req);
16282 return status;
16283} /* End dot11f_get_packed_delba_req_size. */
16284
Abhishek Singh518323d2015-10-19 17:42:01 +053016285uint32_t dot11f_get_packed_ext_channel_switch_action_frame_size(tpAniSirGlobal pCtx,
16286 tDot11fext_channel_switch_action_frame *pFrm, uint32_t *pnNeeded)
16287{
16288 uint32_t status = 0;
16289 *pnNeeded = 6;
16290 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16291 IES_ext_channel_switch_action_frame);
16292 return status;
16293} /* End dot11f_get_packed_ext_channel_switch_action_frame_size. */
16294
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080016295uint32_t dot11f_get_packed_ht2040_bss_coexistence_mgmt_action_frameSize(tpAniSirGlobal pCtx,
16296 tDot11fht2040_bss_coexistence_mgmt_action_frame *pFrm, uint32_t *pnNeeded)
16297{
16298 uint32_t status = 0;
16299 *pnNeeded = 2;
16300 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16301 IES_ht2040_bss_coexistence_mgmt_action_frame);
16302 return status;
16303} /* End dot11f_get_packed_ht2040_bss_coexistence_mgmt_action_frameSize. */
16304
Abhishek Singh5695e2a2016-10-28 10:39:12 +053016305uint32_t dot11f_get_packed_p2p_oper_chan_change_confirmSize(tpAniSirGlobal pCtx,
16306 tDot11fp2p_oper_chan_change_confirm *pFrm, uint32_t *pnNeeded)
16307{
16308 uint32_t status = 0;
16309 *pnNeeded = 7;
16310 status = get_packed_size_core(pCtx, (uint8_t *)pFrm, pnNeeded,
16311 IES_p2p_oper_chan_change_confirm);
16312 return status;
16313} /* End dot11f_get_packed_p2p_oper_chan_change_confirmSize. */
16314
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080016315static uint32_t get_packed_size_core(tpAniSirGlobal pCtx,
16316 uint8_t *pFrm,
16317 uint32_t *pnNeeded,
16318 const tIEDefn IEs[])
16319{
16320 const tIEDefn *pIe;
16321 uint16_t i, n;
16322 uint32_t status;
16323 tFRAMES_BOOL *pfFound;
16324 uint32_t countOffset = 0;
16325 uint32_t byteCount = 0;
16326 uint8_t pIePresent = 0;
16327 uint32_t offset = 0;
16328
16329 status = DOT11F_PARSE_SUCCESS;
16330
16331 (void)pCtx; /* Shutup the compiler if we have no FFs nor IEs... */
16332 i = 0;
16333 n = 0;
16334 pIe = &(IEs[0]);
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053016335 while (0xff != pIe->eid || pIe->extn_eid) {
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080016336 pfFound = (tFRAMES_BOOL *)(pFrm + pIe->offset +
16337 pIe->presenceOffset);
16338 if (*pfFound) {
16339 countOffset = ((0 == pIe->arraybound) ? 1 : (*(uint16_t *)(pFrm + pIe->countOffset)));
16340 for (i = 0U; i < countOffset; ++i) {
16341 *pnNeeded += 2U + pIe->noui;
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053016342 if (pIe->extn_eid)
16343 (*pnNeeded)++;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080016344 byteCount = 0;
16345 switch (pIe->sig) {
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080016346 case SigIeGTK:
16347 offset = sizeof(tDot11fIEGTK);
16348 byteCount = ((tDot11fIEGTK *)
16349 (pFrm + pIe->offset + offset * i))->
16350 num_key + 11;
16351 pIePresent = ((tDot11fIEGTK *)
16352 (pFrm + pIe->offset + offset * i))->
16353 present;
16354 break;
16355 case SigIeIGTK:
16356 offset = sizeof(tDot11fIEIGTK);
16357 byteCount = 33;
16358 pIePresent = ((tDot11fIEIGTK *)
16359 (pFrm + pIe->offset + offset * i))->
16360 present;
16361 break;
16362 case SigIeR0KH_ID:
16363 offset = sizeof(tDot11fIER0KH_ID);
16364 byteCount = ((tDot11fIER0KH_ID *)
16365 (pFrm + pIe->offset + offset * i))->
16366 num_PMK_R0_ID;
16367 pIePresent = ((tDot11fIER0KH_ID *)
16368 (pFrm + pIe->offset + offset * i))->
16369 present;
16370 break;
16371 case SigIeR1KH_ID:
16372 offset = sizeof(tDot11fIER1KH_ID);
16373 byteCount = 6;
16374 pIePresent = ((tDot11fIER1KH_ID *)
16375 (pFrm + pIe->offset + offset * i))->
16376 present;
16377 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080016378 case SigIeAPChannelReport:
16379 offset = sizeof(tDot11fIEAPChannelReport);
16380 byteCount = ((tDot11fIEAPChannelReport *)
16381 (pFrm + pIe->offset + offset * i))->
16382 num_channelList + 1;
16383 pIePresent = ((tDot11fIEAPChannelReport *)
16384 (pFrm + pIe->offset + offset * i))->
16385 present;
16386 break;
16387 case SigIeBcnReportingDetail:
16388 offset = sizeof(tDot11fIEBcnReportingDetail);
16389 byteCount = 1;
16390 pIePresent = ((tDot11fIEBcnReportingDetail *)
16391 (pFrm + pIe->offset + offset * i))->
16392 present;
16393 break;
16394 case SigIeBeaconReportFrmBody:
16395 offset = sizeof(tDot11fIEBeaconReportFrmBody);
16396 byteCount = ((tDot11fIEBeaconReportFrmBody *)
16397 (pFrm + pIe->offset + offset * i))->
16398 num_reportedFields;
16399 pIePresent = ((tDot11fIEBeaconReportFrmBody *)
16400 (pFrm + pIe->offset + offset * i))->
16401 present;
16402 break;
16403 case SigIeBeaconReporting:
16404 offset = sizeof(tDot11fIEBeaconReporting);
16405 byteCount = 2;
16406 pIePresent = ((tDot11fIEBeaconReporting *)
16407 (pFrm + pIe->offset + offset * i))->
16408 present;
16409 break;
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080016410 case SigIeCondensedCountryStr:
16411 offset = sizeof(tDot11fIECondensedCountryStr);
16412 byteCount = 2;
16413 pIePresent = ((tDot11fIECondensedCountryStr *)
16414 (pFrm + pIe->offset + offset * i))->
16415 present;
16416 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080016417 case SigIeMeasurementPilot:
16418 offset = sizeof(tDot11fIEMeasurementPilot);
16419 byteCount = ((tDot11fIEMeasurementPilot *)
16420 (pFrm + pIe->offset + offset * i))->
16421 num_vendorSpecific + 1;
16422 pIePresent = ((tDot11fIEMeasurementPilot *)
16423 (pFrm + pIe->offset + offset * i))->
16424 present;
16425 break;
16426 case SigIeMultiBssid:
16427 offset = sizeof(tDot11fIEMultiBssid);
16428 byteCount = ((tDot11fIEMultiBssid *)
16429 (pFrm + pIe->offset + offset * i))->
16430 num_vendorSpecific + 1;
16431 pIePresent = ((tDot11fIEMultiBssid *)
16432 (pFrm + pIe->offset + offset * i))->
16433 present;
16434 break;
16435 case SigIeRICData:
16436 offset = sizeof(tDot11fIERICData);
16437 byteCount = 4;
16438 pIePresent = ((tDot11fIERICData *)
16439 (pFrm + pIe->offset + offset * i))->
16440 present;
16441 break;
16442 case SigIeRICDescriptor:
16443 offset = sizeof(tDot11fIERICDescriptor);
16444 byteCount = ((tDot11fIERICDescriptor *)
16445 (pFrm + pIe->offset + offset * i))->
16446 num_variableData + 1;
16447 pIePresent = ((tDot11fIERICDescriptor *)
16448 (pFrm + pIe->offset + offset * i))->
16449 present;
16450 break;
16451 case SigIeRRMEnabledCap:
16452 offset = sizeof(tDot11fIERRMEnabledCap);
16453 byteCount = 5;
16454 pIePresent = ((tDot11fIERRMEnabledCap *)
16455 (pFrm + pIe->offset + offset * i))->
16456 present;
16457 break;
16458 case SigIeRequestedInfo:
16459 offset = sizeof(tDot11fIERequestedInfo);
16460 byteCount = ((tDot11fIERequestedInfo *)
16461 (pFrm + pIe->offset + offset * i))->
16462 num_requested_eids;
16463 pIePresent = ((tDot11fIERequestedInfo *)
16464 (pFrm + pIe->offset + offset * i))->
16465 present;
16466 break;
16467 case SigIeSSID:
16468 offset = sizeof(tDot11fIESSID);
16469 byteCount = ((tDot11fIESSID *)
16470 (pFrm + pIe->offset + offset * i))->
16471 num_ssid;
16472 pIePresent = ((tDot11fIESSID *)
16473 (pFrm + pIe->offset + offset * i))->
16474 present;
16475 break;
16476 case SigIeSchedule:
16477 offset = sizeof(tDot11fIESchedule);
16478 byteCount = 14;
16479 pIePresent = ((tDot11fIESchedule *)
16480 (pFrm + pIe->offset + offset * i))->
16481 present;
16482 break;
16483 case SigIeTCLAS:
16484 offset = sizeof(tDot11fIETCLAS);
16485 status |=
16486 dot11f_get_packed_ietclas(
16487 pCtx, (tDot11fIETCLAS *)
16488 (pFrm + pIe->offset + offset * i),
16489 pnNeeded);
16490 break;
16491 case SigIeTCLASSPROC:
16492 offset = sizeof(tDot11fIETCLASSPROC);
16493 byteCount = 1;
16494 pIePresent = ((tDot11fIETCLASSPROC *)
16495 (pFrm + pIe->offset + offset * i))->
16496 present;
16497 break;
16498 case SigIeTSDelay:
16499 offset = sizeof(tDot11fIETSDelay);
16500 byteCount = 4;
16501 pIePresent = ((tDot11fIETSDelay *)
16502 (pFrm + pIe->offset + offset * i))->
16503 present;
16504 break;
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080016505 case SigIeTSFInfo:
16506 offset = sizeof(tDot11fIETSFInfo);
16507 byteCount = 4;
16508 pIePresent = ((tDot11fIETSFInfo *)
16509 (pFrm + pIe->offset + offset * i))->
16510 present;
16511 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080016512 case SigIeTSPEC:
16513 offset = sizeof(tDot11fIETSPEC);
16514 byteCount = 55;
16515 pIePresent = ((tDot11fIETSPEC *)
16516 (pFrm + pIe->offset + offset * i))->
16517 present;
16518 break;
16519 case SigIeVHTCaps:
16520 offset = sizeof(tDot11fIEVHTCaps);
16521 byteCount = 12;
16522 pIePresent = ((tDot11fIEVHTCaps *)
16523 (pFrm + pIe->offset + offset * i))->
16524 present;
16525 break;
16526 case SigIeVHTOperation:
16527 offset = sizeof(tDot11fIEVHTOperation);
16528 byteCount = 5;
16529 pIePresent = ((tDot11fIEVHTOperation *)
16530 (pFrm + pIe->offset + offset * i))->
16531 present;
16532 break;
16533 case SigIeWMMSchedule:
16534 offset = sizeof(tDot11fIEWMMSchedule);
16535 byteCount = 15;
16536 pIePresent = ((tDot11fIEWMMSchedule *)
16537 (pFrm + pIe->offset + offset * i))->
16538 present;
16539 break;
16540 case SigIeWMMTCLAS:
16541 offset = sizeof(tDot11fIEWMMTCLAS);
16542 status |=
16543 dot11f_get_packed_iewmmtclas(
16544 pCtx, (tDot11fIEWMMTCLAS *)
16545 (pFrm + pIe->offset + offset * i),
16546 pnNeeded);
16547 break;
16548 case SigIeWMMTCLASPROC:
16549 offset = sizeof(tDot11fIEWMMTCLASPROC);
16550 byteCount = 2;
16551 pIePresent = ((tDot11fIEWMMTCLASPROC *)
16552 (pFrm + pIe->offset + offset * i))->
16553 present;
16554 break;
16555 case SigIeWMMTSDelay:
16556 offset = sizeof(tDot11fIEWMMTSDelay);
16557 byteCount = 5;
16558 pIePresent = ((tDot11fIEWMMTSDelay *)
16559 (pFrm + pIe->offset + offset * i))->
16560 present;
16561 break;
16562 case SigIeWMMTSPEC:
16563 offset = sizeof(tDot11fIEWMMTSPEC);
16564 byteCount = 56;
16565 pIePresent = ((tDot11fIEWMMTSPEC *)
16566 (pFrm + pIe->offset + offset * i))->
16567 present;
16568 break;
16569 case SigIeWiderBWChanSwitchAnn:
16570 offset = sizeof(tDot11fIEWiderBWChanSwitchAnn);
16571 byteCount = 3;
16572 pIePresent = ((tDot11fIEWiderBWChanSwitchAnn *)
16573 (pFrm + pIe->offset + offset * i))->
16574 present;
16575 break;
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080016576 case SigIeazimuth_req:
16577 offset = sizeof(tDot11fIEazimuth_req);
16578 byteCount = 1;
16579 pIePresent = ((tDot11fIEazimuth_req *)
16580 (pFrm + pIe->offset + offset * i))->
16581 present;
16582 break;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053016583 case SigIebeacon_report_frm_body_fragment_id:
16584 offset = sizeof(tDot11fIEbeacon_report_frm_body_fragment_id);
16585 byteCount = 2;
16586 pIePresent = ((tDot11fIEbeacon_report_frm_body_fragment_id *)
16587 (pFrm + pIe->offset + offset * i))->
16588 present;
16589 break;
16590 case SigIelast_beacon_report_indication:
16591 offset = sizeof(tDot11fIElast_beacon_report_indication);
16592 byteCount = 1;
16593 pIePresent = ((tDot11fIElast_beacon_report_indication *)
16594 (pFrm + pIe->offset + offset * i))->
16595 present;
16596 break;
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080016597 case SigIemax_age:
16598 offset = sizeof(tDot11fIEmax_age);
16599 byteCount = 2;
16600 pIePresent = ((tDot11fIEmax_age *)
16601 (pFrm + pIe->offset + offset * i))->
16602 present;
16603 break;
16604 case SigIeneighbor_rpt:
16605 offset = sizeof(tDot11fIEneighbor_rpt);
16606 status |=
16607 dot11f_get_packed_ie_neighbor_rpt(
16608 pCtx, (tDot11fIEneighbor_rpt *)
16609 (pFrm + pIe->offset + offset * i),
16610 pnNeeded);
16611 break;
16612 case SigIereq_mac_addr:
16613 offset = sizeof(tDot11fIEreq_mac_addr);
16614 byteCount = 6;
16615 pIePresent = ((tDot11fIEreq_mac_addr *)
16616 (pFrm + pIe->offset + offset * i))->
16617 present;
16618 break;
16619 case SigIetgt_mac_addr:
16620 offset = sizeof(tDot11fIEtgt_mac_addr);
16621 byteCount = 6;
16622 pIePresent = ((tDot11fIEtgt_mac_addr *)
16623 (pFrm + pIe->offset + offset * i))->
16624 present;
16625 break;
Abhishek Singh37456d22016-08-29 16:05:11 +053016626 case SigIevht_transmit_power_env:
16627 offset = sizeof(tDot11fIEvht_transmit_power_env);
16628 byteCount = ((tDot11fIEvht_transmit_power_env *)
16629 (pFrm + pIe->offset + offset * i))->
16630 num_bytes;
16631 pIePresent = ((tDot11fIEvht_transmit_power_env *)
16632 (pFrm + pIe->offset + offset * i))->
16633 present;
16634 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080016635 case SigIeAID:
16636 offset = sizeof(tDot11fIEAID);
16637 byteCount = 2;
16638 pIePresent = ((tDot11fIEAID *)
16639 (pFrm + pIe->offset + offset * i))->
16640 present;
16641 break;
16642 case SigIeCFParams:
16643 offset = sizeof(tDot11fIECFParams);
16644 byteCount = 6;
16645 pIePresent = ((tDot11fIECFParams *)
16646 (pFrm + pIe->offset + offset * i))->
16647 present;
16648 break;
16649 case SigIeChallengeText:
16650 offset = sizeof(tDot11fIEChallengeText);
16651 byteCount = ((tDot11fIEChallengeText *)
16652 (pFrm + pIe->offset + offset * i))->
16653 num_text;
16654 pIePresent = ((tDot11fIEChallengeText *)
16655 (pFrm + pIe->offset + offset * i))->
16656 present;
16657 break;
16658 case SigIeChanSwitchAnn:
16659 offset = sizeof(tDot11fIEChanSwitchAnn);
16660 byteCount = 3;
16661 pIePresent = ((tDot11fIEChanSwitchAnn *)
16662 (pFrm + pIe->offset + offset * i))->
16663 present;
16664 break;
16665 case SigIeChannelSwitchWrapper:
16666 offset = sizeof(tDot11fIEChannelSwitchWrapper);
16667 status |=
16668 dot11f_get_packed_ie_channel_switch_wrapper(
16669 pCtx, (tDot11fIEChannelSwitchWrapper *)
16670 (pFrm + pIe->offset + offset * i),
16671 pnNeeded);
16672 break;
16673 case SigIeCountry:
16674 offset = sizeof(tDot11fIECountry);
16675 status |=
16676 dot11f_get_packed_ie_country(
16677 pCtx, (tDot11fIECountry *)
16678 (pFrm + pIe->offset + offset * i),
16679 pnNeeded);
16680 break;
16681 case SigIeDSParams:
16682 offset = sizeof(tDot11fIEDSParams);
16683 byteCount = 1;
16684 pIePresent = ((tDot11fIEDSParams *)
16685 (pFrm + pIe->offset + offset * i))->
16686 present;
16687 break;
16688 case SigIeEDCAParamSet:
16689 offset = sizeof(tDot11fIEEDCAParamSet);
16690 byteCount = 18;
16691 pIePresent = ((tDot11fIEEDCAParamSet *)
16692 (pFrm + pIe->offset + offset * i))->
16693 present;
16694 break;
16695 case SigIeERPInfo:
16696 offset = sizeof(tDot11fIEERPInfo);
16697 byteCount = 1;
16698 pIePresent = ((tDot11fIEERPInfo *)
16699 (pFrm + pIe->offset + offset * i))->
16700 present;
16701 break;
16702 case SigIeESECckmOpaque:
16703 offset = sizeof(tDot11fIEESECckmOpaque);
16704 byteCount = ((tDot11fIEESECckmOpaque *)
16705 (pFrm + pIe->offset + offset * i))->
16706 num_data;
16707 pIePresent = ((tDot11fIEESECckmOpaque *)
16708 (pFrm + pIe->offset + offset * i))->
16709 present;
16710 break;
16711 case SigIeESERadMgmtCap:
16712 offset = sizeof(tDot11fIEESERadMgmtCap);
16713 byteCount = 2;
16714 pIePresent = ((tDot11fIEESERadMgmtCap *)
16715 (pFrm + pIe->offset + offset * i))->
16716 present;
16717 break;
16718 case SigIeESETrafStrmMet:
16719 offset = sizeof(tDot11fIEESETrafStrmMet);
16720 byteCount = 4;
16721 pIePresent = ((tDot11fIEESETrafStrmMet *)
16722 (pFrm + pIe->offset + offset * i))->
16723 present;
16724 break;
16725 case SigIeESETrafStrmRateSet:
16726 offset = sizeof(tDot11fIEESETrafStrmRateSet);
16727 byteCount = ((tDot11fIEESETrafStrmRateSet *)
16728 (pFrm + pIe->offset + offset * i))->
16729 num_tsrates + 1;
16730 pIePresent = ((tDot11fIEESETrafStrmRateSet *)
16731 (pFrm + pIe->offset + offset * i))->
16732 present;
16733 break;
16734 case SigIeESETxmitPower:
16735 offset = sizeof(tDot11fIEESETxmitPower);
16736 byteCount = 2;
16737 pIePresent = ((tDot11fIEESETxmitPower *)
16738 (pFrm + pIe->offset + offset * i))->
16739 present;
16740 break;
16741 case SigIeESEVersion:
16742 offset = sizeof(tDot11fIEESEVersion);
16743 byteCount = 1;
16744 pIePresent = ((tDot11fIEESEVersion *)
16745 (pFrm + pIe->offset + offset * i))->
16746 present;
16747 break;
16748 case SigIeExtCap:
16749 offset = sizeof(tDot11fIEExtCap);
16750 byteCount = ((tDot11fIEExtCap *)
16751 (pFrm + pIe->offset + offset * i))->
16752 num_bytes;
16753 pIePresent = ((tDot11fIEExtCap *)
16754 (pFrm + pIe->offset + offset * i))->
16755 present;
16756 break;
16757 case SigIeExtSuppRates:
16758 offset = sizeof(tDot11fIEExtSuppRates);
16759 byteCount = ((tDot11fIEExtSuppRates *)
16760 (pFrm + pIe->offset + offset * i))->
16761 num_rates;
16762 pIePresent = ((tDot11fIEExtSuppRates *)
16763 (pFrm + pIe->offset + offset * i))->
16764 present;
16765 break;
16766 case SigIeFHParamSet:
16767 offset = sizeof(tDot11fIEFHParamSet);
16768 byteCount = 5;
16769 pIePresent = ((tDot11fIEFHParamSet *)
16770 (pFrm + pIe->offset + offset * i))->
16771 present;
16772 break;
16773 case SigIeFHParams:
16774 offset = sizeof(tDot11fIEFHParams);
16775 byteCount = 2;
16776 pIePresent = ((tDot11fIEFHParams *)
16777 (pFrm + pIe->offset + offset * i))->
16778 present;
16779 break;
16780 case SigIeFHPattTable:
16781 offset = sizeof(tDot11fIEFHPattTable);
16782 byteCount = ((tDot11fIEFHPattTable *)
16783 (pFrm + pIe->offset + offset * i))->
16784 num_randtable + 4;
16785 pIePresent = ((tDot11fIEFHPattTable *)
16786 (pFrm + pIe->offset + offset * i))->
16787 present;
16788 break;
16789 case SigIeFTInfo:
16790 offset = sizeof(tDot11fIEFTInfo);
16791 status |=
16792 dot11f_get_packed_ieft_info(
16793 pCtx, (tDot11fIEFTInfo *)
16794 (pFrm + pIe->offset + offset * i),
16795 pnNeeded);
16796 break;
16797 case SigIeHTCaps:
16798 offset = sizeof(tDot11fIEHTCaps);
16799 byteCount = ((tDot11fIEHTCaps *)
16800 (pFrm + pIe->offset + offset * i))->
16801 num_rsvd + 26;
16802 pIePresent = ((tDot11fIEHTCaps *)
16803 (pFrm + pIe->offset + offset * i))->
16804 present;
16805 break;
16806 case SigIeHTInfo:
16807 offset = sizeof(tDot11fIEHTInfo);
16808 byteCount = ((tDot11fIEHTInfo *)
16809 (pFrm + pIe->offset + offset * i))->
16810 num_rsvd + 22;
16811 pIePresent = ((tDot11fIEHTInfo *)
16812 (pFrm + pIe->offset + offset * i))->
16813 present;
16814 break;
16815 case SigIeIBSSParams:
16816 offset = sizeof(tDot11fIEIBSSParams);
16817 byteCount = 2;
16818 pIePresent = ((tDot11fIEIBSSParams *)
16819 (pFrm + pIe->offset + offset * i))->
16820 present;
16821 break;
16822 case SigIeLinkIdentifier:
16823 offset = sizeof(tDot11fIELinkIdentifier);
16824 byteCount = 18;
16825 pIePresent = ((tDot11fIELinkIdentifier *)
16826 (pFrm + pIe->offset + offset * i))->
16827 present;
16828 break;
Selvaraj, Sridharba726cb2016-07-22 13:41:03 +053016829 case SigIeMBO_IE:
16830 offset = sizeof(tDot11fIEMBO_IE);
Abhishek Singh951eed82017-07-06 16:53:19 +053016831 status |=
16832 dot11f_get_packed_ie_MBO_IE(
16833 pCtx, (tDot11fIEMBO_IE *)
16834 (pFrm + pIe->offset + offset * i),
16835 pnNeeded);
Selvaraj, Sridharba726cb2016-07-22 13:41:03 +053016836 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080016837 case SigIeMeasurementReport:
16838 offset = sizeof(tDot11fIEMeasurementReport);
16839 status |=
16840 dot11f_get_packed_ie_measurement_report(
16841 pCtx, (tDot11fIEMeasurementReport *)
16842 (pFrm + pIe->offset + offset * i),
16843 pnNeeded);
16844 break;
16845 case SigIeMeasurementRequest:
16846 offset = sizeof(tDot11fIEMeasurementRequest);
16847 status |=
16848 dot11f_get_packed_ie_measurement_request(
16849 pCtx, (tDot11fIEMeasurementRequest *)
16850 (pFrm + pIe->offset + offset * i),
16851 pnNeeded);
16852 break;
16853 case SigIeMobilityDomain:
16854 offset = sizeof(tDot11fIEMobilityDomain);
16855 byteCount = 3;
16856 pIePresent = ((tDot11fIEMobilityDomain *)
16857 (pFrm + pIe->offset + offset * i))->
16858 present;
16859 break;
16860 case SigIeNeighborReport:
16861 offset = sizeof(tDot11fIENeighborReport);
16862 status |=
16863 dot11f_get_packed_ie_neighbor_report(
16864 pCtx, (tDot11fIENeighborReport *)
16865 (pFrm + pIe->offset + offset * i),
16866 pnNeeded);
16867 break;
16868 case SigIeOBSSScanParameters:
16869 offset = sizeof(tDot11fIEOBSSScanParameters);
16870 byteCount = 14;
16871 pIePresent = ((tDot11fIEOBSSScanParameters *)
16872 (pFrm + pIe->offset + offset * i))->
16873 present;
16874 break;
16875 case SigIeOperatingMode:
16876 offset = sizeof(tDot11fIEOperatingMode);
16877 byteCount = 1;
16878 pIePresent = ((tDot11fIEOperatingMode *)
16879 (pFrm + pIe->offset + offset * i))->
16880 present;
16881 break;
16882 case SigIeP2PAssocReq:
16883 offset = sizeof(tDot11fIEP2PAssocReq);
16884 status |=
16885 dot11f_get_packed_iep2_p_assoc_req(
16886 pCtx, (tDot11fIEP2PAssocReq *)
16887 (pFrm + pIe->offset + offset * i),
16888 pnNeeded);
16889 break;
16890 case SigIeP2PAssocRes:
16891 offset = sizeof(tDot11fIEP2PAssocRes);
16892 status |=
16893 dot11f_get_packed_iep2_p_assoc_res(
16894 pCtx, (tDot11fIEP2PAssocRes *)
16895 (pFrm + pIe->offset + offset * i),
16896 pnNeeded);
16897 break;
16898 case SigIeP2PBeacon:
16899 offset = sizeof(tDot11fIEP2PBeacon);
16900 status |=
16901 dot11f_get_packed_iep2_p_beacon(
16902 pCtx, (tDot11fIEP2PBeacon *)
16903 (pFrm + pIe->offset + offset * i),
16904 pnNeeded);
16905 break;
16906 case SigIeP2PBeaconProbeRes:
16907 offset = sizeof(tDot11fIEP2PBeaconProbeRes);
16908 status |=
16909 dot11f_get_packed_iep2_p_beacon_probe_res(
16910 pCtx, (tDot11fIEP2PBeaconProbeRes *)
16911 (pFrm + pIe->offset + offset * i),
16912 pnNeeded);
16913 break;
16914 case SigIeP2PDeAuth:
16915 offset = sizeof(tDot11fIEP2PDeAuth);
16916 status |=
16917 dot11f_get_packed_iep2_p_de_auth(
16918 pCtx, (tDot11fIEP2PDeAuth *)
16919 (pFrm + pIe->offset + offset * i),
16920 pnNeeded);
16921 break;
16922 case SigIeP2PDisAssoc:
16923 offset = sizeof(tDot11fIEP2PDisAssoc);
16924 status |=
16925 dot11f_get_packed_iep2_p_dis_assoc(
16926 pCtx, (tDot11fIEP2PDisAssoc *)
16927 (pFrm + pIe->offset + offset * i),
16928 pnNeeded);
16929 break;
16930 case SigIeP2PIEOpaque:
16931 offset = sizeof(tDot11fIEP2PIEOpaque);
16932 byteCount = ((tDot11fIEP2PIEOpaque *)
16933 (pFrm + pIe->offset + offset * i))->
16934 num_data;
16935 pIePresent = ((tDot11fIEP2PIEOpaque *)
16936 (pFrm + pIe->offset + offset * i))->
16937 present;
16938 break;
16939 case SigIeP2PProbeReq:
16940 offset = sizeof(tDot11fIEP2PProbeReq);
16941 status |=
16942 dot11f_get_packed_iep2_p_probe_req(
16943 pCtx, (tDot11fIEP2PProbeReq *)
16944 (pFrm + pIe->offset + offset * i),
16945 pnNeeded);
16946 break;
16947 case SigIeP2PProbeRes:
16948 offset = sizeof(tDot11fIEP2PProbeRes);
16949 status |=
16950 dot11f_get_packed_iep2_p_probe_res(
16951 pCtx, (tDot11fIEP2PProbeRes *)
16952 (pFrm + pIe->offset + offset * i),
16953 pnNeeded);
16954 break;
16955 case SigIePTIControl:
16956 offset = sizeof(tDot11fIEPTIControl);
16957 byteCount = 3;
16958 pIePresent = ((tDot11fIEPTIControl *)
16959 (pFrm + pIe->offset + offset * i))->
16960 present;
16961 break;
16962 case SigIePUBufferStatus:
16963 offset = sizeof(tDot11fIEPUBufferStatus);
16964 byteCount = 1;
16965 pIePresent = ((tDot11fIEPUBufferStatus *)
16966 (pFrm + pIe->offset + offset * i))->
16967 present;
16968 break;
16969 case SigIePowerCaps:
16970 offset = sizeof(tDot11fIEPowerCaps);
16971 byteCount = 2;
16972 pIePresent = ((tDot11fIEPowerCaps *)
16973 (pFrm + pIe->offset + offset * i))->
16974 present;
16975 break;
16976 case SigIePowerConstraints:
16977 offset = sizeof(tDot11fIEPowerConstraints);
16978 byteCount = 1;
16979 pIePresent = ((tDot11fIEPowerConstraints *)
16980 (pFrm + pIe->offset + offset * i))->
16981 present;
16982 break;
16983 case SigIeQBSSLoad:
16984 offset = sizeof(tDot11fIEQBSSLoad);
16985 byteCount = 5;
16986 pIePresent = ((tDot11fIEQBSSLoad *)
16987 (pFrm + pIe->offset + offset * i))->
16988 present;
16989 break;
Selvaraj, Sridharc2fe7a32017-02-02 19:20:16 +053016990 case SigIeQCN_IE:
16991 offset = sizeof(tDot11fIEQCN_IE);
16992 byteCount = 4;
16993 pIePresent = ((tDot11fIEQCN_IE *)
16994 (pFrm + pIe->offset + offset * i))->
16995 present;
16996 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080016997 case SigIeQComVendorIE:
16998 offset = sizeof(tDot11fIEQComVendorIE);
16999 byteCount = 2;
17000 pIePresent = ((tDot11fIEQComVendorIE *)
17001 (pFrm + pIe->offset + offset * i))->
17002 present;
17003 break;
17004 case SigIeQOSCapsAp:
17005 offset = sizeof(tDot11fIEQOSCapsAp);
17006 byteCount = 1;
17007 pIePresent = ((tDot11fIEQOSCapsAp *)
17008 (pFrm + pIe->offset + offset * i))->
17009 present;
17010 break;
17011 case SigIeQOSCapsStation:
17012 offset = sizeof(tDot11fIEQOSCapsStation);
17013 byteCount = 1;
17014 pIePresent = ((tDot11fIEQOSCapsStation *)
17015 (pFrm + pIe->offset + offset * i))->
17016 present;
17017 break;
17018 case SigIeQosMapSet:
17019 offset = sizeof(tDot11fIEQosMapSet);
17020 byteCount = ((tDot11fIEQosMapSet *)
17021 (pFrm + pIe->offset + offset * i))->
17022 num_dscp_exceptions;
17023 pIePresent = ((tDot11fIEQosMapSet *)
17024 (pFrm + pIe->offset + offset * i))->
17025 present;
17026 break;
17027 case SigIeQuiet:
17028 offset = sizeof(tDot11fIEQuiet);
17029 byteCount = 6;
17030 pIePresent = ((tDot11fIEQuiet *)
17031 (pFrm + pIe->offset + offset * i))->
17032 present;
17033 break;
17034 case SigIeRCPIIE:
17035 offset = sizeof(tDot11fIERCPIIE);
17036 byteCount = 1;
17037 pIePresent = ((tDot11fIERCPIIE *)
17038 (pFrm + pIe->offset + offset * i))->
17039 present;
17040 break;
17041 case SigIeRICDataDesc:
17042 offset = sizeof(tDot11fIERICDataDesc);
Naveen Rawat86936772018-06-01 09:49:08 -070017043 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. */
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080017044 status |=
17045 dot11f_get_packed_ieric_data_desc(
17046 pCtx, (tDot11fIERICDataDesc *)
17047 (pFrm + pIe->offset + offset * i),
17048 pnNeeded);
17049 break;
17050 case SigIeRSN:
17051 offset = sizeof(tDot11fIERSN);
17052 status |=
17053 dot11f_get_packed_iersn(
17054 pCtx, (tDot11fIERSN *)
17055 (pFrm + pIe->offset + offset * i),
17056 pnNeeded);
17057 break;
17058 case SigIeRSNIIE:
17059 offset = sizeof(tDot11fIERSNIIE);
17060 byteCount = 1;
17061 pIePresent = ((tDot11fIERSNIIE *)
17062 (pFrm + pIe->offset + offset * i))->
17063 present;
17064 break;
17065 case SigIeRSNOpaque:
17066 offset = sizeof(tDot11fIERSNOpaque);
17067 byteCount = ((tDot11fIERSNOpaque *)
17068 (pFrm + pIe->offset + offset * i))->
17069 num_data;
17070 pIePresent = ((tDot11fIERSNOpaque *)
17071 (pFrm + pIe->offset + offset * i))->
17072 present;
17073 break;
17074 case SigIeSuppChannels:
17075 offset = sizeof(tDot11fIESuppChannels);
17076 byteCount = ((tDot11fIESuppChannels *)
17077 (pFrm + pIe->offset + offset * i))->
17078 num_bands * 2;
17079 pIePresent = ((tDot11fIESuppChannels *)
17080 (pFrm + pIe->offset + offset * i))->
17081 present;
17082 break;
17083 case SigIeSuppOperatingClasses:
17084 offset = sizeof(tDot11fIESuppOperatingClasses);
17085 byteCount = ((tDot11fIESuppOperatingClasses *)
17086 (pFrm + pIe->offset + offset * i))->
17087 num_classes;
17088 pIePresent = ((tDot11fIESuppOperatingClasses *)
17089 (pFrm + pIe->offset + offset * i))->
17090 present;
17091 break;
17092 case SigIeSuppRates:
17093 offset = sizeof(tDot11fIESuppRates);
17094 byteCount = ((tDot11fIESuppRates *)
17095 (pFrm + pIe->offset + offset * i))->
17096 num_rates;
17097 pIePresent = ((tDot11fIESuppRates *)
17098 (pFrm + pIe->offset + offset * i))->
17099 present;
17100 break;
17101 case SigIeTIM:
17102 offset = sizeof(tDot11fIETIM);
17103 byteCount = ((tDot11fIETIM *)
17104 (pFrm + pIe->offset + offset * i))->
17105 num_vbmp + 3;
17106 pIePresent = ((tDot11fIETIM *)
17107 (pFrm + pIe->offset + offset * i))->
17108 present;
17109 break;
17110 case SigIeTPCReport:
17111 offset = sizeof(tDot11fIETPCReport);
17112 byteCount = 2;
17113 pIePresent = ((tDot11fIETPCReport *)
17114 (pFrm + pIe->offset + offset * i))->
17115 present;
17116 break;
17117 case SigIeTPCRequest:
17118 offset = sizeof(tDot11fIETPCRequest);
17119 byteCount = 0;
17120 pIePresent = ((tDot11fIETPCRequest *)
17121 (pFrm + pIe->offset + offset * i))->
17122 present;
17123 break;
17124 case SigIeTimeAdvertisement:
17125 offset = sizeof(tDot11fIETimeAdvertisement);
17126 byteCount = 16;
17127 pIePresent = ((tDot11fIETimeAdvertisement *)
17128 (pFrm + pIe->offset + offset * i))->
17129 present;
17130 break;
17131 case SigIeTimeoutInterval:
17132 offset = sizeof(tDot11fIETimeoutInterval);
17133 byteCount = 5;
17134 pIePresent = ((tDot11fIETimeoutInterval *)
17135 (pFrm + pIe->offset + offset * i))->
17136 present;
17137 break;
17138 case SigIeVHTExtBssLoad:
17139 offset = sizeof(tDot11fIEVHTExtBssLoad);
17140 byteCount = 5;
17141 pIePresent = ((tDot11fIEVHTExtBssLoad *)
17142 (pFrm + pIe->offset + offset * i))->
17143 present;
17144 break;
17145 case SigIeVendor1IE:
17146 offset = sizeof(tDot11fIEVendor1IE);
17147 byteCount = 0;
17148 pIePresent = ((tDot11fIEVendor1IE *)
17149 (pFrm + pIe->offset + offset * i))->
17150 present;
17151 break;
17152 case SigIeVendor3IE:
17153 offset = sizeof(tDot11fIEVendor3IE);
17154 byteCount = 0;
17155 pIePresent = ((tDot11fIEVendor3IE *)
17156 (pFrm + pIe->offset + offset * i))->
17157 present;
17158 break;
17159 case SigIeWAPI:
17160 offset = sizeof(tDot11fIEWAPI);
17161 status |=
17162 dot11f_get_packed_iewapi(
17163 pCtx, (tDot11fIEWAPI *)
17164 (pFrm + pIe->offset + offset * i),
17165 pnNeeded);
17166 break;
17167 case SigIeWAPIOpaque:
17168 offset = sizeof(tDot11fIEWAPIOpaque);
17169 byteCount = ((tDot11fIEWAPIOpaque *)
17170 (pFrm + pIe->offset + offset * i))->
17171 num_data;
17172 pIePresent = ((tDot11fIEWAPIOpaque *)
17173 (pFrm + pIe->offset + offset * i))->
17174 present;
17175 break;
17176 case SigIeWFATPC:
17177 offset = sizeof(tDot11fIEWFATPC);
17178 byteCount = 2;
17179 pIePresent = ((tDot11fIEWFATPC *)
17180 (pFrm + pIe->offset + offset * i))->
17181 present;
17182 break;
17183 case SigIeWFDIEOpaque:
17184 offset = sizeof(tDot11fIEWFDIEOpaque);
17185 byteCount = ((tDot11fIEWFDIEOpaque *)
17186 (pFrm + pIe->offset + offset * i))->
17187 num_data;
17188 pIePresent = ((tDot11fIEWFDIEOpaque *)
17189 (pFrm + pIe->offset + offset * i))->
17190 present;
17191 break;
17192 case SigIeWMMCaps:
17193 offset = sizeof(tDot11fIEWMMCaps);
17194 byteCount = 2;
17195 pIePresent = ((tDot11fIEWMMCaps *)
17196 (pFrm + pIe->offset + offset * i))->
17197 present;
17198 break;
17199 case SigIeWMMInfoAp:
17200 offset = sizeof(tDot11fIEWMMInfoAp);
17201 byteCount = 2;
17202 pIePresent = ((tDot11fIEWMMInfoAp *)
17203 (pFrm + pIe->offset + offset * i))->
17204 present;
17205 break;
17206 case SigIeWMMInfoStation:
17207 offset = sizeof(tDot11fIEWMMInfoStation);
17208 byteCount = 2;
17209 pIePresent = ((tDot11fIEWMMInfoStation *)
17210 (pFrm + pIe->offset + offset * i))->
17211 present;
17212 break;
17213 case SigIeWMMParams:
17214 offset = sizeof(tDot11fIEWMMParams);
17215 byteCount = 19;
17216 pIePresent = ((tDot11fIEWMMParams *)
17217 (pFrm + pIe->offset + offset * i))->
17218 present;
17219 break;
17220 case SigIeWPA:
17221 offset = sizeof(tDot11fIEWPA);
17222 status |=
17223 dot11f_get_packed_iewpa(
17224 pCtx, (tDot11fIEWPA *)
17225 (pFrm + pIe->offset + offset * i),
17226 pnNeeded);
17227 break;
17228 case SigIeWPAOpaque:
17229 offset = sizeof(tDot11fIEWPAOpaque);
17230 byteCount = ((tDot11fIEWPAOpaque *)
17231 (pFrm + pIe->offset + offset * i))->
17232 num_data;
17233 pIePresent = ((tDot11fIEWPAOpaque *)
17234 (pFrm + pIe->offset + offset * i))->
17235 present;
17236 break;
17237 case SigIeWSC:
17238 offset = sizeof(tDot11fIEWSC);
17239 status |=
17240 dot11f_get_packed_iewsc(
17241 pCtx, (tDot11fIEWSC *)
17242 (pFrm + pIe->offset + offset * i),
17243 pnNeeded);
17244 break;
17245 case SigIeWscAssocReq:
17246 offset = sizeof(tDot11fIEWscAssocReq);
17247 status |=
17248 dot11f_get_packed_ie_wsc_assoc_req(
17249 pCtx, (tDot11fIEWscAssocReq *)
17250 (pFrm + pIe->offset + offset * i),
17251 pnNeeded);
17252 break;
17253 case SigIeWscAssocRes:
17254 offset = sizeof(tDot11fIEWscAssocRes);
17255 status |=
17256 dot11f_get_packed_ie_wsc_assoc_res(
17257 pCtx, (tDot11fIEWscAssocRes *)
17258 (pFrm + pIe->offset + offset * i),
17259 pnNeeded);
17260 break;
17261 case SigIeWscBeacon:
17262 offset = sizeof(tDot11fIEWscBeacon);
17263 status |=
17264 dot11f_get_packed_ie_wsc_beacon(
17265 pCtx, (tDot11fIEWscBeacon *)
17266 (pFrm + pIe->offset + offset * i),
17267 pnNeeded);
17268 break;
17269 case SigIeWscBeaconProbeRes:
17270 offset = sizeof(tDot11fIEWscBeaconProbeRes);
17271 status |=
17272 dot11f_get_packed_ie_wsc_beacon_probe_res(
17273 pCtx, (tDot11fIEWscBeaconProbeRes *)
17274 (pFrm + pIe->offset + offset * i),
17275 pnNeeded);
17276 break;
17277 case SigIeWscIEOpaque:
17278 offset = sizeof(tDot11fIEWscIEOpaque);
17279 byteCount = ((tDot11fIEWscIEOpaque *)
17280 (pFrm + pIe->offset + offset * i))->
17281 num_data;
17282 pIePresent = ((tDot11fIEWscIEOpaque *)
17283 (pFrm + pIe->offset + offset * i))->
17284 present;
17285 break;
17286 case SigIeWscProbeReq:
17287 offset = sizeof(tDot11fIEWscProbeReq);
17288 status |=
17289 dot11f_get_packed_ie_wsc_probe_req(
17290 pCtx, (tDot11fIEWscProbeReq *)
17291 (pFrm + pIe->offset + offset * i),
17292 pnNeeded);
17293 break;
17294 case SigIeWscProbeRes:
17295 offset = sizeof(tDot11fIEWscProbeRes);
17296 status |=
17297 dot11f_get_packed_ie_wsc_probe_res(
17298 pCtx, (tDot11fIEWscProbeRes *)
17299 (pFrm + pIe->offset + offset * i),
17300 pnNeeded);
17301 break;
17302 case SigIeWscReassocRes:
17303 offset = sizeof(tDot11fIEWscReassocRes);
17304 status |=
17305 dot11f_get_packed_ie_wsc_reassoc_res(
17306 pCtx, (tDot11fIEWscReassocRes *)
17307 (pFrm + pIe->offset + offset * i),
17308 pnNeeded);
17309 break;
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080017310 case SigIeaddba_extn_element:
17311 offset = sizeof(tDot11fIEaddba_extn_element);
17312 byteCount = 1;
17313 pIePresent = ((tDot11fIEaddba_extn_element *)
17314 (pFrm + pIe->offset + offset * i))->
17315 present;
17316 break;
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070017317 case SigIebss_color_change:
17318 offset = sizeof(tDot11fIEbss_color_change);
17319 byteCount = 2;
17320 pIePresent = ((tDot11fIEbss_color_change *)
17321 (pFrm + pIe->offset + offset * i))->
17322 present;
17323 break;
Padma, Santhosh Kumar666f96e2017-11-10 13:22:59 +053017324 case SigIedh_parameter_element:
17325 offset = sizeof(tDot11fIEdh_parameter_element);
17326 byteCount = ((tDot11fIEdh_parameter_element *)
17327 (pFrm + pIe->offset + offset * i))->
17328 num_public_key + 2;
17329 pIePresent = ((tDot11fIEdh_parameter_element *)
17330 (pFrm + pIe->offset + offset * i))->
17331 present;
17332 break;
Abhishek Singhd8c3f102017-07-29 14:10:37 +053017333 case SigIeesp_information:
17334 offset = sizeof(tDot11fIEesp_information);
17335 byteCount = ((tDot11fIEesp_information *)
17336 (pFrm + pIe->offset + offset * i))->
17337 num_data;
17338 pIePresent = ((tDot11fIEesp_information *)
17339 (pFrm + pIe->offset + offset * i))->
17340 present;
17341 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080017342 case SigIeext_chan_switch_ann:
17343 offset = sizeof(tDot11fIEext_chan_switch_ann);
17344 byteCount = 4;
17345 pIePresent = ((tDot11fIEext_chan_switch_ann *)
17346 (pFrm + pIe->offset + offset * i))->
17347 present;
17348 break;
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053017349 case SigIefils_assoc_delay_info:
17350 offset = sizeof(tDot11fIEfils_assoc_delay_info);
17351 byteCount = 1;
17352 pIePresent = ((tDot11fIEfils_assoc_delay_info *)
17353 (pFrm + pIe->offset + offset * i))->
17354 present;
17355 break;
17356 case SigIefils_hlp_container:
17357 offset = sizeof(tDot11fIEfils_hlp_container);
17358 byteCount = ((tDot11fIEfils_hlp_container *)
17359 (pFrm + pIe->offset + offset * i))->
17360 num_hlp_packet + 12;
17361 pIePresent = ((tDot11fIEfils_hlp_container *)
17362 (pFrm + pIe->offset + offset * i))->
17363 present;
17364 break;
17365 case SigIefils_indication:
17366 offset = sizeof(tDot11fIEfils_indication);
17367 byteCount = ((tDot11fIEfils_indication *)
17368 (pFrm + pIe->offset + offset * i))->
17369 num_variable_data + 2;
17370 pIePresent = ((tDot11fIEfils_indication *)
17371 (pFrm + pIe->offset + offset * i))->
17372 present;
17373 break;
17374 case SigIefils_kde:
17375 offset = sizeof(tDot11fIEfils_kde);
17376 byteCount = ((tDot11fIEfils_kde *)
17377 (pFrm + pIe->offset + offset * i))->
17378 num_kde_list + 8;
17379 pIePresent = ((tDot11fIEfils_kde *)
17380 (pFrm + pIe->offset + offset * i))->
17381 present;
17382 break;
17383 case SigIefils_key_confirmation:
17384 offset = sizeof(tDot11fIEfils_key_confirmation);
17385 byteCount = ((tDot11fIEfils_key_confirmation *)
17386 (pFrm + pIe->offset + offset * i))->
17387 num_key_auth;
17388 pIePresent = ((tDot11fIEfils_key_confirmation *)
17389 (pFrm + pIe->offset + offset * i))->
17390 present;
17391 break;
17392 case SigIefils_nonce:
17393 offset = sizeof(tDot11fIEfils_nonce);
17394 byteCount = 16;
17395 pIePresent = ((tDot11fIEfils_nonce *)
17396 (pFrm + pIe->offset + offset * i))->
17397 present;
17398 break;
17399 case SigIefils_public_key:
17400 offset = sizeof(tDot11fIEfils_public_key);
17401 byteCount = ((tDot11fIEfils_public_key *)
17402 (pFrm + pIe->offset + offset * i))->
17403 num_public_key + 1;
17404 pIePresent = ((tDot11fIEfils_public_key *)
17405 (pFrm + pIe->offset + offset * i))->
17406 present;
17407 break;
17408 case SigIefils_session:
17409 offset = sizeof(tDot11fIEfils_session);
17410 byteCount = 8;
17411 pIePresent = ((tDot11fIEfils_session *)
17412 (pFrm + pIe->offset + offset * i))->
17413 present;
17414 break;
17415 case SigIefils_wrapped_data:
17416 offset = sizeof(tDot11fIEfils_wrapped_data);
17417 byteCount = ((tDot11fIEfils_wrapped_data *)
17418 (pFrm + pIe->offset + offset * i))->
17419 num_wrapped_data;
17420 pIePresent = ((tDot11fIEfils_wrapped_data *)
17421 (pFrm + pIe->offset + offset * i))->
17422 present;
17423 break;
Sridhar Selvaraj6d3e0d72017-08-17 17:32:37 +053017424 case SigIefragment_ie:
17425 offset = sizeof(tDot11fIEfragment_ie);
17426 byteCount = ((tDot11fIEfragment_ie *)
17427 (pFrm + pIe->offset + offset * i))->
17428 num_data;
17429 pIePresent = ((tDot11fIEfragment_ie *)
17430 (pFrm + pIe->offset + offset * i))->
17431 present;
17432 break;
Naveen Rawatea921ce2017-09-08 15:07:58 -070017433 case SigIehe_cap:
17434 offset = sizeof(tDot11fIEhe_cap);
17435 status |=
17436 dot11f_get_packed_ie_he_cap(
17437 pCtx, (tDot11fIEhe_cap *)
17438 (pFrm + pIe->offset + offset * i),
17439 pnNeeded);
17440 break;
17441 case SigIehe_op:
17442 offset = sizeof(tDot11fIEhe_op);
17443 status |=
17444 dot11f_get_packed_ie_he_op(
17445 pCtx, (tDot11fIEhe_op *)
17446 (pFrm + pIe->offset + offset * i),
17447 pnNeeded);
17448 break;
Nitesh Shah0ddd4f62016-05-27 10:07:32 +053017449 case SigIehs20vendor_ie:
17450 offset = sizeof(tDot11fIEhs20vendor_ie);
17451 status |=
17452 dot11f_get_packed_ie_hs20vendor_ie(
17453 pCtx, (tDot11fIEhs20vendor_ie *)
17454 (pFrm + pIe->offset + offset * i),
17455 pnNeeded);
17456 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080017457 case SigIeht2040_bss_coexistence:
17458 offset = sizeof(tDot11fIEht2040_bss_coexistence);
17459 byteCount = 1;
17460 pIePresent = ((tDot11fIEht2040_bss_coexistence *)
17461 (pFrm + pIe->offset + offset * i))->
17462 present;
17463 break;
17464 case SigIeht2040_bss_intolerant_report:
17465 offset = sizeof(tDot11fIEht2040_bss_intolerant_report);
17466 byteCount = ((tDot11fIEht2040_bss_intolerant_report *)
17467 (pFrm + pIe->offset + offset * i))->
17468 num_channel_list + 1;
17469 pIePresent = ((tDot11fIEht2040_bss_intolerant_report *)
17470 (pFrm + pIe->offset + offset * i))->
17471 present;
17472 break;
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070017473 case SigIemu_edca_param_set:
17474 offset = sizeof(tDot11fIEmu_edca_param_set);
17475 byteCount = 13;
17476 pIePresent = ((tDot11fIEmu_edca_param_set *)
17477 (pFrm + pIe->offset + offset * i))->
17478 present;
17479 break;
Selvaraj, Sridhar99edbc32017-06-22 10:49:59 +053017480 case SigIeosen_ie:
17481 offset = sizeof(tDot11fIEosen_ie);
17482 byteCount = ((tDot11fIEosen_ie *)
17483 (pFrm + pIe->offset + offset * i))->
17484 num_data;
17485 pIePresent = ((tDot11fIEosen_ie *)
17486 (pFrm + pIe->offset + offset * i))->
17487 present;
17488 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080017489 case SigIesec_chan_offset_ele:
17490 offset = sizeof(tDot11fIEsec_chan_offset_ele);
17491 byteCount = 1;
17492 pIePresent = ((tDot11fIEsec_chan_offset_ele *)
17493 (pFrm + pIe->offset + offset * i))->
17494 present;
17495 break;
Kapil Gupta4b2efbb2016-10-03 13:07:20 +053017496 case SigIevendor_vht_ie:
17497 offset = sizeof(tDot11fIEvendor_vht_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080017498 status |=
Kapil Gupta4b2efbb2016-10-03 13:07:20 +053017499 dot11f_get_packed_ie_vendor_vht_ie(
17500 pCtx, (tDot11fIEvendor_vht_ie *)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080017501 (pFrm + pIe->offset + offset * i),
17502 pnNeeded);
17503 break;
17504 default:
17505 FRAMES_LOG1(pCtx, FRLOGE, FRFL("INTERNAL ERROR-- I don"
17506 "'t know about the IE signature %d; this is most l"
17507 "ikely a bug in 'framesc'.\n"), pIe->sig);
17508 return DOT11F_INTERNAL_ERROR;
17509 } /*End of switch Case*/
17510
17511 if (byteCount && pIePresent)
17512 *pnNeeded += byteCount;
17513 } /*End of for loop*/
17514 }
17515 ++pIe;
17516 }
17517 return status;
17518
17519}
17520
17521static uint32_t get_packed_size_tlv_core(tpAniSirGlobal pCtx,
17522 uint8_t *pFrm,
17523 uint32_t *pnNeeded,
17524 const tTLVDefn TLVs[])
17525{
17526 const tTLVDefn *pTlv;
17527 uint32_t status;
17528 tFRAMES_BOOL *pfFound;
17529 uint32_t byteCount = 0;
17530 uint8_t pTlvPresent = 0;
17531
17532 status = DOT11F_PARSE_SUCCESS;
17533
17534 pTlv = &(TLVs[0]);
17535 while (0xffff != pTlv->id) {
17536 pfFound = (tFRAMES_BOOL *)(pFrm + pTlv->offset +
17537 pTlv->presenceOffset);
17538 if (*pfFound) {
17539 *pnNeeded += (pTlv->sType + pTlv->sLen);
17540 if (pTlv->pec)
17541 *pnNeeded += 3U;
17542 switch (pTlv->sig) {
17543 case SigTlvAuthorizedMACs:
17544 byteCount = 6;
17545 pTlvPresent = ((tDot11fTLVAuthorizedMACs *)
17546 (pFrm + pTlv->offset))->present;
17547 break;
17548 case SigTlvRequestToEnroll:
17549 byteCount = 1;
17550 pTlvPresent = ((tDot11fTLVRequestToEnroll *)
17551 (pFrm + pTlv->offset))->present;
17552 break;
17553 case SigTlvVersion2:
17554 byteCount = 1;
17555 pTlvPresent = ((tDot11fTLVVersion2 *)
17556 (pFrm + pTlv->offset))->present;
17557 break;
17558 case SigTlvAPSetupLocked:
17559 byteCount = 1;
17560 pTlvPresent = ((tDot11fTLVAPSetupLocked *)
17561 (pFrm + pTlv->offset))->present;
17562 break;
17563 case SigTlvAssociationState:
17564 byteCount = 2;
17565 pTlvPresent = ((tDot11fTLVAssociationState *)
17566 (pFrm + pTlv->offset))->present;
17567 break;
17568 case SigTlvConfigMethods:
17569 byteCount = 2;
17570 pTlvPresent = ((tDot11fTLVConfigMethods *)
17571 (pFrm + pTlv->offset))->present;
17572 break;
17573 case SigTlvConfigurationError:
17574 byteCount = 2;
17575 pTlvPresent = ((tDot11fTLVConfigurationError *)
17576 (pFrm + pTlv->offset))->present;
17577 break;
17578 case SigTlvDeviceName:
17579 byteCount = ((tDot11fTLVDeviceName *)(pFrm + pTlv->offset))->num_text;
17580 pTlvPresent = ((tDot11fTLVDeviceName *)
17581 (pFrm + pTlv->offset))->present;
17582 break;
17583 case SigTlvDevicePasswordID:
17584 byteCount = 2;
17585 pTlvPresent = ((tDot11fTLVDevicePasswordID *)
17586 (pFrm + pTlv->offset))->present;
17587 break;
17588 case SigTlvExtendedListenTiming:
17589 byteCount = 4;
17590 pTlvPresent = ((tDot11fTLVExtendedListenTiming *)
17591 (pFrm + pTlv->offset))->present;
17592 break;
17593 case SigTlvListenChannel:
17594 byteCount = 5;
17595 pTlvPresent = ((tDot11fTLVListenChannel *)
17596 (pFrm + pTlv->offset))->present;
17597 break;
17598 case SigTlvManufacturer:
17599 byteCount = ((tDot11fTLVManufacturer *)(pFrm + pTlv->offset))->num_name;
17600 pTlvPresent = ((tDot11fTLVManufacturer *)
17601 (pFrm + pTlv->offset))->present;
17602 break;
17603 case SigTlvMinorReasonCode:
17604 byteCount = 1;
17605 pTlvPresent = ((tDot11fTLVMinorReasonCode *)
17606 (pFrm + pTlv->offset))->present;
17607 break;
17608 case SigTlvModelName:
17609 byteCount = ((tDot11fTLVModelName *)(pFrm + pTlv->offset))->num_text;
17610 pTlvPresent = ((tDot11fTLVModelName *)
17611 (pFrm + pTlv->offset))->present;
17612 break;
17613 case SigTlvModelNumber:
17614 byteCount = ((tDot11fTLVModelNumber *)(pFrm + pTlv->offset))->num_text;
17615 pTlvPresent = ((tDot11fTLVModelNumber *)
17616 (pFrm + pTlv->offset))->present;
17617 break;
17618 case SigTlvNoticeOfAbsence:
17619 byteCount = ((tDot11fTLVNoticeOfAbsence *)(pFrm + pTlv->offset))->num_NoADesc+2;
17620 pTlvPresent = ((tDot11fTLVNoticeOfAbsence *)
17621 (pFrm + pTlv->offset))->present;
17622 break;
17623 case SigTlvOperatingChannel:
17624 byteCount = 5;
17625 pTlvPresent = ((tDot11fTLVOperatingChannel *)
17626 (pFrm + pTlv->offset))->present;
17627 break;
17628 case SigTlvP2PCapability:
17629 byteCount = 2;
17630 pTlvPresent = ((tDot11fTLVP2PCapability *)
17631 (pFrm + pTlv->offset))->present;
17632 break;
17633 case SigTlvP2PDeviceId:
17634 byteCount = 6;
17635 pTlvPresent = ((tDot11fTLVP2PDeviceId *)
17636 (pFrm + pTlv->offset))->present;
17637 break;
17638 case SigTlvP2PDeviceInfo:
17639 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pFrm + pTlv->offset, pnNeeded, TLVS_P2PDeviceInfo);
17640 byteCount = 16;
17641 pTlvPresent = ((tDot11fTLVP2PDeviceInfo *)
17642 (pFrm + pTlv->offset))->present;
17643 break;
17644 case SigTlvP2PGroupInfo:
17645 byteCount = ((tDot11fTLVP2PGroupInfo *)(pFrm + pTlv->offset))->num_P2PClientInfoDesc;
17646 pTlvPresent = ((tDot11fTLVP2PGroupInfo *)
17647 (pFrm + pTlv->offset))->present;
17648 break;
17649 case SigTlvP2PStatus:
17650 byteCount = 1;
17651 pTlvPresent = ((tDot11fTLVP2PStatus *)
17652 (pFrm + pTlv->offset))->present;
17653 break;
17654 case SigTlvPrimaryDeviceType:
17655 byteCount = 8;
17656 pTlvPresent = ((tDot11fTLVPrimaryDeviceType *)
17657 (pFrm + pTlv->offset))->present;
17658 break;
17659 case SigTlvRFBands:
17660 byteCount = 1;
17661 pTlvPresent = ((tDot11fTLVRFBands *)
17662 (pFrm + pTlv->offset))->present;
17663 break;
17664 case SigTlvRequestDeviceType:
17665 byteCount = 8;
17666 pTlvPresent = ((tDot11fTLVRequestDeviceType *)
17667 (pFrm + pTlv->offset))->present;
17668 break;
17669 case SigTlvRequestType:
17670 byteCount = 1;
17671 pTlvPresent = ((tDot11fTLVRequestType *)
17672 (pFrm + pTlv->offset))->present;
17673 break;
17674 case SigTlvResponseType:
17675 byteCount = 1;
17676 pTlvPresent = ((tDot11fTLVResponseType *)
17677 (pFrm + pTlv->offset))->present;
17678 break;
17679 case SigTlvSelectedRegistrar:
17680 byteCount = 1;
17681 pTlvPresent = ((tDot11fTLVSelectedRegistrar *)
17682 (pFrm + pTlv->offset))->present;
17683 break;
17684 case SigTlvSelectedRegistrarConfigMethods:
17685 byteCount = 2;
17686 pTlvPresent = ((tDot11fTLVSelectedRegistrarConfigMethods *)
17687 (pFrm + pTlv->offset))->present;
17688 break;
17689 case SigTlvSerialNumber:
17690 byteCount = ((tDot11fTLVSerialNumber *)(pFrm + pTlv->offset))->num_text;
17691 pTlvPresent = ((tDot11fTLVSerialNumber *)
17692 (pFrm + pTlv->offset))->present;
17693 break;
17694 case SigTlvUUID_E:
17695 byteCount = 16;
17696 pTlvPresent = ((tDot11fTLVUUID_E *)
17697 (pFrm + pTlv->offset))->present;
17698 break;
17699 case SigTlvUUID_R:
17700 byteCount = 16;
17701 pTlvPresent = ((tDot11fTLVUUID_R *)
17702 (pFrm + pTlv->offset))->present;
17703 break;
17704 case SigTlvVendorExtension:
17705 status = get_packed_size_tlv_core(pCtx, (uint8_t *)pFrm + pTlv->offset, pnNeeded, TLVS_VendorExtension);
17706 byteCount = 3;
17707 pTlvPresent = ((tDot11fTLVVendorExtension *)
17708 (pFrm + pTlv->offset))->present;
17709 break;
17710 case SigTlvVersion:
17711 byteCount = 1;
17712 pTlvPresent = ((tDot11fTLVVersion *)
17713 (pFrm + pTlv->offset))->present;
17714 break;
17715 case SigTlvWPSState:
17716 byteCount = 1;
17717 pTlvPresent = ((tDot11fTLVWPSState *)
17718 (pFrm + pTlv->offset))->present;
17719 break;
Abhishek Singh951eed82017-07-06 16:53:19 +053017720 case SigTlvassoc_disallowed:
17721 byteCount = 1;
17722 pTlvPresent = ((tDot11fTLVassoc_disallowed *)
17723 (pFrm + pTlv->offset))->present;
17724 break;
17725 case SigTlvassoc_retry_delay:
17726 byteCount = 2;
17727 pTlvPresent = ((tDot11fTLVassoc_retry_delay *)
17728 (pFrm + pTlv->offset))->present;
17729 break;
17730 case SigTlvcellular_data_cap:
17731 byteCount = 1;
17732 pTlvPresent = ((tDot11fTLVcellular_data_cap *)
17733 (pFrm + pTlv->offset))->present;
17734 break;
17735 case SigTlvcellular_data_con_pref:
17736 byteCount = 1;
17737 pTlvPresent = ((tDot11fTLVcellular_data_con_pref *)
17738 (pFrm + pTlv->offset))->present;
17739 break;
17740 case SigTlvmbo_ap_cap:
17741 byteCount = 1;
17742 pTlvPresent = ((tDot11fTLVmbo_ap_cap *)
17743 (pFrm + pTlv->offset))->present;
17744 break;
17745 case SigTlvnon_prefferd_chan_rep:
17746 byteCount = ((tDot11fTLVnon_prefferd_chan_rep *)(pFrm + pTlv->offset))->num_channel_report+1;
17747 pTlvPresent = ((tDot11fTLVnon_prefferd_chan_rep *)
17748 (pFrm + pTlv->offset))->present;
17749 break;
17750 case SigTlvoce_cap:
17751 byteCount = 1;
17752 pTlvPresent = ((tDot11fTLVoce_cap *)
17753 (pFrm + pTlv->offset))->present;
17754 break;
17755 case SigTlvreduced_wan_metrics:
17756 byteCount = 1;
17757 pTlvPresent = ((tDot11fTLVreduced_wan_metrics *)
17758 (pFrm + pTlv->offset))->present;
17759 break;
17760 case SigTlvrssi_assoc_rej:
17761 byteCount = 2;
17762 pTlvPresent = ((tDot11fTLVrssi_assoc_rej *)
17763 (pFrm + pTlv->offset))->present;
17764 break;
17765 case SigTlvtransition_reason:
17766 byteCount = 1;
17767 pTlvPresent = ((tDot11fTLVtransition_reason *)
17768 (pFrm + pTlv->offset))->present;
17769 break;
17770 case SigTlvtransition_reject_reason:
17771 byteCount = 1;
17772 pTlvPresent = ((tDot11fTLVtransition_reject_reason *)
17773 (pFrm + pTlv->offset))->present;
17774 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080017775 case SigTlvP2PInterface:
17776 byteCount = 6;
17777 pTlvPresent = ((tDot11fTLVP2PInterface *)
17778 (pFrm + pTlv->offset))->present;
17779 break;
17780 case SigTlvP2PManageability:
17781 byteCount = 1;
17782 pTlvPresent = ((tDot11fTLVP2PManageability *)
17783 (pFrm + pTlv->offset))->present;
17784 break;
17785 default:
17786 FRAMES_LOG1(pCtx, FRLOGE, FRFL("INTERNAL ERROR-- I don"
17787 "'t know about the TLV signature %d; this is most l"
17788 "ikely a bug in 'framesc'.\n"), pTlv->sig);
17789 return DOT11F_INTERNAL_ERROR;
17790 }
17791 if (pTlvPresent) {
17792 *pnNeeded += byteCount;
17793 }
17794 }
17795 ++pTlv;
17796 }
17797 return status;
17798}
17799void dot11f_pack_ff_aid(tpAniSirGlobal pCtx,
17800 tDot11fFfAID *pSrc,
17801 uint8_t *pBuf)
17802{
17803 frameshtons(pCtx, pBuf, pSrc->associd, 0);
17804 (void)pCtx;
17805} /* End dot11f_pack_ff_aid. */
17806
17807void dot11f_pack_ff_action(tpAniSirGlobal pCtx,
17808 tDot11fFfAction *pSrc,
17809 uint8_t *pBuf)
17810{
17811 *pBuf = pSrc->action;
17812 (void)pCtx;
17813} /* End dot11f_pack_ff_action. */
17814
17815void dot11f_pack_ff_auth_algo(tpAniSirGlobal pCtx,
17816 tDot11fFfAuthAlgo *pSrc,
17817 uint8_t *pBuf)
17818{
17819 frameshtons(pCtx, pBuf, pSrc->algo, 0);
17820 (void)pCtx;
17821} /* End dot11f_pack_ff_auth_algo. */
17822
17823void dot11f_pack_ff_auth_seq_no(tpAniSirGlobal pCtx,
17824 tDot11fFfAuthSeqNo *pSrc,
17825 uint8_t *pBuf)
17826{
17827 frameshtons(pCtx, pBuf, pSrc->no, 0);
17828 (void)pCtx;
17829} /* End dot11f_pack_ff_auth_seq_no. */
17830
17831void dot11f_pack_ff_beacon_interval(tpAniSirGlobal pCtx,
17832 tDot11fFfBeaconInterval *pSrc,
17833 uint8_t *pBuf)
17834{
17835 frameshtons(pCtx, pBuf, pSrc->interval, 0);
17836 (void)pCtx;
17837} /* End dot11f_pack_ff_beacon_interval. */
17838
17839void dot11f_pack_ff_capabilities(tpAniSirGlobal pCtx,
17840 tDot11fFfCapabilities *pSrc,
17841 uint8_t *pBuf)
17842{
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070017843 uint16_t tmp95__;
17844 tmp95__ = 0U;
17845 tmp95__ |= (pSrc->ess << 0);
17846 tmp95__ |= (pSrc->ibss << 1);
17847 tmp95__ |= (pSrc->cfPollable << 2);
17848 tmp95__ |= (pSrc->cfPollReq << 3);
17849 tmp95__ |= (pSrc->privacy << 4);
17850 tmp95__ |= (pSrc->shortPreamble << 5);
17851 tmp95__ |= (pSrc->pbcc << 6);
17852 tmp95__ |= (pSrc->channelAgility << 7);
17853 tmp95__ |= (pSrc->spectrumMgt << 8);
17854 tmp95__ |= (pSrc->qos << 9);
17855 tmp95__ |= (pSrc->shortSlotTime << 10);
17856 tmp95__ |= (pSrc->apsd << 11);
17857 tmp95__ |= (pSrc->rrm << 12);
17858 tmp95__ |= (pSrc->dsssOfdm << 13);
17859 tmp95__ |= (pSrc->delayedBA << 14);
17860 tmp95__ |= (pSrc->immediateBA << 15);
17861 frameshtons(pCtx, pBuf, tmp95__, 0);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080017862 (void)pCtx;
17863} /* End dot11f_pack_ff_capabilities. */
17864
17865void dot11f_pack_ff_category(tpAniSirGlobal pCtx,
17866 tDot11fFfCategory *pSrc,
17867 uint8_t *pBuf)
17868{
17869 *pBuf = pSrc->category;
17870 (void)pCtx;
17871} /* End dot11f_pack_ff_category. */
17872
17873void dot11f_pack_ff_current_ap_address(tpAniSirGlobal pCtx,
17874 tDot11fFfCurrentAPAddress *pSrc,
17875 uint8_t *pBuf)
17876{
17877 DOT11F_MEMCPY(pCtx, pBuf, pSrc->mac, 6);
17878 (void)pCtx;
17879} /* End dot11f_pack_ff_current_ap_address. */
17880
17881void dot11f_pack_ff_dialog_token(tpAniSirGlobal pCtx,
17882 tDot11fFfDialogToken *pSrc,
17883 uint8_t *pBuf)
17884{
17885 *pBuf = pSrc->token;
17886 (void)pCtx;
17887} /* End dot11f_pack_ff_dialog_token. */
17888
17889void dot11f_pack_ff_link_margin(tpAniSirGlobal pCtx,
17890 tDot11fFfLinkMargin *pSrc,
17891 uint8_t *pBuf)
17892{
17893 *pBuf = pSrc->linkMargin;
17894 (void)pCtx;
17895} /* End dot11f_pack_ff_link_margin. */
17896
17897void dot11f_pack_ff_listen_interval(tpAniSirGlobal pCtx,
17898 tDot11fFfListenInterval *pSrc,
17899 uint8_t *pBuf)
17900{
17901 frameshtons(pCtx, pBuf, pSrc->interval, 0);
17902 (void)pCtx;
17903} /* End dot11f_pack_ff_listen_interval. */
17904
17905void dot11f_pack_ff_max_tx_power(tpAniSirGlobal pCtx,
17906 tDot11fFfMaxTxPower *pSrc,
17907 uint8_t *pBuf)
17908{
17909 *pBuf = pSrc->maxTxPower;
17910 (void)pCtx;
17911} /* End dot11f_pack_ff_max_tx_power. */
17912
17913void dot11f_pack_ff_num_of_repetitions(tpAniSirGlobal pCtx,
17914 tDot11fFfNumOfRepetitions *pSrc,
17915 uint8_t *pBuf)
17916{
17917 frameshtons(pCtx, pBuf, pSrc->repetitions, 0);
17918 (void)pCtx;
17919} /* End dot11f_pack_ff_num_of_repetitions. */
17920
17921void dot11f_pack_ff_operating_mode(tpAniSirGlobal pCtx,
17922 tDot11fFfOperatingMode *pSrc,
17923 uint8_t *pBuf)
17924{
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070017925 uint8_t tmp96__;
17926 tmp96__ = 0U;
17927 tmp96__ |= (pSrc->chanWidth << 0);
17928 tmp96__ |= (pSrc->reserved << 2);
17929 tmp96__ |= (pSrc->rxNSS << 4);
17930 tmp96__ |= (pSrc->rxNSSType << 7);
17931 *pBuf = tmp96__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080017932 (void)pCtx;
17933} /* End dot11f_pack_ff_operating_mode. */
17934
17935void dot11f_pack_ff_rcpi(tpAniSirGlobal pCtx,
17936 tDot11fFfRCPI *pSrc,
17937 uint8_t *pBuf)
17938{
17939 *pBuf = pSrc->rcpi;
17940 (void)pCtx;
17941} /* End dot11f_pack_ff_rcpi. */
17942
17943void dot11f_pack_ff_rsni(tpAniSirGlobal pCtx,
17944 tDot11fFfRSNI *pSrc,
17945 uint8_t *pBuf)
17946{
17947 *pBuf = pSrc->rsni;
17948 (void)pCtx;
17949} /* End dot11f_pack_ff_rsni. */
17950
17951void dot11f_pack_ff_reason(tpAniSirGlobal pCtx,
17952 tDot11fFfReason *pSrc,
17953 uint8_t *pBuf)
17954{
17955 frameshtons(pCtx, pBuf, pSrc->code, 0);
17956 (void)pCtx;
17957} /* End dot11f_pack_ff_reason. */
17958
17959void dot11f_pack_ff_rx_antenna_id(tpAniSirGlobal pCtx,
17960 tDot11fFfRxAntennaId *pSrc,
17961 uint8_t *pBuf)
17962{
17963 *pBuf = pSrc->antennaId;
17964 (void)pCtx;
17965} /* End dot11f_pack_ff_rx_antenna_id. */
17966
17967void dot11f_pack_ff_sm_power_mode_set(tpAniSirGlobal pCtx,
17968 tDot11fFfSMPowerModeSet *pSrc,
17969 uint8_t *pBuf)
17970{
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070017971 uint8_t tmp97__;
17972 tmp97__ = 0U;
17973 tmp97__ |= (pSrc->PowerSave_En << 0);
17974 tmp97__ |= (pSrc->Mode << 1);
17975 tmp97__ |= (pSrc->reserved << 2);
17976 *pBuf = tmp97__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080017977 (void)pCtx;
17978} /* End dot11f_pack_ff_sm_power_mode_set. */
17979
17980void dot11f_pack_ff_status(tpAniSirGlobal pCtx,
17981 tDot11fFfStatus *pSrc,
17982 uint8_t *pBuf)
17983{
17984 frameshtons(pCtx, pBuf, pSrc->status, 0);
17985 (void)pCtx;
17986} /* End dot11f_pack_ff_status. */
17987
17988void dot11f_pack_ff_status_code(tpAniSirGlobal pCtx,
17989 tDot11fFfStatusCode *pSrc,
17990 uint8_t *pBuf)
17991{
17992 *pBuf = pSrc->statusCode;
17993 (void)pCtx;
17994} /* End dot11f_pack_ff_status_code. */
17995
17996void dot11f_pack_ff_tpc_ele_id(tpAniSirGlobal pCtx,
17997 tDot11fFfTPCEleID *pSrc,
17998 uint8_t *pBuf)
17999{
18000 *pBuf = pSrc->TPCId;
18001 (void)pCtx;
18002} /* End dot11f_pack_ff_tpc_ele_id. */
18003
18004void dot11f_pack_ff_tpc_ele_len(tpAniSirGlobal pCtx,
18005 tDot11fFfTPCEleLen *pSrc,
18006 uint8_t *pBuf)
18007{
18008 *pBuf = pSrc->TPCLen;
18009 (void)pCtx;
18010} /* End dot11f_pack_ff_tpc_ele_len. */
18011
18012void dot11f_pack_ff_ts_info(tpAniSirGlobal pCtx,
18013 tDot11fFfTSInfo *pSrc,
18014 uint8_t *pBuf)
18015{
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070018016 uint32_t tmp98__;
18017 tmp98__ = 0U;
18018 tmp98__ |= (pSrc->traffic_type << 0);
18019 tmp98__ |= (pSrc->tsid << 1);
18020 tmp98__ |= (pSrc->direction << 5);
18021 tmp98__ |= (pSrc->access_policy << 7);
18022 tmp98__ |= (pSrc->aggregation << 9);
18023 tmp98__ |= (pSrc->psb << 10);
18024 tmp98__ |= (pSrc->user_priority << 11);
18025 tmp98__ |= (pSrc->tsinfo_ack_pol << 14);
18026 tmp98__ |= (pSrc->schedule << 16);
18027 tmp98__ |= (pSrc->unused << 17);
18028 frameshtonl(pCtx, pBuf, tmp98__, 0);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080018029 (void)pCtx;
18030} /* End dot11f_pack_ff_ts_info. */
18031
18032void dot11f_pack_ff_time_stamp(tpAniSirGlobal pCtx,
18033 tDot11fFfTimeStamp *pSrc,
18034 uint8_t *pBuf)
18035{
18036 frameshtonq(pCtx, pBuf, pSrc->timestamp, 0);
18037 (void)pCtx;
18038} /* End dot11f_pack_ff_time_stamp. */
18039
18040void dot11f_pack_ff_transaction_id(tpAniSirGlobal pCtx,
18041 tDot11fFfTransactionId *pSrc,
18042 uint8_t *pBuf)
18043{
18044 DOT11F_MEMCPY(pCtx, pBuf, pSrc->transId, 2);
18045 (void)pCtx;
18046} /* End dot11f_pack_ff_transaction_id. */
18047
18048void dot11f_pack_ff_tx_antenna_id(tpAniSirGlobal pCtx,
18049 tDot11fFfTxAntennaId *pSrc,
18050 uint8_t *pBuf)
18051{
18052 *pBuf = pSrc->antennaId;
18053 (void)pCtx;
18054} /* End dot11f_pack_ff_tx_antenna_id. */
18055
18056void dot11f_pack_ff_tx_power(tpAniSirGlobal pCtx,
18057 tDot11fFfTxPower *pSrc,
18058 uint8_t *pBuf)
18059{
18060 *pBuf = pSrc->txPower;
18061 (void)pCtx;
18062} /* End dot11f_pack_ff_tx_power. */
18063
18064void dot11f_pack_ff_vht_membership_status_array(tpAniSirGlobal pCtx,
18065 tDot11fFfVhtMembershipStatusArray *pSrc,
18066 uint8_t *pBuf)
18067{
18068 DOT11F_MEMCPY(pCtx, pBuf, pSrc->membershipStatusArray, 8);
18069 (void)pCtx;
18070} /* End dot11f_pack_ff_vht_membership_status_array. */
18071
18072void dot11f_pack_ff_vht_user_position_array(tpAniSirGlobal pCtx,
18073 tDot11fFfVhtUserPositionArray *pSrc,
18074 uint8_t *pBuf)
18075{
18076 DOT11F_MEMCPY(pCtx, pBuf, pSrc->userPositionArray, 16);
18077 (void)pCtx;
18078} /* End dot11f_pack_ff_vht_user_position_array. */
18079
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -080018080void dot11f_pack_ff_addba_param_set(tpAniSirGlobal pCtx,
18081 tDot11fFfaddba_param_set *pSrc,
18082 uint8_t *pBuf)
18083{
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070018084 uint16_t tmp99__;
18085 tmp99__ = 0U;
18086 tmp99__ |= (pSrc->amsdu_supp << 0);
18087 tmp99__ |= (pSrc->policy << 1);
18088 tmp99__ |= (pSrc->tid << 2);
18089 tmp99__ |= (pSrc->buff_size << 6);
18090 frameshtons(pCtx, pBuf, tmp99__, 0);
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -080018091 (void)pCtx;
18092} /* End dot11f_pack_ff_addba_param_set. */
18093
18094void dot11f_pack_ff_ba_start_seq_ctrl(tpAniSirGlobal pCtx,
18095 tDot11fFfba_start_seq_ctrl *pSrc,
18096 uint8_t *pBuf)
18097{
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070018098 uint16_t tmp100__;
18099 tmp100__ = 0U;
18100 tmp100__ |= (pSrc->frag_number << 0);
18101 tmp100__ |= (pSrc->ssn << 4);
18102 frameshtons(pCtx, pBuf, tmp100__, 0);
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -080018103 (void)pCtx;
18104} /* End dot11f_pack_ff_ba_start_seq_ctrl. */
18105
18106void dot11f_pack_ff_ba_timeout(tpAniSirGlobal pCtx,
18107 tDot11fFfba_timeout *pSrc,
18108 uint8_t *pBuf)
18109{
18110 frameshtons(pCtx, pBuf, pSrc->timeout, 0);
18111 (void)pCtx;
18112} /* End dot11f_pack_ff_ba_timeout. */
18113
18114void dot11f_pack_ff_delba_param_set(tpAniSirGlobal pCtx,
18115 tDot11fFfdelba_param_set *pSrc,
18116 uint8_t *pBuf)
18117{
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070018118 uint16_t tmp101__;
18119 tmp101__ = 0U;
18120 tmp101__ |= (pSrc->reserved << 0);
18121 tmp101__ |= (pSrc->initiator << 11);
18122 tmp101__ |= (pSrc->tid << 12);
18123 frameshtons(pCtx, pBuf, tmp101__, 0);
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -080018124 (void)pCtx;
18125} /* End dot11f_pack_ff_delba_param_set. */
18126
Abhishek Singh518323d2015-10-19 17:42:01 +053018127void dot11f_pack_ff_ext_chan_switch_ann_action(tpAniSirGlobal pCtx,
18128 tDot11fFfext_chan_switch_ann_action *pSrc,
18129 uint8_t *pBuf)
18130{
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070018131 uint32_t tmp102__;
18132 tmp102__ = 0U;
18133 tmp102__ |= (pSrc->switch_mode << 0);
18134 tmp102__ |= (pSrc->op_class << 8);
18135 tmp102__ |= (pSrc->new_channel << 16);
18136 tmp102__ |= (pSrc->switch_count << 24);
18137 frameshtonl(pCtx, pBuf, tmp102__, 0);
Abhishek Singh518323d2015-10-19 17:42:01 +053018138 (void)pCtx;
18139} /* End dot11f_pack_ff_ext_chan_switch_ann_action. */
18140
Abhishek Singh5695e2a2016-10-28 10:39:12 +053018141void dot11f_pack_ff_p2p_action_oui(tpAniSirGlobal pCtx,
18142 tDot11fFfp2p_action_oui *pSrc,
18143 uint8_t *pBuf)
18144{
18145 DOT11F_MEMCPY(pCtx, pBuf, pSrc->oui_data, 4);
18146 (void)pCtx;
18147} /* End dot11f_pack_ff_p2p_action_oui. */
18148
18149void dot11f_pack_ff_p2p_action_subtype(tpAniSirGlobal pCtx,
18150 tDot11fFfp2p_action_subtype *pSrc,
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -080018151 uint8_t *pBuf)
Abhishek Singh5695e2a2016-10-28 10:39:12 +053018152{
18153 *pBuf = pSrc->subtype;
18154 (void)pCtx;
18155} /* End dot11f_pack_ff_p2p_action_subtype. */
18156
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080018157uint32_t dot11f_pack_tlv_authorized_ma_cs(tpAniSirGlobal pCtx,
18158 tDot11fTLVAuthorizedMACs *pSrc,
18159 uint8_t *pBuf,
18160 uint32_t nBuf,
18161 uint32_t *pnConsumed)
18162{
18163 uint8_t *pTlvLen = 0;
18164 uint32_t nConsumedOnEntry = *pnConsumed;
18165 uint32_t nNeeded = 0U;
18166 nNeeded += 8;
18167 if (nNeeded > nBuf)
18168 return DOT11F_BUFFER_OVERFLOW;
18169 while (pSrc->present) {
18170 *pBuf = 1;
18171 pBuf += 1; *pnConsumed += 1;
18172 pTlvLen = pBuf;
18173 pBuf += 1; *pnConsumed += 1;
18174 DOT11F_MEMCPY(pCtx, pBuf, pSrc->mac, 6);
18175 *pnConsumed += 6;
18176 pBuf += 6;
18177 break;
18178 }
18179 (void)pCtx;
18180 if (pTlvLen) {
18181 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
18182 }
18183 return DOT11F_PARSE_SUCCESS;
18184} /* End dot11f_pack_tlv_authorized_ma_cs. */
18185
18186uint32_t dot11f_pack_tlv_request_to_enroll(tpAniSirGlobal pCtx,
18187 tDot11fTLVRequestToEnroll *pSrc,
18188 uint8_t *pBuf,
18189 uint32_t nBuf,
18190 uint32_t *pnConsumed)
18191{
18192 uint8_t *pTlvLen = 0;
18193 uint32_t nConsumedOnEntry = *pnConsumed;
18194 uint32_t nNeeded = 0U;
18195 nNeeded += 3;
18196 if (nNeeded > nBuf)
18197 return DOT11F_BUFFER_OVERFLOW;
18198 while (pSrc->present) {
18199 *pBuf = 3;
18200 pBuf += 1; *pnConsumed += 1;
18201 pTlvLen = pBuf;
18202 pBuf += 1; *pnConsumed += 1;
18203 *pBuf = pSrc->req;
18204 *pnConsumed += 1;
18205 pBuf += 1;
18206 break;
18207 }
18208 (void)pCtx;
18209 if (pTlvLen) {
18210 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
18211 }
18212 return DOT11F_PARSE_SUCCESS;
18213} /* End dot11f_pack_tlv_request_to_enroll. */
18214
18215uint32_t dot11f_pack_tlv_version2(tpAniSirGlobal pCtx,
18216 tDot11fTLVVersion2 *pSrc,
18217 uint8_t *pBuf,
18218 uint32_t nBuf,
18219 uint32_t *pnConsumed)
18220{
18221 uint8_t *pTlvLen = 0;
18222 uint32_t nConsumedOnEntry = *pnConsumed;
18223 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070018224 uint8_t tmp103__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080018225 nNeeded += 3;
18226 if (nNeeded > nBuf)
18227 return DOT11F_BUFFER_OVERFLOW;
18228 while (pSrc->present) {
18229 *pBuf = 0;
18230 pBuf += 1; *pnConsumed += 1;
18231 pTlvLen = pBuf;
18232 pBuf += 1; *pnConsumed += 1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070018233 tmp103__ = 0U;
18234 tmp103__ |= (pSrc->minor << 0);
18235 tmp103__ |= (pSrc->major << 4);
Naveen Rawat69623ef2018-04-27 16:11:01 -070018236 if (unlikely(nBuf < 1))
18237 return DOT11F_INCOMPLETE_IE;
18238
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070018239 *pBuf = tmp103__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080018240 *pnConsumed += 1;
18241 pBuf += 1;
18242 nBuf -= 1 ;
18243 break;
18244 }
18245 (void)pCtx;
18246 if (pTlvLen) {
18247 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
18248 }
18249 return DOT11F_PARSE_SUCCESS;
18250} /* End dot11f_pack_tlv_version2. */
18251
18252uint32_t dot11f_pack_tlv_ap_setup_locked(tpAniSirGlobal pCtx,
18253 tDot11fTLVAPSetupLocked *pSrc,
18254 uint8_t *pBuf,
18255 uint32_t nBuf,
18256 uint32_t *pnConsumed)
18257{
18258 uint8_t *pTlvLen = 0;
18259 uint32_t nConsumedOnEntry = *pnConsumed;
18260 uint32_t nNeeded = 0U;
18261 nNeeded += 5;
18262 if (nNeeded > nBuf)
18263 return DOT11F_BUFFER_OVERFLOW;
18264 while (pSrc->present) {
18265 frameshtons(pCtx, pBuf, 4183, 1);
18266 pBuf += 2; *pnConsumed += 2;
18267 pTlvLen = pBuf;
18268 pBuf += 2; *pnConsumed += 2;
18269 *pBuf = pSrc->fLocked;
18270 *pnConsumed += 1;
18271 pBuf += 1;
18272 break;
18273 }
18274 (void)pCtx;
18275 if (pTlvLen) {
18276 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
18277 }
18278 return DOT11F_PARSE_SUCCESS;
18279} /* End dot11f_pack_tlv_ap_setup_locked. */
18280
18281uint32_t dot11f_pack_tlv_association_state(tpAniSirGlobal pCtx,
18282 tDot11fTLVAssociationState *pSrc,
18283 uint8_t *pBuf,
18284 uint32_t nBuf,
18285 uint32_t *pnConsumed)
18286{
18287 uint8_t *pTlvLen = 0;
18288 uint32_t nConsumedOnEntry = *pnConsumed;
18289 uint32_t nNeeded = 0U;
18290 nNeeded += 6;
18291 if (nNeeded > nBuf)
18292 return DOT11F_BUFFER_OVERFLOW;
18293 while (pSrc->present) {
18294 frameshtons(pCtx, pBuf, 4098, 1);
18295 pBuf += 2; *pnConsumed += 2;
18296 pTlvLen = pBuf;
18297 pBuf += 2; *pnConsumed += 2;
18298 frameshtons(pCtx, pBuf, pSrc->state, 1);
18299 *pnConsumed += 2;
18300 pBuf += 2;
18301 break;
18302 }
18303 (void)pCtx;
18304 if (pTlvLen) {
18305 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
18306 }
18307 return DOT11F_PARSE_SUCCESS;
18308} /* End dot11f_pack_tlv_association_state. */
18309
18310uint32_t dot11f_pack_tlv_config_methods(tpAniSirGlobal pCtx,
18311 tDot11fTLVConfigMethods *pSrc,
18312 uint8_t *pBuf,
18313 uint32_t nBuf,
18314 uint32_t *pnConsumed)
18315{
18316 uint8_t *pTlvLen = 0;
18317 uint32_t nConsumedOnEntry = *pnConsumed;
18318 uint32_t nNeeded = 0U;
18319 nNeeded += 6;
18320 if (nNeeded > nBuf)
18321 return DOT11F_BUFFER_OVERFLOW;
18322 while (pSrc->present) {
18323 frameshtons(pCtx, pBuf, 4104, 1);
18324 pBuf += 2; *pnConsumed += 2;
18325 pTlvLen = pBuf;
18326 pBuf += 2; *pnConsumed += 2;
18327 frameshtons(pCtx, pBuf, pSrc->methods, 1);
18328 *pnConsumed += 2;
18329 pBuf += 2;
18330 break;
18331 }
18332 (void)pCtx;
18333 if (pTlvLen) {
18334 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
18335 }
18336 return DOT11F_PARSE_SUCCESS;
18337} /* End dot11f_pack_tlv_config_methods. */
18338
18339uint32_t dot11f_pack_tlv_configuration_error(tpAniSirGlobal pCtx,
18340 tDot11fTLVConfigurationError *pSrc,
18341 uint8_t *pBuf,
18342 uint32_t nBuf,
18343 uint32_t *pnConsumed)
18344{
18345 uint8_t *pTlvLen = 0;
18346 uint32_t nConsumedOnEntry = *pnConsumed;
18347 uint32_t nNeeded = 0U;
18348 nNeeded += 6;
18349 if (nNeeded > nBuf)
18350 return DOT11F_BUFFER_OVERFLOW;
18351 while (pSrc->present) {
18352 frameshtons(pCtx, pBuf, 4105, 1);
18353 pBuf += 2; *pnConsumed += 2;
18354 pTlvLen = pBuf;
18355 pBuf += 2; *pnConsumed += 2;
18356 frameshtons(pCtx, pBuf, pSrc->error, 1);
18357 *pnConsumed += 2;
18358 pBuf += 2;
18359 break;
18360 }
18361 (void)pCtx;
18362 if (pTlvLen) {
18363 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
18364 }
18365 return DOT11F_PARSE_SUCCESS;
18366} /* End dot11f_pack_tlv_configuration_error. */
18367
18368uint32_t dot11f_pack_tlv_device_name(tpAniSirGlobal pCtx,
18369 tDot11fTLVDeviceName *pSrc,
18370 uint8_t *pBuf,
18371 uint32_t nBuf,
18372 uint32_t *pnConsumed)
18373{
18374 uint8_t *pTlvLen = 0;
18375 uint32_t nConsumedOnEntry = *pnConsumed;
18376 uint32_t nNeeded = 0U;
18377 nNeeded += (pSrc->num_text + 4) ;
18378
18379 if (nNeeded > nBuf)
18380 return DOT11F_BUFFER_OVERFLOW;
18381 while (pSrc->present) {
18382 frameshtons(pCtx, pBuf, 4113, 1);
18383 pBuf += 2; *pnConsumed += 2;
18384 pTlvLen = pBuf;
18385 pBuf += 2; *pnConsumed += 2;
18386 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->text), pSrc->num_text);
18387 *pnConsumed += pSrc->num_text;
18388 pBuf += pSrc->num_text;
18389 break;
18390 }
18391 (void)pCtx;
18392 if (pTlvLen) {
18393 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
18394 }
18395 return DOT11F_PARSE_SUCCESS;
18396} /* End dot11f_pack_tlv_device_name. */
18397
18398uint32_t dot11f_pack_tlv_device_password_id(tpAniSirGlobal pCtx,
18399 tDot11fTLVDevicePasswordID *pSrc,
18400 uint8_t *pBuf,
18401 uint32_t nBuf,
18402 uint32_t *pnConsumed)
18403{
18404 uint8_t *pTlvLen = 0;
18405 uint32_t nConsumedOnEntry = *pnConsumed;
18406 uint32_t nNeeded = 0U;
18407 nNeeded += 6;
18408 if (nNeeded > nBuf)
18409 return DOT11F_BUFFER_OVERFLOW;
18410 while (pSrc->present) {
18411 frameshtons(pCtx, pBuf, 4114, 1);
18412 pBuf += 2; *pnConsumed += 2;
18413 pTlvLen = pBuf;
18414 pBuf += 2; *pnConsumed += 2;
18415 frameshtons(pCtx, pBuf, pSrc->id, 1);
18416 *pnConsumed += 2;
18417 pBuf += 2;
18418 break;
18419 }
18420 (void)pCtx;
18421 if (pTlvLen) {
18422 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
18423 }
18424 return DOT11F_PARSE_SUCCESS;
18425} /* End dot11f_pack_tlv_device_password_id. */
18426
18427uint32_t dot11f_pack_tlv_extended_listen_timing(tpAniSirGlobal pCtx,
18428 tDot11fTLVExtendedListenTiming *pSrc,
18429 uint8_t *pBuf,
18430 uint32_t nBuf,
18431 uint32_t *pnConsumed)
18432{
18433 uint8_t *pTlvLen = 0;
18434 uint32_t nConsumedOnEntry = *pnConsumed;
18435 uint32_t nNeeded = 0U;
18436 nNeeded += 7;
18437 if (nNeeded > nBuf)
18438 return DOT11F_BUFFER_OVERFLOW;
18439 while (pSrc->present) {
18440 *pBuf = 8;
18441 pBuf += 1; *pnConsumed += 1;
18442 pTlvLen = pBuf;
18443 pBuf += 2; *pnConsumed += 2;
18444 frameshtons(pCtx, pBuf, pSrc->availibilityPeriod, 0);
18445 *pnConsumed += 2;
18446 pBuf += 2;
18447 frameshtons(pCtx, pBuf, pSrc->availibilityInterval, 0);
18448 *pnConsumed += 2;
18449 pBuf += 2;
18450 break;
18451 }
18452 (void)pCtx;
18453 if (pTlvLen) {
18454 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 3, 0);
18455 }
18456 return DOT11F_PARSE_SUCCESS;
18457} /* End dot11f_pack_tlv_extended_listen_timing. */
18458
18459uint32_t dot11f_pack_tlv_listen_channel(tpAniSirGlobal pCtx,
18460 tDot11fTLVListenChannel *pSrc,
18461 uint8_t *pBuf,
18462 uint32_t nBuf,
18463 uint32_t *pnConsumed)
18464{
18465 uint8_t *pTlvLen = 0;
18466 uint32_t nConsumedOnEntry = *pnConsumed;
18467 uint32_t nNeeded = 0U;
18468 nNeeded += 8;
18469 if (nNeeded > nBuf)
18470 return DOT11F_BUFFER_OVERFLOW;
18471 while (pSrc->present) {
18472 *pBuf = 6;
18473 pBuf += 1; *pnConsumed += 1;
18474 pTlvLen = pBuf;
18475 pBuf += 2; *pnConsumed += 2;
18476 DOT11F_MEMCPY(pCtx, pBuf, pSrc->countryString, 3);
18477 *pnConsumed += 3;
18478 pBuf += 3;
18479 *pBuf = pSrc->regulatoryClass;
18480 *pnConsumed += 1;
18481 pBuf += 1;
18482 *pBuf = pSrc->channel;
18483 *pnConsumed += 1;
18484 pBuf += 1;
18485 break;
18486 }
18487 (void)pCtx;
18488 if (pTlvLen) {
18489 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 3, 0);
18490 }
18491 return DOT11F_PARSE_SUCCESS;
18492} /* End dot11f_pack_tlv_listen_channel. */
18493
18494uint32_t dot11f_pack_tlv_manufacturer(tpAniSirGlobal pCtx,
18495 tDot11fTLVManufacturer *pSrc,
18496 uint8_t *pBuf,
18497 uint32_t nBuf,
18498 uint32_t *pnConsumed)
18499{
18500 uint8_t *pTlvLen = 0;
18501 uint32_t nConsumedOnEntry = *pnConsumed;
18502 uint32_t nNeeded = 0U;
18503 nNeeded += (pSrc->num_name + 4) ;
18504
18505 if (nNeeded > nBuf)
18506 return DOT11F_BUFFER_OVERFLOW;
18507 while (pSrc->present) {
18508 frameshtons(pCtx, pBuf, 4129, 1);
18509 pBuf += 2; *pnConsumed += 2;
18510 pTlvLen = pBuf;
18511 pBuf += 2; *pnConsumed += 2;
18512 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->name), pSrc->num_name);
18513 *pnConsumed += pSrc->num_name;
18514 pBuf += pSrc->num_name;
18515 break;
18516 }
18517 (void)pCtx;
18518 if (pTlvLen) {
18519 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
18520 }
18521 return DOT11F_PARSE_SUCCESS;
18522} /* End dot11f_pack_tlv_manufacturer. */
18523
18524uint32_t dot11f_pack_tlv_minor_reason_code(tpAniSirGlobal pCtx,
18525 tDot11fTLVMinorReasonCode *pSrc,
18526 uint8_t *pBuf,
18527 uint32_t nBuf,
18528 uint32_t *pnConsumed)
18529{
18530 uint8_t *pTlvLen = 0;
18531 uint32_t nConsumedOnEntry = *pnConsumed;
18532 uint32_t nNeeded = 0U;
18533 nNeeded += 4;
18534 if (nNeeded > nBuf)
18535 return DOT11F_BUFFER_OVERFLOW;
18536 while (pSrc->present) {
18537 *pBuf = 1;
18538 pBuf += 1; *pnConsumed += 1;
18539 pTlvLen = pBuf;
18540 pBuf += 2; *pnConsumed += 2;
18541 *pBuf = pSrc->minorReasonCode;
18542 *pnConsumed += 1;
18543 pBuf += 1;
18544 break;
18545 }
18546 (void)pCtx;
18547 if (pTlvLen) {
18548 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 3, 0);
18549 }
18550 return DOT11F_PARSE_SUCCESS;
18551} /* End dot11f_pack_tlv_minor_reason_code. */
18552
18553uint32_t dot11f_pack_tlv_model_name(tpAniSirGlobal pCtx,
18554 tDot11fTLVModelName *pSrc,
18555 uint8_t *pBuf,
18556 uint32_t nBuf,
18557 uint32_t *pnConsumed)
18558{
18559 uint8_t *pTlvLen = 0;
18560 uint32_t nConsumedOnEntry = *pnConsumed;
18561 uint32_t nNeeded = 0U;
18562 nNeeded += (pSrc->num_text + 4) ;
18563
18564 if (nNeeded > nBuf)
18565 return DOT11F_BUFFER_OVERFLOW;
18566 while (pSrc->present) {
18567 frameshtons(pCtx, pBuf, 4131, 1);
18568 pBuf += 2; *pnConsumed += 2;
18569 pTlvLen = pBuf;
18570 pBuf += 2; *pnConsumed += 2;
18571 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->text), pSrc->num_text);
18572 *pnConsumed += pSrc->num_text;
18573 pBuf += pSrc->num_text;
18574 break;
18575 }
18576 (void)pCtx;
18577 if (pTlvLen) {
18578 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
18579 }
18580 return DOT11F_PARSE_SUCCESS;
18581} /* End dot11f_pack_tlv_model_name. */
18582
18583uint32_t dot11f_pack_tlv_model_number(tpAniSirGlobal pCtx,
18584 tDot11fTLVModelNumber *pSrc,
18585 uint8_t *pBuf,
18586 uint32_t nBuf,
18587 uint32_t *pnConsumed)
18588{
18589 uint8_t *pTlvLen = 0;
18590 uint32_t nConsumedOnEntry = *pnConsumed;
18591 uint32_t nNeeded = 0U;
18592 nNeeded += (pSrc->num_text + 4) ;
18593
18594 if (nNeeded > nBuf)
18595 return DOT11F_BUFFER_OVERFLOW;
18596 while (pSrc->present) {
18597 frameshtons(pCtx, pBuf, 4132, 1);
18598 pBuf += 2; *pnConsumed += 2;
18599 pTlvLen = pBuf;
18600 pBuf += 2; *pnConsumed += 2;
18601 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->text), pSrc->num_text);
18602 *pnConsumed += pSrc->num_text;
18603 pBuf += pSrc->num_text;
18604 break;
18605 }
18606 (void)pCtx;
18607 if (pTlvLen) {
18608 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
18609 }
18610 return DOT11F_PARSE_SUCCESS;
18611} /* End dot11f_pack_tlv_model_number. */
18612
18613uint32_t dot11f_pack_tlv_notice_of_absence(tpAniSirGlobal pCtx,
18614 tDot11fTLVNoticeOfAbsence *pSrc,
18615 uint8_t *pBuf,
18616 uint32_t nBuf,
18617 uint32_t *pnConsumed)
18618{
18619 uint8_t *pTlvLen = 0;
18620 uint32_t nConsumedOnEntry = *pnConsumed;
18621 uint32_t nNeeded = 0U;
18622 nNeeded += (pSrc->num_NoADesc + 5) ;
18623
18624 if (nNeeded > nBuf)
18625 return DOT11F_BUFFER_OVERFLOW;
18626 while (pSrc->present) {
18627 *pBuf = 12;
18628 pBuf += 1; *pnConsumed += 1;
18629 pTlvLen = pBuf;
18630 pBuf += 2; *pnConsumed += 2;
18631 *pBuf = pSrc->index;
18632 *pnConsumed += 1;
18633 pBuf += 1;
18634 *pBuf = pSrc->CTSWindowOppPS;
18635 *pnConsumed += 1;
18636 pBuf += 1;
18637 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->NoADesc), pSrc->num_NoADesc);
18638 *pnConsumed += pSrc->num_NoADesc;
18639 pBuf += pSrc->num_NoADesc;
18640 break;
18641 }
18642 (void)pCtx;
18643 if (pTlvLen) {
18644 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 3, 0);
18645 }
18646 return DOT11F_PARSE_SUCCESS;
18647} /* End dot11f_pack_tlv_notice_of_absence. */
18648
18649uint32_t dot11f_pack_tlv_operating_channel(tpAniSirGlobal pCtx,
18650 tDot11fTLVOperatingChannel *pSrc,
18651 uint8_t *pBuf,
18652 uint32_t nBuf,
18653 uint32_t *pnConsumed)
18654{
18655 uint8_t *pTlvLen = 0;
18656 uint32_t nConsumedOnEntry = *pnConsumed;
18657 uint32_t nNeeded = 0U;
18658 nNeeded += 8;
18659 if (nNeeded > nBuf)
18660 return DOT11F_BUFFER_OVERFLOW;
18661 while (pSrc->present) {
18662 *pBuf = 17;
18663 pBuf += 1; *pnConsumed += 1;
18664 pTlvLen = pBuf;
18665 pBuf += 2; *pnConsumed += 2;
18666 DOT11F_MEMCPY(pCtx, pBuf, pSrc->countryString, 3);
18667 *pnConsumed += 3;
18668 pBuf += 3;
18669 *pBuf = pSrc->regulatoryClass;
18670 *pnConsumed += 1;
18671 pBuf += 1;
18672 *pBuf = pSrc->channel;
18673 *pnConsumed += 1;
18674 pBuf += 1;
18675 break;
18676 }
18677 (void)pCtx;
18678 if (pTlvLen) {
18679 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 3, 0);
18680 }
18681 return DOT11F_PARSE_SUCCESS;
18682} /* End dot11f_pack_tlv_operating_channel. */
18683
18684uint32_t dot11f_pack_tlv_p2_p_capability(tpAniSirGlobal pCtx,
18685 tDot11fTLVP2PCapability *pSrc,
18686 uint8_t *pBuf,
18687 uint32_t nBuf,
18688 uint32_t *pnConsumed)
18689{
18690 uint8_t *pTlvLen = 0;
18691 uint32_t nConsumedOnEntry = *pnConsumed;
18692 uint32_t nNeeded = 0U;
18693 nNeeded += 5;
18694 if (nNeeded > nBuf)
18695 return DOT11F_BUFFER_OVERFLOW;
18696 while (pSrc->present) {
18697 *pBuf = 2;
18698 pBuf += 1; *pnConsumed += 1;
18699 pTlvLen = pBuf;
18700 pBuf += 2; *pnConsumed += 2;
18701 *pBuf = pSrc->deviceCapability;
18702 *pnConsumed += 1;
18703 pBuf += 1;
18704 *pBuf = pSrc->groupCapability;
18705 *pnConsumed += 1;
18706 pBuf += 1;
18707 break;
18708 }
18709 (void)pCtx;
18710 if (pTlvLen) {
18711 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 3, 0);
18712 }
18713 return DOT11F_PARSE_SUCCESS;
18714} /* End dot11f_pack_tlv_p2_p_capability. */
18715
18716uint32_t dot11f_pack_tlv_p2_p_device_id(tpAniSirGlobal pCtx,
18717 tDot11fTLVP2PDeviceId *pSrc,
18718 uint8_t *pBuf,
18719 uint32_t nBuf,
18720 uint32_t *pnConsumed)
18721{
18722 uint8_t *pTlvLen = 0;
18723 uint32_t nConsumedOnEntry = *pnConsumed;
18724 uint32_t nNeeded = 0U;
18725 nNeeded += 9;
18726 if (nNeeded > nBuf)
18727 return DOT11F_BUFFER_OVERFLOW;
18728 while (pSrc->present) {
18729 *pBuf = 3;
18730 pBuf += 1; *pnConsumed += 1;
18731 pTlvLen = pBuf;
18732 pBuf += 2; *pnConsumed += 2;
18733 DOT11F_MEMCPY(pCtx, pBuf, pSrc->P2PDeviceAddress, 6);
18734 *pnConsumed += 6;
18735 pBuf += 6;
18736 break;
18737 }
18738 (void)pCtx;
18739 if (pTlvLen) {
18740 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 3, 0);
18741 }
18742 return DOT11F_PARSE_SUCCESS;
18743} /* End dot11f_pack_tlv_p2_p_device_id. */
18744
18745uint32_t dot11f_pack_tlv_p2_p_device_info(tpAniSirGlobal pCtx,
18746 tDot11fTLVP2PDeviceInfo *pSrc,
18747 uint8_t *pBuf,
18748 uint32_t nBuf,
18749 uint32_t *pnConsumed)
18750{
18751 uint8_t *pTlvLen = 0;
18752 uint32_t nConsumedOnEntry = *pnConsumed;
18753 uint32_t status = DOT11F_PARSE_SUCCESS;
18754 uint32_t nNeeded = 0U;
18755 uint32_t idx = 0;
18756 nNeeded += 19;
18757 if (nNeeded > nBuf)
18758 return DOT11F_BUFFER_OVERFLOW;
18759 while (pSrc->present) {
18760 *pBuf = 13;
18761 pBuf += 1; nBuf -= 1; *pnConsumed += 1;
18762 pTlvLen = pBuf;
18763 pBuf += 2; nBuf -= 2; *pnConsumed += 2;
18764 DOT11F_MEMCPY(pCtx, pBuf, pSrc->P2PDeviceAddress, 6);
18765 *pnConsumed += 6;
18766 pBuf += 6;
18767 frameshtons(pCtx, pBuf, pSrc->configMethod, 1);
18768 *pnConsumed += 2;
18769 pBuf += 2;
18770 DOT11F_MEMCPY(pCtx, pBuf, pSrc->primaryDeviceType, 8);
18771 *pnConsumed += 8;
18772 pBuf += 8;
18773 status |= pack_tlv_core(pCtx,
18774 (uint8_t *)pSrc,
18775 pBuf,
18776 nBuf,
18777 pnConsumed,
18778 TLVS_P2PDeviceInfo, &idx);
18779 break;
18780 }
18781 (void)pCtx;
18782 if (pTlvLen) {
18783 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 3, 0);
18784 }
18785 return status;
18786} /* End dot11f_pack_tlv_p2_p_device_info. */
18787
18788uint32_t dot11f_pack_tlv_p2_p_group_info(tpAniSirGlobal pCtx,
18789 tDot11fTLVP2PGroupInfo *pSrc,
18790 uint8_t *pBuf,
18791 uint32_t nBuf,
18792 uint32_t *pnConsumed)
18793{
18794 uint8_t *pTlvLen = 0;
18795 uint32_t nConsumedOnEntry = *pnConsumed;
18796 uint32_t nNeeded = 0U;
18797 nNeeded += (pSrc->num_P2PClientInfoDesc + 3) ;
18798
18799 if (nNeeded > nBuf)
18800 return DOT11F_BUFFER_OVERFLOW;
18801 while (pSrc->present) {
18802 *pBuf = 14;
18803 pBuf += 1; *pnConsumed += 1;
18804 pTlvLen = pBuf;
18805 pBuf += 2; *pnConsumed += 2;
18806 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->P2PClientInfoDesc), pSrc->num_P2PClientInfoDesc);
18807 *pnConsumed += pSrc->num_P2PClientInfoDesc;
18808 pBuf += pSrc->num_P2PClientInfoDesc;
18809 break;
18810 }
18811 (void)pCtx;
18812 if (pTlvLen) {
18813 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 3, 0);
18814 }
18815 return DOT11F_PARSE_SUCCESS;
18816} /* End dot11f_pack_tlv_p2_p_group_info. */
18817
18818uint32_t dot11f_pack_tlv_p2_p_status(tpAniSirGlobal pCtx,
18819 tDot11fTLVP2PStatus *pSrc,
18820 uint8_t *pBuf,
18821 uint32_t nBuf,
18822 uint32_t *pnConsumed)
18823{
18824 uint8_t *pTlvLen = 0;
18825 uint32_t nConsumedOnEntry = *pnConsumed;
18826 uint32_t nNeeded = 0U;
18827 nNeeded += 4;
18828 if (nNeeded > nBuf)
18829 return DOT11F_BUFFER_OVERFLOW;
18830 while (pSrc->present) {
18831 *pBuf = 0;
18832 pBuf += 1; *pnConsumed += 1;
18833 pTlvLen = pBuf;
18834 pBuf += 2; *pnConsumed += 2;
18835 *pBuf = pSrc->status;
18836 *pnConsumed += 1;
18837 pBuf += 1;
18838 break;
18839 }
18840 (void)pCtx;
18841 if (pTlvLen) {
18842 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 3, 0);
18843 }
18844 return DOT11F_PARSE_SUCCESS;
18845} /* End dot11f_pack_tlv_p2_p_status. */
18846
18847uint32_t dot11f_pack_tlv_primary_device_type(tpAniSirGlobal pCtx,
18848 tDot11fTLVPrimaryDeviceType *pSrc,
18849 uint8_t *pBuf,
18850 uint32_t nBuf,
18851 uint32_t *pnConsumed)
18852{
18853 uint8_t *pTlvLen = 0;
18854 uint32_t nConsumedOnEntry = *pnConsumed;
18855 uint32_t nNeeded = 0U;
18856 nNeeded += 12;
18857 if (nNeeded > nBuf)
18858 return DOT11F_BUFFER_OVERFLOW;
18859 while (pSrc->present) {
18860 frameshtons(pCtx, pBuf, 4180, 1);
18861 pBuf += 2; *pnConsumed += 2;
18862 pTlvLen = pBuf;
18863 pBuf += 2; *pnConsumed += 2;
18864 frameshtons(pCtx, pBuf, pSrc->primary_category, 1);
18865 *pnConsumed += 2;
18866 pBuf += 2;
18867 DOT11F_MEMCPY(pCtx, pBuf, pSrc->oui, 4);
18868 *pnConsumed += 4;
18869 pBuf += 4;
18870 frameshtons(pCtx, pBuf, pSrc->sub_category, 1);
18871 *pnConsumed += 2;
18872 pBuf += 2;
18873 break;
18874 }
18875 (void)pCtx;
18876 if (pTlvLen) {
18877 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
18878 }
18879 return DOT11F_PARSE_SUCCESS;
18880} /* End dot11f_pack_tlv_primary_device_type. */
18881
18882uint32_t dot11f_pack_tlv_rf_bands(tpAniSirGlobal pCtx,
18883 tDot11fTLVRFBands *pSrc,
18884 uint8_t *pBuf,
18885 uint32_t nBuf,
18886 uint32_t *pnConsumed)
18887{
18888 uint8_t *pTlvLen = 0;
18889 uint32_t nConsumedOnEntry = *pnConsumed;
18890 uint32_t nNeeded = 0U;
18891 nNeeded += 5;
18892 if (nNeeded > nBuf)
18893 return DOT11F_BUFFER_OVERFLOW;
18894 while (pSrc->present) {
18895 frameshtons(pCtx, pBuf, 4156, 1);
18896 pBuf += 2; *pnConsumed += 2;
18897 pTlvLen = pBuf;
18898 pBuf += 2; *pnConsumed += 2;
18899 *pBuf = pSrc->bands;
18900 *pnConsumed += 1;
18901 pBuf += 1;
18902 break;
18903 }
18904 (void)pCtx;
18905 if (pTlvLen) {
18906 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
18907 }
18908 return DOT11F_PARSE_SUCCESS;
18909} /* End dot11f_pack_tlv_rf_bands. */
18910
18911uint32_t dot11f_pack_tlv_request_device_type(tpAniSirGlobal pCtx,
18912 tDot11fTLVRequestDeviceType *pSrc,
18913 uint8_t *pBuf,
18914 uint32_t nBuf,
18915 uint32_t *pnConsumed)
18916{
18917 uint8_t *pTlvLen = 0;
18918 uint32_t nConsumedOnEntry = *pnConsumed;
18919 uint32_t nNeeded = 0U;
18920 nNeeded += 12;
18921 if (nNeeded > nBuf)
18922 return DOT11F_BUFFER_OVERFLOW;
18923 while (pSrc->present) {
18924 frameshtons(pCtx, pBuf, 4202, 1);
18925 pBuf += 2; *pnConsumed += 2;
18926 pTlvLen = pBuf;
18927 pBuf += 2; *pnConsumed += 2;
18928 frameshtons(pCtx, pBuf, pSrc->primary_category, 1);
18929 *pnConsumed += 2;
18930 pBuf += 2;
18931 DOT11F_MEMCPY(pCtx, pBuf, pSrc->oui, 4);
18932 *pnConsumed += 4;
18933 pBuf += 4;
18934 frameshtons(pCtx, pBuf, pSrc->sub_category, 1);
18935 *pnConsumed += 2;
18936 pBuf += 2;
18937 break;
18938 }
18939 (void)pCtx;
18940 if (pTlvLen) {
18941 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
18942 }
18943 return DOT11F_PARSE_SUCCESS;
18944} /* End dot11f_pack_tlv_request_device_type. */
18945
18946uint32_t dot11f_pack_tlv_request_type(tpAniSirGlobal pCtx,
18947 tDot11fTLVRequestType *pSrc,
18948 uint8_t *pBuf,
18949 uint32_t nBuf,
18950 uint32_t *pnConsumed)
18951{
18952 uint8_t *pTlvLen = 0;
18953 uint32_t nConsumedOnEntry = *pnConsumed;
18954 uint32_t nNeeded = 0U;
18955 nNeeded += 5;
18956 if (nNeeded > nBuf)
18957 return DOT11F_BUFFER_OVERFLOW;
18958 while (pSrc->present) {
18959 frameshtons(pCtx, pBuf, 4154, 1);
18960 pBuf += 2; *pnConsumed += 2;
18961 pTlvLen = pBuf;
18962 pBuf += 2; *pnConsumed += 2;
18963 *pBuf = pSrc->reqType;
18964 *pnConsumed += 1;
18965 pBuf += 1;
18966 break;
18967 }
18968 (void)pCtx;
18969 if (pTlvLen) {
18970 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
18971 }
18972 return DOT11F_PARSE_SUCCESS;
18973} /* End dot11f_pack_tlv_request_type. */
18974
18975uint32_t dot11f_pack_tlv_response_type(tpAniSirGlobal pCtx,
18976 tDot11fTLVResponseType *pSrc,
18977 uint8_t *pBuf,
18978 uint32_t nBuf,
18979 uint32_t *pnConsumed)
18980{
18981 uint8_t *pTlvLen = 0;
18982 uint32_t nConsumedOnEntry = *pnConsumed;
18983 uint32_t nNeeded = 0U;
18984 nNeeded += 5;
18985 if (nNeeded > nBuf)
18986 return DOT11F_BUFFER_OVERFLOW;
18987 while (pSrc->present) {
18988 frameshtons(pCtx, pBuf, 4155, 1);
18989 pBuf += 2; *pnConsumed += 2;
18990 pTlvLen = pBuf;
18991 pBuf += 2; *pnConsumed += 2;
18992 *pBuf = pSrc->resType;
18993 *pnConsumed += 1;
18994 pBuf += 1;
18995 break;
18996 }
18997 (void)pCtx;
18998 if (pTlvLen) {
18999 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
19000 }
19001 return DOT11F_PARSE_SUCCESS;
19002} /* End dot11f_pack_tlv_response_type. */
19003
19004uint32_t dot11f_pack_tlv_selected_registrar(tpAniSirGlobal pCtx,
19005 tDot11fTLVSelectedRegistrar *pSrc,
19006 uint8_t *pBuf,
19007 uint32_t nBuf,
19008 uint32_t *pnConsumed)
19009{
19010 uint8_t *pTlvLen = 0;
19011 uint32_t nConsumedOnEntry = *pnConsumed;
19012 uint32_t nNeeded = 0U;
19013 nNeeded += 5;
19014 if (nNeeded > nBuf)
19015 return DOT11F_BUFFER_OVERFLOW;
19016 while (pSrc->present) {
19017 frameshtons(pCtx, pBuf, 4161, 1);
19018 pBuf += 2; *pnConsumed += 2;
19019 pTlvLen = pBuf;
19020 pBuf += 2; *pnConsumed += 2;
19021 *pBuf = pSrc->selected;
19022 *pnConsumed += 1;
19023 pBuf += 1;
19024 break;
19025 }
19026 (void)pCtx;
19027 if (pTlvLen) {
19028 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
19029 }
19030 return DOT11F_PARSE_SUCCESS;
19031} /* End dot11f_pack_tlv_selected_registrar. */
19032
19033uint32_t dot11f_pack_tlv_selected_registrar_config_methods(tpAniSirGlobal pCtx,
19034 tDot11fTLVSelectedRegistrarConfigMethods *pSrc,
19035 uint8_t *pBuf,
19036 uint32_t nBuf,
19037 uint32_t *pnConsumed)
19038{
19039 uint8_t *pTlvLen = 0;
19040 uint32_t nConsumedOnEntry = *pnConsumed;
19041 uint32_t nNeeded = 0U;
19042 nNeeded += 6;
19043 if (nNeeded > nBuf)
19044 return DOT11F_BUFFER_OVERFLOW;
19045 while (pSrc->present) {
19046 frameshtons(pCtx, pBuf, 4179, 1);
19047 pBuf += 2; *pnConsumed += 2;
19048 pTlvLen = pBuf;
19049 pBuf += 2; *pnConsumed += 2;
19050 frameshtons(pCtx, pBuf, pSrc->methods, 1);
19051 *pnConsumed += 2;
19052 pBuf += 2;
19053 break;
19054 }
19055 (void)pCtx;
19056 if (pTlvLen) {
19057 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
19058 }
19059 return DOT11F_PARSE_SUCCESS;
19060} /* End dot11f_pack_tlv_selected_registrar_config_methods. */
19061
19062uint32_t dot11f_pack_tlv_serial_number(tpAniSirGlobal pCtx,
19063 tDot11fTLVSerialNumber *pSrc,
19064 uint8_t *pBuf,
19065 uint32_t nBuf,
19066 uint32_t *pnConsumed)
19067{
19068 uint8_t *pTlvLen = 0;
19069 uint32_t nConsumedOnEntry = *pnConsumed;
19070 uint32_t nNeeded = 0U;
19071 nNeeded += (pSrc->num_text + 4) ;
19072
19073 if (nNeeded > nBuf)
19074 return DOT11F_BUFFER_OVERFLOW;
19075 while (pSrc->present) {
19076 frameshtons(pCtx, pBuf, 4162, 1);
19077 pBuf += 2; *pnConsumed += 2;
19078 pTlvLen = pBuf;
19079 pBuf += 2; *pnConsumed += 2;
19080 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->text), pSrc->num_text);
19081 *pnConsumed += pSrc->num_text;
19082 pBuf += pSrc->num_text;
19083 break;
19084 }
19085 (void)pCtx;
19086 if (pTlvLen) {
19087 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
19088 }
19089 return DOT11F_PARSE_SUCCESS;
19090} /* End dot11f_pack_tlv_serial_number. */
19091
19092uint32_t dot11f_pack_tlv_uuid_e(tpAniSirGlobal pCtx,
19093 tDot11fTLVUUID_E *pSrc,
19094 uint8_t *pBuf,
19095 uint32_t nBuf,
19096 uint32_t *pnConsumed)
19097{
19098 uint8_t *pTlvLen = 0;
19099 uint32_t nConsumedOnEntry = *pnConsumed;
19100 uint32_t nNeeded = 0U;
19101 nNeeded += 20;
19102 if (nNeeded > nBuf)
19103 return DOT11F_BUFFER_OVERFLOW;
19104 while (pSrc->present) {
19105 frameshtons(pCtx, pBuf, 4167, 1);
19106 pBuf += 2; *pnConsumed += 2;
19107 pTlvLen = pBuf;
19108 pBuf += 2; *pnConsumed += 2;
19109 DOT11F_MEMCPY(pCtx, pBuf, pSrc->uuid, 16);
19110 *pnConsumed += 16;
19111 pBuf += 16;
19112 break;
19113 }
19114 (void)pCtx;
19115 if (pTlvLen) {
19116 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
19117 }
19118 return DOT11F_PARSE_SUCCESS;
19119} /* End dot11f_pack_tlv_uuid_e. */
19120
19121uint32_t dot11f_pack_tlv_uuid_r(tpAniSirGlobal pCtx,
19122 tDot11fTLVUUID_R *pSrc,
19123 uint8_t *pBuf,
19124 uint32_t nBuf,
19125 uint32_t *pnConsumed)
19126{
19127 uint8_t *pTlvLen = 0;
19128 uint32_t nConsumedOnEntry = *pnConsumed;
19129 uint32_t nNeeded = 0U;
19130 nNeeded += 20;
19131 if (nNeeded > nBuf)
19132 return DOT11F_BUFFER_OVERFLOW;
19133 while (pSrc->present) {
19134 frameshtons(pCtx, pBuf, 4168, 1);
19135 pBuf += 2; *pnConsumed += 2;
19136 pTlvLen = pBuf;
19137 pBuf += 2; *pnConsumed += 2;
19138 DOT11F_MEMCPY(pCtx, pBuf, pSrc->uuid, 16);
19139 *pnConsumed += 16;
19140 pBuf += 16;
19141 break;
19142 }
19143 (void)pCtx;
19144 if (pTlvLen) {
19145 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
19146 }
19147 return DOT11F_PARSE_SUCCESS;
19148} /* End dot11f_pack_tlv_uuid_r. */
19149
19150uint32_t dot11f_pack_tlv_vendor_extension(tpAniSirGlobal pCtx,
19151 tDot11fTLVVendorExtension *pSrc,
19152 uint8_t *pBuf,
19153 uint32_t nBuf,
19154 uint32_t *pnConsumed)
19155{
19156 uint8_t *pTlvLen = 0;
19157 uint32_t nConsumedOnEntry = *pnConsumed;
19158 uint32_t status = DOT11F_PARSE_SUCCESS;
19159 uint32_t nNeeded = 0U;
19160 uint32_t idx = 0;
19161 nNeeded += 7;
19162 if (nNeeded > nBuf)
19163 return DOT11F_BUFFER_OVERFLOW;
19164 while (pSrc->present) {
19165 frameshtons(pCtx, pBuf, 4169, 1);
19166 pBuf += 2; nBuf -= 2; *pnConsumed += 2;
19167 pTlvLen = pBuf;
19168 pBuf += 2; nBuf -= 2; *pnConsumed += 2;
19169 DOT11F_MEMCPY(pCtx, pBuf, pSrc->vendorId, 3);
19170 *pnConsumed += 3;
19171 pBuf += 3;
19172 status |= pack_tlv_core(pCtx,
19173 (uint8_t *)pSrc,
19174 pBuf,
19175 nBuf,
19176 pnConsumed,
19177 TLVS_VendorExtension, &idx);
19178 break;
19179 }
19180 (void)pCtx;
19181 if (pTlvLen) {
19182 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
19183 }
19184 return status;
19185} /* End dot11f_pack_tlv_vendor_extension. */
19186
19187uint32_t dot11f_pack_tlv_version(tpAniSirGlobal pCtx,
19188 tDot11fTLVVersion *pSrc,
19189 uint8_t *pBuf,
19190 uint32_t nBuf,
19191 uint32_t *pnConsumed)
19192{
19193 uint8_t *pTlvLen = 0;
19194 uint32_t nConsumedOnEntry = *pnConsumed;
19195 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070019196 uint8_t tmp104__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080019197 nNeeded += 5;
19198 if (nNeeded > nBuf)
19199 return DOT11F_BUFFER_OVERFLOW;
19200 while (pSrc->present) {
19201 frameshtons(pCtx, pBuf, 4170, 1);
19202 pBuf += 2; *pnConsumed += 2;
19203 pTlvLen = pBuf;
19204 pBuf += 2; *pnConsumed += 2;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070019205 tmp104__ = 0U;
19206 tmp104__ |= (pSrc->minor << 0);
19207 tmp104__ |= (pSrc->major << 4);
Naveen Rawat69623ef2018-04-27 16:11:01 -070019208 if (unlikely(nBuf < 1))
19209 return DOT11F_INCOMPLETE_IE;
19210
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070019211 *pBuf = tmp104__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080019212 *pnConsumed += 1;
19213 pBuf += 1;
19214 nBuf -= 1 ;
19215 break;
19216 }
19217 (void)pCtx;
19218 if (pTlvLen) {
19219 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
19220 }
19221 return DOT11F_PARSE_SUCCESS;
19222} /* End dot11f_pack_tlv_version. */
19223
19224uint32_t dot11f_pack_tlv_wps_state(tpAniSirGlobal pCtx,
19225 tDot11fTLVWPSState *pSrc,
19226 uint8_t *pBuf,
19227 uint32_t nBuf,
19228 uint32_t *pnConsumed)
19229{
19230 uint8_t *pTlvLen = 0;
19231 uint32_t nConsumedOnEntry = *pnConsumed;
19232 uint32_t nNeeded = 0U;
19233 nNeeded += 5;
19234 if (nNeeded > nBuf)
19235 return DOT11F_BUFFER_OVERFLOW;
19236 while (pSrc->present) {
19237 frameshtons(pCtx, pBuf, 4164, 1);
19238 pBuf += 2; *pnConsumed += 2;
19239 pTlvLen = pBuf;
19240 pBuf += 2; *pnConsumed += 2;
19241 *pBuf = pSrc->state;
19242 *pnConsumed += 1;
19243 pBuf += 1;
19244 break;
19245 }
19246 (void)pCtx;
19247 if (pTlvLen) {
19248 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 4, 1);
19249 }
19250 return DOT11F_PARSE_SUCCESS;
19251} /* End dot11f_pack_tlv_wps_state. */
19252
Abhishek Singh951eed82017-07-06 16:53:19 +053019253uint32_t dot11f_pack_tlv_assoc_disallowed(tpAniSirGlobal pCtx,
19254 tDot11fTLVassoc_disallowed *pSrc,
19255 uint8_t *pBuf,
19256 uint32_t nBuf,
19257 uint32_t *pnConsumed)
19258{
19259 uint8_t *pTlvLen = 0;
19260 uint32_t nConsumedOnEntry = *pnConsumed;
19261 uint32_t nNeeded = 0U;
19262 nNeeded += 3;
19263 if (nNeeded > nBuf)
19264 return DOT11F_BUFFER_OVERFLOW;
19265 while (pSrc->present) {
19266 *pBuf = 4;
19267 pBuf += 1; *pnConsumed += 1;
19268 pTlvLen = pBuf;
19269 pBuf += 1; *pnConsumed += 1;
19270 *pBuf = pSrc->reason_code;
19271 *pnConsumed += 1;
19272 pBuf += 1;
19273 break;
19274 }
19275 (void)pCtx;
19276 if (pTlvLen) {
19277 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
19278 }
19279 return DOT11F_PARSE_SUCCESS;
19280} /* End dot11f_pack_tlv_assoc_disallowed. */
19281
19282uint32_t dot11f_pack_tlv_assoc_retry_delay(tpAniSirGlobal pCtx,
19283 tDot11fTLVassoc_retry_delay *pSrc,
19284 uint8_t *pBuf,
19285 uint32_t nBuf,
19286 uint32_t *pnConsumed)
19287{
19288 uint8_t *pTlvLen = 0;
19289 uint32_t nConsumedOnEntry = *pnConsumed;
19290 uint32_t nNeeded = 0U;
19291 nNeeded += 4;
19292 if (nNeeded > nBuf)
19293 return DOT11F_BUFFER_OVERFLOW;
19294 while (pSrc->present) {
19295 *pBuf = 8;
19296 pBuf += 1; *pnConsumed += 1;
19297 pTlvLen = pBuf;
19298 pBuf += 1; *pnConsumed += 1;
19299 frameshtons(pCtx, pBuf, pSrc->delay, 0);
19300 *pnConsumed += 2;
19301 pBuf += 2;
19302 break;
19303 }
19304 (void)pCtx;
19305 if (pTlvLen) {
19306 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
19307 }
19308 return DOT11F_PARSE_SUCCESS;
19309} /* End dot11f_pack_tlv_assoc_retry_delay. */
19310
19311uint32_t dot11f_pack_tlv_cellular_data_cap(tpAniSirGlobal pCtx,
19312 tDot11fTLVcellular_data_cap *pSrc,
19313 uint8_t *pBuf,
19314 uint32_t nBuf,
19315 uint32_t *pnConsumed)
19316{
19317 uint8_t *pTlvLen = 0;
19318 uint32_t nConsumedOnEntry = *pnConsumed;
19319 uint32_t nNeeded = 0U;
19320 nNeeded += 3;
19321 if (nNeeded > nBuf)
19322 return DOT11F_BUFFER_OVERFLOW;
19323 while (pSrc->present) {
19324 *pBuf = 3;
19325 pBuf += 1; *pnConsumed += 1;
19326 pTlvLen = pBuf;
19327 pBuf += 1; *pnConsumed += 1;
19328 *pBuf = pSrc->cellular_connectivity;
19329 *pnConsumed += 1;
19330 pBuf += 1;
19331 break;
19332 }
19333 (void)pCtx;
19334 if (pTlvLen) {
19335 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
19336 }
19337 return DOT11F_PARSE_SUCCESS;
19338} /* End dot11f_pack_tlv_cellular_data_cap. */
19339
19340uint32_t dot11f_pack_tlv_cellular_data_con_pref(tpAniSirGlobal pCtx,
19341 tDot11fTLVcellular_data_con_pref *pSrc,
19342 uint8_t *pBuf,
19343 uint32_t nBuf,
19344 uint32_t *pnConsumed)
19345{
19346 uint8_t *pTlvLen = 0;
19347 uint32_t nConsumedOnEntry = *pnConsumed;
19348 uint32_t nNeeded = 0U;
19349 nNeeded += 3;
19350 if (nNeeded > nBuf)
19351 return DOT11F_BUFFER_OVERFLOW;
19352 while (pSrc->present) {
19353 *pBuf = 5;
19354 pBuf += 1; *pnConsumed += 1;
19355 pTlvLen = pBuf;
19356 pBuf += 1; *pnConsumed += 1;
19357 *pBuf = pSrc->cellular_preference;
19358 *pnConsumed += 1;
19359 pBuf += 1;
19360 break;
19361 }
19362 (void)pCtx;
19363 if (pTlvLen) {
19364 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
19365 }
19366 return DOT11F_PARSE_SUCCESS;
19367} /* End dot11f_pack_tlv_cellular_data_con_pref. */
19368
19369uint32_t dot11f_pack_tlv_mbo_ap_cap(tpAniSirGlobal pCtx,
19370 tDot11fTLVmbo_ap_cap *pSrc,
19371 uint8_t *pBuf,
19372 uint32_t nBuf,
19373 uint32_t *pnConsumed)
19374{
19375 uint8_t *pTlvLen = 0;
19376 uint32_t nConsumedOnEntry = *pnConsumed;
19377 uint32_t nNeeded = 0U;
19378 nNeeded += 3;
19379 if (nNeeded > nBuf)
19380 return DOT11F_BUFFER_OVERFLOW;
19381 while (pSrc->present) {
19382 *pBuf = 1;
19383 pBuf += 1; *pnConsumed += 1;
19384 pTlvLen = pBuf;
19385 pBuf += 1; *pnConsumed += 1;
19386 *pBuf = pSrc->mbo_cap_ind;
19387 *pnConsumed += 1;
19388 pBuf += 1;
19389 break;
19390 }
19391 (void)pCtx;
19392 if (pTlvLen) {
19393 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
19394 }
19395 return DOT11F_PARSE_SUCCESS;
19396} /* End dot11f_pack_tlv_mbo_ap_cap. */
19397
19398uint32_t dot11f_pack_tlv_non_prefferd_chan_rep(tpAniSirGlobal pCtx,
19399 tDot11fTLVnon_prefferd_chan_rep *pSrc,
19400 uint8_t *pBuf,
19401 uint32_t nBuf,
19402 uint32_t *pnConsumed)
19403{
19404 uint8_t *pTlvLen = 0;
19405 uint32_t nConsumedOnEntry = *pnConsumed;
19406 uint32_t nNeeded = 0U;
19407 nNeeded += (pSrc->num_channel_report + 3) ;
19408
19409 if (nNeeded > nBuf)
19410 return DOT11F_BUFFER_OVERFLOW;
19411 while (pSrc->present) {
19412 *pBuf = 2;
19413 pBuf += 1; *pnConsumed += 1;
19414 pTlvLen = pBuf;
19415 pBuf += 1; *pnConsumed += 1;
19416 *pBuf = pSrc->oper_class;
19417 *pnConsumed += 1;
19418 pBuf += 1;
19419 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->channel_report), pSrc->num_channel_report);
19420 *pnConsumed += pSrc->num_channel_report;
19421 pBuf += pSrc->num_channel_report;
19422 break;
19423 }
19424 (void)pCtx;
19425 if (pTlvLen) {
19426 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
19427 }
19428 return DOT11F_PARSE_SUCCESS;
19429} /* End dot11f_pack_tlv_non_prefferd_chan_rep. */
19430
19431uint32_t dot11f_pack_tlv_oce_cap(tpAniSirGlobal pCtx,
19432 tDot11fTLVoce_cap *pSrc,
19433 uint8_t *pBuf,
19434 uint32_t nBuf,
19435 uint32_t *pnConsumed)
19436{
19437 uint8_t *pTlvLen = 0;
19438 uint32_t nConsumedOnEntry = *pnConsumed;
19439 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070019440 uint8_t tmp105__;
Abhishek Singh951eed82017-07-06 16:53:19 +053019441 nNeeded += 3;
19442 if (nNeeded > nBuf)
19443 return DOT11F_BUFFER_OVERFLOW;
19444 while (pSrc->present) {
19445 *pBuf = 101;
19446 pBuf += 1; *pnConsumed += 1;
19447 pTlvLen = pBuf;
19448 pBuf += 1; *pnConsumed += 1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070019449 tmp105__ = 0U;
19450 tmp105__ |= (pSrc->oce_release << 0);
19451 tmp105__ |= (pSrc->is_sta_cfon << 3);
19452 tmp105__ |= (pSrc->non_oce_ap_present << 4);
19453 tmp105__ |= (pSrc->reserved << 5);
Naveen Rawat69623ef2018-04-27 16:11:01 -070019454 if (unlikely(nBuf < 1))
19455 return DOT11F_INCOMPLETE_IE;
19456
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070019457 *pBuf = tmp105__;
Abhishek Singh951eed82017-07-06 16:53:19 +053019458 *pnConsumed += 1;
19459 pBuf += 1;
19460 nBuf -= 1 ;
19461 break;
19462 }
19463 (void)pCtx;
19464 if (pTlvLen) {
19465 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
19466 }
19467 return DOT11F_PARSE_SUCCESS;
19468} /* End dot11f_pack_tlv_oce_cap. */
19469
19470uint32_t dot11f_pack_tlv_reduced_wan_metrics(tpAniSirGlobal pCtx,
19471 tDot11fTLVreduced_wan_metrics *pSrc,
19472 uint8_t *pBuf,
19473 uint32_t nBuf,
19474 uint32_t *pnConsumed)
19475{
19476 uint8_t *pTlvLen = 0;
19477 uint32_t nConsumedOnEntry = *pnConsumed;
19478 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070019479 uint8_t tmp106__;
Abhishek Singh951eed82017-07-06 16:53:19 +053019480 nNeeded += 3;
19481 if (nNeeded > nBuf)
19482 return DOT11F_BUFFER_OVERFLOW;
19483 while (pSrc->present) {
19484 *pBuf = 103;
19485 pBuf += 1; *pnConsumed += 1;
19486 pTlvLen = pBuf;
19487 pBuf += 1; *pnConsumed += 1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070019488 tmp106__ = 0U;
19489 tmp106__ |= (pSrc->downlink_av_cap << 0);
19490 tmp106__ |= (pSrc->uplink_av_cap << 4);
Naveen Rawat69623ef2018-04-27 16:11:01 -070019491 if (unlikely(nBuf < 1))
19492 return DOT11F_INCOMPLETE_IE;
19493
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070019494 *pBuf = tmp106__;
Abhishek Singh951eed82017-07-06 16:53:19 +053019495 *pnConsumed += 1;
19496 pBuf += 1;
19497 nBuf -= 1 ;
19498 break;
19499 }
19500 (void)pCtx;
19501 if (pTlvLen) {
19502 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
19503 }
19504 return DOT11F_PARSE_SUCCESS;
19505} /* End dot11f_pack_tlv_reduced_wan_metrics. */
19506
19507uint32_t dot11f_pack_tlv_rssi_assoc_rej(tpAniSirGlobal pCtx,
19508 tDot11fTLVrssi_assoc_rej *pSrc,
19509 uint8_t *pBuf,
19510 uint32_t nBuf,
19511 uint32_t *pnConsumed)
19512{
19513 uint8_t *pTlvLen = 0;
19514 uint32_t nConsumedOnEntry = *pnConsumed;
19515 uint32_t nNeeded = 0U;
19516 nNeeded += 4;
19517 if (nNeeded > nBuf)
19518 return DOT11F_BUFFER_OVERFLOW;
19519 while (pSrc->present) {
19520 *pBuf = 102;
19521 pBuf += 1; *pnConsumed += 1;
19522 pTlvLen = pBuf;
19523 pBuf += 1; *pnConsumed += 1;
19524 *pBuf = pSrc->delta_rssi;
19525 *pnConsumed += 1;
19526 pBuf += 1;
19527 *pBuf = pSrc->retry_delay;
19528 *pnConsumed += 1;
19529 pBuf += 1;
19530 break;
19531 }
19532 (void)pCtx;
19533 if (pTlvLen) {
19534 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
19535 }
19536 return DOT11F_PARSE_SUCCESS;
19537} /* End dot11f_pack_tlv_rssi_assoc_rej. */
19538
19539uint32_t dot11f_pack_tlv_transition_reason(tpAniSirGlobal pCtx,
19540 tDot11fTLVtransition_reason *pSrc,
19541 uint8_t *pBuf,
19542 uint32_t nBuf,
19543 uint32_t *pnConsumed)
19544{
19545 uint8_t *pTlvLen = 0;
19546 uint32_t nConsumedOnEntry = *pnConsumed;
19547 uint32_t nNeeded = 0U;
19548 nNeeded += 3;
19549 if (nNeeded > nBuf)
19550 return DOT11F_BUFFER_OVERFLOW;
19551 while (pSrc->present) {
19552 *pBuf = 6;
19553 pBuf += 1; *pnConsumed += 1;
19554 pTlvLen = pBuf;
19555 pBuf += 1; *pnConsumed += 1;
19556 *pBuf = pSrc->transition_reason_code;
19557 *pnConsumed += 1;
19558 pBuf += 1;
19559 break;
19560 }
19561 (void)pCtx;
19562 if (pTlvLen) {
19563 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
19564 }
19565 return DOT11F_PARSE_SUCCESS;
19566} /* End dot11f_pack_tlv_transition_reason. */
19567
19568uint32_t dot11f_pack_tlv_transition_reject_reason(tpAniSirGlobal pCtx,
19569 tDot11fTLVtransition_reject_reason *pSrc,
19570 uint8_t *pBuf,
19571 uint32_t nBuf,
19572 uint32_t *pnConsumed)
19573{
19574 uint8_t *pTlvLen = 0;
19575 uint32_t nConsumedOnEntry = *pnConsumed;
19576 uint32_t nNeeded = 0U;
19577 nNeeded += 3;
19578 if (nNeeded > nBuf)
19579 return DOT11F_BUFFER_OVERFLOW;
19580 while (pSrc->present) {
19581 *pBuf = 7;
19582 pBuf += 1; *pnConsumed += 1;
19583 pTlvLen = pBuf;
19584 pBuf += 1; *pnConsumed += 1;
19585 *pBuf = pSrc->transition_reject_code;
19586 *pnConsumed += 1;
19587 pBuf += 1;
19588 break;
19589 }
19590 (void)pCtx;
19591 if (pTlvLen) {
19592 *pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
19593 }
19594 return DOT11F_PARSE_SUCCESS;
19595} /* End dot11f_pack_tlv_transition_reject_reason. */
19596
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080019597uint32_t dot11f_pack_tlv_p2_p_interface(tpAniSirGlobal pCtx,
19598 tDot11fTLVP2PInterface *pSrc,
19599 uint8_t *pBuf,
19600 uint32_t nBuf,
19601 uint32_t *pnConsumed)
19602{
19603 uint8_t *pTlvLen = 0;
19604 uint32_t nConsumedOnEntry = *pnConsumed;
19605 uint32_t nNeeded = 0U;
19606 nNeeded += 9;
19607 if (nNeeded > nBuf)
19608 return DOT11F_BUFFER_OVERFLOW;
19609 while (pSrc->present) {
19610 *pBuf = 16;
19611 pBuf += 1; *pnConsumed += 1;
19612 pTlvLen = pBuf;
19613 pBuf += 2; *pnConsumed += 2;
19614 DOT11F_MEMCPY(pCtx, pBuf, pSrc->P2PDeviceAddress, 6);
19615 *pnConsumed += 6;
19616 pBuf += 6;
19617 break;
19618 }
19619 (void)pCtx;
19620 if (pTlvLen) {
19621 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 3, 0);
19622 }
19623 return DOT11F_PARSE_SUCCESS;
19624} /* End dot11f_pack_tlv_p2_p_interface. */
19625
19626uint32_t dot11f_pack_tlv_p2_p_manageability(tpAniSirGlobal pCtx,
19627 tDot11fTLVP2PManageability *pSrc,
19628 uint8_t *pBuf,
19629 uint32_t nBuf,
19630 uint32_t *pnConsumed)
19631{
19632 uint8_t *pTlvLen = 0;
19633 uint32_t nConsumedOnEntry = *pnConsumed;
19634 uint32_t nNeeded = 0U;
19635 nNeeded += 4;
19636 if (nNeeded > nBuf)
19637 return DOT11F_BUFFER_OVERFLOW;
19638 while (pSrc->present) {
19639 *pBuf = 10;
19640 pBuf += 1; *pnConsumed += 1;
19641 pTlvLen = pBuf;
19642 pBuf += 2; *pnConsumed += 2;
19643 *pBuf = pSrc->manageability;
19644 *pnConsumed += 1;
19645 pBuf += 1;
19646 break;
19647 }
19648 (void)pCtx;
19649 if (pTlvLen) {
19650 frameshtons(pCtx, pTlvLen, *pnConsumed - nConsumedOnEntry - 3, 0);
19651 }
19652 return DOT11F_PARSE_SUCCESS;
19653} /* End dot11f_pack_tlv_p2_p_manageability. */
19654
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080019655uint32_t dot11f_pack_ie_gtk(tpAniSirGlobal pCtx,
19656 tDot11fIEGTK *pSrc,
19657 uint8_t *pBuf,
19658 uint32_t nBuf,
19659 uint32_t *pnConsumed)
19660{
19661 uint8_t *pIeLen = 0;
19662 uint32_t nConsumedOnEntry = *pnConsumed;
19663 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070019664 uint16_t tmp107__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080019665 nNeeded += (pSrc->num_key + 11);
19666 while (pSrc->present) {
19667 if (nNeeded > nBuf)
19668 return DOT11F_BUFFER_OVERFLOW;
19669 *pBuf = 2;
19670 ++pBuf; ++(*pnConsumed);
19671 pIeLen = pBuf;
19672 ++pBuf; ++(*pnConsumed);
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070019673 tmp107__ = 0U;
19674 tmp107__ |= (pSrc->keyId << 0);
19675 tmp107__ |= (pSrc->reserved << 2);
Naveen Rawat69623ef2018-04-27 16:11:01 -070019676 if (unlikely(nBuf < 2))
19677 return DOT11F_INCOMPLETE_IE;
19678
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070019679 frameshtons(pCtx, pBuf, tmp107__, 0);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080019680 *pnConsumed += 2;
19681 pBuf += 2;
19682 nBuf -= 2 ;
19683 *pBuf = pSrc->keyLength;
19684 *pnConsumed += 1;
19685 pBuf += 1;
19686 DOT11F_MEMCPY(pCtx, pBuf, pSrc->RSC, 8);
19687 *pnConsumed += 8;
19688 pBuf += 8;
19689 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->key), pSrc->num_key);
19690 *pnConsumed += pSrc->num_key;
19691 /* fieldsEndFlag = 1 */
19692 break;
19693 }
19694 (void)pCtx;
19695 if (pIeLen) {
19696 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
19697 }
19698 return DOT11F_PARSE_SUCCESS;
19699} /* End dot11f_pack_ie_gtk. */
19700
19701uint32_t dot11f_pack_ie_igtk(tpAniSirGlobal pCtx,
19702 tDot11fIEIGTK *pSrc,
19703 uint8_t *pBuf,
19704 uint32_t nBuf,
19705 uint32_t *pnConsumed)
19706{
19707 uint8_t *pIeLen = 0;
19708 uint32_t nConsumedOnEntry = *pnConsumed;
19709 uint32_t nNeeded = 0U;
19710 nNeeded += 33;
19711 while (pSrc->present) {
19712 if (nNeeded > nBuf)
19713 return DOT11F_BUFFER_OVERFLOW;
19714 *pBuf = 4;
19715 ++pBuf; ++(*pnConsumed);
19716 pIeLen = pBuf;
19717 ++pBuf; ++(*pnConsumed);
19718 DOT11F_MEMCPY(pCtx, pBuf, pSrc->keyID, 2);
19719 *pnConsumed += 2;
19720 pBuf += 2;
19721 DOT11F_MEMCPY(pCtx, pBuf, pSrc->IPN, 6);
19722 *pnConsumed += 6;
19723 pBuf += 6;
19724 *pBuf = pSrc->keyLength;
19725 *pnConsumed += 1;
19726 pBuf += 1;
19727 DOT11F_MEMCPY(pCtx, pBuf, pSrc->key, 24);
19728 *pnConsumed += 24;
19729 /* fieldsEndFlag = 1 */
19730 break;
19731 }
19732 (void)pCtx;
19733 if (pIeLen) {
19734 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
19735 }
19736 return DOT11F_PARSE_SUCCESS;
19737} /* End dot11f_pack_ie_igtk. */
19738
19739uint32_t dot11f_pack_ie_r0_kh_id(tpAniSirGlobal pCtx,
19740 tDot11fIER0KH_ID *pSrc,
19741 uint8_t *pBuf,
19742 uint32_t nBuf,
19743 uint32_t *pnConsumed)
19744{
19745 uint8_t *pIeLen = 0;
19746 uint32_t nConsumedOnEntry = *pnConsumed;
19747 uint32_t nNeeded = 0U;
19748 nNeeded += pSrc->num_PMK_R0_ID;
19749 while (pSrc->present) {
19750 if (nNeeded > nBuf)
19751 return DOT11F_BUFFER_OVERFLOW;
19752 *pBuf = 3;
19753 ++pBuf; ++(*pnConsumed);
19754 pIeLen = pBuf;
19755 ++pBuf; ++(*pnConsumed);
19756 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->PMK_R0_ID), pSrc->num_PMK_R0_ID);
19757 *pnConsumed += pSrc->num_PMK_R0_ID;
19758 /* fieldsEndFlag = 1 */
19759 break;
19760 }
19761 (void)pCtx;
19762 if (pIeLen) {
19763 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
19764 }
19765 return DOT11F_PARSE_SUCCESS;
19766} /* End dot11f_pack_ie_r0_kh_id. */
19767
19768uint32_t dot11f_pack_ie_r1_kh_id(tpAniSirGlobal pCtx,
19769 tDot11fIER1KH_ID *pSrc,
19770 uint8_t *pBuf,
19771 uint32_t nBuf,
19772 uint32_t *pnConsumed)
19773{
19774 uint8_t *pIeLen = 0;
19775 uint32_t nConsumedOnEntry = *pnConsumed;
19776 uint32_t nNeeded = 0U;
19777 nNeeded += 6;
19778 while (pSrc->present) {
19779 if (nNeeded > nBuf)
19780 return DOT11F_BUFFER_OVERFLOW;
19781 *pBuf = 1;
19782 ++pBuf; ++(*pnConsumed);
19783 pIeLen = pBuf;
19784 ++pBuf; ++(*pnConsumed);
19785 DOT11F_MEMCPY(pCtx, pBuf, pSrc->PMK_R1_ID, 6);
19786 *pnConsumed += 6;
19787 /* fieldsEndFlag = 1 */
19788 break;
19789 }
19790 (void)pCtx;
19791 if (pIeLen) {
19792 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
19793 }
19794 return DOT11F_PARSE_SUCCESS;
19795} /* End dot11f_pack_ie_r1_kh_id. */
19796
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080019797uint32_t dot11f_pack_ie_ap_channel_report(tpAniSirGlobal pCtx,
19798 tDot11fIEAPChannelReport *pSrc,
19799 uint8_t *pBuf,
19800 uint32_t nBuf,
19801 uint32_t *pnConsumed)
19802{
19803 uint8_t *pIeLen = 0;
19804 uint32_t nConsumedOnEntry = *pnConsumed;
19805 uint32_t nNeeded = 0U;
19806 nNeeded += (pSrc->num_channelList + 1);
19807 while (pSrc->present) {
19808 if (nNeeded > nBuf)
19809 return DOT11F_BUFFER_OVERFLOW;
19810 *pBuf = 51;
19811 ++pBuf; ++(*pnConsumed);
19812 pIeLen = pBuf;
19813 ++pBuf; ++(*pnConsumed);
19814 *pBuf = pSrc->regulatoryClass;
19815 *pnConsumed += 1;
19816 pBuf += 1;
19817 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->channelList), pSrc->num_channelList);
19818 *pnConsumed += pSrc->num_channelList;
19819 /* fieldsEndFlag = 1 */
19820 break;
19821 }
19822 (void)pCtx;
19823 if (pIeLen) {
19824 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
19825 }
19826 return DOT11F_PARSE_SUCCESS;
19827} /* End dot11f_pack_ie_ap_channel_report. */
19828
19829uint32_t dot11f_pack_ie_bcn_reporting_detail(tpAniSirGlobal pCtx,
19830 tDot11fIEBcnReportingDetail *pSrc,
19831 uint8_t *pBuf,
19832 uint32_t nBuf,
19833 uint32_t *pnConsumed)
19834{
19835 uint8_t *pIeLen = 0;
19836 uint32_t nConsumedOnEntry = *pnConsumed;
19837 uint32_t nNeeded = 0U;
19838 nNeeded += 1;
19839 while (pSrc->present) {
19840 if (nNeeded > nBuf)
19841 return DOT11F_BUFFER_OVERFLOW;
19842 *pBuf = 2;
19843 ++pBuf; ++(*pnConsumed);
19844 pIeLen = pBuf;
19845 ++pBuf; ++(*pnConsumed);
19846 *pBuf = pSrc->reportingDetail;
19847 *pnConsumed += 1;
19848 /* fieldsEndFlag = 1 */
19849 break;
19850 }
19851 (void)pCtx;
19852 if (pIeLen) {
19853 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
19854 }
19855 return DOT11F_PARSE_SUCCESS;
19856} /* End dot11f_pack_ie_bcn_reporting_detail. */
19857
19858uint32_t dot11f_pack_ie_beacon_report_frm_body(tpAniSirGlobal pCtx,
19859 tDot11fIEBeaconReportFrmBody *pSrc,
19860 uint8_t *pBuf,
19861 uint32_t nBuf,
19862 uint32_t *pnConsumed)
19863{
19864 uint8_t *pIeLen = 0;
19865 uint32_t nConsumedOnEntry = *pnConsumed;
19866 uint32_t nNeeded = 0U;
19867 nNeeded += pSrc->num_reportedFields;
19868 while (pSrc->present) {
19869 if (nNeeded > nBuf)
19870 return DOT11F_BUFFER_OVERFLOW;
19871 *pBuf = 1;
19872 ++pBuf; ++(*pnConsumed);
19873 pIeLen = pBuf;
19874 ++pBuf; ++(*pnConsumed);
19875 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->reportedFields), pSrc->num_reportedFields);
19876 *pnConsumed += pSrc->num_reportedFields;
19877 /* fieldsEndFlag = 1 */
19878 break;
19879 }
19880 (void)pCtx;
19881 if (pIeLen) {
19882 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
19883 }
19884 return DOT11F_PARSE_SUCCESS;
19885} /* End dot11f_pack_ie_beacon_report_frm_body. */
19886
19887uint32_t dot11f_pack_ie_beacon_reporting(tpAniSirGlobal pCtx,
19888 tDot11fIEBeaconReporting *pSrc,
19889 uint8_t *pBuf,
19890 uint32_t nBuf,
19891 uint32_t *pnConsumed)
19892{
19893 uint8_t *pIeLen = 0;
19894 uint32_t nConsumedOnEntry = *pnConsumed;
19895 uint32_t nNeeded = 0U;
19896 nNeeded += 2;
19897 while (pSrc->present) {
19898 if (nNeeded > nBuf)
19899 return DOT11F_BUFFER_OVERFLOW;
19900 *pBuf = 1;
19901 ++pBuf; ++(*pnConsumed);
19902 pIeLen = pBuf;
19903 ++pBuf; ++(*pnConsumed);
19904 *pBuf = pSrc->reportingCondition;
19905 *pnConsumed += 1;
19906 pBuf += 1;
19907 *pBuf = pSrc->threshold;
19908 *pnConsumed += 1;
19909 /* fieldsEndFlag = 1 */
19910 break;
19911 }
19912 (void)pCtx;
19913 if (pIeLen) {
19914 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
19915 }
19916 return DOT11F_PARSE_SUCCESS;
19917} /* End dot11f_pack_ie_beacon_reporting. */
19918
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080019919uint32_t dot11f_pack_ie_condensed_country_str(tpAniSirGlobal pCtx,
19920 tDot11fIECondensedCountryStr *pSrc,
19921 uint8_t *pBuf,
19922 uint32_t nBuf,
19923 uint32_t *pnConsumed)
19924{
19925 uint8_t *pIeLen = 0;
19926 uint32_t nConsumedOnEntry = *pnConsumed;
19927 uint32_t nNeeded = 0U;
19928 nNeeded += 2;
19929 while (pSrc->present) {
19930 if (nNeeded > nBuf)
19931 return DOT11F_BUFFER_OVERFLOW;
19932 *pBuf = 2;
19933 ++pBuf; ++(*pnConsumed);
19934 pIeLen = pBuf;
19935 ++pBuf; ++(*pnConsumed);
19936 DOT11F_MEMCPY(pCtx, pBuf, pSrc->countryStr, 2);
19937 *pnConsumed += 2;
19938 /* fieldsEndFlag = 1 */
19939 break;
19940 }
19941 (void)pCtx;
19942 if (pIeLen) {
19943 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
19944 }
19945 return DOT11F_PARSE_SUCCESS;
19946} /* End dot11f_pack_ie_condensed_country_str. */
19947
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080019948uint32_t dot11f_pack_ie_measurement_pilot(tpAniSirGlobal pCtx,
19949 tDot11fIEMeasurementPilot *pSrc,
19950 uint8_t *pBuf,
19951 uint32_t nBuf,
19952 uint32_t *pnConsumed)
19953{
19954 uint8_t *pIeLen = 0;
19955 uint32_t nConsumedOnEntry = *pnConsumed;
19956 uint32_t nNeeded = 0U;
19957 nNeeded += (pSrc->num_vendorSpecific + 1);
19958 while (pSrc->present) {
19959 if (nNeeded > nBuf)
19960 return DOT11F_BUFFER_OVERFLOW;
19961 *pBuf = 66;
19962 ++pBuf; ++(*pnConsumed);
19963 pIeLen = pBuf;
19964 ++pBuf; ++(*pnConsumed);
19965 *pBuf = pSrc->measurementPilot;
19966 *pnConsumed += 1;
19967 pBuf += 1;
19968 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->vendorSpecific), pSrc->num_vendorSpecific);
19969 *pnConsumed += pSrc->num_vendorSpecific;
19970 /* fieldsEndFlag = 1 */
19971 break;
19972 }
19973 (void)pCtx;
19974 if (pIeLen) {
19975 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
19976 }
19977 return DOT11F_PARSE_SUCCESS;
19978} /* End dot11f_pack_ie_measurement_pilot. */
19979
19980uint32_t dot11f_pack_ie_multi_bssid(tpAniSirGlobal pCtx,
19981 tDot11fIEMultiBssid *pSrc,
19982 uint8_t *pBuf,
19983 uint32_t nBuf,
19984 uint32_t *pnConsumed)
19985{
19986 uint8_t *pIeLen = 0;
19987 uint32_t nConsumedOnEntry = *pnConsumed;
19988 uint32_t nNeeded = 0U;
19989 nNeeded += (pSrc->num_vendorSpecific + 1);
19990 while (pSrc->present) {
19991 if (nNeeded > nBuf)
19992 return DOT11F_BUFFER_OVERFLOW;
19993 *pBuf = 71;
19994 ++pBuf; ++(*pnConsumed);
19995 pIeLen = pBuf;
19996 ++pBuf; ++(*pnConsumed);
19997 *pBuf = pSrc->maxBSSIDIndicator;
19998 *pnConsumed += 1;
19999 pBuf += 1;
20000 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->vendorSpecific), pSrc->num_vendorSpecific);
20001 *pnConsumed += pSrc->num_vendorSpecific;
20002 /* fieldsEndFlag = 1 */
20003 break;
20004 }
20005 (void)pCtx;
20006 if (pIeLen) {
20007 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
20008 }
20009 return DOT11F_PARSE_SUCCESS;
20010} /* End dot11f_pack_ie_multi_bssid. */
20011
20012uint32_t dot11f_pack_ie_ric_data(tpAniSirGlobal pCtx,
20013 tDot11fIERICData *pSrc,
20014 uint8_t *pBuf,
20015 uint32_t nBuf,
20016 uint32_t *pnConsumed)
20017{
20018 uint8_t *pIeLen = 0;
20019 uint32_t nConsumedOnEntry = *pnConsumed;
20020 uint32_t nNeeded = 0U;
20021 nNeeded += 4;
20022 while (pSrc->present) {
20023 if (nNeeded > nBuf)
20024 return DOT11F_BUFFER_OVERFLOW;
20025 *pBuf = 57;
20026 ++pBuf; ++(*pnConsumed);
20027 pIeLen = pBuf;
20028 ++pBuf; ++(*pnConsumed);
20029 *pBuf = pSrc->Identifier;
20030 *pnConsumed += 1;
20031 pBuf += 1;
20032 *pBuf = pSrc->resourceDescCount;
20033 *pnConsumed += 1;
20034 pBuf += 1;
20035 frameshtons(pCtx, pBuf, pSrc->statusCode, 0);
20036 *pnConsumed += 2;
20037 /* fieldsEndFlag = 1 */
20038 break;
20039 }
20040 (void)pCtx;
20041 if (pIeLen) {
20042 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
20043 }
20044 return DOT11F_PARSE_SUCCESS;
20045} /* End dot11f_pack_ie_ric_data. */
20046
20047uint32_t dot11f_pack_ie_ric_descriptor(tpAniSirGlobal pCtx,
20048 tDot11fIERICDescriptor *pSrc,
20049 uint8_t *pBuf,
20050 uint32_t nBuf,
20051 uint32_t *pnConsumed)
20052{
20053 uint8_t *pIeLen = 0;
20054 uint32_t nConsumedOnEntry = *pnConsumed;
20055 uint32_t nNeeded = 0U;
20056 nNeeded += (pSrc->num_variableData + 1);
20057 while (pSrc->present) {
20058 if (nNeeded > nBuf)
20059 return DOT11F_BUFFER_OVERFLOW;
20060 *pBuf = 75;
20061 ++pBuf; ++(*pnConsumed);
20062 pIeLen = pBuf;
20063 ++pBuf; ++(*pnConsumed);
20064 *pBuf = pSrc->resourceType;
20065 *pnConsumed += 1;
20066 pBuf += 1;
20067 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->variableData), pSrc->num_variableData);
20068 *pnConsumed += pSrc->num_variableData;
20069 /* fieldsEndFlag = 1 */
20070 break;
20071 }
20072 (void)pCtx;
20073 if (pIeLen) {
20074 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
20075 }
20076 return DOT11F_PARSE_SUCCESS;
20077} /* End dot11f_pack_ie_ric_descriptor. */
20078
20079uint32_t dot11f_pack_ie_rrm_enabled_cap(tpAniSirGlobal pCtx,
20080 tDot11fIERRMEnabledCap *pSrc,
20081 uint8_t *pBuf,
20082 uint32_t nBuf,
20083 uint32_t *pnConsumed)
20084{
20085 uint8_t *pIeLen = 0;
20086 uint32_t nConsumedOnEntry = *pnConsumed;
20087 uint32_t nNeeded = 0U;
Abhishek Singh951eed82017-07-06 16:53:19 +053020088 uint8_t tmp108__;
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080020089 uint8_t tmp109__;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053020090 uint8_t tmp110__;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070020091 uint8_t tmp111__;
20092 uint8_t tmp112__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080020093 nNeeded += 5;
20094 while (pSrc->present) {
20095 if (nNeeded > nBuf)
20096 return DOT11F_BUFFER_OVERFLOW;
20097 *pBuf = 70;
20098 ++pBuf; ++(*pnConsumed);
20099 pIeLen = pBuf;
20100 ++pBuf; ++(*pnConsumed);
Abhishek Singh951eed82017-07-06 16:53:19 +053020101 tmp108__ = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070020102 tmp108__ |= (pSrc->LinkMeasurement << 0);
20103 tmp108__ |= (pSrc->NeighborRpt << 1);
20104 tmp108__ |= (pSrc->parallel << 2);
20105 tmp108__ |= (pSrc->repeated << 3);
20106 tmp108__ |= (pSrc->BeaconPassive << 4);
20107 tmp108__ |= (pSrc->BeaconActive << 5);
20108 tmp108__ |= (pSrc->BeaconTable << 6);
20109 tmp108__ |= (pSrc->BeaconRepCond << 7);
Naveen Rawat69623ef2018-04-27 16:11:01 -070020110 if (unlikely(nBuf < 1))
20111 return DOT11F_INCOMPLETE_IE;
20112
Abhishek Singh951eed82017-07-06 16:53:19 +053020113 *pBuf = tmp108__;
20114 *pnConsumed += 1;
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080020115 pBuf += 1;
20116 nBuf -= 1 ;
20117 tmp109__ = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070020118 tmp109__ |= (pSrc->FrameMeasurement << 0);
20119 tmp109__ |= (pSrc->ChannelLoad << 1);
20120 tmp109__ |= (pSrc->NoiseHistogram << 2);
20121 tmp109__ |= (pSrc->statistics << 3);
20122 tmp109__ |= (pSrc->LCIMeasurement << 4);
20123 tmp109__ |= (pSrc->LCIAzimuth << 5);
20124 tmp109__ |= (pSrc->TCMCapability << 6);
20125 tmp109__ |= (pSrc->triggeredTCM << 7);
Naveen Rawat69623ef2018-04-27 16:11:01 -070020126 if (unlikely(nBuf < 1))
20127 return DOT11F_INCOMPLETE_IE;
20128
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080020129 *pBuf = tmp109__;
20130 *pnConsumed += 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053020131 pBuf += 1;
20132 nBuf -= 1 ;
20133 tmp110__ = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070020134 tmp110__ |= (pSrc->APChanReport << 0);
20135 tmp110__ |= (pSrc->RRMMIBEnabled << 1);
20136 tmp110__ |= (pSrc->operatingChanMax << 2);
20137 tmp110__ |= (pSrc->nonOperatinChanMax << 5);
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053020138 if (unlikely(nBuf < 1))
20139 return DOT11F_INCOMPLETE_IE;
20140
20141 *pBuf = tmp110__;
20142 *pnConsumed += 1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070020143 pBuf += 1;
20144 nBuf -= 1 ;
20145 tmp111__ = 0U;
20146 tmp111__ |= (pSrc->MeasurementPilot << 0);
20147 tmp111__ |= (pSrc->MeasurementPilotEnabled << 3);
20148 tmp111__ |= (pSrc->NeighborTSFOffset << 4);
20149 tmp111__ |= (pSrc->RCPIMeasurement << 5);
20150 tmp111__ |= (pSrc->RSNIMeasurement << 6);
20151 tmp111__ |= (pSrc->BssAvgAccessDelay << 7);
20152 if (unlikely(nBuf < 1))
20153 return DOT11F_INCOMPLETE_IE;
20154
20155 *pBuf = tmp111__;
20156 *pnConsumed += 1;
20157 pBuf += 1;
20158 nBuf -= 1 ;
20159 tmp112__ = 0U;
20160 tmp112__ |= (pSrc->BSSAvailAdmission << 0);
20161 tmp112__ |= (pSrc->AntennaInformation << 1);
20162 tmp112__ |= (pSrc->fine_time_meas_rpt << 2);
20163 tmp112__ |= (pSrc->lci_capability << 3);
20164 tmp112__ |= (pSrc->reserved << 4);
20165 if (unlikely(nBuf < 1))
20166 return DOT11F_INCOMPLETE_IE;
20167
20168 *pBuf = tmp112__;
20169 *pnConsumed += 1;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080020170 /* fieldsEndFlag = 1 */
20171 nBuf -= 1 ;
20172 break;
20173 }
20174 (void)pCtx;
20175 if (pIeLen) {
20176 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
20177 }
20178 return DOT11F_PARSE_SUCCESS;
20179} /* End dot11f_pack_ie_rrm_enabled_cap. */
20180
20181uint32_t dot11f_pack_ie_requested_info(tpAniSirGlobal pCtx,
20182 tDot11fIERequestedInfo *pSrc,
20183 uint8_t *pBuf,
20184 uint32_t nBuf,
20185 uint32_t *pnConsumed)
20186{
20187 uint8_t *pIeLen = 0;
20188 uint32_t nConsumedOnEntry = *pnConsumed;
20189 uint32_t nNeeded = 0U;
20190 nNeeded += pSrc->num_requested_eids;
20191 while (pSrc->present) {
20192 if (nNeeded > nBuf)
20193 return DOT11F_BUFFER_OVERFLOW;
20194 *pBuf = 10;
20195 ++pBuf; ++(*pnConsumed);
20196 pIeLen = pBuf;
20197 ++pBuf; ++(*pnConsumed);
20198 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->requested_eids), pSrc->num_requested_eids);
20199 *pnConsumed += pSrc->num_requested_eids;
20200 /* fieldsEndFlag = 1 */
20201 break;
20202 }
20203 (void)pCtx;
20204 if (pIeLen) {
20205 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
20206 }
20207 return DOT11F_PARSE_SUCCESS;
20208} /* End dot11f_pack_ie_requested_info. */
20209
20210uint32_t dot11f_pack_ie_ssid(tpAniSirGlobal pCtx,
20211 tDot11fIESSID *pSrc,
20212 uint8_t *pBuf,
20213 uint32_t nBuf,
20214 uint32_t *pnConsumed)
20215{
20216 uint8_t *pIeLen = 0;
20217 uint32_t nConsumedOnEntry = *pnConsumed;
20218 uint32_t nNeeded = 0U;
20219 nNeeded += pSrc->num_ssid;
20220 while (pSrc->present) {
20221 if (nNeeded > nBuf)
20222 return DOT11F_BUFFER_OVERFLOW;
20223 *pBuf = 0;
20224 ++pBuf; ++(*pnConsumed);
20225 pIeLen = pBuf;
20226 ++pBuf; ++(*pnConsumed);
20227 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->ssid), pSrc->num_ssid);
20228 *pnConsumed += pSrc->num_ssid;
20229 /* fieldsEndFlag = 1 */
20230 break;
20231 }
20232 (void)pCtx;
20233 if (pIeLen) {
20234 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
20235 }
20236 return DOT11F_PARSE_SUCCESS;
20237} /* End dot11f_pack_ie_ssid. */
20238
20239uint32_t dot11f_pack_ie_schedule(tpAniSirGlobal pCtx,
20240 tDot11fIESchedule *pSrc,
20241 uint8_t *pBuf,
20242 uint32_t nBuf,
20243 uint32_t *pnConsumed)
20244{
20245 uint8_t *pIeLen = 0;
20246 uint32_t nConsumedOnEntry = *pnConsumed;
20247 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070020248 uint16_t tmp113__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080020249 nNeeded += 14;
20250 while (pSrc->present) {
20251 if (nNeeded > nBuf)
20252 return DOT11F_BUFFER_OVERFLOW;
20253 *pBuf = 15;
20254 ++pBuf; ++(*pnConsumed);
20255 pIeLen = pBuf;
20256 ++pBuf; ++(*pnConsumed);
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070020257 tmp113__ = 0U;
20258 tmp113__ |= (pSrc->aggregation << 0);
20259 tmp113__ |= (pSrc->tsid << 1);
20260 tmp113__ |= (pSrc->direction << 5);
20261 tmp113__ |= (pSrc->reserved << 7);
Naveen Rawat69623ef2018-04-27 16:11:01 -070020262 if (unlikely(nBuf < 2))
20263 return DOT11F_INCOMPLETE_IE;
20264
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070020265 frameshtons(pCtx, pBuf, tmp113__, 0);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080020266 *pnConsumed += 2;
20267 pBuf += 2;
20268 nBuf -= 2 ;
20269 frameshtonl(pCtx, pBuf, pSrc->service_start_time, 0);
20270 *pnConsumed += 4;
20271 pBuf += 4;
20272 frameshtonl(pCtx, pBuf, pSrc->service_interval, 0);
20273 *pnConsumed += 4;
20274 pBuf += 4;
20275 frameshtons(pCtx, pBuf, pSrc->max_service_dur, 0);
20276 *pnConsumed += 2;
20277 pBuf += 2;
20278 frameshtons(pCtx, pBuf, pSrc->spec_interval, 0);
20279 *pnConsumed += 2;
20280 /* fieldsEndFlag = 1 */
20281 break;
20282 }
20283 (void)pCtx;
20284 if (pIeLen) {
20285 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
20286 }
20287 return DOT11F_PARSE_SUCCESS;
20288} /* End dot11f_pack_ie_schedule. */
20289
20290uint32_t dot11f_pack_ie_tclas(tpAniSirGlobal pCtx,
20291 tDot11fIETCLAS *pSrc,
20292 uint8_t *pBuf,
20293 uint32_t nBuf,
20294 uint32_t *pnConsumed)
20295{
20296 uint8_t *pIeLen = 0;
20297 uint32_t nConsumedOnEntry = *pnConsumed;
20298 uint32_t nNeeded = 0U;
20299 uint32_t status = DOT11F_PARSE_SUCCESS;
20300 status = dot11f_get_packed_ietclas(pCtx, pSrc, &nNeeded);
20301 if (!DOT11F_SUCCEEDED(status))
20302 return status;
20303 while (pSrc->present) {
20304 if (nNeeded > nBuf)
20305 return DOT11F_BUFFER_OVERFLOW;
20306 *pBuf = 14;
20307 ++pBuf; ++(*pnConsumed);
20308 pIeLen = pBuf;
20309 ++pBuf; ++(*pnConsumed);
20310 *pBuf = pSrc->user_priority;
20311 *pnConsumed += 1;
20312 pBuf += 1;
20313 *pBuf = pSrc->classifier_type;
20314 *pnConsumed += 1;
20315 pBuf += 1;
20316 *pBuf = pSrc->classifier_mask;
20317 *pnConsumed += 1;
20318 pBuf += 1;
20319 switch (pSrc->classifier_type) {
20320 case 0:
20321 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.EthParams.source, 6);
20322 *pnConsumed += 6;
20323 pBuf += 6;
20324 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.EthParams.dest, 6);
20325 *pnConsumed += 6;
20326 pBuf += 6;
20327 frameshtons(pCtx, pBuf, pSrc->info.EthParams.type, 0);
20328 *pnConsumed += 2;
20329 /* fieldsEndFlag = 1 */
20330 break;
20331 case 1:
20332 *pBuf = pSrc->info.IpParams.version;
20333 *pnConsumed += 1;
20334 pBuf += 1;
20335 switch (pSrc->info.IpParams.version) {
20336 case 4:
20337 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.IpParams.params.IpV4Params.source, 4);
20338 *pnConsumed += 4;
20339 pBuf += 4;
20340 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.IpParams.params.IpV4Params.dest, 4);
20341 *pnConsumed += 4;
20342 pBuf += 4;
20343 frameshtons(pCtx, pBuf, pSrc->info.IpParams.params.IpV4Params.src_port, 0);
20344 *pnConsumed += 2;
20345 pBuf += 2;
20346 frameshtons(pCtx, pBuf, pSrc->info.IpParams.params.IpV4Params.dest_port, 0);
20347 *pnConsumed += 2;
20348 pBuf += 2;
20349 *pBuf = pSrc->info.IpParams.params.IpV4Params.DSCP;
20350 *pnConsumed += 1;
20351 pBuf += 1;
20352 *pBuf = pSrc->info.IpParams.params.IpV4Params.proto;
20353 *pnConsumed += 1;
20354 pBuf += 1;
20355 *pBuf = pSrc->info.IpParams.params.IpV4Params.reserved;
20356 *pnConsumed += 1;
20357 /* fieldsEndFlag = 1 */
20358 break;
20359 case 6:
20360 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.IpParams.params.IpV6Params.source, 16);
20361 *pnConsumed += 16;
20362 pBuf += 16;
20363 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.IpParams.params.IpV6Params.dest, 16);
20364 *pnConsumed += 16;
20365 pBuf += 16;
20366 frameshtons(pCtx, pBuf, pSrc->info.IpParams.params.IpV6Params.src_port, 0);
20367 *pnConsumed += 2;
20368 pBuf += 2;
20369 frameshtons(pCtx, pBuf, pSrc->info.IpParams.params.IpV6Params.dest_port, 0);
20370 *pnConsumed += 2;
20371 pBuf += 2;
20372 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.IpParams.params.IpV6Params.flow_label, 3);
20373 *pnConsumed += 3;
20374 /* fieldsEndFlag = 1 */
20375 break;
20376 }
20377 break;
20378 case 2:
20379 frameshtons(pCtx, pBuf, pSrc->info.Params8021dq.tag_type, 0);
20380 *pnConsumed += 2;
20381 /* fieldsEndFlag = 1 */
20382 break;
20383 }
20384 break;
20385 }
20386 (void)pCtx;
20387 if (pIeLen) {
20388 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
20389 }
20390 return status;
20391} /* End dot11f_pack_ie_tclas. */
20392
20393uint32_t dot11f_pack_ie_tclassproc(tpAniSirGlobal pCtx,
20394 tDot11fIETCLASSPROC *pSrc,
20395 uint8_t *pBuf,
20396 uint32_t nBuf,
20397 uint32_t *pnConsumed)
20398{
20399 uint8_t *pIeLen = 0;
20400 uint32_t nConsumedOnEntry = *pnConsumed;
20401 uint32_t nNeeded = 0U;
20402 nNeeded += 1;
20403 while (pSrc->present) {
20404 if (nNeeded > nBuf)
20405 return DOT11F_BUFFER_OVERFLOW;
20406 *pBuf = 44;
20407 ++pBuf; ++(*pnConsumed);
20408 pIeLen = pBuf;
20409 ++pBuf; ++(*pnConsumed);
20410 *pBuf = pSrc->processing;
20411 *pnConsumed += 1;
20412 /* fieldsEndFlag = 1 */
20413 break;
20414 }
20415 (void)pCtx;
20416 if (pIeLen) {
20417 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
20418 }
20419 return DOT11F_PARSE_SUCCESS;
20420} /* End dot11f_pack_ie_tclassproc. */
20421
20422uint32_t dot11f_pack_ie_ts_delay(tpAniSirGlobal pCtx,
20423 tDot11fIETSDelay *pSrc,
20424 uint8_t *pBuf,
20425 uint32_t nBuf,
20426 uint32_t *pnConsumed)
20427{
20428 uint8_t *pIeLen = 0;
20429 uint32_t nConsumedOnEntry = *pnConsumed;
20430 uint32_t nNeeded = 0U;
20431 nNeeded += 4;
20432 while (pSrc->present) {
20433 if (nNeeded > nBuf)
20434 return DOT11F_BUFFER_OVERFLOW;
20435 *pBuf = 43;
20436 ++pBuf; ++(*pnConsumed);
20437 pIeLen = pBuf;
20438 ++pBuf; ++(*pnConsumed);
20439 frameshtonl(pCtx, pBuf, pSrc->delay, 0);
20440 *pnConsumed += 4;
20441 /* fieldsEndFlag = 1 */
20442 break;
20443 }
20444 (void)pCtx;
20445 if (pIeLen) {
20446 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
20447 }
20448 return DOT11F_PARSE_SUCCESS;
20449} /* End dot11f_pack_ie_ts_delay. */
20450
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080020451uint32_t dot11f_pack_ie_tsf_info(tpAniSirGlobal pCtx,
20452 tDot11fIETSFInfo *pSrc,
20453 uint8_t *pBuf,
20454 uint32_t nBuf,
20455 uint32_t *pnConsumed)
20456{
20457 uint8_t *pIeLen = 0;
20458 uint32_t nConsumedOnEntry = *pnConsumed;
20459 uint32_t nNeeded = 0U;
20460 nNeeded += 4;
20461 while (pSrc->present) {
20462 if (nNeeded > nBuf)
20463 return DOT11F_BUFFER_OVERFLOW;
20464 *pBuf = 1;
20465 ++pBuf; ++(*pnConsumed);
20466 pIeLen = pBuf;
20467 ++pBuf; ++(*pnConsumed);
20468 frameshtons(pCtx, pBuf, pSrc->TsfOffset, 0);
20469 *pnConsumed += 2;
20470 pBuf += 2;
20471 frameshtons(pCtx, pBuf, pSrc->BeaconIntvl, 0);
20472 *pnConsumed += 2;
20473 /* fieldsEndFlag = 1 */
20474 break;
20475 }
20476 (void)pCtx;
20477 if (pIeLen) {
20478 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
20479 }
20480 return DOT11F_PARSE_SUCCESS;
20481} /* End dot11f_pack_ie_tsf_info. */
20482
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080020483uint32_t dot11f_pack_ie_tspec(tpAniSirGlobal pCtx,
20484 tDot11fIETSPEC *pSrc,
20485 uint8_t *pBuf,
20486 uint32_t nBuf,
20487 uint32_t *pnConsumed)
20488{
20489 uint8_t *pIeLen = 0;
20490 uint32_t nConsumedOnEntry = *pnConsumed;
20491 uint32_t nNeeded = 0U;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053020492 uint16_t tmp114__;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070020493 uint8_t tmp115__;
20494 uint16_t tmp116__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080020495 nNeeded += 55;
20496 while (pSrc->present) {
20497 if (nNeeded > nBuf)
20498 return DOT11F_BUFFER_OVERFLOW;
20499 *pBuf = 13;
20500 ++pBuf; ++(*pnConsumed);
20501 pIeLen = pBuf;
20502 ++pBuf; ++(*pnConsumed);
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053020503 tmp114__ = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070020504 tmp114__ |= (pSrc->traffic_type << 0);
20505 tmp114__ |= (pSrc->tsid << 1);
20506 tmp114__ |= (pSrc->direction << 5);
20507 tmp114__ |= (pSrc->access_policy << 7);
20508 tmp114__ |= (pSrc->aggregation << 9);
20509 tmp114__ |= (pSrc->psb << 10);
20510 tmp114__ |= (pSrc->user_priority << 11);
20511 tmp114__ |= (pSrc->tsinfo_ack_pol << 14);
Naveen Rawat69623ef2018-04-27 16:11:01 -070020512 if (unlikely(nBuf < 2))
20513 return DOT11F_INCOMPLETE_IE;
20514
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053020515 frameshtons(pCtx, pBuf, tmp114__, 0);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080020516 *pnConsumed += 2;
20517 pBuf += 2;
20518 nBuf -= 2 ;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070020519 tmp115__ = 0U;
20520 tmp115__ |= (pSrc->schedule << 0);
20521 tmp115__ |= (pSrc->unused << 1);
20522 if (unlikely(nBuf < 1))
20523 return DOT11F_INCOMPLETE_IE;
20524
20525 *pBuf = tmp115__;
20526 *pnConsumed += 1;
20527 pBuf += 1;
20528 nBuf -= 1 ;
20529 tmp116__ = 0U;
20530 tmp116__ |= (pSrc->size << 0);
20531 tmp116__ |= (pSrc->fixed << 15);
20532 if (unlikely(nBuf < 2))
20533 return DOT11F_INCOMPLETE_IE;
20534
20535 frameshtons(pCtx, pBuf, tmp116__, 0);
20536 *pnConsumed += 2;
20537 pBuf += 2;
20538 nBuf -= 2 ;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080020539 frameshtons(pCtx, pBuf, pSrc->max_msdu_size, 0);
20540 *pnConsumed += 2;
20541 pBuf += 2;
20542 frameshtonl(pCtx, pBuf, pSrc->min_service_int, 0);
20543 *pnConsumed += 4;
20544 pBuf += 4;
20545 frameshtonl(pCtx, pBuf, pSrc->max_service_int, 0);
20546 *pnConsumed += 4;
20547 pBuf += 4;
20548 frameshtonl(pCtx, pBuf, pSrc->inactivity_int, 0);
20549 *pnConsumed += 4;
20550 pBuf += 4;
20551 frameshtonl(pCtx, pBuf, pSrc->suspension_int, 0);
20552 *pnConsumed += 4;
20553 pBuf += 4;
20554 frameshtonl(pCtx, pBuf, pSrc->service_start_time, 0);
20555 *pnConsumed += 4;
20556 pBuf += 4;
20557 frameshtonl(pCtx, pBuf, pSrc->min_data_rate, 0);
20558 *pnConsumed += 4;
20559 pBuf += 4;
20560 frameshtonl(pCtx, pBuf, pSrc->mean_data_rate, 0);
20561 *pnConsumed += 4;
20562 pBuf += 4;
20563 frameshtonl(pCtx, pBuf, pSrc->peak_data_rate, 0);
20564 *pnConsumed += 4;
20565 pBuf += 4;
20566 frameshtonl(pCtx, pBuf, pSrc->burst_size, 0);
20567 *pnConsumed += 4;
20568 pBuf += 4;
20569 frameshtonl(pCtx, pBuf, pSrc->delay_bound, 0);
20570 *pnConsumed += 4;
20571 pBuf += 4;
20572 frameshtonl(pCtx, pBuf, pSrc->min_phy_rate, 0);
20573 *pnConsumed += 4;
20574 pBuf += 4;
20575 frameshtons(pCtx, pBuf, pSrc->surplus_bw_allowance, 0);
20576 *pnConsumed += 2;
20577 pBuf += 2;
20578 frameshtons(pCtx, pBuf, pSrc->medium_time, 0);
20579 *pnConsumed += 2;
20580 /* fieldsEndFlag = 1 */
20581 break;
20582 }
20583 (void)pCtx;
20584 if (pIeLen) {
20585 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
20586 }
20587 return DOT11F_PARSE_SUCCESS;
20588} /* End dot11f_pack_ie_tspec. */
20589
20590uint32_t dot11f_pack_ie_vht_caps(tpAniSirGlobal pCtx,
20591 tDot11fIEVHTCaps *pSrc,
20592 uint8_t *pBuf,
20593 uint32_t nBuf,
20594 uint32_t *pnConsumed)
20595{
20596 uint8_t *pIeLen = 0;
20597 uint32_t nConsumedOnEntry = *pnConsumed;
20598 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070020599 uint32_t tmp117__;
20600 uint16_t tmp118__;
20601 uint16_t tmp119__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080020602 nNeeded += 12;
20603 while (pSrc->present) {
20604 if (nNeeded > nBuf)
20605 return DOT11F_BUFFER_OVERFLOW;
20606 *pBuf = 191;
20607 ++pBuf; ++(*pnConsumed);
20608 pIeLen = pBuf;
20609 ++pBuf; ++(*pnConsumed);
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070020610 tmp117__ = 0U;
20611 tmp117__ |= (pSrc->maxMPDULen << 0);
20612 tmp117__ |= (pSrc->supportedChannelWidthSet << 2);
20613 tmp117__ |= (pSrc->ldpcCodingCap << 4);
20614 tmp117__ |= (pSrc->shortGI80MHz << 5);
20615 tmp117__ |= (pSrc->shortGI160and80plus80MHz << 6);
20616 tmp117__ |= (pSrc->txSTBC << 7);
20617 tmp117__ |= (pSrc->rxSTBC << 8);
20618 tmp117__ |= (pSrc->suBeamFormerCap << 11);
20619 tmp117__ |= (pSrc->suBeamformeeCap << 12);
20620 tmp117__ |= (pSrc->csnofBeamformerAntSup << 13);
20621 tmp117__ |= (pSrc->numSoundingDim << 16);
20622 tmp117__ |= (pSrc->muBeamformerCap << 19);
20623 tmp117__ |= (pSrc->muBeamformeeCap << 20);
20624 tmp117__ |= (pSrc->vhtTXOPPS << 21);
20625 tmp117__ |= (pSrc->htcVHTCap << 22);
20626 tmp117__ |= (pSrc->maxAMPDULenExp << 23);
20627 tmp117__ |= (pSrc->vhtLinkAdaptCap << 26);
20628 tmp117__ |= (pSrc->rxAntPattern << 28);
20629 tmp117__ |= (pSrc->txAntPattern << 29);
20630 tmp117__ |= (pSrc->reserved1 << 30);
Naveen Rawat69623ef2018-04-27 16:11:01 -070020631 if (unlikely(nBuf < 4))
20632 return DOT11F_INCOMPLETE_IE;
20633
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070020634 frameshtonl(pCtx, pBuf, tmp117__, 0);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080020635 *pnConsumed += 4;
20636 pBuf += 4;
20637 nBuf -= 4 ;
20638 frameshtons(pCtx, pBuf, pSrc->rxMCSMap, 0);
20639 *pnConsumed += 2;
20640 pBuf += 2;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070020641 tmp118__ = 0U;
20642 tmp118__ |= (pSrc->rxHighSupDataRate << 0);
20643 tmp118__ |= (pSrc->reserved2 << 13);
Naveen Rawat69623ef2018-04-27 16:11:01 -070020644 if (unlikely(nBuf < 2))
20645 return DOT11F_INCOMPLETE_IE;
20646
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070020647 frameshtons(pCtx, pBuf, tmp118__, 0);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080020648 *pnConsumed += 2;
20649 pBuf += 2;
20650 nBuf -= 2 ;
20651 frameshtons(pCtx, pBuf, pSrc->txMCSMap, 0);
20652 *pnConsumed += 2;
20653 pBuf += 2;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070020654 tmp119__ = 0U;
20655 tmp119__ |= (pSrc->txSupDataRate << 0);
20656 tmp119__ |= (pSrc->reserved3 << 13);
Naveen Rawat69623ef2018-04-27 16:11:01 -070020657 if (unlikely(nBuf < 2))
20658 return DOT11F_INCOMPLETE_IE;
20659
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070020660 frameshtons(pCtx, pBuf, tmp119__, 0);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080020661 *pnConsumed += 2;
20662 /* fieldsEndFlag = 1 */
20663 nBuf -= 2 ;
20664 break;
20665 }
20666 (void)pCtx;
20667 if (pIeLen) {
20668 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
20669 }
20670 return DOT11F_PARSE_SUCCESS;
20671} /* End dot11f_pack_ie_vht_caps. */
20672
20673uint32_t dot11f_pack_ie_vht_operation(tpAniSirGlobal pCtx,
20674 tDot11fIEVHTOperation *pSrc,
20675 uint8_t *pBuf,
20676 uint32_t nBuf,
20677 uint32_t *pnConsumed)
20678{
20679 uint8_t *pIeLen = 0;
20680 uint32_t nConsumedOnEntry = *pnConsumed;
20681 uint32_t nNeeded = 0U;
20682 nNeeded += 5;
20683 while (pSrc->present) {
20684 if (nNeeded > nBuf)
20685 return DOT11F_BUFFER_OVERFLOW;
20686 *pBuf = 192;
20687 ++pBuf; ++(*pnConsumed);
20688 pIeLen = pBuf;
20689 ++pBuf; ++(*pnConsumed);
20690 *pBuf = pSrc->chanWidth;
20691 *pnConsumed += 1;
20692 pBuf += 1;
20693 *pBuf = pSrc->chanCenterFreqSeg1;
20694 *pnConsumed += 1;
20695 pBuf += 1;
20696 *pBuf = pSrc->chanCenterFreqSeg2;
20697 *pnConsumed += 1;
20698 pBuf += 1;
20699 frameshtons(pCtx, pBuf, pSrc->basicMCSSet, 0);
20700 *pnConsumed += 2;
20701 /* fieldsEndFlag = 1 */
20702 break;
20703 }
20704 (void)pCtx;
20705 if (pIeLen) {
20706 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
20707 }
20708 return DOT11F_PARSE_SUCCESS;
20709} /* End dot11f_pack_ie_vht_operation. */
20710
20711uint32_t dot11f_pack_ie_wmm_schedule(tpAniSirGlobal pCtx,
20712 tDot11fIEWMMSchedule *pSrc,
20713 uint8_t *pBuf,
20714 uint32_t nBuf,
20715 uint32_t *pnConsumed)
20716{
20717 uint8_t *pIeLen = 0;
20718 uint32_t nConsumedOnEntry = *pnConsumed;
20719 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070020720 uint16_t tmp120__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080020721 nNeeded += 15;
20722 while (pSrc->present) {
20723 if (nNeeded > nBuf)
20724 return DOT11F_BUFFER_OVERFLOW;
20725 *pBuf = 221;
20726 ++pBuf; ++(*pnConsumed);
20727 pIeLen = pBuf;
20728 ++pBuf; ++(*pnConsumed);
20729 *pBuf = 0x0;
20730 ++pBuf; ++(*pnConsumed);
20731 *pBuf = 0x50;
20732 ++pBuf; ++(*pnConsumed);
20733 *pBuf = 0xf2;
20734 ++pBuf; ++(*pnConsumed);
20735 *pBuf = 0x2;
20736 ++pBuf; ++(*pnConsumed);
20737 *pBuf = 0x9;
20738 ++pBuf; ++(*pnConsumed);
20739 *pBuf = pSrc->version;
20740 *pnConsumed += 1;
20741 pBuf += 1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070020742 tmp120__ = 0U;
20743 tmp120__ |= (pSrc->aggregation << 0);
20744 tmp120__ |= (pSrc->tsid << 1);
20745 tmp120__ |= (pSrc->direction << 5);
20746 tmp120__ |= (pSrc->reserved << 7);
Naveen Rawat69623ef2018-04-27 16:11:01 -070020747 if (unlikely(nBuf < 2))
20748 return DOT11F_INCOMPLETE_IE;
20749
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070020750 frameshtons(pCtx, pBuf, tmp120__, 0);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080020751 *pnConsumed += 2;
20752 pBuf += 2;
20753 nBuf -= 2 ;
20754 frameshtonl(pCtx, pBuf, pSrc->service_start_time, 0);
20755 *pnConsumed += 4;
20756 pBuf += 4;
20757 frameshtonl(pCtx, pBuf, pSrc->service_interval, 0);
20758 *pnConsumed += 4;
20759 pBuf += 4;
20760 frameshtons(pCtx, pBuf, pSrc->max_service_dur, 0);
20761 *pnConsumed += 2;
20762 pBuf += 2;
20763 frameshtons(pCtx, pBuf, pSrc->spec_interval, 0);
20764 *pnConsumed += 2;
20765 /* fieldsEndFlag = 1 */
20766 break;
20767 }
20768 (void)pCtx;
20769 if (pIeLen) {
20770 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
20771 }
20772 return DOT11F_PARSE_SUCCESS;
20773} /* End dot11f_pack_ie_wmm_schedule. */
20774
20775uint32_t dot11f_pack_ie_wmmtclas(tpAniSirGlobal pCtx,
20776 tDot11fIEWMMTCLAS *pSrc,
20777 uint8_t *pBuf,
20778 uint32_t nBuf,
20779 uint32_t *pnConsumed)
20780{
20781 uint8_t *pIeLen = 0;
20782 uint32_t nConsumedOnEntry = *pnConsumed;
20783 uint32_t nNeeded = 0U;
20784 uint32_t status = DOT11F_PARSE_SUCCESS;
20785 status = dot11f_get_packed_iewmmtclas(pCtx, pSrc, &nNeeded);
20786 if (!DOT11F_SUCCEEDED(status))
20787 return status;
20788 while (pSrc->present) {
20789 if (nNeeded > nBuf)
20790 return DOT11F_BUFFER_OVERFLOW;
20791 *pBuf = 221;
20792 ++pBuf; ++(*pnConsumed);
20793 pIeLen = pBuf;
20794 ++pBuf; ++(*pnConsumed);
20795 *pBuf = 0x0;
20796 ++pBuf; ++(*pnConsumed);
20797 *pBuf = 0x50;
20798 ++pBuf; ++(*pnConsumed);
20799 *pBuf = 0xf2;
20800 ++pBuf; ++(*pnConsumed);
20801 *pBuf = 0x2;
20802 ++pBuf; ++(*pnConsumed);
20803 *pBuf = 0x6;
20804 ++pBuf; ++(*pnConsumed);
20805 *pBuf = pSrc->version;
20806 *pnConsumed += 1;
20807 pBuf += 1;
20808 *pBuf = pSrc->user_priority;
20809 *pnConsumed += 1;
20810 pBuf += 1;
20811 *pBuf = pSrc->classifier_type;
20812 *pnConsumed += 1;
20813 pBuf += 1;
20814 *pBuf = pSrc->classifier_mask;
20815 *pnConsumed += 1;
20816 pBuf += 1;
20817 switch (pSrc->classifier_type) {
20818 case 0:
20819 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.EthParams.source, 6);
20820 *pnConsumed += 6;
20821 pBuf += 6;
20822 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.EthParams.dest, 6);
20823 *pnConsumed += 6;
20824 pBuf += 6;
20825 frameshtons(pCtx, pBuf, pSrc->info.EthParams.type, 0);
20826 *pnConsumed += 2;
20827 /* fieldsEndFlag = 1 */
20828 break;
20829 case 1:
20830 *pBuf = pSrc->info.IpParams.version;
20831 *pnConsumed += 1;
20832 pBuf += 1;
20833 switch (pSrc->info.IpParams.version) {
20834 case 4:
20835 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.IpParams.params.IpV4Params.source, 4);
20836 *pnConsumed += 4;
20837 pBuf += 4;
20838 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.IpParams.params.IpV4Params.dest, 4);
20839 *pnConsumed += 4;
20840 pBuf += 4;
20841 frameshtons(pCtx, pBuf, pSrc->info.IpParams.params.IpV4Params.src_port, 0);
20842 *pnConsumed += 2;
20843 pBuf += 2;
20844 frameshtons(pCtx, pBuf, pSrc->info.IpParams.params.IpV4Params.dest_port, 0);
20845 *pnConsumed += 2;
20846 pBuf += 2;
20847 *pBuf = pSrc->info.IpParams.params.IpV4Params.DSCP;
20848 *pnConsumed += 1;
20849 pBuf += 1;
20850 *pBuf = pSrc->info.IpParams.params.IpV4Params.proto;
20851 *pnConsumed += 1;
20852 pBuf += 1;
20853 *pBuf = pSrc->info.IpParams.params.IpV4Params.reserved;
20854 *pnConsumed += 1;
20855 /* fieldsEndFlag = 1 */
20856 break;
20857 case 6:
20858 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.IpParams.params.IpV6Params.source, 10);
20859 *pnConsumed += 10;
20860 pBuf += 10;
20861 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.IpParams.params.IpV6Params.dest, 10);
20862 *pnConsumed += 10;
20863 pBuf += 10;
20864 frameshtons(pCtx, pBuf, pSrc->info.IpParams.params.IpV6Params.src_port, 0);
20865 *pnConsumed += 2;
20866 pBuf += 2;
20867 frameshtons(pCtx, pBuf, pSrc->info.IpParams.params.IpV6Params.dest_port, 0);
20868 *pnConsumed += 2;
20869 pBuf += 2;
20870 DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.IpParams.params.IpV6Params.flow_label, 3);
20871 *pnConsumed += 3;
20872 /* fieldsEndFlag = 1 */
20873 break;
20874 }
20875 break;
20876 case 2:
20877 frameshtons(pCtx, pBuf, pSrc->info.Params8021dq.tag_type, 0);
20878 *pnConsumed += 2;
20879 /* fieldsEndFlag = 1 */
20880 break;
20881 }
20882 break;
20883 }
20884 (void)pCtx;
20885 if (pIeLen) {
20886 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
20887 }
20888 return status;
20889} /* End dot11f_pack_ie_wmmtclas. */
20890
20891uint32_t dot11f_pack_ie_wmmtclasproc(tpAniSirGlobal pCtx,
20892 tDot11fIEWMMTCLASPROC *pSrc,
20893 uint8_t *pBuf,
20894 uint32_t nBuf,
20895 uint32_t *pnConsumed)
20896{
20897 uint8_t *pIeLen = 0;
20898 uint32_t nConsumedOnEntry = *pnConsumed;
20899 uint32_t nNeeded = 0U;
20900 nNeeded += 2;
20901 while (pSrc->present) {
20902 if (nNeeded > nBuf)
20903 return DOT11F_BUFFER_OVERFLOW;
20904 *pBuf = 221;
20905 ++pBuf; ++(*pnConsumed);
20906 pIeLen = pBuf;
20907 ++pBuf; ++(*pnConsumed);
20908 *pBuf = 0x0;
20909 ++pBuf; ++(*pnConsumed);
20910 *pBuf = 0x50;
20911 ++pBuf; ++(*pnConsumed);
20912 *pBuf = 0xf2;
20913 ++pBuf; ++(*pnConsumed);
20914 *pBuf = 0x2;
20915 ++pBuf; ++(*pnConsumed);
20916 *pBuf = 0x7;
20917 ++pBuf; ++(*pnConsumed);
20918 *pBuf = pSrc->version;
20919 *pnConsumed += 1;
20920 pBuf += 1;
20921 *pBuf = pSrc->processing;
20922 *pnConsumed += 1;
20923 /* fieldsEndFlag = 1 */
20924 break;
20925 }
20926 (void)pCtx;
20927 if (pIeLen) {
20928 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
20929 }
20930 return DOT11F_PARSE_SUCCESS;
20931} /* End dot11f_pack_ie_wmmtclasproc. */
20932
20933uint32_t dot11f_pack_ie_wmmts_delay(tpAniSirGlobal pCtx,
20934 tDot11fIEWMMTSDelay *pSrc,
20935 uint8_t *pBuf,
20936 uint32_t nBuf,
20937 uint32_t *pnConsumed)
20938{
20939 uint8_t *pIeLen = 0;
20940 uint32_t nConsumedOnEntry = *pnConsumed;
20941 uint32_t nNeeded = 0U;
20942 nNeeded += 5;
20943 while (pSrc->present) {
20944 if (nNeeded > nBuf)
20945 return DOT11F_BUFFER_OVERFLOW;
20946 *pBuf = 221;
20947 ++pBuf; ++(*pnConsumed);
20948 pIeLen = pBuf;
20949 ++pBuf; ++(*pnConsumed);
20950 *pBuf = 0x0;
20951 ++pBuf; ++(*pnConsumed);
20952 *pBuf = 0x50;
20953 ++pBuf; ++(*pnConsumed);
20954 *pBuf = 0xf2;
20955 ++pBuf; ++(*pnConsumed);
20956 *pBuf = 0x2;
20957 ++pBuf; ++(*pnConsumed);
20958 *pBuf = 0x8;
20959 ++pBuf; ++(*pnConsumed);
20960 *pBuf = pSrc->version;
20961 *pnConsumed += 1;
20962 pBuf += 1;
20963 frameshtonl(pCtx, pBuf, pSrc->delay, 0);
20964 *pnConsumed += 4;
20965 /* fieldsEndFlag = 1 */
20966 break;
20967 }
20968 (void)pCtx;
20969 if (pIeLen) {
20970 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
20971 }
20972 return DOT11F_PARSE_SUCCESS;
20973} /* End dot11f_pack_ie_wmmts_delay. */
20974
20975uint32_t dot11f_pack_ie_wmmtspec(tpAniSirGlobal pCtx,
20976 tDot11fIEWMMTSPEC *pSrc,
20977 uint8_t *pBuf,
20978 uint32_t nBuf,
20979 uint32_t *pnConsumed)
20980{
20981 uint8_t *pIeLen = 0;
20982 uint32_t nConsumedOnEntry = *pnConsumed;
20983 uint32_t nNeeded = 0U;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053020984 uint16_t tmp121__;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070020985 uint8_t tmp122__;
20986 uint16_t tmp123__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080020987 nNeeded += 38;
20988 while (pSrc->present) {
20989 if (nNeeded > nBuf)
20990 return DOT11F_BUFFER_OVERFLOW;
20991 *pBuf = 221;
20992 ++pBuf; ++(*pnConsumed);
20993 pIeLen = pBuf;
20994 ++pBuf; ++(*pnConsumed);
20995 *pBuf = 0x0;
20996 ++pBuf; ++(*pnConsumed);
20997 *pBuf = 0x50;
20998 ++pBuf; ++(*pnConsumed);
20999 *pBuf = 0xf2;
21000 ++pBuf; ++(*pnConsumed);
21001 *pBuf = 0x2;
21002 ++pBuf; ++(*pnConsumed);
21003 *pBuf = 0x2;
21004 ++pBuf; ++(*pnConsumed);
21005 *pBuf = pSrc->version;
21006 *pnConsumed += 1;
21007 pBuf += 1;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053021008 tmp121__ = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070021009 tmp121__ |= (pSrc->traffic_type << 0);
21010 tmp121__ |= (pSrc->tsid << 1);
21011 tmp121__ |= (pSrc->direction << 5);
21012 tmp121__ |= (pSrc->access_policy << 7);
21013 tmp121__ |= (pSrc->aggregation << 9);
21014 tmp121__ |= (pSrc->psb << 10);
21015 tmp121__ |= (pSrc->user_priority << 11);
21016 tmp121__ |= (pSrc->tsinfo_ack_pol << 14);
Naveen Rawat69623ef2018-04-27 16:11:01 -070021017 if (unlikely(nBuf < 2))
21018 return DOT11F_INCOMPLETE_IE;
21019
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053021020 frameshtons(pCtx, pBuf, tmp121__, 0);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080021021 *pnConsumed += 2;
21022 pBuf += 2;
21023 nBuf -= 2 ;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070021024 tmp122__ = 0U;
21025 tmp122__ |= (pSrc->tsinfo_rsvd << 0);
21026 tmp122__ |= (pSrc->burst_size_defn << 7);
21027 if (unlikely(nBuf < 1))
21028 return DOT11F_INCOMPLETE_IE;
21029
21030 *pBuf = tmp122__;
21031 *pnConsumed += 1;
21032 pBuf += 1;
21033 nBuf -= 1 ;
21034 tmp123__ = 0U;
21035 tmp123__ |= (pSrc->size << 0);
21036 tmp123__ |= (pSrc->fixed << 15);
21037 if (unlikely(nBuf < 2))
21038 return DOT11F_INCOMPLETE_IE;
21039
21040 frameshtons(pCtx, pBuf, tmp123__, 0);
21041 *pnConsumed += 2;
21042 pBuf += 2;
21043 nBuf -= 2 ;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080021044 frameshtons(pCtx, pBuf, pSrc->max_msdu_size, 0);
21045 *pnConsumed += 2;
21046 pBuf += 2;
21047 frameshtonl(pCtx, pBuf, pSrc->min_service_int, 0);
21048 *pnConsumed += 4;
21049 pBuf += 4;
21050 frameshtonl(pCtx, pBuf, pSrc->max_service_int, 0);
21051 *pnConsumed += 4;
21052 pBuf += 4;
21053 frameshtonl(pCtx, pBuf, pSrc->inactivity_int, 0);
21054 *pnConsumed += 4;
21055 pBuf += 4;
21056 frameshtonl(pCtx, pBuf, pSrc->suspension_int, 0);
21057 *pnConsumed += 4;
21058 pBuf += 4;
21059 frameshtonl(pCtx, pBuf, pSrc->service_start_time, 0);
21060 *pnConsumed += 4;
21061 pBuf += 4;
21062 frameshtonl(pCtx, pBuf, pSrc->min_data_rate, 0);
21063 *pnConsumed += 4;
21064 pBuf += 4;
21065 frameshtonl(pCtx, pBuf, pSrc->mean_data_rate, 0);
21066 *pnConsumed += 4;
21067 pBuf += 4;
21068 frameshtonl(pCtx, pBuf, pSrc->peak_data_rate, 0);
21069 *pnConsumed += 4;
21070 pBuf += 4;
21071 frameshtonl(pCtx, pBuf, pSrc->burst_size, 0);
21072 *pnConsumed += 4;
21073 pBuf += 4;
21074 frameshtonl(pCtx, pBuf, pSrc->delay_bound, 0);
21075 *pnConsumed += 4;
21076 pBuf += 4;
21077 frameshtonl(pCtx, pBuf, pSrc->min_phy_rate, 0);
21078 *pnConsumed += 4;
21079 pBuf += 4;
21080 frameshtons(pCtx, pBuf, pSrc->surplus_bw_allowance, 0);
21081 *pnConsumed += 2;
21082 pBuf += 2;
21083 frameshtons(pCtx, pBuf, pSrc->medium_time, 0);
21084 *pnConsumed += 2;
21085 /* fieldsEndFlag = 1 */
21086 break;
21087 }
21088 (void)pCtx;
21089 if (pIeLen) {
21090 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
21091 }
21092 return DOT11F_PARSE_SUCCESS;
21093} /* End dot11f_pack_ie_wmmtspec. */
21094
21095uint32_t dot11f_pack_ie_wider_bw_chan_switch_ann(tpAniSirGlobal pCtx,
21096 tDot11fIEWiderBWChanSwitchAnn *pSrc,
21097 uint8_t *pBuf,
21098 uint32_t nBuf,
21099 uint32_t *pnConsumed)
21100{
21101 uint8_t *pIeLen = 0;
21102 uint32_t nConsumedOnEntry = *pnConsumed;
21103 uint32_t nNeeded = 0U;
21104 nNeeded += 3;
21105 while (pSrc->present) {
21106 if (nNeeded > nBuf)
21107 return DOT11F_BUFFER_OVERFLOW;
21108 *pBuf = 194;
21109 ++pBuf; ++(*pnConsumed);
21110 pIeLen = pBuf;
21111 ++pBuf; ++(*pnConsumed);
21112 *pBuf = pSrc->newChanWidth;
21113 *pnConsumed += 1;
21114 pBuf += 1;
21115 *pBuf = pSrc->newCenterChanFreq0;
21116 *pnConsumed += 1;
21117 pBuf += 1;
21118 *pBuf = pSrc->newCenterChanFreq1;
21119 *pnConsumed += 1;
21120 /* fieldsEndFlag = 1 */
21121 break;
21122 }
21123 (void)pCtx;
21124 if (pIeLen) {
21125 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
21126 }
21127 return DOT11F_PARSE_SUCCESS;
21128} /* End dot11f_pack_ie_wider_bw_chan_switch_ann. */
21129
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080021130uint32_t dot11f_pack_ie_azimuth_req(tpAniSirGlobal pCtx,
21131 tDot11fIEazimuth_req *pSrc,
21132 uint8_t *pBuf,
21133 uint32_t nBuf,
21134 uint32_t *pnConsumed)
21135{
21136 uint8_t *pIeLen = 0;
21137 uint32_t nConsumedOnEntry = *pnConsumed;
21138 uint32_t nNeeded = 0U;
21139 nNeeded += 1;
21140 while (pSrc->present) {
21141 if (nNeeded > nBuf)
21142 return DOT11F_BUFFER_OVERFLOW;
21143 *pBuf = 1;
21144 ++pBuf; ++(*pnConsumed);
21145 pIeLen = pBuf;
21146 ++pBuf; ++(*pnConsumed);
21147 *pBuf = pSrc->request;
21148 *pnConsumed += 1;
21149 /* fieldsEndFlag = 1 */
21150 break;
21151 }
21152 (void)pCtx;
21153 if (pIeLen) {
21154 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
21155 }
21156 return DOT11F_PARSE_SUCCESS;
21157} /* End dot11f_pack_ie_azimuth_req. */
21158
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053021159uint32_t dot11f_pack_ie_beacon_report_frm_body_fragment_id(tpAniSirGlobal pCtx,
21160 tDot11fIEbeacon_report_frm_body_fragment_id *pSrc,
21161 uint8_t *pBuf,
21162 uint32_t nBuf,
21163 uint32_t *pnConsumed)
21164{
21165 uint8_t *pIeLen = 0;
21166 uint32_t nConsumedOnEntry = *pnConsumed;
21167 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070021168 uint16_t tmp124__;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053021169 nNeeded += 2;
21170 while (pSrc->present) {
21171 if (nNeeded > nBuf)
21172 return DOT11F_BUFFER_OVERFLOW;
21173 *pBuf = 2;
21174 ++pBuf; ++(*pnConsumed);
21175 pIeLen = pBuf;
21176 ++pBuf; ++(*pnConsumed);
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070021177 tmp124__ = 0U;
21178 tmp124__ |= (pSrc->beacon_report_id << 0);
21179 tmp124__ |= (pSrc->fragment_id_number << 8);
21180 tmp124__ |= (pSrc->more_fragments << 15);
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053021181 if (unlikely(nBuf < 2))
21182 return DOT11F_INCOMPLETE_IE;
21183
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070021184 frameshtons(pCtx, pBuf, tmp124__, 0);
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053021185 *pnConsumed += 2;
21186 /* fieldsEndFlag = 1 */
21187 nBuf -= 2 ;
21188 break;
21189 }
21190 (void)pCtx;
21191 if (pIeLen) {
21192 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
21193 }
21194 return DOT11F_PARSE_SUCCESS;
21195} /* End dot11f_pack_ie_beacon_report_frm_body_fragment_id. */
21196
21197uint32_t dot11f_pack_ie_last_beacon_report_indication(tpAniSirGlobal pCtx,
21198 tDot11fIElast_beacon_report_indication *pSrc,
21199 uint8_t *pBuf,
21200 uint32_t nBuf,
21201 uint32_t *pnConsumed)
21202{
21203 uint8_t *pIeLen = 0;
21204 uint32_t nConsumedOnEntry = *pnConsumed;
21205 uint32_t nNeeded = 0U;
21206 nNeeded += 1;
21207 while (pSrc->present) {
21208 if (nNeeded > nBuf)
21209 return DOT11F_BUFFER_OVERFLOW;
21210 *pBuf = 164;
21211 ++pBuf; ++(*pnConsumed);
21212 pIeLen = pBuf;
21213 ++pBuf; ++(*pnConsumed);
21214 *pBuf = pSrc->last_fragment;
21215 *pnConsumed += 1;
21216 /* fieldsEndFlag = 1 */
21217 break;
21218 }
21219 (void)pCtx;
21220 if (pIeLen) {
21221 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
21222 }
21223 return DOT11F_PARSE_SUCCESS;
21224} /* End dot11f_pack_ie_last_beacon_report_indication. */
21225
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080021226uint32_t dot11f_pack_ie_max_age(tpAniSirGlobal pCtx,
21227 tDot11fIEmax_age *pSrc,
21228 uint8_t *pBuf,
21229 uint32_t nBuf,
21230 uint32_t *pnConsumed)
21231{
21232 uint8_t *pIeLen = 0;
21233 uint32_t nConsumedOnEntry = *pnConsumed;
21234 uint32_t nNeeded = 0U;
21235 nNeeded += 2;
21236 while (pSrc->present) {
21237 if (nNeeded > nBuf)
21238 return DOT11F_BUFFER_OVERFLOW;
21239 *pBuf = 4;
21240 ++pBuf; ++(*pnConsumed);
21241 pIeLen = pBuf;
21242 ++pBuf; ++(*pnConsumed);
21243 frameshtons(pCtx, pBuf, pSrc->max_age, 0);
21244 *pnConsumed += 2;
21245 /* fieldsEndFlag = 1 */
21246 break;
21247 }
21248 (void)pCtx;
21249 if (pIeLen) {
21250 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
21251 }
21252 return DOT11F_PARSE_SUCCESS;
21253} /* End dot11f_pack_ie_max_age. */
21254
21255uint32_t dot11f_pack_ie_neighbor_rpt(tpAniSirGlobal pCtx,
21256 tDot11fIEneighbor_rpt *pSrc,
21257 uint8_t *pBuf,
21258 uint32_t nBuf,
21259 uint32_t *pnConsumed)
21260{
21261 uint8_t *pIeLen = 0;
21262 uint32_t nConsumedOnEntry = *pnConsumed;
21263 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070021264 uint8_t tmp125__;
21265 uint8_t tmp126__;
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080021266 uint32_t status = DOT11F_PARSE_SUCCESS;
21267 status = dot11f_get_packed_ie_neighbor_rpt(pCtx, pSrc, &nNeeded);
21268 if (!DOT11F_SUCCEEDED(status))
21269 return status;
21270 while (pSrc->present) {
21271 if (nNeeded > nBuf)
21272 return DOT11F_BUFFER_OVERFLOW;
21273 *pBuf = 52;
21274 ++pBuf; --nBuf; ++(*pnConsumed);
21275 pIeLen = pBuf;
21276 ++pBuf; --nBuf; ++(*pnConsumed);
21277 DOT11F_MEMCPY(pCtx, pBuf, pSrc->bssid, 6);
21278 *pnConsumed += 6;
21279 pBuf += 6;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070021280 tmp125__ = 0U;
21281 tmp125__ |= (pSrc->APReachability << 0);
21282 tmp125__ |= (pSrc->Security << 2);
21283 tmp125__ |= (pSrc->KeyScope << 3);
21284 tmp125__ |= (pSrc->SpecMgmtCap << 4);
21285 tmp125__ |= (pSrc->QosCap << 5);
21286 tmp125__ |= (pSrc->apsd << 6);
21287 tmp125__ |= (pSrc->rrm << 7);
Naveen Rawat69623ef2018-04-27 16:11:01 -070021288 if (unlikely(nBuf < 1))
21289 return DOT11F_INCOMPLETE_IE;
21290
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070021291 *pBuf = tmp125__;
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080021292 *pnConsumed += 1;
21293 pBuf += 1;
21294 nBuf -= 1 ;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070021295 tmp126__ = 0U;
21296 tmp126__ |= (pSrc->DelayedBA << 0);
21297 tmp126__ |= (pSrc->ImmBA << 1);
21298 tmp126__ |= (pSrc->MobilityDomain << 2);
21299 tmp126__ |= (pSrc->reserved << 3);
Naveen Rawat69623ef2018-04-27 16:11:01 -070021300 if (unlikely(nBuf < 1))
21301 return DOT11F_INCOMPLETE_IE;
21302
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070021303 *pBuf = tmp126__;
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080021304 *pnConsumed += 1;
21305 pBuf += 1;
21306 nBuf -= 1 ;
21307 frameshtons(pCtx, pBuf, pSrc->reserved1, 0);
21308 *pnConsumed += 2;
21309 pBuf += 2;
21310 *pBuf = pSrc->regulatoryClass;
21311 *pnConsumed += 1;
21312 pBuf += 1;
21313 *pBuf = pSrc->channel;
21314 *pnConsumed += 1;
21315 pBuf += 1;
21316 *pBuf = pSrc->PhyType;
21317 *pnConsumed += 1;
21318 pBuf += 1;
21319 status = pack_core(pCtx,
21320 (uint8_t *)pSrc,
21321 pBuf,
21322 nBuf,
21323 pnConsumed,
21324 FFS_neighbor_rpt,
21325 IES_neighbor_rpt);
21326 break;
21327 }
21328 (void)pCtx;
21329 if (pIeLen) {
21330 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
21331 }
21332 return status;
21333} /* End dot11f_pack_ie_neighbor_rpt. */
21334
21335uint32_t dot11f_pack_ie_req_mac_addr(tpAniSirGlobal pCtx,
21336 tDot11fIEreq_mac_addr *pSrc,
21337 uint8_t *pBuf,
21338 uint32_t nBuf,
21339 uint32_t *pnConsumed)
21340{
21341 uint8_t *pIeLen = 0;
21342 uint32_t nConsumedOnEntry = *pnConsumed;
21343 uint32_t nNeeded = 0U;
21344 nNeeded += 6;
21345 while (pSrc->present) {
21346 if (nNeeded > nBuf)
21347 return DOT11F_BUFFER_OVERFLOW;
21348 *pBuf = 2;
21349 ++pBuf; ++(*pnConsumed);
21350 pIeLen = pBuf;
21351 ++pBuf; ++(*pnConsumed);
21352 DOT11F_MEMCPY(pCtx, pBuf, pSrc->addr, 6);
21353 *pnConsumed += 6;
21354 /* fieldsEndFlag = 1 */
21355 break;
21356 }
21357 (void)pCtx;
21358 if (pIeLen) {
21359 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
21360 }
21361 return DOT11F_PARSE_SUCCESS;
21362} /* End dot11f_pack_ie_req_mac_addr. */
21363
21364uint32_t dot11f_pack_ie_tgt_mac_addr(tpAniSirGlobal pCtx,
21365 tDot11fIEtgt_mac_addr *pSrc,
21366 uint8_t *pBuf,
21367 uint32_t nBuf,
21368 uint32_t *pnConsumed)
21369{
21370 uint8_t *pIeLen = 0;
21371 uint32_t nConsumedOnEntry = *pnConsumed;
21372 uint32_t nNeeded = 0U;
21373 nNeeded += 6;
21374 while (pSrc->present) {
21375 if (nNeeded > nBuf)
21376 return DOT11F_BUFFER_OVERFLOW;
21377 *pBuf = 3;
21378 ++pBuf; ++(*pnConsumed);
21379 pIeLen = pBuf;
21380 ++pBuf; ++(*pnConsumed);
21381 DOT11F_MEMCPY(pCtx, pBuf, pSrc->addr, 6);
21382 *pnConsumed += 6;
21383 /* fieldsEndFlag = 1 */
21384 break;
21385 }
21386 (void)pCtx;
21387 if (pIeLen) {
21388 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
21389 }
21390 return DOT11F_PARSE_SUCCESS;
21391} /* End dot11f_pack_ie_tgt_mac_addr. */
21392
Abhishek Singh37456d22016-08-29 16:05:11 +053021393uint32_t dot11f_pack_ie_vht_transmit_power_env(tpAniSirGlobal pCtx,
21394 tDot11fIEvht_transmit_power_env *pSrc,
21395 uint8_t *pBuf,
21396 uint32_t nBuf,
21397 uint32_t *pnConsumed)
21398{
21399 uint8_t *pIeLen = 0;
21400 uint32_t nConsumedOnEntry = *pnConsumed;
21401 uint32_t nNeeded = 0U;
21402 nNeeded += pSrc->num_bytes;
21403 while (pSrc->present) {
21404 if (nNeeded > nBuf)
21405 return DOT11F_BUFFER_OVERFLOW;
21406 *pBuf = 195;
21407 ++pBuf; ++(*pnConsumed);
21408 pIeLen = pBuf;
21409 ++pBuf; ++(*pnConsumed);
21410 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->bytes), pSrc->num_bytes);
21411 *pnConsumed += pSrc->num_bytes;
21412 /* fieldsEndFlag = 1 */
21413 break;
21414 }
21415 (void)pCtx;
21416 if (pIeLen) {
21417 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
21418 }
21419 return DOT11F_PARSE_SUCCESS;
21420} /* End dot11f_pack_ie_vht_transmit_power_env. */
21421
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080021422uint32_t dot11f_pack_ie_aid(tpAniSirGlobal pCtx,
21423 tDot11fIEAID *pSrc,
21424 uint8_t *pBuf,
21425 uint32_t nBuf,
21426 uint32_t *pnConsumed)
21427{
21428 uint8_t *pIeLen = 0;
21429 uint32_t nConsumedOnEntry = *pnConsumed;
21430 uint32_t nNeeded = 0U;
21431 nNeeded += 2;
21432 while (pSrc->present) {
21433 if (nNeeded > nBuf)
21434 return DOT11F_BUFFER_OVERFLOW;
21435 *pBuf = 197;
21436 ++pBuf; ++(*pnConsumed);
21437 pIeLen = pBuf;
21438 ++pBuf; ++(*pnConsumed);
21439 frameshtons(pCtx, pBuf, pSrc->assocId, 0);
21440 *pnConsumed += 2;
21441 /* fieldsEndFlag = 1 */
21442 break;
21443 }
21444 (void)pCtx;
21445 if (pIeLen) {
21446 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
21447 }
21448 return DOT11F_PARSE_SUCCESS;
21449} /* End dot11f_pack_ie_aid. */
21450
21451uint32_t dot11f_pack_ie_cf_params(tpAniSirGlobal pCtx,
21452 tDot11fIECFParams *pSrc,
21453 uint8_t *pBuf,
21454 uint32_t nBuf,
21455 uint32_t *pnConsumed)
21456{
21457 uint8_t *pIeLen = 0;
21458 uint32_t nConsumedOnEntry = *pnConsumed;
21459 uint32_t nNeeded = 0U;
21460 nNeeded += 6;
21461 while (pSrc->present) {
21462 if (nNeeded > nBuf)
21463 return DOT11F_BUFFER_OVERFLOW;
21464 *pBuf = 4;
21465 ++pBuf; ++(*pnConsumed);
21466 pIeLen = pBuf;
21467 ++pBuf; ++(*pnConsumed);
21468 *pBuf = pSrc->cfp_count;
21469 *pnConsumed += 1;
21470 pBuf += 1;
21471 *pBuf = pSrc->cfp_period;
21472 *pnConsumed += 1;
21473 pBuf += 1;
21474 frameshtons(pCtx, pBuf, pSrc->cfp_maxduration, 0);
21475 *pnConsumed += 2;
21476 pBuf += 2;
21477 frameshtons(pCtx, pBuf, pSrc->cfp_durremaining, 0);
21478 *pnConsumed += 2;
21479 /* fieldsEndFlag = 1 */
21480 break;
21481 }
21482 (void)pCtx;
21483 if (pIeLen) {
21484 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
21485 }
21486 return DOT11F_PARSE_SUCCESS;
21487} /* End dot11f_pack_ie_cf_params. */
21488
21489uint32_t dot11f_pack_ie_challenge_text(tpAniSirGlobal pCtx,
21490 tDot11fIEChallengeText *pSrc,
21491 uint8_t *pBuf,
21492 uint32_t nBuf,
21493 uint32_t *pnConsumed)
21494{
21495 uint8_t *pIeLen = 0;
21496 uint32_t nConsumedOnEntry = *pnConsumed;
21497 uint32_t nNeeded = 0U;
21498 nNeeded += pSrc->num_text;
21499 while (pSrc->present) {
21500 if (nNeeded > nBuf)
21501 return DOT11F_BUFFER_OVERFLOW;
21502 *pBuf = 16;
21503 ++pBuf; ++(*pnConsumed);
21504 pIeLen = pBuf;
21505 ++pBuf; ++(*pnConsumed);
21506 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->text), pSrc->num_text);
21507 *pnConsumed += pSrc->num_text;
21508 /* fieldsEndFlag = 1 */
21509 break;
21510 }
21511 (void)pCtx;
21512 if (pIeLen) {
21513 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
21514 }
21515 return DOT11F_PARSE_SUCCESS;
21516} /* End dot11f_pack_ie_challenge_text. */
21517
21518uint32_t dot11f_pack_ie_chan_switch_ann(tpAniSirGlobal pCtx,
21519 tDot11fIEChanSwitchAnn *pSrc,
21520 uint8_t *pBuf,
21521 uint32_t nBuf,
21522 uint32_t *pnConsumed)
21523{
21524 uint8_t *pIeLen = 0;
21525 uint32_t nConsumedOnEntry = *pnConsumed;
21526 uint32_t nNeeded = 0U;
21527 nNeeded += 3;
21528 while (pSrc->present) {
21529 if (nNeeded > nBuf)
21530 return DOT11F_BUFFER_OVERFLOW;
21531 *pBuf = 37;
21532 ++pBuf; ++(*pnConsumed);
21533 pIeLen = pBuf;
21534 ++pBuf; ++(*pnConsumed);
21535 *pBuf = pSrc->switchMode;
21536 *pnConsumed += 1;
21537 pBuf += 1;
21538 *pBuf = pSrc->newChannel;
21539 *pnConsumed += 1;
21540 pBuf += 1;
21541 *pBuf = pSrc->switchCount;
21542 *pnConsumed += 1;
21543 /* fieldsEndFlag = 1 */
21544 break;
21545 }
21546 (void)pCtx;
21547 if (pIeLen) {
21548 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
21549 }
21550 return DOT11F_PARSE_SUCCESS;
21551} /* End dot11f_pack_ie_chan_switch_ann. */
21552
21553uint32_t dot11f_pack_ie_channel_switch_wrapper(tpAniSirGlobal pCtx,
21554 tDot11fIEChannelSwitchWrapper *pSrc,
21555 uint8_t *pBuf,
21556 uint32_t nBuf,
21557 uint32_t *pnConsumed)
21558{
21559 uint8_t *pIeLen = 0;
21560 uint32_t nConsumedOnEntry = *pnConsumed;
21561 uint32_t nNeeded = 0U;
21562 uint32_t status = DOT11F_PARSE_SUCCESS;
21563 status = dot11f_get_packed_ie_channel_switch_wrapper(pCtx, pSrc, &nNeeded);
21564 if (!DOT11F_SUCCEEDED(status))
21565 return status;
21566 while (pSrc->present) {
21567 if (nNeeded > nBuf)
21568 return DOT11F_BUFFER_OVERFLOW;
21569 *pBuf = 196;
21570 ++pBuf; --nBuf; ++(*pnConsumed);
21571 pIeLen = pBuf;
21572 ++pBuf; --nBuf; ++(*pnConsumed);
21573 status = pack_core(pCtx,
21574 (uint8_t *)pSrc,
21575 pBuf,
21576 nBuf,
21577 pnConsumed,
21578 FFS_ChannelSwitchWrapper,
21579 IES_ChannelSwitchWrapper);
21580 break;
21581 }
21582 (void)pCtx;
21583 if (pIeLen) {
21584 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
21585 }
21586 return status;
21587} /* End dot11f_pack_ie_channel_switch_wrapper. */
21588
21589uint32_t dot11f_pack_ie_country(tpAniSirGlobal pCtx,
21590 tDot11fIECountry *pSrc,
21591 uint8_t *pBuf,
21592 uint32_t nBuf,
21593 uint32_t *pnConsumed)
21594{
21595 uint8_t *pIeLen = 0;
21596 uint32_t nConsumedOnEntry = *pnConsumed;
21597 uint32_t nNeeded = 0U;
21598 uint32_t status = DOT11F_PARSE_SUCCESS;
21599 status = dot11f_get_packed_ie_country(pCtx, pSrc, &nNeeded);
21600 if (!DOT11F_SUCCEEDED(status))
21601 return status;
21602 while (pSrc->present) {
21603 if (nNeeded > nBuf)
21604 return DOT11F_BUFFER_OVERFLOW;
21605 *pBuf = 7;
21606 ++pBuf; ++(*pnConsumed);
21607 pIeLen = pBuf;
21608 ++pBuf; ++(*pnConsumed);
21609 DOT11F_MEMCPY(pCtx, pBuf, pSrc->country, 3);
21610 *pnConsumed += 3;
21611 pBuf += 3;
21612 if (pSrc->num_triplets) {
21613 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->triplets), (pSrc->num_triplets * 3));
21614 *pnConsumed += (pSrc->num_triplets * 3);
21615 /* fieldsEndFlag = 1 */
21616 } else {
21617 break;
21618 }
21619 break;
21620 }
21621 (void)pCtx;
21622 if (pIeLen) {
21623 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
21624 }
21625 return status;
21626} /* End dot11f_pack_ie_country. */
21627
21628uint32_t dot11f_pack_ie_ds_params(tpAniSirGlobal pCtx,
21629 tDot11fIEDSParams *pSrc,
21630 uint8_t *pBuf,
21631 uint32_t nBuf,
21632 uint32_t *pnConsumed)
21633{
21634 uint8_t *pIeLen = 0;
21635 uint32_t nConsumedOnEntry = *pnConsumed;
21636 uint32_t nNeeded = 0U;
21637 nNeeded += 1;
21638 while (pSrc->present) {
21639 if (nNeeded > nBuf)
21640 return DOT11F_BUFFER_OVERFLOW;
21641 *pBuf = 3;
21642 ++pBuf; ++(*pnConsumed);
21643 pIeLen = pBuf;
21644 ++pBuf; ++(*pnConsumed);
21645 *pBuf = pSrc->curr_channel;
21646 *pnConsumed += 1;
21647 /* fieldsEndFlag = 1 */
21648 break;
21649 }
21650 (void)pCtx;
21651 if (pIeLen) {
21652 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
21653 }
21654 return DOT11F_PARSE_SUCCESS;
21655} /* End dot11f_pack_ie_ds_params. */
21656
21657uint32_t dot11f_pack_ie_edca_param_set(tpAniSirGlobal pCtx,
21658 tDot11fIEEDCAParamSet *pSrc,
21659 uint8_t *pBuf,
21660 uint32_t nBuf,
21661 uint32_t *pnConsumed)
21662{
21663 uint8_t *pIeLen = 0;
21664 uint32_t nConsumedOnEntry = *pnConsumed;
21665 uint32_t nNeeded = 0U;
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070021666 uint8_t tmp127__;
21667 uint8_t tmp128__;
Abhishek Singh951eed82017-07-06 16:53:19 +053021668 uint8_t tmp129__;
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080021669 uint8_t tmp130__;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053021670 uint8_t tmp131__;
21671 uint8_t tmp132__;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070021672 uint8_t tmp133__;
21673 uint8_t tmp134__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080021674 nNeeded += 18;
21675 while (pSrc->present) {
21676 if (nNeeded > nBuf)
21677 return DOT11F_BUFFER_OVERFLOW;
21678 *pBuf = 12;
21679 ++pBuf; ++(*pnConsumed);
21680 pIeLen = pBuf;
21681 ++pBuf; ++(*pnConsumed);
21682 *pBuf = pSrc->qos;
21683 *pnConsumed += 1;
21684 pBuf += 1;
21685 *pBuf = pSrc->reserved;
21686 *pnConsumed += 1;
21687 pBuf += 1;
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080021688 tmp127__ = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070021689 tmp127__ |= (pSrc->acbe_aifsn << 0);
21690 tmp127__ |= (pSrc->acbe_acm << 4);
21691 tmp127__ |= (pSrc->acbe_aci << 5);
21692 tmp127__ |= (pSrc->unused1 << 7);
Naveen Rawat69623ef2018-04-27 16:11:01 -070021693 if (unlikely(nBuf < 1))
21694 return DOT11F_INCOMPLETE_IE;
21695
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080021696 *pBuf = tmp127__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080021697 *pnConsumed += 1;
21698 pBuf += 1;
21699 nBuf -= 1 ;
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080021700 tmp128__ = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070021701 tmp128__ |= (pSrc->acbe_acwmin << 0);
21702 tmp128__ |= (pSrc->acbe_acwmax << 4);
Naveen Rawat69623ef2018-04-27 16:11:01 -070021703 if (unlikely(nBuf < 1))
21704 return DOT11F_INCOMPLETE_IE;
21705
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080021706 *pBuf = tmp128__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080021707 *pnConsumed += 1;
21708 pBuf += 1;
21709 nBuf -= 1 ;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070021710 frameshtons(pCtx, pBuf, pSrc->acbe_txoplimit, 0);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080021711 *pnConsumed += 2;
21712 pBuf += 2;
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080021713 tmp129__ = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070021714 tmp129__ |= (pSrc->acbk_aifsn << 0);
21715 tmp129__ |= (pSrc->acbk_acm << 4);
21716 tmp129__ |= (pSrc->acbk_aci << 5);
21717 tmp129__ |= (pSrc->unused2 << 7);
Naveen Rawat69623ef2018-04-27 16:11:01 -070021718 if (unlikely(nBuf < 1))
21719 return DOT11F_INCOMPLETE_IE;
21720
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080021721 *pBuf = tmp129__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080021722 *pnConsumed += 1;
21723 pBuf += 1;
21724 nBuf -= 1 ;
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080021725 tmp130__ = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070021726 tmp130__ |= (pSrc->acbk_acwmin << 0);
21727 tmp130__ |= (pSrc->acbk_acwmax << 4);
Naveen Rawat69623ef2018-04-27 16:11:01 -070021728 if (unlikely(nBuf < 1))
21729 return DOT11F_INCOMPLETE_IE;
21730
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080021731 *pBuf = tmp130__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080021732 *pnConsumed += 1;
21733 pBuf += 1;
21734 nBuf -= 1 ;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070021735 frameshtons(pCtx, pBuf, pSrc->acbk_txoplimit, 0);
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053021736 *pnConsumed += 2;
21737 pBuf += 2;
21738 tmp131__ = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070021739 tmp131__ |= (pSrc->acvi_aifsn << 0);
21740 tmp131__ |= (pSrc->acvi_acm << 4);
21741 tmp131__ |= (pSrc->acvi_aci << 5);
21742 tmp131__ |= (pSrc->unused3 << 7);
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053021743 if (unlikely(nBuf < 1))
21744 return DOT11F_INCOMPLETE_IE;
21745
21746 *pBuf = tmp131__;
21747 *pnConsumed += 1;
21748 pBuf += 1;
21749 nBuf -= 1 ;
21750 tmp132__ = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070021751 tmp132__ |= (pSrc->acvi_acwmin << 0);
21752 tmp132__ |= (pSrc->acvi_acwmax << 4);
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053021753 if (unlikely(nBuf < 1))
21754 return DOT11F_INCOMPLETE_IE;
21755
21756 *pBuf = tmp132__;
21757 *pnConsumed += 1;
21758 pBuf += 1;
21759 nBuf -= 1 ;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070021760 frameshtons(pCtx, pBuf, pSrc->acvi_txoplimit, 0);
21761 *pnConsumed += 2;
21762 pBuf += 2;
21763 tmp133__ = 0U;
21764 tmp133__ |= (pSrc->acvo_aifsn << 0);
21765 tmp133__ |= (pSrc->acvo_acm << 4);
21766 tmp133__ |= (pSrc->acvo_aci << 5);
21767 tmp133__ |= (pSrc->unused4 << 7);
21768 if (unlikely(nBuf < 1))
21769 return DOT11F_INCOMPLETE_IE;
21770
21771 *pBuf = tmp133__;
21772 *pnConsumed += 1;
21773 pBuf += 1;
21774 nBuf -= 1 ;
21775 tmp134__ = 0U;
21776 tmp134__ |= (pSrc->acvo_acwmin << 0);
21777 tmp134__ |= (pSrc->acvo_acwmax << 4);
21778 if (unlikely(nBuf < 1))
21779 return DOT11F_INCOMPLETE_IE;
21780
21781 *pBuf = tmp134__;
21782 *pnConsumed += 1;
21783 pBuf += 1;
21784 nBuf -= 1 ;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080021785 frameshtons(pCtx, pBuf, pSrc->acvo_txoplimit, 0);
21786 *pnConsumed += 2;
21787 /* fieldsEndFlag = 1 */
21788 break;
21789 }
21790 (void)pCtx;
21791 if (pIeLen) {
21792 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
21793 }
21794 return DOT11F_PARSE_SUCCESS;
21795} /* End dot11f_pack_ie_edca_param_set. */
21796
21797uint32_t dot11f_pack_ie_erp_info(tpAniSirGlobal pCtx,
21798 tDot11fIEERPInfo *pSrc,
21799 uint8_t *pBuf,
21800 uint32_t nBuf,
21801 uint32_t *pnConsumed)
21802{
21803 uint8_t *pIeLen = 0;
21804 uint32_t nConsumedOnEntry = *pnConsumed;
21805 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070021806 uint8_t tmp135__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080021807 nNeeded += 1;
21808 while (pSrc->present) {
21809 if (nNeeded > nBuf)
21810 return DOT11F_BUFFER_OVERFLOW;
21811 *pBuf = 42;
21812 ++pBuf; ++(*pnConsumed);
21813 pIeLen = pBuf;
21814 ++pBuf; ++(*pnConsumed);
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070021815 tmp135__ = 0U;
21816 tmp135__ |= (pSrc->non_erp_present << 0);
21817 tmp135__ |= (pSrc->use_prot << 1);
21818 tmp135__ |= (pSrc->barker_preamble << 2);
21819 tmp135__ |= (pSrc->unused << 3);
Naveen Rawat69623ef2018-04-27 16:11:01 -070021820 if (unlikely(nBuf < 1))
21821 return DOT11F_INCOMPLETE_IE;
21822
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070021823 *pBuf = tmp135__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080021824 *pnConsumed += 1;
21825 /* fieldsEndFlag = 1 */
21826 nBuf -= 1 ;
21827 break;
21828 }
21829 (void)pCtx;
21830 if (pIeLen) {
21831 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
21832 }
21833 return DOT11F_PARSE_SUCCESS;
21834} /* End dot11f_pack_ie_erp_info. */
21835
21836uint32_t dot11f_pack_ie_ese_cckm_opaque(tpAniSirGlobal pCtx,
21837 tDot11fIEESECckmOpaque *pSrc,
21838 uint8_t *pBuf,
21839 uint32_t nBuf,
21840 uint32_t *pnConsumed)
21841{
21842 uint8_t *pIeLen = 0;
21843 uint32_t nConsumedOnEntry = *pnConsumed;
21844 uint32_t nNeeded = 0U;
21845 nNeeded += pSrc->num_data;
21846 while (pSrc->present) {
21847 if (nNeeded > nBuf)
21848 return DOT11F_BUFFER_OVERFLOW;
21849 *pBuf = 156;
21850 ++pBuf; ++(*pnConsumed);
21851 pIeLen = pBuf;
21852 ++pBuf; ++(*pnConsumed);
21853 *pBuf = 0x0;
21854 ++pBuf; ++(*pnConsumed);
21855 *pBuf = 0x40;
21856 ++pBuf; ++(*pnConsumed);
21857 *pBuf = 0x96;
21858 ++pBuf; ++(*pnConsumed);
21859 *pBuf = 0x0;
21860 ++pBuf; ++(*pnConsumed);
21861 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->data), pSrc->num_data);
21862 *pnConsumed += pSrc->num_data;
21863 /* fieldsEndFlag = 1 */
21864 break;
21865 }
21866 (void)pCtx;
21867 if (pIeLen) {
21868 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
21869 }
21870 return DOT11F_PARSE_SUCCESS;
21871} /* End dot11f_pack_ie_ese_cckm_opaque. */
21872
21873uint32_t dot11f_pack_ie_ese_rad_mgmt_cap(tpAniSirGlobal pCtx,
21874 tDot11fIEESERadMgmtCap *pSrc,
21875 uint8_t *pBuf,
21876 uint32_t nBuf,
21877 uint32_t *pnConsumed)
21878{
21879 uint8_t *pIeLen = 0;
21880 uint32_t nConsumedOnEntry = *pnConsumed;
21881 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070021882 uint8_t tmp136__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080021883 nNeeded += 2;
21884 while (pSrc->present) {
21885 if (nNeeded > nBuf)
21886 return DOT11F_BUFFER_OVERFLOW;
21887 *pBuf = 221;
21888 ++pBuf; ++(*pnConsumed);
21889 pIeLen = pBuf;
21890 ++pBuf; ++(*pnConsumed);
21891 *pBuf = 0x0;
21892 ++pBuf; ++(*pnConsumed);
21893 *pBuf = 0x40;
21894 ++pBuf; ++(*pnConsumed);
21895 *pBuf = 0x96;
21896 ++pBuf; ++(*pnConsumed);
21897 *pBuf = 0x1;
21898 ++pBuf; ++(*pnConsumed);
21899 *pBuf = pSrc->mgmt_state;
21900 *pnConsumed += 1;
21901 pBuf += 1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070021902 tmp136__ = 0U;
21903 tmp136__ |= (pSrc->mbssid_mask << 0);
21904 tmp136__ |= (pSrc->reserved << 3);
Naveen Rawat69623ef2018-04-27 16:11:01 -070021905 if (unlikely(nBuf < 1))
21906 return DOT11F_INCOMPLETE_IE;
21907
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070021908 *pBuf = tmp136__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080021909 *pnConsumed += 1;
21910 /* fieldsEndFlag = 1 */
21911 nBuf -= 1 ;
21912 break;
21913 }
21914 (void)pCtx;
21915 if (pIeLen) {
21916 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
21917 }
21918 return DOT11F_PARSE_SUCCESS;
21919} /* End dot11f_pack_ie_ese_rad_mgmt_cap. */
21920
21921uint32_t dot11f_pack_ie_ese_traf_strm_met(tpAniSirGlobal pCtx,
21922 tDot11fIEESETrafStrmMet *pSrc,
21923 uint8_t *pBuf,
21924 uint32_t nBuf,
21925 uint32_t *pnConsumed)
21926{
21927 uint8_t *pIeLen = 0;
21928 uint32_t nConsumedOnEntry = *pnConsumed;
21929 uint32_t nNeeded = 0U;
21930 nNeeded += 4;
21931 while (pSrc->present) {
21932 if (nNeeded > nBuf)
21933 return DOT11F_BUFFER_OVERFLOW;
21934 *pBuf = 221;
21935 ++pBuf; ++(*pnConsumed);
21936 pIeLen = pBuf;
21937 ++pBuf; ++(*pnConsumed);
21938 *pBuf = 0x0;
21939 ++pBuf; ++(*pnConsumed);
21940 *pBuf = 0x40;
21941 ++pBuf; ++(*pnConsumed);
21942 *pBuf = 0x96;
21943 ++pBuf; ++(*pnConsumed);
21944 *pBuf = 0x7;
21945 ++pBuf; ++(*pnConsumed);
21946 *pBuf = pSrc->tsid;
21947 *pnConsumed += 1;
21948 pBuf += 1;
21949 *pBuf = pSrc->state;
21950 *pnConsumed += 1;
21951 pBuf += 1;
21952 frameshtons(pCtx, pBuf, pSrc->msmt_interval, 0);
21953 *pnConsumed += 2;
21954 /* fieldsEndFlag = 1 */
21955 break;
21956 }
21957 (void)pCtx;
21958 if (pIeLen) {
21959 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
21960 }
21961 return DOT11F_PARSE_SUCCESS;
21962} /* End dot11f_pack_ie_ese_traf_strm_met. */
21963
21964uint32_t dot11f_pack_ie_ese_traf_strm_rate_set(tpAniSirGlobal pCtx,
21965 tDot11fIEESETrafStrmRateSet *pSrc,
21966 uint8_t *pBuf,
21967 uint32_t nBuf,
21968 uint32_t *pnConsumed)
21969{
21970 uint8_t *pIeLen = 0;
21971 uint32_t nConsumedOnEntry = *pnConsumed;
21972 uint32_t nNeeded = 0U;
21973 nNeeded += (pSrc->num_tsrates + 1);
21974 while (pSrc->present) {
21975 if (nNeeded > nBuf)
21976 return DOT11F_BUFFER_OVERFLOW;
21977 *pBuf = 221;
21978 ++pBuf; ++(*pnConsumed);
21979 pIeLen = pBuf;
21980 ++pBuf; ++(*pnConsumed);
21981 *pBuf = 0x0;
21982 ++pBuf; ++(*pnConsumed);
21983 *pBuf = 0x40;
21984 ++pBuf; ++(*pnConsumed);
21985 *pBuf = 0x96;
21986 ++pBuf; ++(*pnConsumed);
21987 *pBuf = 0x8;
21988 ++pBuf; ++(*pnConsumed);
21989 *pBuf = pSrc->tsid;
21990 *pnConsumed += 1;
21991 pBuf += 1;
21992 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->tsrates), pSrc->num_tsrates);
21993 *pnConsumed += pSrc->num_tsrates;
21994 /* fieldsEndFlag = 1 */
21995 break;
21996 }
21997 (void)pCtx;
21998 if (pIeLen) {
21999 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
22000 }
22001 return DOT11F_PARSE_SUCCESS;
22002} /* End dot11f_pack_ie_ese_traf_strm_rate_set. */
22003
22004uint32_t dot11f_pack_ie_ese_txmit_power(tpAniSirGlobal pCtx,
22005 tDot11fIEESETxmitPower *pSrc,
22006 uint8_t *pBuf,
22007 uint32_t nBuf,
22008 uint32_t *pnConsumed)
22009{
22010 uint8_t *pIeLen = 0;
22011 uint32_t nConsumedOnEntry = *pnConsumed;
22012 uint32_t nNeeded = 0U;
22013 nNeeded += 2;
22014 while (pSrc->present) {
22015 if (nNeeded > nBuf)
22016 return DOT11F_BUFFER_OVERFLOW;
22017 *pBuf = 150;
22018 ++pBuf; ++(*pnConsumed);
22019 pIeLen = pBuf;
22020 ++pBuf; ++(*pnConsumed);
22021 *pBuf = 0x0;
22022 ++pBuf; ++(*pnConsumed);
22023 *pBuf = 0x40;
22024 ++pBuf; ++(*pnConsumed);
22025 *pBuf = 0x96;
22026 ++pBuf; ++(*pnConsumed);
22027 *pBuf = 0x0;
22028 ++pBuf; ++(*pnConsumed);
22029 *pBuf = pSrc->power_limit;
22030 *pnConsumed += 1;
22031 pBuf += 1;
22032 *pBuf = pSrc->reserved;
22033 *pnConsumed += 1;
22034 /* fieldsEndFlag = 1 */
22035 break;
22036 }
22037 (void)pCtx;
22038 if (pIeLen) {
22039 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
22040 }
22041 return DOT11F_PARSE_SUCCESS;
22042} /* End dot11f_pack_ie_ese_txmit_power. */
22043
22044uint32_t dot11f_pack_ie_ese_version(tpAniSirGlobal pCtx,
22045 tDot11fIEESEVersion *pSrc,
22046 uint8_t *pBuf,
22047 uint32_t nBuf,
22048 uint32_t *pnConsumed)
22049{
22050 uint8_t *pIeLen = 0;
22051 uint32_t nConsumedOnEntry = *pnConsumed;
22052 uint32_t nNeeded = 0U;
22053 nNeeded += 1;
22054 while (pSrc->present) {
22055 if (nNeeded > nBuf)
22056 return DOT11F_BUFFER_OVERFLOW;
22057 *pBuf = 221;
22058 ++pBuf; ++(*pnConsumed);
22059 pIeLen = pBuf;
22060 ++pBuf; ++(*pnConsumed);
22061 *pBuf = 0x0;
22062 ++pBuf; ++(*pnConsumed);
22063 *pBuf = 0x40;
22064 ++pBuf; ++(*pnConsumed);
22065 *pBuf = 0x96;
22066 ++pBuf; ++(*pnConsumed);
22067 *pBuf = 0x3;
22068 ++pBuf; ++(*pnConsumed);
22069 *pBuf = pSrc->version;
22070 *pnConsumed += 1;
22071 /* fieldsEndFlag = 1 */
22072 break;
22073 }
22074 (void)pCtx;
22075 if (pIeLen) {
22076 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
22077 }
22078 return DOT11F_PARSE_SUCCESS;
22079} /* End dot11f_pack_ie_ese_version. */
22080
22081uint32_t dot11f_pack_ie_ext_cap(tpAniSirGlobal pCtx,
22082 tDot11fIEExtCap *pSrc,
22083 uint8_t *pBuf,
22084 uint32_t nBuf,
22085 uint32_t *pnConsumed)
22086{
22087 uint8_t *pIeLen = 0;
22088 uint32_t nConsumedOnEntry = *pnConsumed;
22089 uint32_t nNeeded = 0U;
22090 nNeeded += pSrc->num_bytes;
22091 while (pSrc->present) {
22092 if (nNeeded > nBuf)
22093 return DOT11F_BUFFER_OVERFLOW;
22094 *pBuf = 127;
22095 ++pBuf; ++(*pnConsumed);
22096 pIeLen = pBuf;
22097 ++pBuf; ++(*pnConsumed);
22098 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->bytes), pSrc->num_bytes);
22099 *pnConsumed += pSrc->num_bytes;
22100 /* fieldsEndFlag = 1 */
22101 break;
22102 }
22103 (void)pCtx;
22104 if (pIeLen) {
22105 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
22106 }
22107 return DOT11F_PARSE_SUCCESS;
22108} /* End dot11f_pack_ie_ext_cap. */
22109
22110uint32_t dot11f_pack_ie_ext_supp_rates(tpAniSirGlobal pCtx,
22111 tDot11fIEExtSuppRates *pSrc,
22112 uint8_t *pBuf,
22113 uint32_t nBuf,
22114 uint32_t *pnConsumed)
22115{
22116 uint8_t *pIeLen = 0;
22117 uint32_t nConsumedOnEntry = *pnConsumed;
22118 uint32_t nNeeded = 0U;
22119 nNeeded += pSrc->num_rates;
22120 while (pSrc->present) {
22121 if (nNeeded > nBuf)
22122 return DOT11F_BUFFER_OVERFLOW;
22123 *pBuf = 50;
22124 ++pBuf; ++(*pnConsumed);
22125 pIeLen = pBuf;
22126 ++pBuf; ++(*pnConsumed);
22127 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->rates), pSrc->num_rates);
22128 *pnConsumed += pSrc->num_rates;
22129 /* fieldsEndFlag = 1 */
22130 break;
22131 }
22132 (void)pCtx;
22133 if (pIeLen) {
22134 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
22135 }
22136 return DOT11F_PARSE_SUCCESS;
22137} /* End dot11f_pack_ie_ext_supp_rates. */
22138
22139uint32_t dot11f_pack_ie_fh_param_set(tpAniSirGlobal pCtx,
22140 tDot11fIEFHParamSet *pSrc,
22141 uint8_t *pBuf,
22142 uint32_t nBuf,
22143 uint32_t *pnConsumed)
22144{
22145 uint8_t *pIeLen = 0;
22146 uint32_t nConsumedOnEntry = *pnConsumed;
22147 uint32_t nNeeded = 0U;
22148 nNeeded += 5;
22149 while (pSrc->present) {
22150 if (nNeeded > nBuf)
22151 return DOT11F_BUFFER_OVERFLOW;
22152 *pBuf = 2;
22153 ++pBuf; ++(*pnConsumed);
22154 pIeLen = pBuf;
22155 ++pBuf; ++(*pnConsumed);
22156 frameshtons(pCtx, pBuf, pSrc->dwell_time, 0);
22157 *pnConsumed += 2;
22158 pBuf += 2;
22159 *pBuf = pSrc->hop_set;
22160 *pnConsumed += 1;
22161 pBuf += 1;
22162 *pBuf = pSrc->hop_pattern;
22163 *pnConsumed += 1;
22164 pBuf += 1;
22165 *pBuf = pSrc->hop_index;
22166 *pnConsumed += 1;
22167 /* fieldsEndFlag = 1 */
22168 break;
22169 }
22170 (void)pCtx;
22171 if (pIeLen) {
22172 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
22173 }
22174 return DOT11F_PARSE_SUCCESS;
22175} /* End dot11f_pack_ie_fh_param_set. */
22176
22177uint32_t dot11f_pack_ie_fh_params(tpAniSirGlobal pCtx,
22178 tDot11fIEFHParams *pSrc,
22179 uint8_t *pBuf,
22180 uint32_t nBuf,
22181 uint32_t *pnConsumed)
22182{
22183 uint8_t *pIeLen = 0;
22184 uint32_t nConsumedOnEntry = *pnConsumed;
22185 uint32_t nNeeded = 0U;
22186 nNeeded += 2;
22187 while (pSrc->present) {
22188 if (nNeeded > nBuf)
22189 return DOT11F_BUFFER_OVERFLOW;
22190 *pBuf = 8;
22191 ++pBuf; ++(*pnConsumed);
22192 pIeLen = pBuf;
22193 ++pBuf; ++(*pnConsumed);
22194 *pBuf = pSrc->radix;
22195 *pnConsumed += 1;
22196 pBuf += 1;
22197 *pBuf = pSrc->nchannels;
22198 *pnConsumed += 1;
22199 /* fieldsEndFlag = 1 */
22200 break;
22201 }
22202 (void)pCtx;
22203 if (pIeLen) {
22204 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
22205 }
22206 return DOT11F_PARSE_SUCCESS;
22207} /* End dot11f_pack_ie_fh_params. */
22208
22209uint32_t dot11f_pack_ie_fh_patt_table(tpAniSirGlobal pCtx,
22210 tDot11fIEFHPattTable *pSrc,
22211 uint8_t *pBuf,
22212 uint32_t nBuf,
22213 uint32_t *pnConsumed)
22214{
22215 uint8_t *pIeLen = 0;
22216 uint32_t nConsumedOnEntry = *pnConsumed;
22217 uint32_t nNeeded = 0U;
22218 nNeeded += (pSrc->num_randtable + 4);
22219 while (pSrc->present) {
22220 if (nNeeded > nBuf)
22221 return DOT11F_BUFFER_OVERFLOW;
22222 *pBuf = 9;
22223 ++pBuf; ++(*pnConsumed);
22224 pIeLen = pBuf;
22225 ++pBuf; ++(*pnConsumed);
22226 *pBuf = pSrc->flag;
22227 *pnConsumed += 1;
22228 pBuf += 1;
22229 *pBuf = pSrc->nsets;
22230 *pnConsumed += 1;
22231 pBuf += 1;
22232 *pBuf = pSrc->modulus;
22233 *pnConsumed += 1;
22234 pBuf += 1;
22235 *pBuf = pSrc->offset;
22236 *pnConsumed += 1;
22237 pBuf += 1;
22238 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->randtable), pSrc->num_randtable);
22239 *pnConsumed += pSrc->num_randtable;
22240 /* fieldsEndFlag = 1 */
22241 break;
22242 }
22243 (void)pCtx;
22244 if (pIeLen) {
22245 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
22246 }
22247 return DOT11F_PARSE_SUCCESS;
22248} /* End dot11f_pack_ie_fh_patt_table. */
22249
22250uint32_t dot11f_pack_ie_ft_info(tpAniSirGlobal pCtx,
22251 tDot11fIEFTInfo *pSrc,
22252 uint8_t *pBuf,
22253 uint32_t nBuf,
22254 uint32_t *pnConsumed)
22255{
22256 uint8_t *pIeLen = 0;
22257 uint32_t nConsumedOnEntry = *pnConsumed;
22258 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070022259 uint16_t tmp137__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080022260 uint32_t status = DOT11F_PARSE_SUCCESS;
22261 status = dot11f_get_packed_ieft_info(pCtx, pSrc, &nNeeded);
22262 if (!DOT11F_SUCCEEDED(status))
22263 return status;
22264 while (pSrc->present) {
22265 if (nNeeded > nBuf)
22266 return DOT11F_BUFFER_OVERFLOW;
22267 *pBuf = 55;
22268 ++pBuf; --nBuf; ++(*pnConsumed);
22269 pIeLen = pBuf;
22270 ++pBuf; --nBuf; ++(*pnConsumed);
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070022271 tmp137__ = 0U;
22272 tmp137__ |= (pSrc->reserved << 0);
22273 tmp137__ |= (pSrc->IECount << 8);
Naveen Rawat69623ef2018-04-27 16:11:01 -070022274 if (unlikely(nBuf < 2))
22275 return DOT11F_INCOMPLETE_IE;
22276
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070022277 frameshtons(pCtx, pBuf, tmp137__, 0);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080022278 *pnConsumed += 2;
22279 pBuf += 2;
22280 nBuf -= 2 ;
22281 DOT11F_MEMCPY(pCtx, pBuf, pSrc->MIC, 16);
22282 *pnConsumed += 16;
22283 pBuf += 16;
22284 DOT11F_MEMCPY(pCtx, pBuf, pSrc->Anonce, 32);
22285 *pnConsumed += 32;
22286 pBuf += 32;
22287 DOT11F_MEMCPY(pCtx, pBuf, pSrc->Snonce, 32);
22288 *pnConsumed += 32;
22289 pBuf += 32;
22290 status = pack_core(pCtx,
22291 (uint8_t *)pSrc,
22292 pBuf,
22293 nBuf,
22294 pnConsumed,
22295 FFS_FTInfo,
22296 IES_FTInfo);
22297 break;
22298 }
22299 (void)pCtx;
22300 if (pIeLen) {
22301 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
22302 }
22303 return status;
22304} /* End dot11f_pack_ie_ft_info. */
22305
22306uint32_t dot11f_pack_ie_ht_caps(tpAniSirGlobal pCtx,
22307 tDot11fIEHTCaps *pSrc,
22308 uint8_t *pBuf,
22309 uint32_t nBuf,
22310 uint32_t *pnConsumed)
22311{
22312 uint8_t *pIeLen = 0;
22313 uint32_t nConsumedOnEntry = *pnConsumed;
22314 uint32_t nNeeded = 0U;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053022315 uint16_t tmp138__;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070022316 uint8_t tmp139__;
22317 uint16_t tmp140__;
22318 uint32_t tmp141__;
22319 uint8_t tmp142__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080022320 nNeeded += (pSrc->num_rsvd + 26);
22321 while (pSrc->present) {
22322 if (nNeeded > nBuf)
22323 return DOT11F_BUFFER_OVERFLOW;
22324 *pBuf = 45;
22325 ++pBuf; ++(*pnConsumed);
22326 pIeLen = pBuf;
22327 ++pBuf; ++(*pnConsumed);
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053022328 tmp138__ = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070022329 tmp138__ |= (pSrc->advCodingCap << 0);
22330 tmp138__ |= (pSrc->supportedChannelWidthSet << 1);
22331 tmp138__ |= (pSrc->mimoPowerSave << 2);
22332 tmp138__ |= (pSrc->greenField << 4);
22333 tmp138__ |= (pSrc->shortGI20MHz << 5);
22334 tmp138__ |= (pSrc->shortGI40MHz << 6);
22335 tmp138__ |= (pSrc->txSTBC << 7);
22336 tmp138__ |= (pSrc->rxSTBC << 8);
22337 tmp138__ |= (pSrc->delayedBA << 10);
22338 tmp138__ |= (pSrc->maximalAMSDUsize << 11);
22339 tmp138__ |= (pSrc->dsssCckMode40MHz << 12);
22340 tmp138__ |= (pSrc->psmp << 13);
22341 tmp138__ |= (pSrc->stbcControlFrame << 14);
22342 tmp138__ |= (pSrc->lsigTXOPProtection << 15);
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053022343 if (unlikely(nBuf < 2))
22344 return DOT11F_INCOMPLETE_IE;
22345
22346 frameshtons(pCtx, pBuf, tmp138__, 0);
22347 *pnConsumed += 2;
22348 pBuf += 2;
22349 nBuf -= 2 ;
22350 tmp139__ = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070022351 tmp139__ |= (pSrc->maxRxAMPDUFactor << 0);
22352 tmp139__ |= (pSrc->mpduDensity << 2);
22353 tmp139__ |= (pSrc->reserved1 << 5);
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053022354 if (unlikely(nBuf < 1))
22355 return DOT11F_INCOMPLETE_IE;
22356
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070022357 *pBuf = tmp139__;
22358 *pnConsumed += 1;
22359 pBuf += 1;
22360 nBuf -= 1 ;
22361 DOT11F_MEMCPY(pCtx, pBuf, pSrc->supportedMCSSet, 16);
22362 *pnConsumed += 16;
22363 pBuf += 16;
22364 tmp140__ = 0U;
22365 tmp140__ |= (pSrc->pco << 0);
22366 tmp140__ |= (pSrc->transitionTime << 1);
22367 tmp140__ |= (pSrc->reserved2 << 3);
22368 tmp140__ |= (pSrc->mcsFeedback << 8);
22369 tmp140__ |= (pSrc->reserved3 << 10);
22370 if (unlikely(nBuf < 2))
22371 return DOT11F_INCOMPLETE_IE;
22372
22373 frameshtons(pCtx, pBuf, tmp140__, 0);
22374 *pnConsumed += 2;
22375 pBuf += 2;
22376 nBuf -= 2 ;
22377 tmp141__ = 0U;
22378 tmp141__ |= (pSrc->txBF << 0);
22379 tmp141__ |= (pSrc->rxStaggeredSounding << 1);
22380 tmp141__ |= (pSrc->txStaggeredSounding << 2);
22381 tmp141__ |= (pSrc->rxZLF << 3);
22382 tmp141__ |= (pSrc->txZLF << 4);
22383 tmp141__ |= (pSrc->implicitTxBF << 5);
22384 tmp141__ |= (pSrc->calibration << 6);
22385 tmp141__ |= (pSrc->explicitCSITxBF << 8);
22386 tmp141__ |= (pSrc->explicitUncompressedSteeringMatrix << 9);
22387 tmp141__ |= (pSrc->explicitBFCSIFeedback << 10);
22388 tmp141__ |= (pSrc->explicitUncompressedSteeringMatrixFeedback << 13);
22389 tmp141__ |= (pSrc->explicitCompressedSteeringMatrixFeedback << 16);
22390 tmp141__ |= (pSrc->csiNumBFAntennae << 19);
22391 tmp141__ |= (pSrc->uncompressedSteeringMatrixBFAntennae << 21);
22392 tmp141__ |= (pSrc->compressedSteeringMatrixBFAntennae << 23);
22393 tmp141__ |= (pSrc->reserved4 << 25);
22394 if (unlikely(nBuf < 4))
22395 return DOT11F_INCOMPLETE_IE;
22396
22397 frameshtonl(pCtx, pBuf, tmp141__, 0);
22398 *pnConsumed += 4;
22399 pBuf += 4;
22400 nBuf -= 4 ;
22401 tmp142__ = 0U;
22402 tmp142__ |= (pSrc->antennaSelection << 0);
22403 tmp142__ |= (pSrc->explicitCSIFeedbackTx << 1);
22404 tmp142__ |= (pSrc->antennaIndicesFeedbackTx << 2);
22405 tmp142__ |= (pSrc->explicitCSIFeedback << 3);
22406 tmp142__ |= (pSrc->antennaIndicesFeedback << 4);
22407 tmp142__ |= (pSrc->rxAS << 5);
22408 tmp142__ |= (pSrc->txSoundingPPDUs << 6);
22409 tmp142__ |= (pSrc->reserved5 << 7);
22410 if (unlikely(nBuf < 1))
22411 return DOT11F_INCOMPLETE_IE;
22412
22413 *pBuf = tmp142__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080022414 *pnConsumed += 1;
22415 pBuf += 1;
22416 nBuf -= 1 ;
22417 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->rsvd), pSrc->num_rsvd);
22418 *pnConsumed += pSrc->num_rsvd;
22419 /* fieldsEndFlag = 1 */
22420 break;
22421 }
22422 (void)pCtx;
22423 if (pIeLen) {
22424 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
22425 }
22426 return DOT11F_PARSE_SUCCESS;
22427} /* End dot11f_pack_ie_ht_caps. */
22428
22429uint32_t dot11f_pack_ie_ht_info(tpAniSirGlobal pCtx,
22430 tDot11fIEHTInfo *pSrc,
22431 uint8_t *pBuf,
22432 uint32_t nBuf,
22433 uint32_t *pnConsumed)
22434{
22435 uint8_t *pIeLen = 0;
22436 uint32_t nConsumedOnEntry = *pnConsumed;
22437 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070022438 uint8_t tmp143__;
22439 uint16_t tmp144__;
22440 uint16_t tmp145__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080022441 nNeeded += (pSrc->num_rsvd + 22);
22442 while (pSrc->present) {
22443 if (nNeeded > nBuf)
22444 return DOT11F_BUFFER_OVERFLOW;
22445 *pBuf = 61;
22446 ++pBuf; ++(*pnConsumed);
22447 pIeLen = pBuf;
22448 ++pBuf; ++(*pnConsumed);
22449 *pBuf = pSrc->primaryChannel;
22450 *pnConsumed += 1;
22451 pBuf += 1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070022452 tmp143__ = 0U;
22453 tmp143__ |= (pSrc->secondaryChannelOffset << 0);
22454 tmp143__ |= (pSrc->recommendedTxWidthSet << 2);
22455 tmp143__ |= (pSrc->rifsMode << 3);
22456 tmp143__ |= (pSrc->controlledAccessOnly << 4);
22457 tmp143__ |= (pSrc->serviceIntervalGranularity << 5);
Naveen Rawat69623ef2018-04-27 16:11:01 -070022458 if (unlikely(nBuf < 1))
22459 return DOT11F_INCOMPLETE_IE;
22460
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070022461 *pBuf = tmp143__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080022462 *pnConsumed += 1;
22463 pBuf += 1;
22464 nBuf -= 1 ;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070022465 tmp144__ = 0U;
22466 tmp144__ |= (pSrc->opMode << 0);
22467 tmp144__ |= (pSrc->nonGFDevicesPresent << 2);
22468 tmp144__ |= (pSrc->transmitBurstLimit << 3);
22469 tmp144__ |= (pSrc->obssNonHTStaPresent << 4);
22470 tmp144__ |= (pSrc->reserved << 5);
Naveen Rawat69623ef2018-04-27 16:11:01 -070022471 if (unlikely(nBuf < 2))
22472 return DOT11F_INCOMPLETE_IE;
22473
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070022474 frameshtons(pCtx, pBuf, tmp144__, 0);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080022475 *pnConsumed += 2;
22476 pBuf += 2;
22477 nBuf -= 2 ;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070022478 tmp145__ = 0U;
22479 tmp145__ |= (pSrc->basicSTBCMCS << 0);
22480 tmp145__ |= (pSrc->dualCTSProtection << 7);
22481 tmp145__ |= (pSrc->secondaryBeacon << 8);
22482 tmp145__ |= (pSrc->lsigTXOPProtectionFullSupport << 9);
22483 tmp145__ |= (pSrc->pcoActive << 10);
22484 tmp145__ |= (pSrc->pcoPhase << 11);
22485 tmp145__ |= (pSrc->reserved2 << 12);
Naveen Rawat69623ef2018-04-27 16:11:01 -070022486 if (unlikely(nBuf < 2))
22487 return DOT11F_INCOMPLETE_IE;
22488
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070022489 frameshtons(pCtx, pBuf, tmp145__, 0);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080022490 *pnConsumed += 2;
22491 pBuf += 2;
22492 nBuf -= 2 ;
22493 DOT11F_MEMCPY(pCtx, pBuf, pSrc->basicMCSSet, 16);
22494 *pnConsumed += 16;
22495 pBuf += 16;
22496 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->rsvd), pSrc->num_rsvd);
22497 *pnConsumed += pSrc->num_rsvd;
22498 /* fieldsEndFlag = 1 */
22499 break;
22500 }
22501 (void)pCtx;
22502 if (pIeLen) {
22503 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
22504 }
22505 return DOT11F_PARSE_SUCCESS;
22506} /* End dot11f_pack_ie_ht_info. */
22507
22508uint32_t dot11f_pack_ie_ibss_params(tpAniSirGlobal pCtx,
22509 tDot11fIEIBSSParams *pSrc,
22510 uint8_t *pBuf,
22511 uint32_t nBuf,
22512 uint32_t *pnConsumed)
22513{
22514 uint8_t *pIeLen = 0;
22515 uint32_t nConsumedOnEntry = *pnConsumed;
22516 uint32_t nNeeded = 0U;
22517 nNeeded += 2;
22518 while (pSrc->present) {
22519 if (nNeeded > nBuf)
22520 return DOT11F_BUFFER_OVERFLOW;
22521 *pBuf = 6;
22522 ++pBuf; ++(*pnConsumed);
22523 pIeLen = pBuf;
22524 ++pBuf; ++(*pnConsumed);
22525 frameshtons(pCtx, pBuf, pSrc->atim, 0);
22526 *pnConsumed += 2;
22527 /* fieldsEndFlag = 1 */
22528 break;
22529 }
22530 (void)pCtx;
22531 if (pIeLen) {
22532 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
22533 }
22534 return DOT11F_PARSE_SUCCESS;
22535} /* End dot11f_pack_ie_ibss_params. */
22536
22537uint32_t dot11f_pack_ie_link_identifier(tpAniSirGlobal pCtx,
22538 tDot11fIELinkIdentifier *pSrc,
22539 uint8_t *pBuf,
22540 uint32_t nBuf,
22541 uint32_t *pnConsumed)
22542{
22543 uint8_t *pIeLen = 0;
22544 uint32_t nConsumedOnEntry = *pnConsumed;
22545 uint32_t nNeeded = 0U;
22546 nNeeded += 18;
22547 while (pSrc->present) {
22548 if (nNeeded > nBuf)
22549 return DOT11F_BUFFER_OVERFLOW;
22550 *pBuf = 101;
22551 ++pBuf; ++(*pnConsumed);
22552 pIeLen = pBuf;
22553 ++pBuf; ++(*pnConsumed);
22554 DOT11F_MEMCPY(pCtx, pBuf, pSrc->bssid, 6);
22555 *pnConsumed += 6;
22556 pBuf += 6;
22557 DOT11F_MEMCPY(pCtx, pBuf, pSrc->InitStaAddr, 6);
22558 *pnConsumed += 6;
22559 pBuf += 6;
22560 DOT11F_MEMCPY(pCtx, pBuf, pSrc->RespStaAddr, 6);
22561 *pnConsumed += 6;
22562 /* fieldsEndFlag = 1 */
22563 break;
22564 }
22565 (void)pCtx;
22566 if (pIeLen) {
22567 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
22568 }
22569 return DOT11F_PARSE_SUCCESS;
22570} /* End dot11f_pack_ie_link_identifier. */
22571
Selvaraj, Sridharba726cb2016-07-22 13:41:03 +053022572uint32_t dot11f_pack_ie_MBO_IE(tpAniSirGlobal pCtx,
22573 tDot11fIEMBO_IE *pSrc,
22574 uint8_t *pBuf,
22575 uint32_t nBuf,
22576 uint32_t *pnConsumed)
22577{
22578 uint8_t *pIeLen = 0;
Abhishek Singh951eed82017-07-06 16:53:19 +053022579 uint32_t n, idx = 0, idxlast;
22580 uint32_t nConsumedSoFar, nConsumedNow;
22581 uint32_t status = DOT11F_PARSE_SUCCESS;
Selvaraj, Sridharba726cb2016-07-22 13:41:03 +053022582 uint32_t nNeeded = 0U;
Abhishek Singh951eed82017-07-06 16:53:19 +053022583 status = dot11f_get_packed_ie_MBO_IE(pCtx, pSrc, &nNeeded);
22584 if (!DOT11F_SUCCEEDED(status))
22585 return status;
22586 if (nNeeded > nBuf)
22587 return DOT11F_BUFFER_OVERFLOW;
Selvaraj, Sridharba726cb2016-07-22 13:41:03 +053022588 (void)pCtx;
Abhishek Singh951eed82017-07-06 16:53:19 +053022589 if (pSrc->present) {
22590 do {
22591 nConsumedSoFar = *pnConsumed;
22592 *pBuf = 221;
22593 ++pBuf; --nBuf; ++(*pnConsumed);
22594 pIeLen = pBuf;
22595 ++pBuf; --nBuf; ++(*pnConsumed);
22596 *pBuf = 0x50;
22597 ++pBuf; --nBuf; ++(*pnConsumed);
22598 *pBuf = 0x6f;
22599 ++pBuf; --nBuf; ++(*pnConsumed);
22600 *pBuf = 0x9a;
22601 ++pBuf; --nBuf; ++(*pnConsumed);
22602 *pBuf = 0x16;
22603 ++pBuf; --nBuf; ++(*pnConsumed);
22604 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
22605 nConsumedNow = *pnConsumed;
22606 idxlast = idx;
22607 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
22608 pnConsumed,
22609 TLVS_MBO_IE +
22610 idx, &idx);
22611 nConsumedNow = *pnConsumed - nConsumedNow;
22612 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
22613 pBuf += nConsumedNow;
22614 nBuf -= nConsumedNow;
22615 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
Selvaraj, Sridharba726cb2016-07-22 13:41:03 +053022616 }
Abhishek Singh951eed82017-07-06 16:53:19 +053022617 return status;
Selvaraj, Sridharba726cb2016-07-22 13:41:03 +053022618} /* End dot11f_pack_ie_MBO_IE. */
22619
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080022620uint32_t dot11f_pack_ie_measurement_report(tpAniSirGlobal pCtx,
22621 tDot11fIEMeasurementReport *pSrc,
22622 uint8_t *pBuf,
22623 uint32_t nBuf,
22624 uint32_t *pnConsumed)
22625{
22626 uint8_t *pIeLen = 0;
22627 uint32_t nConsumedOnEntry = *pnConsumed;
22628 uint32_t nNeeded = 0U;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053022629 uint8_t tmp146__;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070022630 uint8_t tmp147__;
22631 uint8_t tmp148__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080022632 uint32_t status = DOT11F_PARSE_SUCCESS;
22633 status = dot11f_get_packed_ie_measurement_report(pCtx, pSrc, &nNeeded);
22634 if (!DOT11F_SUCCEEDED(status))
22635 return status;
22636 while (pSrc->present) {
22637 if (nNeeded > nBuf)
22638 return DOT11F_BUFFER_OVERFLOW;
22639 *pBuf = 39;
22640 ++pBuf; ++(*pnConsumed);
22641 pIeLen = pBuf;
22642 ++pBuf; ++(*pnConsumed);
22643 *pBuf = pSrc->token;
22644 *pnConsumed += 1;
22645 pBuf += 1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070022646 tmp146__ = 0U;
22647 tmp146__ |= (pSrc->late << 0);
22648 tmp146__ |= (pSrc->incapable << 1);
22649 tmp146__ |= (pSrc->refused << 2);
22650 tmp146__ |= (pSrc->unused << 3);
Naveen Rawat69623ef2018-04-27 16:11:01 -070022651 if (unlikely(nBuf < 1))
22652 return DOT11F_INCOMPLETE_IE;
22653
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070022654 *pBuf = tmp146__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080022655 *pnConsumed += 1;
22656 pBuf += 1;
22657 nBuf -= 1 ;
22658 *pBuf = pSrc->type;
22659 *pnConsumed += 1;
22660 pBuf += 1;
22661 if (pSrc->type) {
22662 switch (pSrc->type) {
22663 case 0:
22664 *pBuf = pSrc->report.Basic.channel;
22665 *pnConsumed += 1;
22666 pBuf += 1;
22667 frameshtonq(pCtx, pBuf, pSrc->report.Basic.meas_start_time, 0);
22668 *pnConsumed += 8;
22669 pBuf += 8;
22670 frameshtons(pCtx, pBuf, pSrc->report.Basic.meas_duration, 0);
22671 *pnConsumed += 2;
22672 pBuf += 2;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070022673 tmp147__ = 0U;
22674 tmp147__ |= (pSrc->report.Basic.bss << 0);
22675 tmp147__ |= (pSrc->report.Basic.ofdm_preamble << 1);
22676 tmp147__ |= (pSrc->report.Basic.unid_signal << 2);
22677 tmp147__ |= (pSrc->report.Basic.rader << 3);
22678 tmp147__ |= (pSrc->report.Basic.unmeasured << 4);
22679 tmp147__ |= (pSrc->report.Basic.unused << 5);
Naveen Rawat69623ef2018-04-27 16:11:01 -070022680 if (unlikely(nBuf < 1))
22681 return DOT11F_INCOMPLETE_IE;
22682
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070022683 *pBuf = tmp147__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080022684 *pnConsumed += 1;
22685 /* fieldsEndFlag = 1 */
22686 nBuf -= 1 ;
22687 break;
22688 case 1:
22689 *pBuf = pSrc->report.CCA.channel;
22690 *pnConsumed += 1;
22691 pBuf += 1;
22692 frameshtonq(pCtx, pBuf, pSrc->report.CCA.meas_start_time, 0);
22693 *pnConsumed += 8;
22694 pBuf += 8;
22695 frameshtons(pCtx, pBuf, pSrc->report.CCA.meas_duration, 0);
22696 *pnConsumed += 2;
22697 pBuf += 2;
22698 *pBuf = pSrc->report.CCA.cca_busy_fraction;
22699 *pnConsumed += 1;
22700 /* fieldsEndFlag = 1 */
22701 break;
22702 case 2:
22703 *pBuf = pSrc->report.RPIHistogram.channel;
22704 *pnConsumed += 1;
22705 pBuf += 1;
22706 frameshtonq(pCtx, pBuf, pSrc->report.RPIHistogram.meas_start_time, 0);
22707 *pnConsumed += 8;
22708 pBuf += 8;
22709 frameshtons(pCtx, pBuf, pSrc->report.RPIHistogram.meas_duration, 0);
22710 *pnConsumed += 2;
22711 pBuf += 2;
22712 *pBuf = pSrc->report.RPIHistogram.rpi0_density;
22713 *pnConsumed += 1;
22714 pBuf += 1;
22715 *pBuf = pSrc->report.RPIHistogram.rpi1_density;
22716 *pnConsumed += 1;
22717 pBuf += 1;
22718 *pBuf = pSrc->report.RPIHistogram.rpi2_density;
22719 *pnConsumed += 1;
22720 pBuf += 1;
22721 *pBuf = pSrc->report.RPIHistogram.rpi3_density;
22722 *pnConsumed += 1;
22723 pBuf += 1;
22724 *pBuf = pSrc->report.RPIHistogram.rpi4_density;
22725 *pnConsumed += 1;
22726 pBuf += 1;
22727 *pBuf = pSrc->report.RPIHistogram.rpi5_density;
22728 *pnConsumed += 1;
22729 pBuf += 1;
22730 *pBuf = pSrc->report.RPIHistogram.rpi6_density;
22731 *pnConsumed += 1;
22732 pBuf += 1;
22733 *pBuf = pSrc->report.RPIHistogram.rpi7_density;
22734 *pnConsumed += 1;
22735 /* fieldsEndFlag = 1 */
22736 break;
22737 case 5:
22738 *pBuf = pSrc->report.Beacon.regClass;
22739 *pnConsumed += 1;
22740 pBuf += 1;
22741 *pBuf = pSrc->report.Beacon.channel;
22742 *pnConsumed += 1;
22743 pBuf += 1;
22744 frameshtonq(pCtx, pBuf, pSrc->report.Beacon.meas_start_time, 0);
22745 *pnConsumed += 8;
22746 pBuf += 8;
22747 frameshtons(pCtx, pBuf, pSrc->report.Beacon.meas_duration, 0);
22748 *pnConsumed += 2;
22749 pBuf += 2;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070022750 tmp148__ = 0U;
22751 tmp148__ |= (pSrc->report.Beacon.condensed_PHY << 0);
22752 tmp148__ |= (pSrc->report.Beacon.reported_frame_type << 7);
Naveen Rawat69623ef2018-04-27 16:11:01 -070022753 if (unlikely(nBuf < 1))
22754 return DOT11F_INCOMPLETE_IE;
22755
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070022756 *pBuf = tmp148__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080022757 *pnConsumed += 1;
22758 pBuf += 1;
22759 nBuf -= 1 ;
22760 *pBuf = pSrc->report.Beacon.RCPI;
22761 *pnConsumed += 1;
22762 pBuf += 1;
22763 *pBuf = pSrc->report.Beacon.RSNI;
22764 *pnConsumed += 1;
22765 pBuf += 1;
22766 DOT11F_MEMCPY(pCtx, pBuf, pSrc->report.Beacon.BSSID, 6);
22767 *pnConsumed += 6;
22768 pBuf += 6;
22769 *pBuf = pSrc->report.Beacon.antenna_id;
22770 *pnConsumed += 1;
22771 pBuf += 1;
22772 frameshtonl(pCtx, pBuf, pSrc->report.Beacon.parent_TSF, 0);
22773 *pnConsumed += 4;
22774 pBuf += 4;
22775 status = pack_core(pCtx,
22776 (uint8_t *)pSrc,
22777 pBuf,
22778 nBuf,
22779 pnConsumed,
22780 FFS_reportBeacon,
22781 IES_reportBeacon);
22782 break;
22783 }
22784 } else {
22785 break;
22786 }
22787 break;
22788 }
22789 (void)pCtx;
22790 if (pIeLen) {
22791 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
22792 }
22793 return status;
22794} /* End dot11f_pack_ie_measurement_report. */
22795
22796uint32_t dot11f_pack_ie_measurement_request(tpAniSirGlobal pCtx,
22797 tDot11fIEMeasurementRequest *pSrc,
22798 uint8_t *pBuf,
22799 uint32_t nBuf,
22800 uint32_t *pnConsumed)
22801{
22802 uint8_t *pIeLen = 0;
22803 uint32_t nConsumedOnEntry = *pnConsumed;
22804 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070022805 uint8_t tmp149__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080022806 uint32_t status = DOT11F_PARSE_SUCCESS;
22807 status = dot11f_get_packed_ie_measurement_request(pCtx, pSrc, &nNeeded);
22808 if (!DOT11F_SUCCEEDED(status))
22809 return status;
22810 while (pSrc->present) {
22811 if (nNeeded > nBuf)
22812 return DOT11F_BUFFER_OVERFLOW;
22813 *pBuf = 38;
22814 ++pBuf; ++(*pnConsumed);
22815 pIeLen = pBuf;
22816 ++pBuf; ++(*pnConsumed);
22817 *pBuf = pSrc->measurement_token;
22818 *pnConsumed += 1;
22819 pBuf += 1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070022820 tmp149__ = 0U;
22821 tmp149__ |= (pSrc->parallel << 0);
22822 tmp149__ |= (pSrc->enable << 1);
22823 tmp149__ |= (pSrc->request << 2);
22824 tmp149__ |= (pSrc->report << 3);
22825 tmp149__ |= (pSrc->durationMandatory << 4);
22826 tmp149__ |= (pSrc->unused << 5);
Naveen Rawat69623ef2018-04-27 16:11:01 -070022827 if (unlikely(nBuf < 1))
22828 return DOT11F_INCOMPLETE_IE;
22829
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070022830 *pBuf = tmp149__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080022831 *pnConsumed += 1;
22832 pBuf += 1;
22833 nBuf -= 1 ;
22834 *pBuf = pSrc->measurement_type;
22835 *pnConsumed += 1;
22836 pBuf += 1;
22837 switch (pSrc->measurement_type) {
22838 case 0:
22839 *pBuf = pSrc->measurement_request.Basic.channel_no;
22840 *pnConsumed += 1;
22841 pBuf += 1;
22842 DOT11F_MEMCPY(pCtx, pBuf, pSrc->measurement_request.Basic.meas_start_time, 8);
22843 *pnConsumed += 8;
22844 pBuf += 8;
22845 frameshtons(pCtx, pBuf, pSrc->measurement_request.Basic.meas_duration, 0);
22846 *pnConsumed += 2;
22847 /* fieldsEndFlag = 1 */
22848 break;
22849 case 1:
22850 *pBuf = pSrc->measurement_request.CCA.channel_no;
22851 *pnConsumed += 1;
22852 pBuf += 1;
22853 DOT11F_MEMCPY(pCtx, pBuf, pSrc->measurement_request.CCA.meas_start_time, 8);
22854 *pnConsumed += 8;
22855 pBuf += 8;
22856 frameshtons(pCtx, pBuf, pSrc->measurement_request.CCA.meas_duration, 0);
22857 *pnConsumed += 2;
22858 /* fieldsEndFlag = 1 */
22859 break;
22860 case 2:
22861 *pBuf = pSrc->measurement_request.RPIHistogram.channel_no;
22862 *pnConsumed += 1;
22863 pBuf += 1;
22864 DOT11F_MEMCPY(pCtx, pBuf, pSrc->measurement_request.RPIHistogram.meas_start_time, 8);
22865 *pnConsumed += 8;
22866 pBuf += 8;
22867 frameshtons(pCtx, pBuf, pSrc->measurement_request.RPIHistogram.meas_duration, 0);
22868 *pnConsumed += 2;
22869 /* fieldsEndFlag = 1 */
22870 break;
22871 case 5:
22872 *pBuf = pSrc->measurement_request.Beacon.regClass;
22873 *pnConsumed += 1;
22874 pBuf += 1;
22875 *pBuf = pSrc->measurement_request.Beacon.channel;
22876 *pnConsumed += 1;
22877 pBuf += 1;
22878 frameshtons(pCtx, pBuf, pSrc->measurement_request.Beacon.randomization, 0);
22879 *pnConsumed += 2;
22880 pBuf += 2;
22881 frameshtons(pCtx, pBuf, pSrc->measurement_request.Beacon.meas_duration, 0);
22882 *pnConsumed += 2;
22883 pBuf += 2;
22884 *pBuf = pSrc->measurement_request.Beacon.meas_mode;
22885 *pnConsumed += 1;
22886 pBuf += 1;
22887 DOT11F_MEMCPY(pCtx, pBuf, pSrc->measurement_request.Beacon.BSSID, 6);
22888 *pnConsumed += 6;
22889 pBuf += 6;
22890 status = pack_core(pCtx,
22891 (uint8_t *)pSrc,
22892 pBuf,
22893 nBuf,
22894 pnConsumed,
22895 FFS_measurement_requestBeacon,
22896 IES_measurement_requestBeacon);
22897 break;
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080022898 case 8:
22899 *pBuf = pSrc->measurement_request.lci.loc_subject;
22900 *pnConsumed += 1;
22901 pBuf += 1;
22902 status = pack_core(pCtx,
22903 (uint8_t *)pSrc,
22904 pBuf,
22905 nBuf,
22906 pnConsumed,
22907 FFS_measurement_requestlci,
22908 IES_measurement_requestlci);
22909 break;
22910 case 16:
22911 frameshtons(pCtx, pBuf, pSrc->measurement_request.ftmrr.random_interval, 0);
22912 *pnConsumed += 2;
22913 pBuf += 2;
22914 *pBuf = pSrc->measurement_request.ftmrr.min_ap_count;
22915 *pnConsumed += 1;
22916 pBuf += 1;
22917 status = pack_core(pCtx,
22918 (uint8_t *)pSrc,
22919 pBuf,
22920 nBuf,
22921 pnConsumed,
22922 FFS_measurement_requestftmrr,
22923 IES_measurement_requestftmrr);
22924 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080022925 }
22926 break;
22927 }
22928 (void)pCtx;
22929 if (pIeLen) {
22930 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
22931 }
22932 return status;
22933} /* End dot11f_pack_ie_measurement_request. */
22934
22935uint32_t dot11f_pack_ie_mobility_domain(tpAniSirGlobal pCtx,
22936 tDot11fIEMobilityDomain *pSrc,
22937 uint8_t *pBuf,
22938 uint32_t nBuf,
22939 uint32_t *pnConsumed)
22940{
22941 uint8_t *pIeLen = 0;
22942 uint32_t nConsumedOnEntry = *pnConsumed;
22943 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070022944 uint8_t tmp150__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080022945 nNeeded += 3;
22946 while (pSrc->present) {
22947 if (nNeeded > nBuf)
22948 return DOT11F_BUFFER_OVERFLOW;
22949 *pBuf = 54;
22950 ++pBuf; ++(*pnConsumed);
22951 pIeLen = pBuf;
22952 ++pBuf; ++(*pnConsumed);
22953 frameshtons(pCtx, pBuf, pSrc->MDID, 0);
22954 *pnConsumed += 2;
22955 pBuf += 2;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070022956 tmp150__ = 0U;
22957 tmp150__ |= (pSrc->overDSCap << 0);
22958 tmp150__ |= (pSrc->resourceReqCap << 1);
22959 tmp150__ |= (pSrc->reserved << 2);
Naveen Rawat69623ef2018-04-27 16:11:01 -070022960 if (unlikely(nBuf < 1))
22961 return DOT11F_INCOMPLETE_IE;
22962
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070022963 *pBuf = tmp150__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080022964 *pnConsumed += 1;
22965 /* fieldsEndFlag = 1 */
22966 nBuf -= 1 ;
22967 break;
22968 }
22969 (void)pCtx;
22970 if (pIeLen) {
22971 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
22972 }
22973 return DOT11F_PARSE_SUCCESS;
22974} /* End dot11f_pack_ie_mobility_domain. */
22975
22976uint32_t dot11f_pack_ie_neighbor_report(tpAniSirGlobal pCtx,
22977 tDot11fIENeighborReport *pSrc,
22978 uint8_t *pBuf,
22979 uint32_t nBuf,
22980 uint32_t *pnConsumed)
22981{
22982 uint8_t *pIeLen = 0;
22983 uint32_t nConsumedOnEntry = *pnConsumed;
22984 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070022985 uint8_t tmp151__;
22986 uint8_t tmp152__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080022987 uint32_t status = DOT11F_PARSE_SUCCESS;
22988 status = dot11f_get_packed_ie_neighbor_report(pCtx, pSrc, &nNeeded);
22989 if (!DOT11F_SUCCEEDED(status))
22990 return status;
22991 while (pSrc->present) {
22992 if (nNeeded > nBuf)
22993 return DOT11F_BUFFER_OVERFLOW;
22994 *pBuf = 52;
22995 ++pBuf; --nBuf; ++(*pnConsumed);
22996 pIeLen = pBuf;
22997 ++pBuf; --nBuf; ++(*pnConsumed);
22998 DOT11F_MEMCPY(pCtx, pBuf, pSrc->bssid, 6);
22999 *pnConsumed += 6;
23000 pBuf += 6;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070023001 tmp151__ = 0U;
23002 tmp151__ |= (pSrc->APReachability << 0);
23003 tmp151__ |= (pSrc->Security << 2);
23004 tmp151__ |= (pSrc->KeyScope << 3);
23005 tmp151__ |= (pSrc->SpecMgmtCap << 4);
23006 tmp151__ |= (pSrc->QosCap << 5);
23007 tmp151__ |= (pSrc->apsd << 6);
23008 tmp151__ |= (pSrc->rrm << 7);
Naveen Rawat69623ef2018-04-27 16:11:01 -070023009 if (unlikely(nBuf < 1))
23010 return DOT11F_INCOMPLETE_IE;
23011
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070023012 *pBuf = tmp151__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080023013 *pnConsumed += 1;
23014 pBuf += 1;
23015 nBuf -= 1 ;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070023016 tmp152__ = 0U;
23017 tmp152__ |= (pSrc->DelayedBA << 0);
23018 tmp152__ |= (pSrc->ImmBA << 1);
23019 tmp152__ |= (pSrc->MobilityDomain << 2);
23020 tmp152__ |= (pSrc->reserved << 3);
Naveen Rawat69623ef2018-04-27 16:11:01 -070023021 if (unlikely(nBuf < 1))
23022 return DOT11F_INCOMPLETE_IE;
23023
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070023024 *pBuf = tmp152__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080023025 *pnConsumed += 1;
23026 pBuf += 1;
23027 nBuf -= 1 ;
23028 frameshtons(pCtx, pBuf, pSrc->reserved1, 0);
23029 *pnConsumed += 2;
23030 pBuf += 2;
23031 *pBuf = pSrc->regulatoryClass;
23032 *pnConsumed += 1;
23033 pBuf += 1;
23034 *pBuf = pSrc->channel;
23035 *pnConsumed += 1;
23036 pBuf += 1;
23037 *pBuf = pSrc->PhyType;
23038 *pnConsumed += 1;
23039 pBuf += 1;
23040 status = pack_core(pCtx,
23041 (uint8_t *)pSrc,
23042 pBuf,
23043 nBuf,
23044 pnConsumed,
23045 FFS_NeighborReport,
23046 IES_NeighborReport);
23047 break;
23048 }
23049 (void)pCtx;
23050 if (pIeLen) {
23051 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23052 }
23053 return status;
23054} /* End dot11f_pack_ie_neighbor_report. */
23055
23056uint32_t dot11f_pack_ie_obss_scan_parameters(tpAniSirGlobal pCtx,
23057 tDot11fIEOBSSScanParameters *pSrc,
23058 uint8_t *pBuf,
23059 uint32_t nBuf,
23060 uint32_t *pnConsumed)
23061{
23062 uint8_t *pIeLen = 0;
23063 uint32_t nConsumedOnEntry = *pnConsumed;
23064 uint32_t nNeeded = 0U;
23065 nNeeded += 14;
23066 while (pSrc->present) {
23067 if (nNeeded > nBuf)
23068 return DOT11F_BUFFER_OVERFLOW;
23069 *pBuf = 74;
23070 ++pBuf; ++(*pnConsumed);
23071 pIeLen = pBuf;
23072 ++pBuf; ++(*pnConsumed);
23073 frameshtons(pCtx, pBuf, pSrc->obssScanPassiveDwell, 0);
23074 *pnConsumed += 2;
23075 pBuf += 2;
23076 frameshtons(pCtx, pBuf, pSrc->obssScanActiveDwell, 0);
23077 *pnConsumed += 2;
23078 pBuf += 2;
23079 frameshtons(pCtx, pBuf, pSrc->bssChannelWidthTriggerScanInterval, 0);
23080 *pnConsumed += 2;
23081 pBuf += 2;
23082 frameshtons(pCtx, pBuf, pSrc->obssScanPassiveTotalPerChannel, 0);
23083 *pnConsumed += 2;
23084 pBuf += 2;
23085 frameshtons(pCtx, pBuf, pSrc->obssScanActiveTotalPerChannel, 0);
23086 *pnConsumed += 2;
23087 pBuf += 2;
23088 frameshtons(pCtx, pBuf, pSrc->bssWidthChannelTransitionDelayFactor, 0);
23089 *pnConsumed += 2;
23090 pBuf += 2;
23091 frameshtons(pCtx, pBuf, pSrc->obssScanActivityThreshold, 0);
23092 *pnConsumed += 2;
23093 /* fieldsEndFlag = 1 */
23094 break;
23095 }
23096 (void)pCtx;
23097 if (pIeLen) {
23098 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23099 }
23100 return DOT11F_PARSE_SUCCESS;
23101} /* End dot11f_pack_ie_obss_scan_parameters. */
23102
23103uint32_t dot11f_pack_ie_operating_mode(tpAniSirGlobal pCtx,
23104 tDot11fIEOperatingMode *pSrc,
23105 uint8_t *pBuf,
23106 uint32_t nBuf,
23107 uint32_t *pnConsumed)
23108{
23109 uint8_t *pIeLen = 0;
23110 uint32_t nConsumedOnEntry = *pnConsumed;
23111 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070023112 uint8_t tmp153__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080023113 nNeeded += 1;
23114 while (pSrc->present) {
23115 if (nNeeded > nBuf)
23116 return DOT11F_BUFFER_OVERFLOW;
23117 *pBuf = 199;
23118 ++pBuf; ++(*pnConsumed);
23119 pIeLen = pBuf;
23120 ++pBuf; ++(*pnConsumed);
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070023121 tmp153__ = 0U;
23122 tmp153__ |= (pSrc->chanWidth << 0);
23123 tmp153__ |= (pSrc->reserved << 2);
23124 tmp153__ |= (pSrc->rxNSS << 4);
23125 tmp153__ |= (pSrc->rxNSSType << 7);
Naveen Rawat69623ef2018-04-27 16:11:01 -070023126 if (unlikely(nBuf < 1))
23127 return DOT11F_INCOMPLETE_IE;
23128
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070023129 *pBuf = tmp153__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080023130 *pnConsumed += 1;
23131 /* fieldsEndFlag = 1 */
23132 nBuf -= 1 ;
23133 break;
23134 }
23135 (void)pCtx;
23136 if (pIeLen) {
23137 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23138 }
23139 return DOT11F_PARSE_SUCCESS;
23140} /* End dot11f_pack_ie_operating_mode. */
23141
23142uint32_t dot11f_pack_ie_p2_p_assoc_req(tpAniSirGlobal pCtx,
23143 tDot11fIEP2PAssocReq *pSrc,
23144 uint8_t *pBuf,
23145 uint32_t nBuf,
23146 uint32_t *pnConsumed)
23147{
23148 uint8_t *pIeLen = 0;
23149 uint32_t n, idx = 0, idxlast;
23150 uint32_t nConsumedSoFar, nConsumedNow;
23151 uint32_t status = DOT11F_PARSE_SUCCESS;
23152 uint32_t nNeeded = 0U;
23153 status = dot11f_get_packed_iep2_p_assoc_req(pCtx, pSrc, &nNeeded);
23154 if (!DOT11F_SUCCEEDED(status))
23155 return status;
23156 if (nNeeded > nBuf)
23157 return DOT11F_BUFFER_OVERFLOW;
23158 (void)pCtx;
23159 if (pSrc->present) {
23160 do {
23161 nConsumedSoFar = *pnConsumed;
23162 *pBuf = 221;
23163 ++pBuf; --nBuf; ++(*pnConsumed);
23164 pIeLen = pBuf;
23165 ++pBuf; --nBuf; ++(*pnConsumed);
23166 *pBuf = 0x50;
23167 ++pBuf; --nBuf; ++(*pnConsumed);
23168 *pBuf = 0x6f;
23169 ++pBuf; --nBuf; ++(*pnConsumed);
23170 *pBuf = 0x9a;
23171 ++pBuf; --nBuf; ++(*pnConsumed);
23172 *pBuf = 0x9;
23173 ++pBuf; --nBuf; ++(*pnConsumed);
23174 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
23175 nConsumedNow = *pnConsumed;
23176 idxlast = idx;
23177 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
23178 pnConsumed,
23179 TLVS_P2PAssocReq +
23180 idx, &idx);
23181 nConsumedNow = *pnConsumed - nConsumedNow;
23182 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
23183 pBuf += nConsumedNow;
23184 nBuf -= nConsumedNow;
23185 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
23186 }
23187 return status;
23188} /* End dot11f_pack_ie_p2_p_assoc_req. */
23189
23190uint32_t dot11f_pack_ie_p2_p_assoc_res(tpAniSirGlobal pCtx,
23191 tDot11fIEP2PAssocRes *pSrc,
23192 uint8_t *pBuf,
23193 uint32_t nBuf,
23194 uint32_t *pnConsumed)
23195{
23196 uint8_t *pIeLen = 0;
23197 uint32_t n, idx = 0, idxlast;
23198 uint32_t nConsumedSoFar, nConsumedNow;
23199 uint32_t status = DOT11F_PARSE_SUCCESS;
23200 uint32_t nNeeded = 0U;
23201 status = dot11f_get_packed_iep2_p_assoc_res(pCtx, pSrc, &nNeeded);
23202 if (!DOT11F_SUCCEEDED(status))
23203 return status;
23204 if (nNeeded > nBuf)
23205 return DOT11F_BUFFER_OVERFLOW;
23206 (void)pCtx;
23207 if (pSrc->present) {
23208 do {
23209 nConsumedSoFar = *pnConsumed;
23210 *pBuf = 221;
23211 ++pBuf; --nBuf; ++(*pnConsumed);
23212 pIeLen = pBuf;
23213 ++pBuf; --nBuf; ++(*pnConsumed);
23214 *pBuf = 0x50;
23215 ++pBuf; --nBuf; ++(*pnConsumed);
23216 *pBuf = 0x6f;
23217 ++pBuf; --nBuf; ++(*pnConsumed);
23218 *pBuf = 0x9a;
23219 ++pBuf; --nBuf; ++(*pnConsumed);
23220 *pBuf = 0x9;
23221 ++pBuf; --nBuf; ++(*pnConsumed);
23222 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
23223 nConsumedNow = *pnConsumed;
23224 idxlast = idx;
23225 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
23226 pnConsumed,
23227 TLVS_P2PAssocRes +
23228 idx, &idx);
23229 nConsumedNow = *pnConsumed - nConsumedNow;
23230 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
23231 pBuf += nConsumedNow;
23232 nBuf -= nConsumedNow;
23233 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
23234 }
23235 return status;
23236} /* End dot11f_pack_ie_p2_p_assoc_res. */
23237
23238uint32_t dot11f_pack_ie_p2_p_beacon(tpAniSirGlobal pCtx,
23239 tDot11fIEP2PBeacon *pSrc,
23240 uint8_t *pBuf,
23241 uint32_t nBuf,
23242 uint32_t *pnConsumed)
23243{
23244 uint8_t *pIeLen = 0;
23245 uint32_t n, idx = 0, idxlast;
23246 uint32_t nConsumedSoFar, nConsumedNow;
23247 uint32_t status = DOT11F_PARSE_SUCCESS;
23248 uint32_t nNeeded = 0U;
23249 status = dot11f_get_packed_iep2_p_beacon(pCtx, pSrc, &nNeeded);
23250 if (!DOT11F_SUCCEEDED(status))
23251 return status;
23252 if (nNeeded > nBuf)
23253 return DOT11F_BUFFER_OVERFLOW;
23254 (void)pCtx;
23255 if (pSrc->present) {
23256 do {
23257 nConsumedSoFar = *pnConsumed;
23258 *pBuf = 221;
23259 ++pBuf; --nBuf; ++(*pnConsumed);
23260 pIeLen = pBuf;
23261 ++pBuf; --nBuf; ++(*pnConsumed);
23262 *pBuf = 0x50;
23263 ++pBuf; --nBuf; ++(*pnConsumed);
23264 *pBuf = 0x6f;
23265 ++pBuf; --nBuf; ++(*pnConsumed);
23266 *pBuf = 0x9a;
23267 ++pBuf; --nBuf; ++(*pnConsumed);
23268 *pBuf = 0x9;
23269 ++pBuf; --nBuf; ++(*pnConsumed);
23270 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
23271 nConsumedNow = *pnConsumed;
23272 idxlast = idx;
23273 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
23274 pnConsumed,
23275 TLVS_P2PBeacon +
23276 idx, &idx);
23277 nConsumedNow = *pnConsumed - nConsumedNow;
23278 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
23279 pBuf += nConsumedNow;
23280 nBuf -= nConsumedNow;
23281 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
23282 }
23283 return status;
23284} /* End dot11f_pack_ie_p2_p_beacon. */
23285
23286uint32_t dot11f_pack_ie_p2_p_beacon_probe_res(tpAniSirGlobal pCtx,
23287 tDot11fIEP2PBeaconProbeRes *pSrc,
23288 uint8_t *pBuf,
23289 uint32_t nBuf,
23290 uint32_t *pnConsumed)
23291{
23292 uint8_t *pIeLen = 0;
23293 uint32_t n, idx = 0, idxlast;
23294 uint32_t nConsumedSoFar, nConsumedNow;
23295 uint32_t status = DOT11F_PARSE_SUCCESS;
23296 uint32_t nNeeded = 0U;
23297 status = dot11f_get_packed_iep2_p_beacon_probe_res(pCtx, pSrc, &nNeeded);
23298 if (!DOT11F_SUCCEEDED(status))
23299 return status;
23300 if (nNeeded > nBuf)
23301 return DOT11F_BUFFER_OVERFLOW;
23302 (void)pCtx;
23303 if (pSrc->present) {
23304 do {
23305 nConsumedSoFar = *pnConsumed;
23306 *pBuf = 221;
23307 ++pBuf; --nBuf; ++(*pnConsumed);
23308 pIeLen = pBuf;
23309 ++pBuf; --nBuf; ++(*pnConsumed);
23310 *pBuf = 0x50;
23311 ++pBuf; --nBuf; ++(*pnConsumed);
23312 *pBuf = 0x6f;
23313 ++pBuf; --nBuf; ++(*pnConsumed);
23314 *pBuf = 0x9a;
23315 ++pBuf; --nBuf; ++(*pnConsumed);
23316 *pBuf = 0x9;
23317 ++pBuf; --nBuf; ++(*pnConsumed);
23318 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
23319 nConsumedNow = *pnConsumed;
23320 idxlast = idx;
23321 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
23322 pnConsumed,
23323 TLVS_P2PBeaconProbeRes +
23324 idx, &idx);
23325 nConsumedNow = *pnConsumed - nConsumedNow;
23326 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
23327 pBuf += nConsumedNow;
23328 nBuf -= nConsumedNow;
23329 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
23330 }
23331 return status;
23332} /* End dot11f_pack_ie_p2_p_beacon_probe_res. */
23333
23334uint32_t dot11f_pack_ie_p2_p_de_auth(tpAniSirGlobal pCtx,
23335 tDot11fIEP2PDeAuth *pSrc,
23336 uint8_t *pBuf,
23337 uint32_t nBuf,
23338 uint32_t *pnConsumed)
23339{
23340 uint8_t *pIeLen = 0;
23341 uint32_t n, idx = 0, idxlast;
23342 uint32_t nConsumedSoFar, nConsumedNow;
23343 uint32_t status = DOT11F_PARSE_SUCCESS;
23344 uint32_t nNeeded = 0U;
23345 status = dot11f_get_packed_iep2_p_de_auth(pCtx, pSrc, &nNeeded);
23346 if (!DOT11F_SUCCEEDED(status))
23347 return status;
23348 if (nNeeded > nBuf)
23349 return DOT11F_BUFFER_OVERFLOW;
23350 (void)pCtx;
23351 if (pSrc->present) {
23352 do {
23353 nConsumedSoFar = *pnConsumed;
23354 *pBuf = 221;
23355 ++pBuf; --nBuf; ++(*pnConsumed);
23356 pIeLen = pBuf;
23357 ++pBuf; --nBuf; ++(*pnConsumed);
23358 *pBuf = 0x50;
23359 ++pBuf; --nBuf; ++(*pnConsumed);
23360 *pBuf = 0x6f;
23361 ++pBuf; --nBuf; ++(*pnConsumed);
23362 *pBuf = 0x9a;
23363 ++pBuf; --nBuf; ++(*pnConsumed);
23364 *pBuf = 0x9;
23365 ++pBuf; --nBuf; ++(*pnConsumed);
23366 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
23367 nConsumedNow = *pnConsumed;
23368 idxlast = idx;
23369 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
23370 pnConsumed,
23371 TLVS_P2PDeAuth +
23372 idx, &idx);
23373 nConsumedNow = *pnConsumed - nConsumedNow;
23374 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
23375 pBuf += nConsumedNow;
23376 nBuf -= nConsumedNow;
23377 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
23378 }
23379 return status;
23380} /* End dot11f_pack_ie_p2_p_de_auth. */
23381
23382uint32_t dot11f_pack_ie_p2_p_dis_assoc(tpAniSirGlobal pCtx,
23383 tDot11fIEP2PDisAssoc *pSrc,
23384 uint8_t *pBuf,
23385 uint32_t nBuf,
23386 uint32_t *pnConsumed)
23387{
23388 uint8_t *pIeLen = 0;
23389 uint32_t n, idx = 0, idxlast;
23390 uint32_t nConsumedSoFar, nConsumedNow;
23391 uint32_t status = DOT11F_PARSE_SUCCESS;
23392 uint32_t nNeeded = 0U;
23393 status = dot11f_get_packed_iep2_p_dis_assoc(pCtx, pSrc, &nNeeded);
23394 if (!DOT11F_SUCCEEDED(status))
23395 return status;
23396 if (nNeeded > nBuf)
23397 return DOT11F_BUFFER_OVERFLOW;
23398 (void)pCtx;
23399 if (pSrc->present) {
23400 do {
23401 nConsumedSoFar = *pnConsumed;
23402 *pBuf = 221;
23403 ++pBuf; --nBuf; ++(*pnConsumed);
23404 pIeLen = pBuf;
23405 ++pBuf; --nBuf; ++(*pnConsumed);
23406 *pBuf = 0x50;
23407 ++pBuf; --nBuf; ++(*pnConsumed);
23408 *pBuf = 0x6f;
23409 ++pBuf; --nBuf; ++(*pnConsumed);
23410 *pBuf = 0x9a;
23411 ++pBuf; --nBuf; ++(*pnConsumed);
23412 *pBuf = 0x9;
23413 ++pBuf; --nBuf; ++(*pnConsumed);
23414 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
23415 nConsumedNow = *pnConsumed;
23416 idxlast = idx;
23417 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
23418 pnConsumed,
23419 TLVS_P2PDisAssoc +
23420 idx, &idx);
23421 nConsumedNow = *pnConsumed - nConsumedNow;
23422 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
23423 pBuf += nConsumedNow;
23424 nBuf -= nConsumedNow;
23425 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
23426 }
23427 return status;
23428} /* End dot11f_pack_ie_p2_p_dis_assoc. */
23429
23430uint32_t dot11f_pack_ie_p2_pie_opaque(tpAniSirGlobal pCtx,
23431 tDot11fIEP2PIEOpaque *pSrc,
23432 uint8_t *pBuf,
23433 uint32_t nBuf,
23434 uint32_t *pnConsumed)
23435{
23436 uint8_t *pIeLen = 0;
23437 uint32_t nConsumedOnEntry = *pnConsumed;
23438 uint32_t nNeeded = 0U;
23439 nNeeded += pSrc->num_data;
23440 while (pSrc->present) {
23441 if (nNeeded > nBuf)
23442 return DOT11F_BUFFER_OVERFLOW;
23443 *pBuf = 221;
23444 ++pBuf; ++(*pnConsumed);
23445 pIeLen = pBuf;
23446 ++pBuf; ++(*pnConsumed);
23447 *pBuf = 0x50;
23448 ++pBuf; ++(*pnConsumed);
23449 *pBuf = 0x6f;
23450 ++pBuf; ++(*pnConsumed);
23451 *pBuf = 0x9a;
23452 ++pBuf; ++(*pnConsumed);
23453 *pBuf = 0x9;
23454 ++pBuf; ++(*pnConsumed);
23455 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->data), pSrc->num_data);
23456 *pnConsumed += pSrc->num_data;
23457 /* fieldsEndFlag = 1 */
23458 break;
23459 }
23460 (void)pCtx;
23461 if (pIeLen) {
23462 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23463 }
23464 return DOT11F_PARSE_SUCCESS;
23465} /* End dot11f_pack_ie_p2_pie_opaque. */
23466
23467uint32_t dot11f_pack_ie_p2_p_probe_req(tpAniSirGlobal pCtx,
23468 tDot11fIEP2PProbeReq *pSrc,
23469 uint8_t *pBuf,
23470 uint32_t nBuf,
23471 uint32_t *pnConsumed)
23472{
23473 uint8_t *pIeLen = 0;
23474 uint32_t n, idx = 0, idxlast;
23475 uint32_t nConsumedSoFar, nConsumedNow;
23476 uint32_t status = DOT11F_PARSE_SUCCESS;
23477 uint32_t nNeeded = 0U;
23478 status = dot11f_get_packed_iep2_p_probe_req(pCtx, pSrc, &nNeeded);
23479 if (!DOT11F_SUCCEEDED(status))
23480 return status;
23481 if (nNeeded > nBuf)
23482 return DOT11F_BUFFER_OVERFLOW;
23483 (void)pCtx;
23484 if (pSrc->present) {
23485 do {
23486 nConsumedSoFar = *pnConsumed;
23487 *pBuf = 221;
23488 ++pBuf; --nBuf; ++(*pnConsumed);
23489 pIeLen = pBuf;
23490 ++pBuf; --nBuf; ++(*pnConsumed);
23491 *pBuf = 0x50;
23492 ++pBuf; --nBuf; ++(*pnConsumed);
23493 *pBuf = 0x6f;
23494 ++pBuf; --nBuf; ++(*pnConsumed);
23495 *pBuf = 0x9a;
23496 ++pBuf; --nBuf; ++(*pnConsumed);
23497 *pBuf = 0x9;
23498 ++pBuf; --nBuf; ++(*pnConsumed);
23499 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
23500 nConsumedNow = *pnConsumed;
23501 idxlast = idx;
23502 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
23503 pnConsumed,
23504 TLVS_P2PProbeReq +
23505 idx, &idx);
23506 nConsumedNow = *pnConsumed - nConsumedNow;
23507 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
23508 pBuf += nConsumedNow;
23509 nBuf -= nConsumedNow;
23510 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
23511 }
23512 return status;
23513} /* End dot11f_pack_ie_p2_p_probe_req. */
23514
23515uint32_t dot11f_pack_ie_p2_p_probe_res(tpAniSirGlobal pCtx,
23516 tDot11fIEP2PProbeRes *pSrc,
23517 uint8_t *pBuf,
23518 uint32_t nBuf,
23519 uint32_t *pnConsumed)
23520{
23521 uint8_t *pIeLen = 0;
23522 uint32_t n, idx = 0, idxlast;
23523 uint32_t nConsumedSoFar, nConsumedNow;
23524 uint32_t status = DOT11F_PARSE_SUCCESS;
23525 uint32_t nNeeded = 0U;
23526 status = dot11f_get_packed_iep2_p_probe_res(pCtx, pSrc, &nNeeded);
23527 if (!DOT11F_SUCCEEDED(status))
23528 return status;
23529 if (nNeeded > nBuf)
23530 return DOT11F_BUFFER_OVERFLOW;
23531 (void)pCtx;
23532 if (pSrc->present) {
23533 do {
23534 nConsumedSoFar = *pnConsumed;
23535 *pBuf = 221;
23536 ++pBuf; --nBuf; ++(*pnConsumed);
23537 pIeLen = pBuf;
23538 ++pBuf; --nBuf; ++(*pnConsumed);
23539 *pBuf = 0x50;
23540 ++pBuf; --nBuf; ++(*pnConsumed);
23541 *pBuf = 0x6f;
23542 ++pBuf; --nBuf; ++(*pnConsumed);
23543 *pBuf = 0x9a;
23544 ++pBuf; --nBuf; ++(*pnConsumed);
23545 *pBuf = 0x9;
23546 ++pBuf; --nBuf; ++(*pnConsumed);
23547 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
23548 nConsumedNow = *pnConsumed;
23549 idxlast = idx;
23550 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
23551 pnConsumed,
23552 TLVS_P2PProbeRes +
23553 idx, &idx);
23554 nConsumedNow = *pnConsumed - nConsumedNow;
23555 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
23556 pBuf += nConsumedNow;
23557 nBuf -= nConsumedNow;
23558 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
23559 }
23560 return status;
23561} /* End dot11f_pack_ie_p2_p_probe_res. */
23562
23563uint32_t dot11f_pack_ie_pti_control(tpAniSirGlobal pCtx,
23564 tDot11fIEPTIControl *pSrc,
23565 uint8_t *pBuf,
23566 uint32_t nBuf,
23567 uint32_t *pnConsumed)
23568{
23569 uint8_t *pIeLen = 0;
23570 uint32_t nConsumedOnEntry = *pnConsumed;
23571 uint32_t nNeeded = 0U;
23572 nNeeded += 3;
23573 while (pSrc->present) {
23574 if (nNeeded > nBuf)
23575 return DOT11F_BUFFER_OVERFLOW;
23576 *pBuf = 105;
23577 ++pBuf; ++(*pnConsumed);
23578 pIeLen = pBuf;
23579 ++pBuf; ++(*pnConsumed);
23580 *pBuf = pSrc->tid;
23581 *pnConsumed += 1;
23582 pBuf += 1;
23583 frameshtons(pCtx, pBuf, pSrc->sequence_control, 0);
23584 *pnConsumed += 2;
23585 /* fieldsEndFlag = 1 */
23586 break;
23587 }
23588 (void)pCtx;
23589 if (pIeLen) {
23590 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23591 }
23592 return DOT11F_PARSE_SUCCESS;
23593} /* End dot11f_pack_ie_pti_control. */
23594
23595uint32_t dot11f_pack_ie_pu_buffer_status(tpAniSirGlobal pCtx,
23596 tDot11fIEPUBufferStatus *pSrc,
23597 uint8_t *pBuf,
23598 uint32_t nBuf,
23599 uint32_t *pnConsumed)
23600{
23601 uint8_t *pIeLen = 0;
23602 uint32_t nConsumedOnEntry = *pnConsumed;
23603 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070023604 uint8_t tmp154__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080023605 nNeeded += 1;
23606 while (pSrc->present) {
23607 if (nNeeded > nBuf)
23608 return DOT11F_BUFFER_OVERFLOW;
23609 *pBuf = 106;
23610 ++pBuf; ++(*pnConsumed);
23611 pIeLen = pBuf;
23612 ++pBuf; ++(*pnConsumed);
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070023613 tmp154__ = 0U;
23614 tmp154__ |= (pSrc->ac_bk_traffic_aval << 0);
23615 tmp154__ |= (pSrc->ac_be_traffic_aval << 1);
23616 tmp154__ |= (pSrc->ac_vi_traffic_aval << 2);
23617 tmp154__ |= (pSrc->ac_vo_traffic_aval << 3);
23618 tmp154__ |= (pSrc->reserved << 4);
Naveen Rawat69623ef2018-04-27 16:11:01 -070023619 if (unlikely(nBuf < 1))
23620 return DOT11F_INCOMPLETE_IE;
23621
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070023622 *pBuf = tmp154__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080023623 *pnConsumed += 1;
23624 /* fieldsEndFlag = 1 */
23625 nBuf -= 1 ;
23626 break;
23627 }
23628 (void)pCtx;
23629 if (pIeLen) {
23630 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23631 }
23632 return DOT11F_PARSE_SUCCESS;
23633} /* End dot11f_pack_ie_pu_buffer_status. */
23634
23635uint32_t dot11f_pack_ie_power_caps(tpAniSirGlobal pCtx,
23636 tDot11fIEPowerCaps *pSrc,
23637 uint8_t *pBuf,
23638 uint32_t nBuf,
23639 uint32_t *pnConsumed)
23640{
23641 uint8_t *pIeLen = 0;
23642 uint32_t nConsumedOnEntry = *pnConsumed;
23643 uint32_t nNeeded = 0U;
23644 nNeeded += 2;
23645 while (pSrc->present) {
23646 if (nNeeded > nBuf)
23647 return DOT11F_BUFFER_OVERFLOW;
23648 *pBuf = 33;
23649 ++pBuf; ++(*pnConsumed);
23650 pIeLen = pBuf;
23651 ++pBuf; ++(*pnConsumed);
23652 *pBuf = pSrc->minTxPower;
23653 *pnConsumed += 1;
23654 pBuf += 1;
23655 *pBuf = pSrc->maxTxPower;
23656 *pnConsumed += 1;
23657 /* fieldsEndFlag = 1 */
23658 break;
23659 }
23660 (void)pCtx;
23661 if (pIeLen) {
23662 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23663 }
23664 return DOT11F_PARSE_SUCCESS;
23665} /* End dot11f_pack_ie_power_caps. */
23666
23667uint32_t dot11f_pack_ie_power_constraints(tpAniSirGlobal pCtx,
23668 tDot11fIEPowerConstraints *pSrc,
23669 uint8_t *pBuf,
23670 uint32_t nBuf,
23671 uint32_t *pnConsumed)
23672{
23673 uint8_t *pIeLen = 0;
23674 uint32_t nConsumedOnEntry = *pnConsumed;
23675 uint32_t nNeeded = 0U;
23676 nNeeded += 1;
23677 while (pSrc->present) {
23678 if (nNeeded > nBuf)
23679 return DOT11F_BUFFER_OVERFLOW;
23680 *pBuf = 32;
23681 ++pBuf; ++(*pnConsumed);
23682 pIeLen = pBuf;
23683 ++pBuf; ++(*pnConsumed);
23684 *pBuf = pSrc->localPowerConstraints;
23685 *pnConsumed += 1;
23686 /* fieldsEndFlag = 1 */
23687 break;
23688 }
23689 (void)pCtx;
23690 if (pIeLen) {
23691 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23692 }
23693 return DOT11F_PARSE_SUCCESS;
23694} /* End dot11f_pack_ie_power_constraints. */
23695
23696uint32_t dot11f_pack_ie_qbss_load(tpAniSirGlobal pCtx,
23697 tDot11fIEQBSSLoad *pSrc,
23698 uint8_t *pBuf,
23699 uint32_t nBuf,
23700 uint32_t *pnConsumed)
23701{
23702 uint8_t *pIeLen = 0;
23703 uint32_t nConsumedOnEntry = *pnConsumed;
23704 uint32_t nNeeded = 0U;
23705 nNeeded += 5;
23706 while (pSrc->present) {
23707 if (nNeeded > nBuf)
23708 return DOT11F_BUFFER_OVERFLOW;
23709 *pBuf = 11;
23710 ++pBuf; ++(*pnConsumed);
23711 pIeLen = pBuf;
23712 ++pBuf; ++(*pnConsumed);
23713 frameshtons(pCtx, pBuf, pSrc->stacount, 0);
23714 *pnConsumed += 2;
23715 pBuf += 2;
23716 *pBuf = pSrc->chautil;
23717 *pnConsumed += 1;
23718 pBuf += 1;
23719 frameshtons(pCtx, pBuf, pSrc->avail, 0);
23720 *pnConsumed += 2;
23721 /* fieldsEndFlag = 1 */
23722 break;
23723 }
23724 (void)pCtx;
23725 if (pIeLen) {
23726 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23727 }
23728 return DOT11F_PARSE_SUCCESS;
23729} /* End dot11f_pack_ie_qbss_load. */
23730
Selvaraj, Sridharc2fe7a32017-02-02 19:20:16 +053023731uint32_t dot11f_pack_ie_QCN_IE(tpAniSirGlobal pCtx,
23732 tDot11fIEQCN_IE *pSrc,
23733 uint8_t *pBuf,
23734 uint32_t nBuf,
23735 uint32_t *pnConsumed)
23736{
23737 uint8_t *pIeLen = 0;
23738 uint32_t nConsumedOnEntry = *pnConsumed;
23739 uint32_t nNeeded = 0U;
23740 nNeeded += 4;
23741 while (pSrc->present) {
23742 if (nNeeded > nBuf)
23743 return DOT11F_BUFFER_OVERFLOW;
23744 *pBuf = 221;
23745 ++pBuf; ++(*pnConsumed);
23746 pIeLen = pBuf;
23747 ++pBuf; ++(*pnConsumed);
23748 *pBuf = 0x8c;
23749 ++pBuf; ++(*pnConsumed);
23750 *pBuf = 0xfd;
23751 ++pBuf; ++(*pnConsumed);
23752 *pBuf = 0xf0;
23753 ++pBuf; ++(*pnConsumed);
23754 *pBuf = 0x1;
23755 ++pBuf; ++(*pnConsumed);
23756 DOT11F_MEMCPY(pCtx, pBuf, pSrc->version, 4);
23757 *pnConsumed += 4;
23758 /* fieldsEndFlag = 1 */
23759 break;
23760 }
23761 (void)pCtx;
23762 if (pIeLen) {
23763 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23764 }
23765 return DOT11F_PARSE_SUCCESS;
23766} /* End dot11f_pack_ie_QCN_IE. */
23767
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080023768uint32_t dot11f_pack_ie_QComVendorIE(tpAniSirGlobal pCtx,
23769 tDot11fIEQComVendorIE *pSrc,
23770 uint8_t *pBuf,
23771 uint32_t nBuf,
23772 uint32_t *pnConsumed)
23773{
23774 uint8_t *pIeLen = 0;
23775 uint32_t nConsumedOnEntry = *pnConsumed;
23776 uint32_t nNeeded = 0U;
23777 nNeeded += 2;
23778 while (pSrc->present) {
23779 if (nNeeded > nBuf)
23780 return DOT11F_BUFFER_OVERFLOW;
23781 *pBuf = 221;
23782 ++pBuf; ++(*pnConsumed);
23783 pIeLen = pBuf;
23784 ++pBuf; ++(*pnConsumed);
23785 *pBuf = 0x0;
23786 ++pBuf; ++(*pnConsumed);
23787 *pBuf = 0xa0;
23788 ++pBuf; ++(*pnConsumed);
23789 *pBuf = 0xc6;
23790 ++pBuf; ++(*pnConsumed);
23791 *pBuf = pSrc->type;
23792 *pnConsumed += 1;
23793 pBuf += 1;
23794 *pBuf = pSrc->channel;
23795 *pnConsumed += 1;
23796 /* fieldsEndFlag = 1 */
23797 break;
23798 }
23799 (void)pCtx;
23800 if (pIeLen) {
23801 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23802 }
23803 return DOT11F_PARSE_SUCCESS;
23804} /* End dot11f_pack_ie_QComVendorIE. */
23805
23806uint32_t dot11f_pack_ie_qos_caps_ap(tpAniSirGlobal pCtx,
23807 tDot11fIEQOSCapsAp *pSrc,
23808 uint8_t *pBuf,
23809 uint32_t nBuf,
23810 uint32_t *pnConsumed)
23811{
23812 uint8_t *pIeLen = 0;
23813 uint32_t nConsumedOnEntry = *pnConsumed;
23814 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070023815 uint8_t tmp155__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080023816 nNeeded += 1;
23817 while (pSrc->present) {
23818 if (nNeeded > nBuf)
23819 return DOT11F_BUFFER_OVERFLOW;
23820 *pBuf = 46;
23821 ++pBuf; ++(*pnConsumed);
23822 pIeLen = pBuf;
23823 ++pBuf; ++(*pnConsumed);
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070023824 tmp155__ = 0U;
23825 tmp155__ |= (pSrc->count << 0);
23826 tmp155__ |= (pSrc->qack << 4);
23827 tmp155__ |= (pSrc->qreq << 5);
23828 tmp155__ |= (pSrc->txopreq << 6);
23829 tmp155__ |= (pSrc->reserved << 7);
Naveen Rawat69623ef2018-04-27 16:11:01 -070023830 if (unlikely(nBuf < 1))
23831 return DOT11F_INCOMPLETE_IE;
23832
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070023833 *pBuf = tmp155__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080023834 *pnConsumed += 1;
23835 /* fieldsEndFlag = 1 */
23836 nBuf -= 1 ;
23837 break;
23838 }
23839 (void)pCtx;
23840 if (pIeLen) {
23841 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23842 }
23843 return DOT11F_PARSE_SUCCESS;
23844} /* End dot11f_pack_ie_qos_caps_ap. */
23845
23846uint32_t dot11f_pack_ie_qos_caps_station(tpAniSirGlobal pCtx,
23847 tDot11fIEQOSCapsStation *pSrc,
23848 uint8_t *pBuf,
23849 uint32_t nBuf,
23850 uint32_t *pnConsumed)
23851{
23852 uint8_t *pIeLen = 0;
23853 uint32_t nConsumedOnEntry = *pnConsumed;
23854 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070023855 uint8_t tmp156__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080023856 nNeeded += 1;
23857 while (pSrc->present) {
23858 if (nNeeded > nBuf)
23859 return DOT11F_BUFFER_OVERFLOW;
23860 *pBuf = 46;
23861 ++pBuf; ++(*pnConsumed);
23862 pIeLen = pBuf;
23863 ++pBuf; ++(*pnConsumed);
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070023864 tmp156__ = 0U;
23865 tmp156__ |= (pSrc->acvo_uapsd << 0);
23866 tmp156__ |= (pSrc->acvi_uapsd << 1);
23867 tmp156__ |= (pSrc->acbk_uapsd << 2);
23868 tmp156__ |= (pSrc->acbe_uapsd << 3);
23869 tmp156__ |= (pSrc->qack << 4);
23870 tmp156__ |= (pSrc->max_sp_length << 5);
23871 tmp156__ |= (pSrc->more_data_ack << 7);
Naveen Rawat69623ef2018-04-27 16:11:01 -070023872 if (unlikely(nBuf < 1))
23873 return DOT11F_INCOMPLETE_IE;
23874
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070023875 *pBuf = tmp156__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080023876 *pnConsumed += 1;
23877 /* fieldsEndFlag = 1 */
23878 nBuf -= 1 ;
23879 break;
23880 }
23881 (void)pCtx;
23882 if (pIeLen) {
23883 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23884 }
23885 return DOT11F_PARSE_SUCCESS;
23886} /* End dot11f_pack_ie_qos_caps_station. */
23887
23888uint32_t dot11f_pack_ie_qos_map_set(tpAniSirGlobal pCtx,
23889 tDot11fIEQosMapSet *pSrc,
23890 uint8_t *pBuf,
23891 uint32_t nBuf,
23892 uint32_t *pnConsumed)
23893{
23894 uint8_t *pIeLen = 0;
23895 uint32_t nConsumedOnEntry = *pnConsumed;
23896 uint32_t nNeeded = 0U;
23897 nNeeded += pSrc->num_dscp_exceptions;
23898 while (pSrc->present) {
23899 if (nNeeded > nBuf)
23900 return DOT11F_BUFFER_OVERFLOW;
23901 *pBuf = 110;
23902 ++pBuf; ++(*pnConsumed);
23903 pIeLen = pBuf;
23904 ++pBuf; ++(*pnConsumed);
23905 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->dscp_exceptions), pSrc->num_dscp_exceptions);
23906 *pnConsumed += pSrc->num_dscp_exceptions;
23907 /* fieldsEndFlag = 1 */
23908 break;
23909 }
23910 (void)pCtx;
23911 if (pIeLen) {
23912 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23913 }
23914 return DOT11F_PARSE_SUCCESS;
23915} /* End dot11f_pack_ie_qos_map_set. */
23916
23917uint32_t dot11f_pack_ie_quiet(tpAniSirGlobal pCtx,
23918 tDot11fIEQuiet *pSrc,
23919 uint8_t *pBuf,
23920 uint32_t nBuf,
23921 uint32_t *pnConsumed)
23922{
23923 uint8_t *pIeLen = 0;
23924 uint32_t nConsumedOnEntry = *pnConsumed;
23925 uint32_t nNeeded = 0U;
23926 nNeeded += 6;
23927 while (pSrc->present) {
23928 if (nNeeded > nBuf)
23929 return DOT11F_BUFFER_OVERFLOW;
23930 *pBuf = 40;
23931 ++pBuf; ++(*pnConsumed);
23932 pIeLen = pBuf;
23933 ++pBuf; ++(*pnConsumed);
23934 *pBuf = pSrc->count;
23935 *pnConsumed += 1;
23936 pBuf += 1;
23937 *pBuf = pSrc->period;
23938 *pnConsumed += 1;
23939 pBuf += 1;
23940 frameshtons(pCtx, pBuf, pSrc->duration, 0);
23941 *pnConsumed += 2;
23942 pBuf += 2;
23943 frameshtons(pCtx, pBuf, pSrc->offset, 0);
23944 *pnConsumed += 2;
23945 /* fieldsEndFlag = 1 */
23946 break;
23947 }
23948 (void)pCtx;
23949 if (pIeLen) {
23950 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23951 }
23952 return DOT11F_PARSE_SUCCESS;
23953} /* End dot11f_pack_ie_quiet. */
23954
23955uint32_t dot11f_pack_ie_rcpiie(tpAniSirGlobal pCtx,
23956 tDot11fIERCPIIE *pSrc,
23957 uint8_t *pBuf,
23958 uint32_t nBuf,
23959 uint32_t *pnConsumed)
23960{
23961 uint8_t *pIeLen = 0;
23962 uint32_t nConsumedOnEntry = *pnConsumed;
23963 uint32_t nNeeded = 0U;
23964 nNeeded += 1;
23965 while (pSrc->present) {
23966 if (nNeeded > nBuf)
23967 return DOT11F_BUFFER_OVERFLOW;
23968 *pBuf = 53;
23969 ++pBuf; ++(*pnConsumed);
23970 pIeLen = pBuf;
23971 ++pBuf; ++(*pnConsumed);
23972 *pBuf = pSrc->rcpi;
23973 *pnConsumed += 1;
23974 /* fieldsEndFlag = 1 */
23975 break;
23976 }
23977 (void)pCtx;
23978 if (pIeLen) {
23979 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
23980 }
23981 return DOT11F_PARSE_SUCCESS;
23982} /* End dot11f_pack_ie_rcpiie. */
23983
23984uint32_t dot11f_pack_ie_ric_data_desc(tpAniSirGlobal pCtx,
23985 tDot11fIERICDataDesc *pSrc,
23986 uint8_t *pBuf,
23987 uint32_t nBuf,
23988 uint32_t *pnConsumed)
23989{
23990 uint32_t nNeeded = 0U;
23991 uint32_t status = DOT11F_PARSE_SUCCESS;
23992 status = dot11f_get_packed_ieric_data_desc(pCtx, pSrc, &nNeeded);
23993 if (!DOT11F_SUCCEEDED(status))
23994 return status;
23995 while (pSrc->present) {
23996 if (nNeeded > nBuf)
23997 return DOT11F_BUFFER_OVERFLOW;
23998 status = pack_core(pCtx,
23999 (uint8_t *)pSrc,
24000 pBuf,
24001 nBuf,
24002 pnConsumed,
24003 FFS_RICDataDesc,
24004 IES_RICDataDesc);
24005 break;
24006 }
24007 (void)pCtx;
24008 return status;
24009} /* End dot11f_pack_ie_ric_data_desc. */
24010
24011uint32_t dot11f_pack_ie_rsn(tpAniSirGlobal pCtx,
24012 tDot11fIERSN *pSrc,
24013 uint8_t *pBuf,
24014 uint32_t nBuf,
24015 uint32_t *pnConsumed)
24016{
24017 uint8_t *pIeLen = 0;
24018 uint32_t nConsumedOnEntry = *pnConsumed;
24019 uint32_t nNeeded = 0U;
24020 uint32_t status = DOT11F_PARSE_SUCCESS;
24021 status = dot11f_get_packed_iersn(pCtx, pSrc, &nNeeded);
24022 if (!DOT11F_SUCCEEDED(status))
24023 return status;
24024 while (pSrc->present) {
24025 if (nNeeded > nBuf)
24026 return DOT11F_BUFFER_OVERFLOW;
24027 *pBuf = 48;
24028 ++pBuf; ++(*pnConsumed);
24029 pIeLen = pBuf;
24030 ++pBuf; ++(*pnConsumed);
24031 frameshtons(pCtx, pBuf, pSrc->version, 0);
24032 *pnConsumed += 2;
24033 pBuf += 2;
Abhishek Singh3f13a812018-01-16 14:24:44 +053024034 if (pSrc->gp_cipher_suite_present) {
Abhishek Singh7dcb85b2017-12-27 15:15:01 +053024035 DOT11F_MEMCPY(pCtx, pBuf, pSrc->gp_cipher_suite, 4);
24036 *pnConsumed += 4;
24037 pBuf += 4;
24038 } else {
24039 break;
24040 }
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080024041 if (pSrc->pwise_cipher_suite_count) {
24042 frameshtons(pCtx, pBuf, pSrc->pwise_cipher_suite_count, 0);
24043 *pnConsumed += 2;
24044 pBuf += 2;
24045 } else {
24046 break;
24047 }
24048 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->pwise_cipher_suites), (pSrc->pwise_cipher_suite_count * 4));
24049 *pnConsumed += (pSrc->pwise_cipher_suite_count * 4);
24050 pBuf += (pSrc->pwise_cipher_suite_count * 4);
Abhishek Singh3f13a812018-01-16 14:24:44 +053024051 if (pSrc->akm_suite_cnt) {
24052 frameshtons(pCtx, pBuf, pSrc->akm_suite_cnt, 0);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080024053 *pnConsumed += 2;
24054 pBuf += 2;
24055 } else {
24056 break;
24057 }
Abhishek Singh3f13a812018-01-16 14:24:44 +053024058 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->akm_suite), (pSrc->akm_suite_cnt * 4));
24059 *pnConsumed += (pSrc->akm_suite_cnt * 4);
24060 pBuf += (pSrc->akm_suite_cnt * 4);
24061 if (pSrc->RSN_Cap_present) {
24062 DOT11F_MEMCPY(pCtx, pBuf, pSrc->RSN_Cap, 2);
24063 *pnConsumed += 2;
24064 pBuf += 2;
24065 } else {
24066 break;
24067 }
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080024068 if (pSrc->pmkid_count) {
24069 frameshtons(pCtx, pBuf, pSrc->pmkid_count, 0);
24070 *pnConsumed += 2;
24071 pBuf += 2;
24072 } else {
24073 break;
24074 }
24075 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->pmkid), (pSrc->pmkid_count * 16));
24076 *pnConsumed += (pSrc->pmkid_count * 16);
24077 pBuf += (pSrc->pmkid_count * 16);
Abhishek Singh3f13a812018-01-16 14:24:44 +053024078 if (pSrc->gp_mgmt_cipher_suite_present) {
24079 DOT11F_MEMCPY(pCtx, pBuf, pSrc->gp_mgmt_cipher_suite, 4);
24080 *pnConsumed += 4;
24081 /* fieldsEndFlag = 1 */
24082 } else {
24083 break;
24084 }
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080024085 break;
24086 }
24087 (void)pCtx;
24088 if (pIeLen) {
24089 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24090 }
24091 return status;
24092} /* End dot11f_pack_ie_rsn. */
24093
24094uint32_t dot11f_pack_ie_rsniie(tpAniSirGlobal pCtx,
24095 tDot11fIERSNIIE *pSrc,
24096 uint8_t *pBuf,
24097 uint32_t nBuf,
24098 uint32_t *pnConsumed)
24099{
24100 uint8_t *pIeLen = 0;
24101 uint32_t nConsumedOnEntry = *pnConsumed;
24102 uint32_t nNeeded = 0U;
24103 nNeeded += 1;
24104 while (pSrc->present) {
24105 if (nNeeded > nBuf)
24106 return DOT11F_BUFFER_OVERFLOW;
24107 *pBuf = 65;
24108 ++pBuf; ++(*pnConsumed);
24109 pIeLen = pBuf;
24110 ++pBuf; ++(*pnConsumed);
24111 *pBuf = pSrc->rsni;
24112 *pnConsumed += 1;
24113 /* fieldsEndFlag = 1 */
24114 break;
24115 }
24116 (void)pCtx;
24117 if (pIeLen) {
24118 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24119 }
24120 return DOT11F_PARSE_SUCCESS;
24121} /* End dot11f_pack_ie_rsniie. */
24122
24123uint32_t dot11f_pack_ie_rsn_opaque(tpAniSirGlobal pCtx,
24124 tDot11fIERSNOpaque *pSrc,
24125 uint8_t *pBuf,
24126 uint32_t nBuf,
24127 uint32_t *pnConsumed)
24128{
24129 uint8_t *pIeLen = 0;
24130 uint32_t nConsumedOnEntry = *pnConsumed;
24131 uint32_t nNeeded = 0U;
24132 nNeeded += pSrc->num_data;
24133 while (pSrc->present) {
24134 if (nNeeded > nBuf)
24135 return DOT11F_BUFFER_OVERFLOW;
24136 *pBuf = 48;
24137 ++pBuf; ++(*pnConsumed);
24138 pIeLen = pBuf;
24139 ++pBuf; ++(*pnConsumed);
24140 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->data), pSrc->num_data);
24141 *pnConsumed += pSrc->num_data;
24142 /* fieldsEndFlag = 1 */
24143 break;
24144 }
24145 (void)pCtx;
24146 if (pIeLen) {
24147 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24148 }
24149 return DOT11F_PARSE_SUCCESS;
24150} /* End dot11f_pack_ie_rsn_opaque. */
24151
24152uint32_t dot11f_pack_ie_supp_channels(tpAniSirGlobal pCtx,
24153 tDot11fIESuppChannels *pSrc,
24154 uint8_t *pBuf,
24155 uint32_t nBuf,
24156 uint32_t *pnConsumed)
24157{
24158 uint8_t *pIeLen = 0;
24159 uint32_t nConsumedOnEntry = *pnConsumed;
24160 uint32_t nNeeded = 0U;
24161 nNeeded += pSrc->num_bands * 2;
24162 while (pSrc->present) {
24163 if (nNeeded > nBuf)
24164 return DOT11F_BUFFER_OVERFLOW;
24165 *pBuf = 36;
24166 ++pBuf; ++(*pnConsumed);
24167 pIeLen = pBuf;
24168 ++pBuf; ++(*pnConsumed);
24169 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->bands), (pSrc->num_bands * 2));
24170 *pnConsumed += (pSrc->num_bands * 2);
24171 /* fieldsEndFlag = 1 */
24172 break;
24173 }
24174 (void)pCtx;
24175 if (pIeLen) {
24176 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24177 }
24178 return DOT11F_PARSE_SUCCESS;
24179} /* End dot11f_pack_ie_supp_channels. */
24180
24181uint32_t dot11f_pack_ie_supp_operating_classes(tpAniSirGlobal pCtx,
24182 tDot11fIESuppOperatingClasses *pSrc,
24183 uint8_t *pBuf,
24184 uint32_t nBuf,
24185 uint32_t *pnConsumed)
24186{
24187 uint8_t *pIeLen = 0;
24188 uint32_t nConsumedOnEntry = *pnConsumed;
24189 uint32_t nNeeded = 0U;
24190 nNeeded += pSrc->num_classes;
24191 while (pSrc->present) {
24192 if (nNeeded > nBuf)
24193 return DOT11F_BUFFER_OVERFLOW;
24194 *pBuf = 59;
24195 ++pBuf; ++(*pnConsumed);
24196 pIeLen = pBuf;
24197 ++pBuf; ++(*pnConsumed);
24198 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->classes), pSrc->num_classes);
24199 *pnConsumed += pSrc->num_classes;
24200 /* fieldsEndFlag = 1 */
24201 break;
24202 }
24203 (void)pCtx;
24204 if (pIeLen) {
24205 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24206 }
24207 return DOT11F_PARSE_SUCCESS;
24208} /* End dot11f_pack_ie_supp_operating_classes. */
24209
24210uint32_t dot11f_pack_ie_supp_rates(tpAniSirGlobal pCtx,
24211 tDot11fIESuppRates *pSrc,
24212 uint8_t *pBuf,
24213 uint32_t nBuf,
24214 uint32_t *pnConsumed)
24215{
24216 uint8_t *pIeLen = 0;
24217 uint32_t nConsumedOnEntry = *pnConsumed;
24218 uint32_t nNeeded = 0U;
24219 nNeeded += pSrc->num_rates;
24220 while (pSrc->present) {
24221 if (nNeeded > nBuf)
24222 return DOT11F_BUFFER_OVERFLOW;
24223 *pBuf = 1;
24224 ++pBuf; ++(*pnConsumed);
24225 pIeLen = pBuf;
24226 ++pBuf; ++(*pnConsumed);
24227 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->rates), pSrc->num_rates);
24228 *pnConsumed += pSrc->num_rates;
24229 /* fieldsEndFlag = 1 */
24230 break;
24231 }
24232 (void)pCtx;
24233 if (pIeLen) {
24234 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24235 }
24236 return DOT11F_PARSE_SUCCESS;
24237} /* End dot11f_pack_ie_supp_rates. */
24238
24239uint32_t dot11f_pack_ie_tim(tpAniSirGlobal pCtx,
24240 tDot11fIETIM *pSrc,
24241 uint8_t *pBuf,
24242 uint32_t nBuf,
24243 uint32_t *pnConsumed)
24244{
24245 uint8_t *pIeLen = 0;
24246 uint32_t nConsumedOnEntry = *pnConsumed;
24247 uint32_t nNeeded = 0U;
24248 nNeeded += (pSrc->num_vbmp + 3);
24249 while (pSrc->present) {
24250 if (nNeeded > nBuf)
24251 return DOT11F_BUFFER_OVERFLOW;
24252 *pBuf = 5;
24253 ++pBuf; ++(*pnConsumed);
24254 pIeLen = pBuf;
24255 ++pBuf; ++(*pnConsumed);
24256 *pBuf = pSrc->dtim_count;
24257 *pnConsumed += 1;
24258 pBuf += 1;
24259 *pBuf = pSrc->dtim_period;
24260 *pnConsumed += 1;
24261 pBuf += 1;
24262 *pBuf = pSrc->bmpctl;
24263 *pnConsumed += 1;
24264 pBuf += 1;
24265 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->vbmp), pSrc->num_vbmp);
24266 *pnConsumed += pSrc->num_vbmp;
24267 /* fieldsEndFlag = 1 */
24268 break;
24269 }
24270 (void)pCtx;
24271 if (pIeLen) {
24272 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24273 }
24274 return DOT11F_PARSE_SUCCESS;
24275} /* End dot11f_pack_ie_tim. */
24276
24277uint32_t dot11f_pack_ie_tpc_report(tpAniSirGlobal pCtx,
24278 tDot11fIETPCReport *pSrc,
24279 uint8_t *pBuf,
24280 uint32_t nBuf,
24281 uint32_t *pnConsumed)
24282{
24283 uint8_t *pIeLen = 0;
24284 uint32_t nConsumedOnEntry = *pnConsumed;
24285 uint32_t nNeeded = 0U;
24286 nNeeded += 2;
24287 while (pSrc->present) {
24288 if (nNeeded > nBuf)
24289 return DOT11F_BUFFER_OVERFLOW;
24290 *pBuf = 35;
24291 ++pBuf; ++(*pnConsumed);
24292 pIeLen = pBuf;
24293 ++pBuf; ++(*pnConsumed);
24294 *pBuf = pSrc->tx_power;
24295 *pnConsumed += 1;
24296 pBuf += 1;
24297 *pBuf = pSrc->link_margin;
24298 *pnConsumed += 1;
24299 /* fieldsEndFlag = 1 */
24300 break;
24301 }
24302 (void)pCtx;
24303 if (pIeLen) {
24304 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24305 }
24306 return DOT11F_PARSE_SUCCESS;
24307} /* End dot11f_pack_ie_tpc_report. */
24308
24309uint32_t dot11f_pack_ie_tpc_request(tpAniSirGlobal pCtx,
24310 tDot11fIETPCRequest *pSrc,
24311 uint8_t *pBuf,
24312 uint32_t nBuf,
24313 uint32_t *pnConsumed)
24314{
24315 uint8_t *pIeLen = 0;
24316 uint32_t nConsumedOnEntry = *pnConsumed;
24317 uint32_t nNeeded = 0U;
24318 nNeeded += 0;
24319 while (pSrc->present) {
24320 if (nNeeded > nBuf)
24321 return DOT11F_BUFFER_OVERFLOW;
24322 *pBuf = 34;
24323 ++pBuf; ++(*pnConsumed);
24324 pIeLen = pBuf;
24325 ++pBuf; ++(*pnConsumed);
24326 break;
24327 }
24328 (void)pCtx;
24329 if (pIeLen) {
24330 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24331 }
24332 return DOT11F_PARSE_SUCCESS;
24333} /* End dot11f_pack_ie_tpc_request. */
24334
24335uint32_t dot11f_pack_ie_time_advertisement(tpAniSirGlobal pCtx,
24336 tDot11fIETimeAdvertisement *pSrc,
24337 uint8_t *pBuf,
24338 uint32_t nBuf,
24339 uint32_t *pnConsumed)
24340{
24341 uint8_t *pIeLen = 0;
24342 uint32_t nConsumedOnEntry = *pnConsumed;
24343 uint32_t nNeeded = 0U;
24344 nNeeded += 16;
24345 while (pSrc->present) {
24346 if (nNeeded > nBuf)
24347 return DOT11F_BUFFER_OVERFLOW;
24348 *pBuf = 69;
24349 ++pBuf; ++(*pnConsumed);
24350 pIeLen = pBuf;
24351 ++pBuf; ++(*pnConsumed);
24352 *pBuf = pSrc->timing_capabilities;
24353 *pnConsumed += 1;
24354 pBuf += 1;
24355 DOT11F_MEMCPY(pCtx, pBuf, pSrc->time_value, 10);
24356 *pnConsumed += 10;
24357 pBuf += 10;
24358 DOT11F_MEMCPY(pCtx, pBuf, pSrc->time_error, 5);
24359 *pnConsumed += 5;
24360 /* fieldsEndFlag = 1 */
24361 break;
24362 }
24363 (void)pCtx;
24364 if (pIeLen) {
24365 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24366 }
24367 return DOT11F_PARSE_SUCCESS;
24368} /* End dot11f_pack_ie_time_advertisement. */
24369
24370uint32_t dot11f_pack_ie_timeout_interval(tpAniSirGlobal pCtx,
24371 tDot11fIETimeoutInterval *pSrc,
24372 uint8_t *pBuf,
24373 uint32_t nBuf,
24374 uint32_t *pnConsumed)
24375{
24376 uint8_t *pIeLen = 0;
24377 uint32_t nConsumedOnEntry = *pnConsumed;
24378 uint32_t nNeeded = 0U;
24379 nNeeded += 5;
24380 while (pSrc->present) {
24381 if (nNeeded > nBuf)
24382 return DOT11F_BUFFER_OVERFLOW;
24383 *pBuf = 56;
24384 ++pBuf; ++(*pnConsumed);
24385 pIeLen = pBuf;
24386 ++pBuf; ++(*pnConsumed);
24387 *pBuf = pSrc->timeoutType;
24388 *pnConsumed += 1;
24389 pBuf += 1;
24390 frameshtonl(pCtx, pBuf, pSrc->timeoutValue, 0);
24391 *pnConsumed += 4;
24392 /* fieldsEndFlag = 1 */
24393 break;
24394 }
24395 (void)pCtx;
24396 if (pIeLen) {
24397 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24398 }
24399 return DOT11F_PARSE_SUCCESS;
24400} /* End dot11f_pack_ie_timeout_interval. */
24401
24402uint32_t dot11f_pack_ie_vht_ext_bss_load(tpAniSirGlobal pCtx,
24403 tDot11fIEVHTExtBssLoad *pSrc,
24404 uint8_t *pBuf,
24405 uint32_t nBuf,
24406 uint32_t *pnConsumed)
24407{
24408 uint8_t *pIeLen = 0;
24409 uint32_t nConsumedOnEntry = *pnConsumed;
24410 uint32_t nNeeded = 0U;
24411 nNeeded += 5;
24412 while (pSrc->present) {
24413 if (nNeeded > nBuf)
24414 return DOT11F_BUFFER_OVERFLOW;
24415 *pBuf = 193;
24416 ++pBuf; ++(*pnConsumed);
24417 pIeLen = pBuf;
24418 ++pBuf; ++(*pnConsumed);
24419 *pBuf = pSrc->muMIMOCapStaCount;
24420 *pnConsumed += 1;
24421 pBuf += 1;
24422 *pBuf = pSrc->ssUnderUtil;
24423 *pnConsumed += 1;
24424 pBuf += 1;
24425 *pBuf = pSrc->FortyMHzUtil;
24426 *pnConsumed += 1;
24427 pBuf += 1;
24428 *pBuf = pSrc->EightyMHzUtil;
24429 *pnConsumed += 1;
24430 pBuf += 1;
24431 *pBuf = pSrc->OneSixtyMHzUtil;
24432 *pnConsumed += 1;
24433 /* fieldsEndFlag = 1 */
24434 break;
24435 }
24436 (void)pCtx;
24437 if (pIeLen) {
24438 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24439 }
24440 return DOT11F_PARSE_SUCCESS;
24441} /* End dot11f_pack_ie_vht_ext_bss_load. */
24442
24443uint32_t dot11f_pack_ie_vendor1_ie(tpAniSirGlobal pCtx,
24444 tDot11fIEVendor1IE *pSrc,
24445 uint8_t *pBuf,
24446 uint32_t nBuf,
24447 uint32_t *pnConsumed)
24448{
24449 uint8_t *pIeLen = 0;
24450 uint32_t nConsumedOnEntry = *pnConsumed;
24451 uint32_t nNeeded = 0U;
24452 nNeeded += 0;
24453 while (pSrc->present) {
24454 if (nNeeded > nBuf)
24455 return DOT11F_BUFFER_OVERFLOW;
24456 *pBuf = 221;
24457 ++pBuf; ++(*pnConsumed);
24458 pIeLen = pBuf;
24459 ++pBuf; ++(*pnConsumed);
24460 *pBuf = 0x0;
24461 ++pBuf; ++(*pnConsumed);
24462 *pBuf = 0x10;
24463 ++pBuf; ++(*pnConsumed);
24464 *pBuf = 0x18;
24465 ++pBuf; ++(*pnConsumed);
24466 break;
24467 }
24468 (void)pCtx;
24469 if (pIeLen) {
24470 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24471 }
24472 return DOT11F_PARSE_SUCCESS;
24473} /* End dot11f_pack_ie_vendor1_ie. */
24474
24475uint32_t dot11f_pack_ie_vendor3_ie(tpAniSirGlobal pCtx,
24476 tDot11fIEVendor3IE *pSrc,
24477 uint8_t *pBuf,
24478 uint32_t nBuf,
24479 uint32_t *pnConsumed)
24480{
24481 uint8_t *pIeLen = 0;
24482 uint32_t nConsumedOnEntry = *pnConsumed;
24483 uint32_t nNeeded = 0U;
24484 nNeeded += 0;
24485 while (pSrc->present) {
24486 if (nNeeded > nBuf)
24487 return DOT11F_BUFFER_OVERFLOW;
24488 *pBuf = 221;
24489 ++pBuf; ++(*pnConsumed);
24490 pIeLen = pBuf;
24491 ++pBuf; ++(*pnConsumed);
24492 *pBuf = 0x0;
24493 ++pBuf; ++(*pnConsumed);
24494 *pBuf = 0x16;
24495 ++pBuf; ++(*pnConsumed);
24496 *pBuf = 0x32;
24497 ++pBuf; ++(*pnConsumed);
24498 break;
24499 }
24500 (void)pCtx;
24501 if (pIeLen) {
24502 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24503 }
24504 return DOT11F_PARSE_SUCCESS;
24505} /* End dot11f_pack_ie_vendor3_ie. */
24506
24507uint32_t dot11f_pack_ie_wapi(tpAniSirGlobal pCtx,
24508 tDot11fIEWAPI *pSrc,
24509 uint8_t *pBuf,
24510 uint32_t nBuf,
24511 uint32_t *pnConsumed)
24512{
24513 uint8_t *pIeLen = 0;
24514 uint32_t nConsumedOnEntry = *pnConsumed;
24515 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070024516 uint16_t tmp157__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080024517 uint32_t status = DOT11F_PARSE_SUCCESS;
24518 status = dot11f_get_packed_iewapi(pCtx, pSrc, &nNeeded);
24519 if (!DOT11F_SUCCEEDED(status))
24520 return status;
24521 while (pSrc->present) {
24522 if (nNeeded > nBuf)
24523 return DOT11F_BUFFER_OVERFLOW;
24524 *pBuf = 68;
24525 ++pBuf; ++(*pnConsumed);
24526 pIeLen = pBuf;
24527 ++pBuf; ++(*pnConsumed);
24528 frameshtons(pCtx, pBuf, pSrc->version, 0);
24529 *pnConsumed += 2;
24530 pBuf += 2;
24531 frameshtons(pCtx, pBuf, pSrc->akm_suite_count, 0);
24532 *pnConsumed += 2;
24533 pBuf += 2;
24534 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->akm_suites), (pSrc->akm_suite_count * 4));
24535 *pnConsumed += (pSrc->akm_suite_count * 4);
24536 pBuf += (pSrc->akm_suite_count * 4);
24537 frameshtons(pCtx, pBuf, pSrc->unicast_cipher_suite_count, 0);
24538 *pnConsumed += 2;
24539 pBuf += 2;
24540 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->unicast_cipher_suites), (pSrc->unicast_cipher_suite_count * 4));
24541 *pnConsumed += (pSrc->unicast_cipher_suite_count * 4);
24542 pBuf += (pSrc->unicast_cipher_suite_count * 4);
24543 DOT11F_MEMCPY(pCtx, pBuf, pSrc->multicast_cipher_suite, 4);
24544 *pnConsumed += 4;
24545 pBuf += 4;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070024546 tmp157__ = 0U;
24547 tmp157__ |= (pSrc->preauth << 0);
24548 tmp157__ |= (pSrc->reserved << 1);
Naveen Rawat69623ef2018-04-27 16:11:01 -070024549 if (unlikely(nBuf < 2))
24550 return DOT11F_INCOMPLETE_IE;
24551
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070024552 frameshtons(pCtx, pBuf, tmp157__, 0);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080024553 *pnConsumed += 2;
24554 pBuf += 2;
24555 nBuf -= 2 ;
24556 if (pSrc->bkid_count) {
24557 frameshtons(pCtx, pBuf, pSrc->bkid_count, 0);
24558 *pnConsumed += 2;
24559 pBuf += 2;
24560 } else {
24561 break;
24562 }
24563 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->bkid), (pSrc->bkid_count * 16));
24564 *pnConsumed += (pSrc->bkid_count * 16);
24565 /* fieldsEndFlag = 1 */
24566 break;
24567 }
24568 (void)pCtx;
24569 if (pIeLen) {
24570 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24571 }
24572 return status;
24573} /* End dot11f_pack_ie_wapi. */
24574
24575uint32_t dot11f_pack_ie_wapi_opaque(tpAniSirGlobal pCtx,
24576 tDot11fIEWAPIOpaque *pSrc,
24577 uint8_t *pBuf,
24578 uint32_t nBuf,
24579 uint32_t *pnConsumed)
24580{
24581 uint8_t *pIeLen = 0;
24582 uint32_t nConsumedOnEntry = *pnConsumed;
24583 uint32_t nNeeded = 0U;
24584 nNeeded += pSrc->num_data;
24585 while (pSrc->present) {
24586 if (nNeeded > nBuf)
24587 return DOT11F_BUFFER_OVERFLOW;
24588 *pBuf = 68;
24589 ++pBuf; ++(*pnConsumed);
24590 pIeLen = pBuf;
24591 ++pBuf; ++(*pnConsumed);
24592 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->data), pSrc->num_data);
24593 *pnConsumed += pSrc->num_data;
24594 /* fieldsEndFlag = 1 */
24595 break;
24596 }
24597 (void)pCtx;
24598 if (pIeLen) {
24599 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24600 }
24601 return DOT11F_PARSE_SUCCESS;
24602} /* End dot11f_pack_ie_wapi_opaque. */
24603
24604uint32_t dot11f_pack_ie_wfatpc(tpAniSirGlobal pCtx,
24605 tDot11fIEWFATPC *pSrc,
24606 uint8_t *pBuf,
24607 uint32_t nBuf,
24608 uint32_t *pnConsumed)
24609{
24610 uint8_t *pIeLen = 0;
24611 uint32_t nConsumedOnEntry = *pnConsumed;
24612 uint32_t nNeeded = 0U;
24613 nNeeded += 2;
24614 while (pSrc->present) {
24615 if (nNeeded > nBuf)
24616 return DOT11F_BUFFER_OVERFLOW;
24617 *pBuf = 221;
24618 ++pBuf; ++(*pnConsumed);
24619 pIeLen = pBuf;
24620 ++pBuf; ++(*pnConsumed);
24621 *pBuf = 0x0;
24622 ++pBuf; ++(*pnConsumed);
24623 *pBuf = 0x50;
24624 ++pBuf; ++(*pnConsumed);
24625 *pBuf = 0xf2;
24626 ++pBuf; ++(*pnConsumed);
24627 *pBuf = 0x8;
24628 ++pBuf; ++(*pnConsumed);
24629 *pBuf = 0x0;
24630 ++pBuf; ++(*pnConsumed);
24631 *pBuf = pSrc->txPower;
24632 *pnConsumed += 1;
24633 pBuf += 1;
24634 *pBuf = pSrc->linkMargin;
24635 *pnConsumed += 1;
24636 /* fieldsEndFlag = 1 */
24637 break;
24638 }
24639 (void)pCtx;
24640 if (pIeLen) {
24641 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24642 }
24643 return DOT11F_PARSE_SUCCESS;
24644} /* End dot11f_pack_ie_wfatpc. */
24645
24646uint32_t dot11f_pack_ie_wfdie_opaque(tpAniSirGlobal pCtx,
24647 tDot11fIEWFDIEOpaque *pSrc,
24648 uint8_t *pBuf,
24649 uint32_t nBuf,
24650 uint32_t *pnConsumed)
24651{
24652 uint8_t *pIeLen = 0;
24653 uint32_t nConsumedOnEntry = *pnConsumed;
24654 uint32_t nNeeded = 0U;
24655 nNeeded += pSrc->num_data;
24656 while (pSrc->present) {
24657 if (nNeeded > nBuf)
24658 return DOT11F_BUFFER_OVERFLOW;
24659 *pBuf = 221;
24660 ++pBuf; ++(*pnConsumed);
24661 pIeLen = pBuf;
24662 ++pBuf; ++(*pnConsumed);
24663 *pBuf = 0x50;
24664 ++pBuf; ++(*pnConsumed);
24665 *pBuf = 0x6f;
24666 ++pBuf; ++(*pnConsumed);
24667 *pBuf = 0x9a;
24668 ++pBuf; ++(*pnConsumed);
24669 *pBuf = 0xa;
24670 ++pBuf; ++(*pnConsumed);
24671 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->data), pSrc->num_data);
24672 *pnConsumed += pSrc->num_data;
24673 /* fieldsEndFlag = 1 */
24674 break;
24675 }
24676 (void)pCtx;
24677 if (pIeLen) {
24678 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24679 }
24680 return DOT11F_PARSE_SUCCESS;
24681} /* End dot11f_pack_ie_wfdie_opaque. */
24682
24683uint32_t dot11f_pack_ie_wmm_caps(tpAniSirGlobal pCtx,
24684 tDot11fIEWMMCaps *pSrc,
24685 uint8_t *pBuf,
24686 uint32_t nBuf,
24687 uint32_t *pnConsumed)
24688{
24689 uint8_t *pIeLen = 0;
24690 uint32_t nConsumedOnEntry = *pnConsumed;
24691 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070024692 uint8_t tmp158__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080024693 nNeeded += 2;
24694 while (pSrc->present) {
24695 if (nNeeded > nBuf)
24696 return DOT11F_BUFFER_OVERFLOW;
24697 *pBuf = 221;
24698 ++pBuf; ++(*pnConsumed);
24699 pIeLen = pBuf;
24700 ++pBuf; ++(*pnConsumed);
24701 *pBuf = 0x0;
24702 ++pBuf; ++(*pnConsumed);
24703 *pBuf = 0x50;
24704 ++pBuf; ++(*pnConsumed);
24705 *pBuf = 0xf2;
24706 ++pBuf; ++(*pnConsumed);
24707 *pBuf = 0x2;
24708 ++pBuf; ++(*pnConsumed);
24709 *pBuf = 0x5;
24710 ++pBuf; ++(*pnConsumed);
24711 *pBuf = pSrc->version;
24712 *pnConsumed += 1;
24713 pBuf += 1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070024714 tmp158__ = 0U;
24715 tmp158__ |= (pSrc->reserved << 0);
24716 tmp158__ |= (pSrc->qack << 4);
24717 tmp158__ |= (pSrc->queue_request << 5);
24718 tmp158__ |= (pSrc->txop_request << 6);
24719 tmp158__ |= (pSrc->more_ack << 7);
Naveen Rawat69623ef2018-04-27 16:11:01 -070024720 if (unlikely(nBuf < 1))
24721 return DOT11F_INCOMPLETE_IE;
24722
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070024723 *pBuf = tmp158__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080024724 *pnConsumed += 1;
24725 /* fieldsEndFlag = 1 */
24726 nBuf -= 1 ;
24727 break;
24728 }
24729 (void)pCtx;
24730 if (pIeLen) {
24731 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24732 }
24733 return DOT11F_PARSE_SUCCESS;
24734} /* End dot11f_pack_ie_wmm_caps. */
24735
24736uint32_t dot11f_pack_ie_wmm_info_ap(tpAniSirGlobal pCtx,
24737 tDot11fIEWMMInfoAp *pSrc,
24738 uint8_t *pBuf,
24739 uint32_t nBuf,
24740 uint32_t *pnConsumed)
24741{
24742 uint8_t *pIeLen = 0;
24743 uint32_t nConsumedOnEntry = *pnConsumed;
24744 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070024745 uint8_t tmp159__;
Nitesh Shah0ddd4f62016-05-27 10:07:32 +053024746 nNeeded += 2;
24747 while (pSrc->present) {
24748 if (nNeeded > nBuf)
24749 return DOT11F_BUFFER_OVERFLOW;
24750 *pBuf = 221;
24751 ++pBuf; ++(*pnConsumed);
24752 pIeLen = pBuf;
24753 ++pBuf; ++(*pnConsumed);
24754 *pBuf = 0x0;
24755 ++pBuf; ++(*pnConsumed);
24756 *pBuf = 0x50;
24757 ++pBuf; ++(*pnConsumed);
24758 *pBuf = 0xf2;
24759 ++pBuf; ++(*pnConsumed);
24760 *pBuf = 0x2;
24761 ++pBuf; ++(*pnConsumed);
24762 *pBuf = 0x0;
24763 ++pBuf; ++(*pnConsumed);
24764 *pBuf = pSrc->version;
24765 *pnConsumed += 1;
24766 pBuf += 1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070024767 tmp159__ = 0U;
24768 tmp159__ |= (pSrc->param_set_count << 0);
24769 tmp159__ |= (pSrc->reserved << 4);
24770 tmp159__ |= (pSrc->uapsd << 7);
Naveen Rawat69623ef2018-04-27 16:11:01 -070024771 if (unlikely(nBuf < 1))
24772 return DOT11F_INCOMPLETE_IE;
24773
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070024774 *pBuf = tmp159__;
Nitesh Shah0ddd4f62016-05-27 10:07:32 +053024775 *pnConsumed += 1;
24776 /* fieldsEndFlag = 1 */
24777 nBuf -= 1 ;
24778 break;
24779 }
24780 (void)pCtx;
24781 if (pIeLen) {
24782 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24783 }
24784 return DOT11F_PARSE_SUCCESS;
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080024785} /* End dot11f_pack_ie_wmm_info_ap. */
24786
24787uint32_t dot11f_pack_ie_wmm_info_station(tpAniSirGlobal pCtx,
24788 tDot11fIEWMMInfoStation *pSrc,
24789 uint8_t *pBuf,
24790 uint32_t nBuf,
24791 uint32_t *pnConsumed)
24792{
24793 uint8_t *pIeLen = 0;
24794 uint32_t nConsumedOnEntry = *pnConsumed;
24795 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070024796 uint8_t tmp160__;
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080024797 nNeeded += 2;
24798 while (pSrc->present) {
24799 if (nNeeded > nBuf)
24800 return DOT11F_BUFFER_OVERFLOW;
24801 *pBuf = 221;
24802 ++pBuf; ++(*pnConsumed);
24803 pIeLen = pBuf;
24804 ++pBuf; ++(*pnConsumed);
24805 *pBuf = 0x0;
24806 ++pBuf; ++(*pnConsumed);
24807 *pBuf = 0x50;
24808 ++pBuf; ++(*pnConsumed);
24809 *pBuf = 0xf2;
24810 ++pBuf; ++(*pnConsumed);
24811 *pBuf = 0x2;
24812 ++pBuf; ++(*pnConsumed);
24813 *pBuf = 0x0;
24814 ++pBuf; ++(*pnConsumed);
24815 *pBuf = pSrc->version;
24816 *pnConsumed += 1;
24817 pBuf += 1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070024818 tmp160__ = 0U;
24819 tmp160__ |= (pSrc->acvo_uapsd << 0);
24820 tmp160__ |= (pSrc->acvi_uapsd << 1);
24821 tmp160__ |= (pSrc->acbk_uapsd << 2);
24822 tmp160__ |= (pSrc->acbe_uapsd << 3);
24823 tmp160__ |= (pSrc->reserved1 << 4);
24824 tmp160__ |= (pSrc->max_sp_length << 5);
24825 tmp160__ |= (pSrc->reserved2 << 7);
Naveen Rawat69623ef2018-04-27 16:11:01 -070024826 if (unlikely(nBuf < 1))
24827 return DOT11F_INCOMPLETE_IE;
24828
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070024829 *pBuf = tmp160__;
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080024830 *pnConsumed += 1;
24831 /* fieldsEndFlag = 1 */
24832 nBuf -= 1 ;
24833 break;
24834 }
24835 (void)pCtx;
24836 if (pIeLen) {
24837 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24838 }
24839 return DOT11F_PARSE_SUCCESS;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080024840} /* End dot11f_pack_ie_wmm_info_station. */
24841
24842uint32_t dot11f_pack_ie_wmm_params(tpAniSirGlobal pCtx,
24843 tDot11fIEWMMParams *pSrc,
24844 uint8_t *pBuf,
24845 uint32_t nBuf,
24846 uint32_t *pnConsumed)
24847{
24848 uint8_t *pIeLen = 0;
24849 uint32_t nConsumedOnEntry = *pnConsumed;
24850 uint32_t nNeeded = 0U;
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070024851 uint8_t tmp161__;
24852 uint8_t tmp162__;
Abhishek Singh951eed82017-07-06 16:53:19 +053024853 uint8_t tmp163__;
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080024854 uint8_t tmp164__;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053024855 uint8_t tmp165__;
24856 uint8_t tmp166__;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070024857 uint8_t tmp167__;
24858 uint8_t tmp168__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080024859 nNeeded += 19;
24860 while (pSrc->present) {
24861 if (nNeeded > nBuf)
24862 return DOT11F_BUFFER_OVERFLOW;
24863 *pBuf = 221;
24864 ++pBuf; ++(*pnConsumed);
24865 pIeLen = pBuf;
24866 ++pBuf; ++(*pnConsumed);
24867 *pBuf = 0x0;
24868 ++pBuf; ++(*pnConsumed);
24869 *pBuf = 0x50;
24870 ++pBuf; ++(*pnConsumed);
24871 *pBuf = 0xf2;
24872 ++pBuf; ++(*pnConsumed);
24873 *pBuf = 0x2;
24874 ++pBuf; ++(*pnConsumed);
24875 *pBuf = 0x1;
24876 ++pBuf; ++(*pnConsumed);
24877 *pBuf = pSrc->version;
24878 *pnConsumed += 1;
24879 pBuf += 1;
24880 *pBuf = pSrc->qosInfo;
24881 *pnConsumed += 1;
24882 pBuf += 1;
24883 *pBuf = pSrc->reserved2;
24884 *pnConsumed += 1;
24885 pBuf += 1;
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080024886 tmp161__ = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070024887 tmp161__ |= (pSrc->acbe_aifsn << 0);
24888 tmp161__ |= (pSrc->acbe_acm << 4);
24889 tmp161__ |= (pSrc->acbe_aci << 5);
24890 tmp161__ |= (pSrc->unused1 << 7);
Naveen Rawat69623ef2018-04-27 16:11:01 -070024891 if (unlikely(nBuf < 1))
24892 return DOT11F_INCOMPLETE_IE;
24893
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080024894 *pBuf = tmp161__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080024895 *pnConsumed += 1;
24896 pBuf += 1;
24897 nBuf -= 1 ;
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080024898 tmp162__ = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070024899 tmp162__ |= (pSrc->acbe_acwmin << 0);
24900 tmp162__ |= (pSrc->acbe_acwmax << 4);
Naveen Rawat69623ef2018-04-27 16:11:01 -070024901 if (unlikely(nBuf < 1))
24902 return DOT11F_INCOMPLETE_IE;
24903
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080024904 *pBuf = tmp162__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080024905 *pnConsumed += 1;
24906 pBuf += 1;
24907 nBuf -= 1 ;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070024908 frameshtons(pCtx, pBuf, pSrc->acbe_txoplimit, 0);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080024909 *pnConsumed += 2;
24910 pBuf += 2;
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080024911 tmp163__ = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070024912 tmp163__ |= (pSrc->acbk_aifsn << 0);
24913 tmp163__ |= (pSrc->acbk_acm << 4);
24914 tmp163__ |= (pSrc->acbk_aci << 5);
24915 tmp163__ |= (pSrc->unused2 << 7);
Naveen Rawat69623ef2018-04-27 16:11:01 -070024916 if (unlikely(nBuf < 1))
24917 return DOT11F_INCOMPLETE_IE;
24918
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080024919 *pBuf = tmp163__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080024920 *pnConsumed += 1;
24921 pBuf += 1;
24922 nBuf -= 1 ;
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080024923 tmp164__ = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070024924 tmp164__ |= (pSrc->acbk_acwmin << 0);
24925 tmp164__ |= (pSrc->acbk_acwmax << 4);
Naveen Rawat69623ef2018-04-27 16:11:01 -070024926 if (unlikely(nBuf < 1))
24927 return DOT11F_INCOMPLETE_IE;
24928
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080024929 *pBuf = tmp164__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080024930 *pnConsumed += 1;
24931 pBuf += 1;
24932 nBuf -= 1 ;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070024933 frameshtons(pCtx, pBuf, pSrc->acbk_txoplimit, 0);
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053024934 *pnConsumed += 2;
24935 pBuf += 2;
24936 tmp165__ = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070024937 tmp165__ |= (pSrc->acvi_aifsn << 0);
24938 tmp165__ |= (pSrc->acvi_acm << 4);
24939 tmp165__ |= (pSrc->acvi_aci << 5);
24940 tmp165__ |= (pSrc->unused3 << 7);
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053024941 if (unlikely(nBuf < 1))
24942 return DOT11F_INCOMPLETE_IE;
24943
24944 *pBuf = tmp165__;
24945 *pnConsumed += 1;
24946 pBuf += 1;
24947 nBuf -= 1 ;
24948 tmp166__ = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070024949 tmp166__ |= (pSrc->acvi_acwmin << 0);
24950 tmp166__ |= (pSrc->acvi_acwmax << 4);
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053024951 if (unlikely(nBuf < 1))
24952 return DOT11F_INCOMPLETE_IE;
24953
24954 *pBuf = tmp166__;
24955 *pnConsumed += 1;
24956 pBuf += 1;
24957 nBuf -= 1 ;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070024958 frameshtons(pCtx, pBuf, pSrc->acvi_txoplimit, 0);
24959 *pnConsumed += 2;
24960 pBuf += 2;
24961 tmp167__ = 0U;
24962 tmp167__ |= (pSrc->acvo_aifsn << 0);
24963 tmp167__ |= (pSrc->acvo_acm << 4);
24964 tmp167__ |= (pSrc->acvo_aci << 5);
24965 tmp167__ |= (pSrc->unused4 << 7);
24966 if (unlikely(nBuf < 1))
24967 return DOT11F_INCOMPLETE_IE;
24968
24969 *pBuf = tmp167__;
24970 *pnConsumed += 1;
24971 pBuf += 1;
24972 nBuf -= 1 ;
24973 tmp168__ = 0U;
24974 tmp168__ |= (pSrc->acvo_acwmin << 0);
24975 tmp168__ |= (pSrc->acvo_acwmax << 4);
24976 if (unlikely(nBuf < 1))
24977 return DOT11F_INCOMPLETE_IE;
24978
24979 *pBuf = tmp168__;
24980 *pnConsumed += 1;
24981 pBuf += 1;
24982 nBuf -= 1 ;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080024983 frameshtons(pCtx, pBuf, pSrc->acvo_txoplimit, 0);
24984 *pnConsumed += 2;
24985 /* fieldsEndFlag = 1 */
24986 break;
24987 }
24988 (void)pCtx;
24989 if (pIeLen) {
24990 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
24991 }
24992 return DOT11F_PARSE_SUCCESS;
24993} /* End dot11f_pack_ie_wmm_params. */
24994
24995uint32_t dot11f_pack_ie_wpa(tpAniSirGlobal pCtx,
24996 tDot11fIEWPA *pSrc,
24997 uint8_t *pBuf,
24998 uint32_t nBuf,
24999 uint32_t *pnConsumed)
25000{
25001 uint8_t *pIeLen = 0;
25002 uint32_t nConsumedOnEntry = *pnConsumed;
25003 uint32_t nNeeded = 0U;
25004 uint32_t status = DOT11F_PARSE_SUCCESS;
25005 status = dot11f_get_packed_iewpa(pCtx, pSrc, &nNeeded);
25006 if (!DOT11F_SUCCEEDED(status))
25007 return status;
25008 while (pSrc->present) {
25009 if (nNeeded > nBuf)
25010 return DOT11F_BUFFER_OVERFLOW;
25011 *pBuf = 221;
25012 ++pBuf; ++(*pnConsumed);
25013 pIeLen = pBuf;
25014 ++pBuf; ++(*pnConsumed);
25015 *pBuf = 0x0;
25016 ++pBuf; ++(*pnConsumed);
25017 *pBuf = 0x50;
25018 ++pBuf; ++(*pnConsumed);
25019 *pBuf = 0xf2;
25020 ++pBuf; ++(*pnConsumed);
25021 *pBuf = 0x1;
25022 ++pBuf; ++(*pnConsumed);
25023 frameshtons(pCtx, pBuf, pSrc->version, 0);
25024 *pnConsumed += 2;
25025 pBuf += 2;
25026 if (pSrc->multicast_cipher_present) {
25027 DOT11F_MEMCPY(pCtx, pBuf, pSrc->multicast_cipher, 4);
25028 *pnConsumed += 4;
25029 pBuf += 4;
25030 } else {
25031 break;
25032 }
25033 if (pSrc->unicast_cipher_count) {
25034 frameshtons(pCtx, pBuf, pSrc->unicast_cipher_count, 0);
25035 *pnConsumed += 2;
25036 pBuf += 2;
25037 } else {
25038 break;
25039 }
25040 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->unicast_ciphers), (pSrc->unicast_cipher_count * 4));
25041 *pnConsumed += (pSrc->unicast_cipher_count * 4);
25042 pBuf += (pSrc->unicast_cipher_count * 4);
25043 if (pSrc->auth_suite_count) {
25044 frameshtons(pCtx, pBuf, pSrc->auth_suite_count, 0);
25045 *pnConsumed += 2;
25046 pBuf += 2;
25047 } else {
25048 break;
25049 }
25050 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->auth_suites), (pSrc->auth_suite_count * 4));
25051 *pnConsumed += (pSrc->auth_suite_count * 4);
25052 pBuf += (pSrc->auth_suite_count * 4);
25053 if (pSrc->caps) {
25054 frameshtons(pCtx, pBuf, pSrc->caps, 0);
25055 *pnConsumed += 2;
25056 /* fieldsEndFlag = 1 */
25057 } else {
25058 break;
25059 }
25060 break;
25061 }
25062 (void)pCtx;
25063 if (pIeLen) {
25064 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25065 }
25066 return status;
25067} /* End dot11f_pack_ie_wpa. */
25068
25069uint32_t dot11f_pack_ie_wpa_opaque(tpAniSirGlobal pCtx,
25070 tDot11fIEWPAOpaque *pSrc,
25071 uint8_t *pBuf,
25072 uint32_t nBuf,
25073 uint32_t *pnConsumed)
25074{
25075 uint8_t *pIeLen = 0;
25076 uint32_t nConsumedOnEntry = *pnConsumed;
25077 uint32_t nNeeded = 0U;
25078 nNeeded += pSrc->num_data;
25079 while (pSrc->present) {
25080 if (nNeeded > nBuf)
25081 return DOT11F_BUFFER_OVERFLOW;
25082 *pBuf = 221;
25083 ++pBuf; ++(*pnConsumed);
25084 pIeLen = pBuf;
25085 ++pBuf; ++(*pnConsumed);
25086 *pBuf = 0x0;
25087 ++pBuf; ++(*pnConsumed);
25088 *pBuf = 0x50;
25089 ++pBuf; ++(*pnConsumed);
25090 *pBuf = 0xf2;
25091 ++pBuf; ++(*pnConsumed);
25092 *pBuf = 0x1;
25093 ++pBuf; ++(*pnConsumed);
25094 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->data), pSrc->num_data);
25095 *pnConsumed += pSrc->num_data;
25096 /* fieldsEndFlag = 1 */
25097 break;
25098 }
25099 (void)pCtx;
25100 if (pIeLen) {
25101 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25102 }
25103 return DOT11F_PARSE_SUCCESS;
25104} /* End dot11f_pack_ie_wpa_opaque. */
25105
25106uint32_t dot11f_pack_ie_wsc(tpAniSirGlobal pCtx,
25107 tDot11fIEWSC *pSrc,
25108 uint8_t *pBuf,
25109 uint32_t nBuf,
25110 uint32_t *pnConsumed)
25111{
25112 uint8_t *pIeLen = 0;
25113 uint32_t n, idx = 0, idxlast;
25114 uint32_t nConsumedSoFar, nConsumedNow;
25115 uint32_t status = DOT11F_PARSE_SUCCESS;
25116 uint32_t nNeeded = 0U;
25117 status = dot11f_get_packed_iewsc(pCtx, pSrc, &nNeeded);
25118 if (!DOT11F_SUCCEEDED(status))
25119 return status;
25120 if (nNeeded > nBuf)
25121 return DOT11F_BUFFER_OVERFLOW;
25122 (void)pCtx;
25123 if (pSrc->present) {
25124 do {
25125 nConsumedSoFar = *pnConsumed;
25126 *pBuf = 221;
25127 ++pBuf; --nBuf; ++(*pnConsumed);
25128 pIeLen = pBuf;
25129 ++pBuf; --nBuf; ++(*pnConsumed);
25130 *pBuf = 0x0;
25131 ++pBuf; --nBuf; ++(*pnConsumed);
25132 *pBuf = 0x50;
25133 ++pBuf; --nBuf; ++(*pnConsumed);
25134 *pBuf = 0xf2;
25135 ++pBuf; --nBuf; ++(*pnConsumed);
25136 *pBuf = 0x4;
25137 ++pBuf; --nBuf; ++(*pnConsumed);
25138 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
25139 nConsumedNow = *pnConsumed;
25140 idxlast = idx;
25141 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
25142 pnConsumed,
25143 TLVS_WSC +
25144 idx, &idx);
25145 nConsumedNow = *pnConsumed - nConsumedNow;
25146 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
25147 pBuf += nConsumedNow;
25148 nBuf -= nConsumedNow;
25149 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
25150 }
25151 return status;
25152} /* End dot11f_pack_ie_wsc. */
25153
25154uint32_t dot11f_pack_ie_wsc_assoc_req(tpAniSirGlobal pCtx,
25155 tDot11fIEWscAssocReq *pSrc,
25156 uint8_t *pBuf,
25157 uint32_t nBuf,
25158 uint32_t *pnConsumed)
25159{
25160 uint8_t *pIeLen = 0;
25161 uint32_t n, idx = 0, idxlast;
25162 uint32_t nConsumedSoFar, nConsumedNow;
25163 uint32_t status = DOT11F_PARSE_SUCCESS;
25164 uint32_t nNeeded = 0U;
25165 status = dot11f_get_packed_ie_wsc_assoc_req(pCtx, pSrc, &nNeeded);
25166 if (!DOT11F_SUCCEEDED(status))
25167 return status;
25168 if (nNeeded > nBuf)
25169 return DOT11F_BUFFER_OVERFLOW;
25170 (void)pCtx;
25171 if (pSrc->present) {
25172 do {
25173 nConsumedSoFar = *pnConsumed;
25174 *pBuf = 221;
25175 ++pBuf; --nBuf; ++(*pnConsumed);
25176 pIeLen = pBuf;
25177 ++pBuf; --nBuf; ++(*pnConsumed);
25178 *pBuf = 0x0;
25179 ++pBuf; --nBuf; ++(*pnConsumed);
25180 *pBuf = 0x50;
25181 ++pBuf; --nBuf; ++(*pnConsumed);
25182 *pBuf = 0xf2;
25183 ++pBuf; --nBuf; ++(*pnConsumed);
25184 *pBuf = 0x4;
25185 ++pBuf; --nBuf; ++(*pnConsumed);
25186 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
25187 nConsumedNow = *pnConsumed;
25188 idxlast = idx;
25189 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
25190 pnConsumed,
25191 TLVS_WscAssocReq +
25192 idx, &idx);
25193 nConsumedNow = *pnConsumed - nConsumedNow;
25194 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
25195 pBuf += nConsumedNow;
25196 nBuf -= nConsumedNow;
25197 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
25198 }
25199 return status;
25200} /* End dot11f_pack_ie_wsc_assoc_req. */
25201
25202uint32_t dot11f_pack_ie_wsc_assoc_res(tpAniSirGlobal pCtx,
25203 tDot11fIEWscAssocRes *pSrc,
25204 uint8_t *pBuf,
25205 uint32_t nBuf,
25206 uint32_t *pnConsumed)
25207{
25208 uint8_t *pIeLen = 0;
25209 uint32_t n, idx = 0, idxlast;
25210 uint32_t nConsumedSoFar, nConsumedNow;
25211 uint32_t status = DOT11F_PARSE_SUCCESS;
25212 uint32_t nNeeded = 0U;
25213 status = dot11f_get_packed_ie_wsc_assoc_res(pCtx, pSrc, &nNeeded);
25214 if (!DOT11F_SUCCEEDED(status))
25215 return status;
25216 if (nNeeded > nBuf)
25217 return DOT11F_BUFFER_OVERFLOW;
25218 (void)pCtx;
25219 if (pSrc->present) {
25220 do {
25221 nConsumedSoFar = *pnConsumed;
25222 *pBuf = 221;
25223 ++pBuf; --nBuf; ++(*pnConsumed);
25224 pIeLen = pBuf;
25225 ++pBuf; --nBuf; ++(*pnConsumed);
25226 *pBuf = 0x0;
25227 ++pBuf; --nBuf; ++(*pnConsumed);
25228 *pBuf = 0x50;
25229 ++pBuf; --nBuf; ++(*pnConsumed);
25230 *pBuf = 0xf2;
25231 ++pBuf; --nBuf; ++(*pnConsumed);
25232 *pBuf = 0x4;
25233 ++pBuf; --nBuf; ++(*pnConsumed);
25234 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
25235 nConsumedNow = *pnConsumed;
25236 idxlast = idx;
25237 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
25238 pnConsumed,
25239 TLVS_WscAssocRes +
25240 idx, &idx);
25241 nConsumedNow = *pnConsumed - nConsumedNow;
25242 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
25243 pBuf += nConsumedNow;
25244 nBuf -= nConsumedNow;
25245 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
25246 }
25247 return status;
25248} /* End dot11f_pack_ie_wsc_assoc_res. */
25249
25250uint32_t dot11f_pack_ie_wsc_beacon(tpAniSirGlobal pCtx,
25251 tDot11fIEWscBeacon *pSrc,
25252 uint8_t *pBuf,
25253 uint32_t nBuf,
25254 uint32_t *pnConsumed)
25255{
25256 uint8_t *pIeLen = 0;
25257 uint32_t n, idx = 0, idxlast;
25258 uint32_t nConsumedSoFar, nConsumedNow;
25259 uint32_t status = DOT11F_PARSE_SUCCESS;
25260 uint32_t nNeeded = 0U;
25261 status = dot11f_get_packed_ie_wsc_beacon(pCtx, pSrc, &nNeeded);
25262 if (!DOT11F_SUCCEEDED(status))
25263 return status;
25264 if (nNeeded > nBuf)
25265 return DOT11F_BUFFER_OVERFLOW;
25266 (void)pCtx;
25267 if (pSrc->present) {
25268 do {
25269 nConsumedSoFar = *pnConsumed;
25270 *pBuf = 221;
25271 ++pBuf; --nBuf; ++(*pnConsumed);
25272 pIeLen = pBuf;
25273 ++pBuf; --nBuf; ++(*pnConsumed);
25274 *pBuf = 0x0;
25275 ++pBuf; --nBuf; ++(*pnConsumed);
25276 *pBuf = 0x50;
25277 ++pBuf; --nBuf; ++(*pnConsumed);
25278 *pBuf = 0xf2;
25279 ++pBuf; --nBuf; ++(*pnConsumed);
25280 *pBuf = 0x4;
25281 ++pBuf; --nBuf; ++(*pnConsumed);
25282 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
25283 nConsumedNow = *pnConsumed;
25284 idxlast = idx;
25285 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
25286 pnConsumed,
25287 TLVS_WscBeacon +
25288 idx, &idx);
25289 nConsumedNow = *pnConsumed - nConsumedNow;
25290 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
25291 pBuf += nConsumedNow;
25292 nBuf -= nConsumedNow;
25293 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
25294 }
25295 return status;
25296} /* End dot11f_pack_ie_wsc_beacon. */
25297
25298uint32_t dot11f_pack_ie_wsc_beacon_probe_res(tpAniSirGlobal pCtx,
25299 tDot11fIEWscBeaconProbeRes *pSrc,
25300 uint8_t *pBuf,
25301 uint32_t nBuf,
25302 uint32_t *pnConsumed)
25303{
25304 uint8_t *pIeLen = 0;
25305 uint32_t n, idx = 0, idxlast;
25306 uint32_t nConsumedSoFar, nConsumedNow;
25307 uint32_t status = DOT11F_PARSE_SUCCESS;
25308 uint32_t nNeeded = 0U;
25309 status = dot11f_get_packed_ie_wsc_beacon_probe_res(pCtx, pSrc, &nNeeded);
25310 if (!DOT11F_SUCCEEDED(status))
25311 return status;
25312 if (nNeeded > nBuf)
25313 return DOT11F_BUFFER_OVERFLOW;
25314 (void)pCtx;
25315 if (pSrc->present) {
25316 do {
25317 nConsumedSoFar = *pnConsumed;
25318 *pBuf = 221;
25319 ++pBuf; --nBuf; ++(*pnConsumed);
25320 pIeLen = pBuf;
25321 ++pBuf; --nBuf; ++(*pnConsumed);
25322 *pBuf = 0x0;
25323 ++pBuf; --nBuf; ++(*pnConsumed);
25324 *pBuf = 0x50;
25325 ++pBuf; --nBuf; ++(*pnConsumed);
25326 *pBuf = 0xf2;
25327 ++pBuf; --nBuf; ++(*pnConsumed);
25328 *pBuf = 0x4;
25329 ++pBuf; --nBuf; ++(*pnConsumed);
25330 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
25331 nConsumedNow = *pnConsumed;
25332 idxlast = idx;
25333 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
25334 pnConsumed,
25335 TLVS_WscBeaconProbeRes +
25336 idx, &idx);
25337 nConsumedNow = *pnConsumed - nConsumedNow;
25338 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
25339 pBuf += nConsumedNow;
25340 nBuf -= nConsumedNow;
25341 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
25342 }
25343 return status;
25344} /* End dot11f_pack_ie_wsc_beacon_probe_res. */
25345
25346uint32_t dot11f_pack_ie_wsc_ie_opaque(tpAniSirGlobal pCtx,
25347 tDot11fIEWscIEOpaque *pSrc,
25348 uint8_t *pBuf,
25349 uint32_t nBuf,
25350 uint32_t *pnConsumed)
25351{
25352 uint8_t *pIeLen = 0;
25353 uint32_t nConsumedOnEntry = *pnConsumed;
25354 uint32_t nNeeded = 0U;
25355 nNeeded += pSrc->num_data;
25356 while (pSrc->present) {
25357 if (nNeeded > nBuf)
25358 return DOT11F_BUFFER_OVERFLOW;
25359 *pBuf = 221;
25360 ++pBuf; ++(*pnConsumed);
25361 pIeLen = pBuf;
25362 ++pBuf; ++(*pnConsumed);
25363 *pBuf = 0x0;
25364 ++pBuf; ++(*pnConsumed);
25365 *pBuf = 0x50;
25366 ++pBuf; ++(*pnConsumed);
25367 *pBuf = 0xf2;
25368 ++pBuf; ++(*pnConsumed);
25369 *pBuf = 0x4;
25370 ++pBuf; ++(*pnConsumed);
25371 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->data), pSrc->num_data);
25372 *pnConsumed += pSrc->num_data;
25373 /* fieldsEndFlag = 1 */
25374 break;
25375 }
25376 (void)pCtx;
25377 if (pIeLen) {
25378 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25379 }
25380 return DOT11F_PARSE_SUCCESS;
25381} /* End dot11f_pack_ie_wsc_ie_opaque. */
25382
25383uint32_t dot11f_pack_ie_wsc_probe_req(tpAniSirGlobal pCtx,
25384 tDot11fIEWscProbeReq *pSrc,
25385 uint8_t *pBuf,
25386 uint32_t nBuf,
25387 uint32_t *pnConsumed)
25388{
25389 uint8_t *pIeLen = 0;
25390 uint32_t n, idx = 0, idxlast;
25391 uint32_t nConsumedSoFar, nConsumedNow;
25392 uint32_t status = DOT11F_PARSE_SUCCESS;
25393 uint32_t nNeeded = 0U;
25394 status = dot11f_get_packed_ie_wsc_probe_req(pCtx, pSrc, &nNeeded);
25395 if (!DOT11F_SUCCEEDED(status))
25396 return status;
25397 if (nNeeded > nBuf)
25398 return DOT11F_BUFFER_OVERFLOW;
25399 (void)pCtx;
25400 if (pSrc->present) {
25401 do {
25402 nConsumedSoFar = *pnConsumed;
25403 *pBuf = 221;
25404 ++pBuf; --nBuf; ++(*pnConsumed);
25405 pIeLen = pBuf;
25406 ++pBuf; --nBuf; ++(*pnConsumed);
25407 *pBuf = 0x0;
25408 ++pBuf; --nBuf; ++(*pnConsumed);
25409 *pBuf = 0x50;
25410 ++pBuf; --nBuf; ++(*pnConsumed);
25411 *pBuf = 0xf2;
25412 ++pBuf; --nBuf; ++(*pnConsumed);
25413 *pBuf = 0x4;
25414 ++pBuf; --nBuf; ++(*pnConsumed);
25415 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
25416 nConsumedNow = *pnConsumed;
25417 idxlast = idx;
25418 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
25419 pnConsumed,
25420 TLVS_WscProbeReq +
25421 idx, &idx);
25422 nConsumedNow = *pnConsumed - nConsumedNow;
25423 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
25424 pBuf += nConsumedNow;
25425 nBuf -= nConsumedNow;
25426 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
25427 }
25428 return status;
25429} /* End dot11f_pack_ie_wsc_probe_req. */
25430
25431uint32_t dot11f_pack_ie_wsc_probe_res(tpAniSirGlobal pCtx,
25432 tDot11fIEWscProbeRes *pSrc,
25433 uint8_t *pBuf,
25434 uint32_t nBuf,
25435 uint32_t *pnConsumed)
25436{
25437 uint8_t *pIeLen = 0;
25438 uint32_t n, idx = 0, idxlast;
25439 uint32_t nConsumedSoFar, nConsumedNow;
25440 uint32_t status = DOT11F_PARSE_SUCCESS;
25441 uint32_t nNeeded = 0U;
25442 status = dot11f_get_packed_ie_wsc_probe_res(pCtx, pSrc, &nNeeded);
25443 if (!DOT11F_SUCCEEDED(status))
25444 return status;
25445 if (nNeeded > nBuf)
25446 return DOT11F_BUFFER_OVERFLOW;
25447 (void)pCtx;
25448 if (pSrc->present) {
25449 do {
25450 nConsumedSoFar = *pnConsumed;
25451 *pBuf = 221;
25452 ++pBuf; --nBuf; ++(*pnConsumed);
25453 pIeLen = pBuf;
25454 ++pBuf; --nBuf; ++(*pnConsumed);
25455 *pBuf = 0x0;
25456 ++pBuf; --nBuf; ++(*pnConsumed);
25457 *pBuf = 0x50;
25458 ++pBuf; --nBuf; ++(*pnConsumed);
25459 *pBuf = 0xf2;
25460 ++pBuf; --nBuf; ++(*pnConsumed);
25461 *pBuf = 0x4;
25462 ++pBuf; --nBuf; ++(*pnConsumed);
25463 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
25464 nConsumedNow = *pnConsumed;
25465 idxlast = idx;
25466 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
25467 pnConsumed,
25468 TLVS_WscProbeRes +
25469 idx, &idx);
25470 nConsumedNow = *pnConsumed - nConsumedNow;
25471 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
25472 pBuf += nConsumedNow;
25473 nBuf -= nConsumedNow;
25474 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
25475 }
25476 return status;
25477} /* End dot11f_pack_ie_wsc_probe_res. */
25478
25479uint32_t dot11f_pack_ie_wsc_reassoc_res(tpAniSirGlobal pCtx,
25480 tDot11fIEWscReassocRes *pSrc,
25481 uint8_t *pBuf,
25482 uint32_t nBuf,
25483 uint32_t *pnConsumed)
25484{
25485 uint8_t *pIeLen = 0;
25486 uint32_t n, idx = 0, idxlast;
25487 uint32_t nConsumedSoFar, nConsumedNow;
25488 uint32_t status = DOT11F_PARSE_SUCCESS;
25489 uint32_t nNeeded = 0U;
25490 status = dot11f_get_packed_ie_wsc_reassoc_res(pCtx, pSrc, &nNeeded);
25491 if (!DOT11F_SUCCEEDED(status))
25492 return status;
25493 if (nNeeded > nBuf)
25494 return DOT11F_BUFFER_OVERFLOW;
25495 (void)pCtx;
25496 if (pSrc->present) {
25497 do {
25498 nConsumedSoFar = *pnConsumed;
25499 *pBuf = 221;
25500 ++pBuf; --nBuf; ++(*pnConsumed);
25501 pIeLen = pBuf;
25502 ++pBuf; --nBuf; ++(*pnConsumed);
25503 *pBuf = 0x0;
25504 ++pBuf; --nBuf; ++(*pnConsumed);
25505 *pBuf = 0x50;
25506 ++pBuf; --nBuf; ++(*pnConsumed);
25507 *pBuf = 0xf2;
25508 ++pBuf; --nBuf; ++(*pnConsumed);
25509 *pBuf = 0x4;
25510 ++pBuf; --nBuf; ++(*pnConsumed);
25511 n = (255 - 4) < nBuf ? (255 - 4) : nBuf;
25512 nConsumedNow = *pnConsumed;
25513 idxlast = idx;
25514 status = pack_tlv_core(pCtx, (uint8_t *)pSrc, pBuf, n,
25515 pnConsumed,
25516 TLVS_WscReassocRes +
25517 idx, &idx);
25518 nConsumedNow = *pnConsumed - nConsumedNow;
25519 *pIeLen = *pnConsumed - nConsumedSoFar - 2;
25520 pBuf += nConsumedNow;
25521 nBuf -= nConsumedNow;
25522 } while (DOT11F_BUFFER_OVERFLOW == status && idxlast != idx);
25523 }
25524 return status;
25525} /* End dot11f_pack_ie_wsc_reassoc_res. */
25526
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080025527uint32_t dot11f_pack_ie_addba_extn_element(tpAniSirGlobal pCtx,
25528 tDot11fIEaddba_extn_element *pSrc,
25529 uint8_t *pBuf,
25530 uint32_t nBuf,
25531 uint32_t *pnConsumed)
25532{
25533 uint8_t *pIeLen = 0;
25534 uint32_t nConsumedOnEntry = *pnConsumed;
25535 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070025536 uint8_t tmp169__;
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080025537 nNeeded += 1;
25538 while (pSrc->present) {
25539 if (nNeeded > nBuf)
25540 return DOT11F_BUFFER_OVERFLOW;
25541 *pBuf = 159;
25542 ++pBuf; ++(*pnConsumed);
25543 pIeLen = pBuf;
25544 ++pBuf; ++(*pnConsumed);
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070025545 tmp169__ = 0U;
25546 tmp169__ |= (pSrc->no_fragmentation << 0);
25547 tmp169__ |= (pSrc->he_frag_operation << 1);
25548 tmp169__ |= (pSrc->reserved << 3);
Naveen Rawat69623ef2018-04-27 16:11:01 -070025549 if (unlikely(nBuf < 1))
25550 return DOT11F_INCOMPLETE_IE;
25551
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070025552 *pBuf = tmp169__;
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080025553 *pnConsumed += 1;
25554 /* fieldsEndFlag = 1 */
25555 nBuf -= 1 ;
25556 break;
25557 }
25558 (void)pCtx;
25559 if (pIeLen) {
25560 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25561 }
25562 return DOT11F_PARSE_SUCCESS;
25563} /* End dot11f_pack_ie_addba_extn_element. */
25564
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070025565uint32_t dot11f_pack_ie_bss_color_change(tpAniSirGlobal pCtx,
25566 tDot11fIEbss_color_change *pSrc,
25567 uint8_t *pBuf,
25568 uint32_t nBuf,
25569 uint32_t *pnConsumed)
25570{
25571 uint8_t *pIeLen = 0;
25572 uint32_t nConsumedOnEntry = *pnConsumed;
25573 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070025574 uint8_t tmp170__;
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070025575 nNeeded += 2;
25576 while (pSrc->present) {
25577 if (nNeeded > nBuf)
25578 return DOT11F_BUFFER_OVERFLOW;
Arif Hussain3a30fdc2018-02-08 20:00:41 -080025579 *pBuf = 255;
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070025580 ++pBuf; ++(*pnConsumed);
25581 pIeLen = pBuf;
25582 ++pBuf; ++(*pnConsumed);
Arif Hussain3a30fdc2018-02-08 20:00:41 -080025583 *pBuf = 42;
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070025584 ++pBuf; ++(*pnConsumed);
25585 *pBuf = pSrc->countdown;
25586 *pnConsumed += 1;
25587 pBuf += 1;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070025588 tmp170__ = 0U;
25589 tmp170__ |= (pSrc->new_color << 0);
25590 tmp170__ |= (pSrc->reserved << 6);
Naveen Rawat69623ef2018-04-27 16:11:01 -070025591 if (unlikely(nBuf < 1))
25592 return DOT11F_INCOMPLETE_IE;
25593
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070025594 *pBuf = tmp170__;
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070025595 *pnConsumed += 1;
25596 /* fieldsEndFlag = 1 */
25597 nBuf -= 1 ;
25598 break;
25599 }
25600 (void)pCtx;
25601 if (pIeLen) {
25602 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25603 }
25604 return DOT11F_PARSE_SUCCESS;
25605} /* End dot11f_pack_ie_bss_color_change. */
25606
Padma, Santhosh Kumar666f96e2017-11-10 13:22:59 +053025607uint32_t dot11f_pack_ie_dh_parameter_element(tpAniSirGlobal pCtx,
25608 tDot11fIEdh_parameter_element *pSrc,
25609 uint8_t *pBuf,
25610 uint32_t nBuf,
25611 uint32_t *pnConsumed)
25612{
25613 uint8_t *pIeLen = 0;
25614 uint32_t nConsumedOnEntry = *pnConsumed;
25615 uint32_t nNeeded = 0U;
25616 nNeeded += (pSrc->num_public_key + 2);
25617 while (pSrc->present) {
25618 if (nNeeded > nBuf)
25619 return DOT11F_BUFFER_OVERFLOW;
25620 *pBuf = 255;
25621 ++pBuf; ++(*pnConsumed);
25622 pIeLen = pBuf;
25623 ++pBuf; ++(*pnConsumed);
25624 *pBuf = 32;
25625 ++pBuf; ++(*pnConsumed);
25626 DOT11F_MEMCPY(pCtx, pBuf, pSrc->group, 2);
25627 *pnConsumed += 2;
25628 pBuf += 2;
25629 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->public_key), pSrc->num_public_key);
25630 *pnConsumed += pSrc->num_public_key;
25631 /* fieldsEndFlag = 1 */
25632 break;
25633 }
25634 (void)pCtx;
25635 if (pIeLen) {
25636 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25637 }
25638 return DOT11F_PARSE_SUCCESS;
25639} /* End dot11f_pack_ie_dh_parameter_element. */
25640
Abhishek Singhd8c3f102017-07-29 14:10:37 +053025641uint32_t dot11f_pack_ie_esp_information(tpAniSirGlobal pCtx,
25642 tDot11fIEesp_information *pSrc,
25643 uint8_t *pBuf,
25644 uint32_t nBuf,
25645 uint32_t *pnConsumed)
25646{
25647 uint8_t *pIeLen = 0;
25648 uint32_t nConsumedOnEntry = *pnConsumed;
25649 uint32_t nNeeded = 0U;
25650 nNeeded += pSrc->num_data;
25651 while (pSrc->present) {
25652 if (nNeeded > nBuf)
25653 return DOT11F_BUFFER_OVERFLOW;
25654 *pBuf = 255;
25655 ++pBuf; ++(*pnConsumed);
25656 pIeLen = pBuf;
25657 ++pBuf; ++(*pnConsumed);
25658 *pBuf = 11;
25659 ++pBuf; ++(*pnConsumed);
25660 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->data), pSrc->num_data);
25661 *pnConsumed += pSrc->num_data;
25662 /* fieldsEndFlag = 1 */
25663 break;
25664 }
25665 (void)pCtx;
25666 if (pIeLen) {
25667 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25668 }
25669 return DOT11F_PARSE_SUCCESS;
25670} /* End dot11f_pack_ie_esp_information. */
25671
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080025672uint32_t dot11f_pack_ie_ext_chan_switch_ann(tpAniSirGlobal pCtx,
25673 tDot11fIEext_chan_switch_ann *pSrc,
25674 uint8_t *pBuf,
25675 uint32_t nBuf,
25676 uint32_t *pnConsumed)
25677{
25678 uint8_t *pIeLen = 0;
25679 uint32_t nConsumedOnEntry = *pnConsumed;
25680 uint32_t nNeeded = 0U;
25681 nNeeded += 4;
25682 while (pSrc->present) {
25683 if (nNeeded > nBuf)
25684 return DOT11F_BUFFER_OVERFLOW;
25685 *pBuf = 60;
25686 ++pBuf; ++(*pnConsumed);
25687 pIeLen = pBuf;
25688 ++pBuf; ++(*pnConsumed);
25689 *pBuf = pSrc->switch_mode;
25690 *pnConsumed += 1;
25691 pBuf += 1;
25692 *pBuf = pSrc->new_reg_class;
25693 *pnConsumed += 1;
25694 pBuf += 1;
25695 *pBuf = pSrc->new_channel;
25696 *pnConsumed += 1;
25697 pBuf += 1;
25698 *pBuf = pSrc->switch_count;
25699 *pnConsumed += 1;
25700 /* fieldsEndFlag = 1 */
25701 break;
25702 }
25703 (void)pCtx;
25704 if (pIeLen) {
25705 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25706 }
25707 return DOT11F_PARSE_SUCCESS;
25708} /* End dot11f_pack_ie_ext_chan_switch_ann. */
25709
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053025710uint32_t dot11f_pack_ie_fils_assoc_delay_info(tpAniSirGlobal pCtx,
25711 tDot11fIEfils_assoc_delay_info *pSrc,
25712 uint8_t *pBuf,
25713 uint32_t nBuf,
25714 uint32_t *pnConsumed)
25715{
25716 uint8_t *pIeLen = 0;
25717 uint32_t nConsumedOnEntry = *pnConsumed;
25718 uint32_t nNeeded = 0U;
25719 nNeeded += 1;
25720 while (pSrc->present) {
25721 if (nNeeded > nBuf)
25722 return DOT11F_BUFFER_OVERFLOW;
25723 *pBuf = 255;
25724 ++pBuf; ++(*pnConsumed);
25725 pIeLen = pBuf;
25726 ++pBuf; ++(*pnConsumed);
25727 *pBuf = 1;
25728 ++pBuf; ++(*pnConsumed);
25729 *pBuf = pSrc->assoc_delay_info;
25730 *pnConsumed += 1;
25731 /* fieldsEndFlag = 1 */
25732 break;
25733 }
25734 (void)pCtx;
25735 if (pIeLen) {
25736 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25737 }
25738 return DOT11F_PARSE_SUCCESS;
25739} /* End dot11f_pack_ie_fils_assoc_delay_info. */
25740
25741uint32_t dot11f_pack_ie_fils_hlp_container(tpAniSirGlobal pCtx,
25742 tDot11fIEfils_hlp_container *pSrc,
25743 uint8_t *pBuf,
25744 uint32_t nBuf,
25745 uint32_t *pnConsumed)
25746{
25747 uint8_t *pIeLen = 0;
25748 uint32_t nConsumedOnEntry = *pnConsumed;
25749 uint32_t nNeeded = 0U;
25750 nNeeded += (pSrc->num_hlp_packet + 12);
25751 while (pSrc->present) {
25752 if (nNeeded > nBuf)
25753 return DOT11F_BUFFER_OVERFLOW;
25754 *pBuf = 255;
25755 ++pBuf; ++(*pnConsumed);
25756 pIeLen = pBuf;
25757 ++pBuf; ++(*pnConsumed);
25758 *pBuf = 5;
25759 ++pBuf; ++(*pnConsumed);
25760 DOT11F_MEMCPY(pCtx, pBuf, pSrc->dest_mac, 6);
25761 *pnConsumed += 6;
25762 pBuf += 6;
25763 DOT11F_MEMCPY(pCtx, pBuf, pSrc->src_mac, 6);
25764 *pnConsumed += 6;
25765 pBuf += 6;
25766 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->hlp_packet), pSrc->num_hlp_packet);
25767 *pnConsumed += pSrc->num_hlp_packet;
25768 /* fieldsEndFlag = 1 */
25769 break;
25770 }
25771 (void)pCtx;
25772 if (pIeLen) {
25773 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25774 }
25775 return DOT11F_PARSE_SUCCESS;
25776} /* End dot11f_pack_ie_fils_hlp_container. */
25777
25778uint32_t dot11f_pack_ie_fils_indication(tpAniSirGlobal pCtx,
25779 tDot11fIEfils_indication *pSrc,
25780 uint8_t *pBuf,
25781 uint32_t nBuf,
25782 uint32_t *pnConsumed)
25783{
25784 uint8_t *pIeLen = 0;
25785 uint32_t nConsumedOnEntry = *pnConsumed;
25786 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070025787 uint16_t tmp171__;
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053025788 nNeeded += (pSrc->num_variable_data + 2);
25789 while (pSrc->present) {
25790 if (nNeeded > nBuf)
25791 return DOT11F_BUFFER_OVERFLOW;
25792 *pBuf = 240;
25793 ++pBuf; ++(*pnConsumed);
25794 pIeLen = pBuf;
25795 ++pBuf; ++(*pnConsumed);
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070025796 tmp171__ = 0U;
25797 tmp171__ |= (pSrc->public_key_identifiers_cnt << 0);
25798 tmp171__ |= (pSrc->realm_identifiers_cnt << 3);
25799 tmp171__ |= (pSrc->is_ip_config_supported << 6);
25800 tmp171__ |= (pSrc->is_cache_id_present << 7);
25801 tmp171__ |= (pSrc->is_hessid_present << 8);
25802 tmp171__ |= (pSrc->is_fils_sk_auth_supported << 9);
25803 tmp171__ |= (pSrc->is_fils_sk_auth_pfs_supported << 10);
25804 tmp171__ |= (pSrc->is_pk_auth_supported << 11);
25805 tmp171__ |= (pSrc->reserved << 12);
Naveen Rawat69623ef2018-04-27 16:11:01 -070025806 if (unlikely(nBuf < 2))
25807 return DOT11F_INCOMPLETE_IE;
25808
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070025809 frameshtons(pCtx, pBuf, tmp171__, 0);
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053025810 *pnConsumed += 2;
25811 pBuf += 2;
25812 nBuf -= 2 ;
25813 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->variable_data), pSrc->num_variable_data);
25814 *pnConsumed += pSrc->num_variable_data;
25815 /* fieldsEndFlag = 1 */
25816 break;
25817 }
25818 (void)pCtx;
25819 if (pIeLen) {
25820 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25821 }
25822 return DOT11F_PARSE_SUCCESS;
25823} /* End dot11f_pack_ie_fils_indication. */
25824
25825uint32_t dot11f_pack_ie_fils_kde(tpAniSirGlobal pCtx,
25826 tDot11fIEfils_kde *pSrc,
25827 uint8_t *pBuf,
25828 uint32_t nBuf,
25829 uint32_t *pnConsumed)
25830{
25831 uint8_t *pIeLen = 0;
25832 uint32_t nConsumedOnEntry = *pnConsumed;
25833 uint32_t nNeeded = 0U;
25834 nNeeded += (pSrc->num_kde_list + 8);
25835 while (pSrc->present) {
25836 if (nNeeded > nBuf)
25837 return DOT11F_BUFFER_OVERFLOW;
25838 *pBuf = 255;
25839 ++pBuf; ++(*pnConsumed);
25840 pIeLen = pBuf;
25841 ++pBuf; ++(*pnConsumed);
25842 *pBuf = 7;
25843 ++pBuf; ++(*pnConsumed);
25844 DOT11F_MEMCPY(pCtx, pBuf, pSrc->key_rsc, 8);
25845 *pnConsumed += 8;
25846 pBuf += 8;
25847 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->kde_list), pSrc->num_kde_list);
25848 *pnConsumed += pSrc->num_kde_list;
25849 /* fieldsEndFlag = 1 */
25850 break;
25851 }
25852 (void)pCtx;
25853 if (pIeLen) {
25854 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25855 }
25856 return DOT11F_PARSE_SUCCESS;
25857} /* End dot11f_pack_ie_fils_kde. */
25858
25859uint32_t dot11f_pack_ie_fils_key_confirmation(tpAniSirGlobal pCtx,
25860 tDot11fIEfils_key_confirmation *pSrc,
25861 uint8_t *pBuf,
25862 uint32_t nBuf,
25863 uint32_t *pnConsumed)
25864{
25865 uint8_t *pIeLen = 0;
25866 uint32_t nConsumedOnEntry = *pnConsumed;
25867 uint32_t nNeeded = 0U;
25868 nNeeded += pSrc->num_key_auth;
25869 while (pSrc->present) {
25870 if (nNeeded > nBuf)
25871 return DOT11F_BUFFER_OVERFLOW;
25872 *pBuf = 255;
25873 ++pBuf; ++(*pnConsumed);
25874 pIeLen = pBuf;
25875 ++pBuf; ++(*pnConsumed);
25876 *pBuf = 3;
25877 ++pBuf; ++(*pnConsumed);
25878 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->key_auth), pSrc->num_key_auth);
25879 *pnConsumed += pSrc->num_key_auth;
25880 /* fieldsEndFlag = 1 */
25881 break;
25882 }
25883 (void)pCtx;
25884 if (pIeLen) {
25885 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25886 }
25887 return DOT11F_PARSE_SUCCESS;
25888} /* End dot11f_pack_ie_fils_key_confirmation. */
25889
25890uint32_t dot11f_pack_ie_fils_nonce(tpAniSirGlobal pCtx,
25891 tDot11fIEfils_nonce *pSrc,
25892 uint8_t *pBuf,
25893 uint32_t nBuf,
25894 uint32_t *pnConsumed)
25895{
25896 uint8_t *pIeLen = 0;
25897 uint32_t nConsumedOnEntry = *pnConsumed;
25898 uint32_t nNeeded = 0U;
25899 nNeeded += 16;
25900 while (pSrc->present) {
25901 if (nNeeded > nBuf)
25902 return DOT11F_BUFFER_OVERFLOW;
25903 *pBuf = 255;
25904 ++pBuf; ++(*pnConsumed);
25905 pIeLen = pBuf;
25906 ++pBuf; ++(*pnConsumed);
25907 *pBuf = 13;
25908 ++pBuf; ++(*pnConsumed);
25909 DOT11F_MEMCPY(pCtx, pBuf, pSrc->nonce, 16);
25910 *pnConsumed += 16;
25911 /* fieldsEndFlag = 1 */
25912 break;
25913 }
25914 (void)pCtx;
25915 if (pIeLen) {
25916 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25917 }
25918 return DOT11F_PARSE_SUCCESS;
25919} /* End dot11f_pack_ie_fils_nonce. */
25920
25921uint32_t dot11f_pack_ie_fils_public_key(tpAniSirGlobal pCtx,
25922 tDot11fIEfils_public_key *pSrc,
25923 uint8_t *pBuf,
25924 uint32_t nBuf,
25925 uint32_t *pnConsumed)
25926{
25927 uint8_t *pIeLen = 0;
25928 uint32_t nConsumedOnEntry = *pnConsumed;
25929 uint32_t nNeeded = 0U;
25930 nNeeded += (pSrc->num_public_key + 1);
25931 while (pSrc->present) {
25932 if (nNeeded > nBuf)
25933 return DOT11F_BUFFER_OVERFLOW;
25934 *pBuf = 255;
25935 ++pBuf; ++(*pnConsumed);
25936 pIeLen = pBuf;
25937 ++pBuf; ++(*pnConsumed);
25938 *pBuf = 12;
25939 ++pBuf; ++(*pnConsumed);
25940 *pBuf = pSrc->key_type;
25941 *pnConsumed += 1;
25942 pBuf += 1;
25943 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->public_key), pSrc->num_public_key);
25944 *pnConsumed += pSrc->num_public_key;
25945 /* fieldsEndFlag = 1 */
25946 break;
25947 }
25948 (void)pCtx;
25949 if (pIeLen) {
25950 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25951 }
25952 return DOT11F_PARSE_SUCCESS;
25953} /* End dot11f_pack_ie_fils_public_key. */
25954
25955uint32_t dot11f_pack_ie_fils_session(tpAniSirGlobal pCtx,
25956 tDot11fIEfils_session *pSrc,
25957 uint8_t *pBuf,
25958 uint32_t nBuf,
25959 uint32_t *pnConsumed)
25960{
25961 uint8_t *pIeLen = 0;
25962 uint32_t nConsumedOnEntry = *pnConsumed;
25963 uint32_t nNeeded = 0U;
25964 nNeeded += 8;
25965 while (pSrc->present) {
25966 if (nNeeded > nBuf)
25967 return DOT11F_BUFFER_OVERFLOW;
25968 *pBuf = 255;
25969 ++pBuf; ++(*pnConsumed);
25970 pIeLen = pBuf;
25971 ++pBuf; ++(*pnConsumed);
25972 *pBuf = 4;
25973 ++pBuf; ++(*pnConsumed);
25974 DOT11F_MEMCPY(pCtx, pBuf, pSrc->session, 8);
25975 *pnConsumed += 8;
25976 /* fieldsEndFlag = 1 */
25977 break;
25978 }
25979 (void)pCtx;
25980 if (pIeLen) {
25981 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
25982 }
25983 return DOT11F_PARSE_SUCCESS;
25984} /* End dot11f_pack_ie_fils_session. */
25985
25986uint32_t dot11f_pack_ie_fils_wrapped_data(tpAniSirGlobal pCtx,
25987 tDot11fIEfils_wrapped_data *pSrc,
25988 uint8_t *pBuf,
25989 uint32_t nBuf,
25990 uint32_t *pnConsumed)
25991{
25992 uint8_t *pIeLen = 0;
25993 uint32_t nConsumedOnEntry = *pnConsumed;
25994 uint32_t nNeeded = 0U;
25995 nNeeded += pSrc->num_wrapped_data;
25996 while (pSrc->present) {
25997 if (nNeeded > nBuf)
25998 return DOT11F_BUFFER_OVERFLOW;
25999 *pBuf = 255;
26000 ++pBuf; ++(*pnConsumed);
26001 pIeLen = pBuf;
26002 ++pBuf; ++(*pnConsumed);
26003 *pBuf = 8;
26004 ++pBuf; ++(*pnConsumed);
26005 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->wrapped_data), pSrc->num_wrapped_data);
26006 *pnConsumed += pSrc->num_wrapped_data;
26007 /* fieldsEndFlag = 1 */
26008 break;
26009 }
26010 (void)pCtx;
26011 if (pIeLen) {
26012 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
26013 }
26014 return DOT11F_PARSE_SUCCESS;
26015} /* End dot11f_pack_ie_fils_wrapped_data. */
26016
Sridhar Selvaraj6d3e0d72017-08-17 17:32:37 +053026017uint32_t dot11f_pack_ie_fragment_ie(tpAniSirGlobal pCtx,
26018 tDot11fIEfragment_ie *pSrc,
26019 uint8_t *pBuf,
26020 uint32_t nBuf,
26021 uint32_t *pnConsumed)
26022{
26023 uint8_t *pIeLen = 0;
26024 uint32_t nConsumedOnEntry = *pnConsumed;
26025 uint32_t nNeeded = 0U;
26026 nNeeded += pSrc->num_data;
26027 while (pSrc->present) {
26028 if (nNeeded > nBuf)
26029 return DOT11F_BUFFER_OVERFLOW;
26030 *pBuf = 242;
26031 ++pBuf; ++(*pnConsumed);
26032 pIeLen = pBuf;
26033 ++pBuf; ++(*pnConsumed);
26034 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->data), pSrc->num_data);
26035 *pnConsumed += pSrc->num_data;
26036 /* fieldsEndFlag = 1 */
26037 break;
26038 }
26039 (void)pCtx;
26040 if (pIeLen) {
26041 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
26042 }
26043 return DOT11F_PARSE_SUCCESS;
26044} /* End dot11f_pack_ie_fragment_ie. */
26045
Naveen Rawatea921ce2017-09-08 15:07:58 -070026046uint32_t dot11f_pack_ie_he_cap(tpAniSirGlobal pCtx,
26047 tDot11fIEhe_cap *pSrc,
26048 uint8_t *pBuf,
26049 uint32_t nBuf,
26050 uint32_t *pnConsumed)
26051{
26052 uint8_t *pIeLen = 0;
26053 uint32_t nConsumedOnEntry = *pnConsumed;
26054 uint32_t nNeeded = 0U;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053026055 uint32_t tmp172__;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070026056 uint16_t tmp173__;
26057 uint32_t tmp174__;
26058 uint32_t tmp175__;
26059 uint16_t tmp176__;
Naveen Rawatea921ce2017-09-08 15:07:58 -070026060 uint32_t status = DOT11F_PARSE_SUCCESS;
26061 status = dot11f_get_packed_ie_he_cap(pCtx, pSrc, &nNeeded);
26062 if (!DOT11F_SUCCEEDED(status))
26063 return status;
26064 while (pSrc->present) {
26065 if (nNeeded > nBuf)
26066 return DOT11F_BUFFER_OVERFLOW;
26067 *pBuf = 255;
Naveen Rawat819158d2018-01-16 10:56:45 -080026068 ++pBuf; ++(*pnConsumed);
Naveen Rawatea921ce2017-09-08 15:07:58 -070026069 pIeLen = pBuf;
Naveen Rawat819158d2018-01-16 10:56:45 -080026070 ++pBuf; ++(*pnConsumed);
Naveen Rawatea921ce2017-09-08 15:07:58 -070026071 *pBuf = 35;
Naveen Rawat819158d2018-01-16 10:56:45 -080026072 ++pBuf; ++(*pnConsumed);
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053026073 tmp172__ = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070026074 tmp172__ |= (pSrc->htc_he << 0);
26075 tmp172__ |= (pSrc->twt_request << 1);
26076 tmp172__ |= (pSrc->twt_responder << 2);
26077 tmp172__ |= (pSrc->fragmentation << 3);
26078 tmp172__ |= (pSrc->max_num_frag_msdu_amsdu_exp << 5);
26079 tmp172__ |= (pSrc->min_frag_size << 8);
26080 tmp172__ |= (pSrc->trigger_frm_mac_pad << 10);
26081 tmp172__ |= (pSrc->multi_tid_aggr_rx_supp << 12);
26082 tmp172__ |= (pSrc->he_link_adaptation << 15);
26083 tmp172__ |= (pSrc->all_ack << 17);
26084 tmp172__ |= (pSrc->trigd_rsp_sched << 18);
26085 tmp172__ |= (pSrc->a_bsr << 19);
26086 tmp172__ |= (pSrc->broadcast_twt << 20);
26087 tmp172__ |= (pSrc->ba_32bit_bitmap << 21);
26088 tmp172__ |= (pSrc->mu_cascade << 22);
26089 tmp172__ |= (pSrc->ack_enabled_multitid << 23);
26090 tmp172__ |= (pSrc->reserved << 24);
26091 tmp172__ |= (pSrc->omi_a_ctrl << 25);
26092 tmp172__ |= (pSrc->ofdma_ra << 26);
26093 tmp172__ |= (pSrc->max_ampdu_len_exp_ext << 27);
26094 tmp172__ |= (pSrc->amsdu_frag << 29);
26095 tmp172__ |= (pSrc->flex_twt_sched << 30);
26096 tmp172__ |= (pSrc->rx_ctrl_frame << 31);
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053026097 if (unlikely(nBuf < 4))
26098 return DOT11F_INCOMPLETE_IE;
26099
26100 frameshtonl(pCtx, pBuf, tmp172__, 0);
26101 *pnConsumed += 4;
26102 pBuf += 4;
26103 nBuf -= 4 ;
26104 tmp173__ = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070026105 tmp173__ |= (pSrc->bsrp_ampdu_aggr << 0);
26106 tmp173__ |= (pSrc->qtp << 1);
26107 tmp173__ |= (pSrc->a_bqr << 2);
26108 tmp173__ |= (pSrc->spatial_reuse_param_rspder << 3);
26109 tmp173__ |= (pSrc->ndp_feedback_supp << 4);
26110 tmp173__ |= (pSrc->ops_supp << 5);
26111 tmp173__ |= (pSrc->amsdu_in_ampdu << 6);
26112 tmp173__ |= (pSrc->multi_tid_aggr_tx_supp << 7);
26113 tmp173__ |= (pSrc->he_sub_ch_sel_tx_supp << 10);
26114 tmp173__ |= (pSrc->ul_2x996_tone_ru_supp << 11);
26115 tmp173__ |= (pSrc->om_ctrl_ul_mu_data_dis_rx << 12);
26116 tmp173__ |= (pSrc->reserved1 << 13);
26117 if (unlikely(nBuf < 2))
26118 return DOT11F_INCOMPLETE_IE;
26119
26120 frameshtons(pCtx, pBuf, tmp173__, 0);
26121 *pnConsumed += 2;
26122 pBuf += 2;
26123 nBuf -= 2 ;
26124 tmp174__ = 0U;
26125 tmp174__ |= (pSrc->reserved2 << 0);
26126 tmp174__ |= (pSrc->chan_width_0 << 1);
26127 tmp174__ |= (pSrc->chan_width_1 << 2);
26128 tmp174__ |= (pSrc->chan_width_2 << 3);
26129 tmp174__ |= (pSrc->chan_width_3 << 4);
26130 tmp174__ |= (pSrc->chan_width_4 << 5);
26131 tmp174__ |= (pSrc->chan_width_5 << 6);
26132 tmp174__ |= (pSrc->chan_width_6 << 7);
26133 tmp174__ |= (pSrc->rx_pream_puncturing << 8);
26134 tmp174__ |= (pSrc->device_class << 12);
26135 tmp174__ |= (pSrc->ldpc_coding << 13);
26136 tmp174__ |= (pSrc->he_1x_ltf_800_gi_ppdu << 14);
26137 tmp174__ |= (pSrc->midamble_tx_rx_max_nsts << 15);
26138 tmp174__ |= (pSrc->he_4x_ltf_3200_gi_ndp << 17);
26139 tmp174__ |= (pSrc->tx_stbc_lt_80mhz << 18);
26140 tmp174__ |= (pSrc->rx_stbc_lt_80mhz << 19);
26141 tmp174__ |= (pSrc->doppler << 20);
26142 tmp174__ |= (pSrc->ul_mu << 22);
26143 tmp174__ |= (pSrc->dcm_enc_tx << 24);
26144 tmp174__ |= (pSrc->dcm_enc_rx << 27);
26145 tmp174__ |= (pSrc->ul_he_mu << 30);
26146 tmp174__ |= (pSrc->su_beamformer << 31);
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053026147 if (unlikely(nBuf < 4))
26148 return DOT11F_INCOMPLETE_IE;
26149
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070026150 frameshtonl(pCtx, pBuf, tmp174__, 0);
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053026151 *pnConsumed += 4;
26152 pBuf += 4;
26153 nBuf -= 4 ;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070026154 tmp175__ = 0U;
26155 tmp175__ |= (pSrc->su_beamformee << 0);
26156 tmp175__ |= (pSrc->mu_beamformer << 1);
26157 tmp175__ |= (pSrc->bfee_sts_lt_80 << 2);
26158 tmp175__ |= (pSrc->bfee_sts_gt_80 << 5);
26159 tmp175__ |= (pSrc->num_sounding_lt_80 << 8);
26160 tmp175__ |= (pSrc->num_sounding_gt_80 << 11);
26161 tmp175__ |= (pSrc->su_feedback_tone16 << 14);
26162 tmp175__ |= (pSrc->mu_feedback_tone16 << 15);
26163 tmp175__ |= (pSrc->codebook_su << 16);
26164 tmp175__ |= (pSrc->codebook_mu << 17);
26165 tmp175__ |= (pSrc->beamforming_feedback << 18);
26166 tmp175__ |= (pSrc->he_er_su_ppdu << 21);
26167 tmp175__ |= (pSrc->dl_mu_mimo_part_bw << 22);
26168 tmp175__ |= (pSrc->ppet_present << 23);
26169 tmp175__ |= (pSrc->srp << 24);
26170 tmp175__ |= (pSrc->power_boost << 25);
26171 tmp175__ |= (pSrc->he_ltf_800_gi_4x << 26);
26172 tmp175__ |= (pSrc->max_nc << 27);
26173 tmp175__ |= (pSrc->tx_stbc_gt_80mhz << 30);
26174 tmp175__ |= (pSrc->rx_stbc_gt_80mhz << 31);
26175 if (unlikely(nBuf < 4))
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053026176 return DOT11F_INCOMPLETE_IE;
26177
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070026178 frameshtonl(pCtx, pBuf, tmp175__, 0);
26179 *pnConsumed += 4;
26180 pBuf += 4;
26181 nBuf -= 4 ;
26182 tmp176__ = 0U;
26183 tmp176__ |= (pSrc->er_he_ltf_800_gi_4x << 0);
26184 tmp176__ |= (pSrc->he_ppdu_20_in_40Mhz_2G << 1);
26185 tmp176__ |= (pSrc->he_ppdu_20_in_160_80p80Mhz << 2);
26186 tmp176__ |= (pSrc->he_ppdu_80_in_160_80p80Mhz << 3);
26187 tmp176__ |= (pSrc->er_1x_he_ltf_gi << 4);
26188 tmp176__ |= (pSrc->midamble_tx_rx_1x_he_ltf << 5);
26189 tmp176__ |= (pSrc->dcm_max_bw << 6);
26190 tmp176__ |= (pSrc->longer_than_16_he_sigb_ofdm_sym << 8);
26191 tmp176__ |= (pSrc->non_trig_cqi_feedback << 9);
26192 tmp176__ |= (pSrc->tx_1024_qam_lt_242_tone_ru << 10);
26193 tmp176__ |= (pSrc->rx_1024_qam_lt_242_tone_ru << 11);
26194 tmp176__ |= (pSrc->rx_full_bw_su_he_mu_compress_sigb << 12);
26195 tmp176__ |= (pSrc->rx_full_bw_su_he_mu_non_cmpr_sigb << 13);
26196 tmp176__ |= (pSrc->reserved3 << 14);
26197 if (unlikely(nBuf < 2))
26198 return DOT11F_INCOMPLETE_IE;
26199
26200 frameshtons(pCtx, pBuf, tmp176__, 0);
26201 *pnConsumed += 2;
26202 pBuf += 2;
26203 nBuf -= 2 ;
26204 *pBuf = pSrc->reserved4;
Naveen Rawatea921ce2017-09-08 15:07:58 -070026205 *pnConsumed += 1;
26206 pBuf += 1;
Naveen Rawat215dad62017-10-16 16:55:18 -070026207 frameshtons(pCtx, pBuf, pSrc->rx_he_mcs_map_lt_80, 0);
Naveen Rawatea921ce2017-09-08 15:07:58 -070026208 *pnConsumed += 2;
26209 pBuf += 2;
Naveen Rawat215dad62017-10-16 16:55:18 -070026210 frameshtons(pCtx, pBuf, pSrc->tx_he_mcs_map_lt_80, 0);
26211 *pnConsumed += 2;
26212 pBuf += 2;
26213 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->rx_he_mcs_map_160), (pSrc->chan_width_2 * 2));
26214 *pnConsumed += (pSrc->chan_width_2 * 2);
26215 pBuf += (pSrc->chan_width_2 * 2);
26216 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->tx_he_mcs_map_160), (pSrc->chan_width_2 * 2));
26217 *pnConsumed += (pSrc->chan_width_2 * 2);
26218 pBuf += (pSrc->chan_width_2 * 2);
26219 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->rx_he_mcs_map_80_80), (pSrc->chan_width_3 * 2));
26220 *pnConsumed += (pSrc->chan_width_3 * 2);
26221 pBuf += (pSrc->chan_width_3 * 2);
26222 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->tx_he_mcs_map_80_80), (pSrc->chan_width_3 * 2));
26223 *pnConsumed += (pSrc->chan_width_3 * 2);
26224 pBuf += (pSrc->chan_width_3 * 2);
Naveen Rawat819158d2018-01-16 10:56:45 -080026225 if (pSrc->ppet_present) {
26226 switch (pSrc->ppet_present) {
26227 case 1:
26228 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->ppet.ppe_threshold.ppe_th), pSrc->ppet.ppe_threshold.num_ppe_th);
26229 *pnConsumed += pSrc->ppet.ppe_threshold.num_ppe_th;
26230 /* fieldsEndFlag = 1 */
26231 break;
26232 }
26233 } else {
26234 break;
26235 }
Naveen Rawatea921ce2017-09-08 15:07:58 -070026236 break;
26237 }
26238 (void)pCtx;
26239 if (pIeLen) {
26240 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
26241 }
26242 return status;
26243} /* End dot11f_pack_ie_he_cap. */
26244
26245uint32_t dot11f_pack_ie_he_op(tpAniSirGlobal pCtx,
26246 tDot11fIEhe_op *pSrc,
26247 uint8_t *pBuf,
26248 uint32_t nBuf,
26249 uint32_t *pnConsumed)
26250{
26251 uint8_t *pIeLen = 0;
26252 uint32_t nConsumedOnEntry = *pnConsumed;
26253 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070026254 uint16_t tmp177__;
26255 uint8_t tmp178__;
26256 uint8_t tmp179__;
Naveen Rawatea921ce2017-09-08 15:07:58 -070026257 uint32_t status = DOT11F_PARSE_SUCCESS;
26258 status = dot11f_get_packed_ie_he_op(pCtx, pSrc, &nNeeded);
26259 if (!DOT11F_SUCCEEDED(status))
26260 return status;
26261 while (pSrc->present) {
26262 if (nNeeded > nBuf)
26263 return DOT11F_BUFFER_OVERFLOW;
26264 *pBuf = 255;
26265 ++pBuf; ++(*pnConsumed);
26266 pIeLen = pBuf;
26267 ++pBuf; ++(*pnConsumed);
26268 *pBuf = 36;
26269 ++pBuf; ++(*pnConsumed);
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070026270 tmp177__ = 0U;
26271 tmp177__ |= (pSrc->default_pe << 0);
26272 tmp177__ |= (pSrc->twt_required << 3);
26273 tmp177__ |= (pSrc->txop_rts_threshold << 4);
26274 tmp177__ |= (pSrc->vht_oper_present << 14);
26275 tmp177__ |= (pSrc->co_located_bss << 15);
26276 if (unlikely(nBuf < 2))
Naveen Rawat69623ef2018-04-27 16:11:01 -070026277 return DOT11F_INCOMPLETE_IE;
26278
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070026279 frameshtons(pCtx, pBuf, tmp177__, 0);
26280 *pnConsumed += 2;
26281 pBuf += 2;
26282 nBuf -= 2 ;
26283 tmp178__ = 0U;
26284 tmp178__ |= (pSrc->er_su_disable << 0);
26285 tmp178__ |= (pSrc->reserved2 << 1);
26286 if (unlikely(nBuf < 1))
26287 return DOT11F_INCOMPLETE_IE;
26288
26289 *pBuf = tmp178__;
26290 *pnConsumed += 1;
26291 pBuf += 1;
26292 nBuf -= 1 ;
26293 tmp179__ = 0U;
26294 tmp179__ |= (pSrc->bss_color << 0);
26295 tmp179__ |= (pSrc->partial_bss_col << 6);
26296 tmp179__ |= (pSrc->bss_col_disabled << 7);
26297 if (unlikely(nBuf < 1))
26298 return DOT11F_INCOMPLETE_IE;
26299
26300 *pBuf = tmp179__;
26301 *pnConsumed += 1;
26302 pBuf += 1;
26303 nBuf -= 1 ;
Naveen Rawate795f452017-11-13 14:47:39 -080026304 DOT11F_MEMCPY(pCtx, pBuf, pSrc->basic_mcs_nss, 2);
26305 *pnConsumed += 2;
26306 pBuf += 2;
Naveen Rawatea921ce2017-09-08 15:07:58 -070026307 if (pSrc->vht_oper_present) {
26308 switch (pSrc->vht_oper_present) {
26309 case 1:
26310 *pBuf = pSrc->vht_oper.info.chan_width;
26311 *pnConsumed += 1;
26312 pBuf += 1;
26313 *pBuf = pSrc->vht_oper.info.center_freq_seg0;
26314 *pnConsumed += 1;
26315 pBuf += 1;
26316 *pBuf = pSrc->vht_oper.info.center_freq_seg1;
26317 *pnConsumed += 1;
26318 pBuf += 1;
26319 break;
26320 }
26321 } else {
26322 break;
26323 }
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070026324 if (pSrc->co_located_bss) {
26325 switch (pSrc->co_located_bss) {
Naveen Rawatea921ce2017-09-08 15:07:58 -070026326 case 1:
26327 *pBuf = pSrc->maxbssid_ind.info.data;
26328 *pnConsumed += 1;
26329 /* fieldsEndFlag = 1 */
26330 break;
26331 }
26332 } else {
26333 break;
26334 }
26335 break;
26336 }
26337 (void)pCtx;
26338 if (pIeLen) {
26339 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
26340 }
26341 return status;
26342} /* End dot11f_pack_ie_he_op. */
26343
Nitesh Shah0ddd4f62016-05-27 10:07:32 +053026344uint32_t dot11f_pack_ie_hs20vendor_ie(tpAniSirGlobal pCtx,
26345 tDot11fIEhs20vendor_ie *pSrc,
26346 uint8_t *pBuf,
26347 uint32_t nBuf,
26348 uint32_t *pnConsumed)
26349{
26350 uint8_t *pIeLen = 0;
26351 uint32_t nConsumedOnEntry = *pnConsumed;
26352 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070026353 uint8_t tmp180__;
Nitesh Shah0ddd4f62016-05-27 10:07:32 +053026354 uint32_t status = DOT11F_PARSE_SUCCESS;
26355 status = dot11f_get_packed_ie_hs20vendor_ie(pCtx, pSrc, &nNeeded);
26356 if (!DOT11F_SUCCEEDED(status))
26357 return status;
26358 while (pSrc->present) {
26359 if (nNeeded > nBuf)
26360 return DOT11F_BUFFER_OVERFLOW;
26361 *pBuf = 221;
26362 ++pBuf; ++(*pnConsumed);
26363 pIeLen = pBuf;
26364 ++pBuf; ++(*pnConsumed);
26365 *pBuf = 0x50;
26366 ++pBuf; ++(*pnConsumed);
26367 *pBuf = 0x6f;
26368 ++pBuf; ++(*pnConsumed);
26369 *pBuf = 0x9a;
26370 ++pBuf; ++(*pnConsumed);
Selvaraj, Sridhar7f42b5f2016-09-16 20:23:53 +053026371 *pBuf = 0x10;
26372 ++pBuf; ++(*pnConsumed);
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070026373 tmp180__ = 0U;
26374 tmp180__ |= (pSrc->dgaf_dis << 0);
26375 tmp180__ |= (pSrc->hs_id_present << 1);
26376 tmp180__ |= (pSrc->reserved << 3);
26377 tmp180__ |= (pSrc->release_num << 4);
Naveen Rawat69623ef2018-04-27 16:11:01 -070026378 if (unlikely(nBuf < 1))
26379 return DOT11F_INCOMPLETE_IE;
26380
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070026381 *pBuf = tmp180__;
Nitesh Shah0ddd4f62016-05-27 10:07:32 +053026382 *pnConsumed += 1;
26383 pBuf += 1;
26384 nBuf -= 1 ;
26385 if (pSrc->hs_id_present) {
26386 switch (pSrc->hs_id_present) {
26387 case 1:
26388 frameshtons(pCtx, pBuf, pSrc->hs_id.pps_mo.pps_mo_id, 0);
26389 *pnConsumed += 2;
26390 /* fieldsEndFlag = 1 */
26391 break;
26392 case 2:
26393 frameshtons(pCtx, pBuf, pSrc->hs_id.anqp_domain.anqp_domain_id, 0);
26394 *pnConsumed += 2;
26395 /* fieldsEndFlag = 1 */
26396 break;
26397 }
26398 } else {
26399 break;
26400 }
26401 break;
26402 }
26403 (void)pCtx;
26404 if (pIeLen) {
26405 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
26406 }
26407 return status;
26408} /* End dot11f_pack_ie_hs20vendor_ie. */
26409
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080026410uint32_t dot11f_pack_ie_ht2040_bss_coexistence(tpAniSirGlobal pCtx,
26411 tDot11fIEht2040_bss_coexistence *pSrc,
26412 uint8_t *pBuf,
26413 uint32_t nBuf,
26414 uint32_t *pnConsumed)
26415{
26416 uint8_t *pIeLen = 0;
26417 uint32_t nConsumedOnEntry = *pnConsumed;
26418 uint32_t nNeeded = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070026419 uint8_t tmp181__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080026420 nNeeded += 1;
26421 while (pSrc->present) {
26422 if (nNeeded > nBuf)
26423 return DOT11F_BUFFER_OVERFLOW;
26424 *pBuf = 72;
26425 ++pBuf; ++(*pnConsumed);
26426 pIeLen = pBuf;
26427 ++pBuf; ++(*pnConsumed);
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070026428 tmp181__ = 0U;
26429 tmp181__ |= (pSrc->info_request << 0);
26430 tmp181__ |= (pSrc->forty_mhz_intolerant << 1);
26431 tmp181__ |= (pSrc->twenty_mhz_bsswidth_req << 2);
26432 tmp181__ |= (pSrc->obss_scan_exemption_req << 3);
26433 tmp181__ |= (pSrc->obss_scan_exemption_grant << 4);
26434 tmp181__ |= (pSrc->unused << 5);
Naveen Rawat69623ef2018-04-27 16:11:01 -070026435 if (unlikely(nBuf < 1))
26436 return DOT11F_INCOMPLETE_IE;
26437
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070026438 *pBuf = tmp181__;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080026439 *pnConsumed += 1;
26440 /* fieldsEndFlag = 1 */
26441 nBuf -= 1 ;
26442 break;
26443 }
26444 (void)pCtx;
26445 if (pIeLen) {
26446 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
26447 }
26448 return DOT11F_PARSE_SUCCESS;
26449} /* End dot11f_pack_ie_ht2040_bss_coexistence. */
26450
26451uint32_t dot11f_pack_ie_ht2040_bss_intolerant_report(tpAniSirGlobal pCtx,
26452 tDot11fIEht2040_bss_intolerant_report *pSrc,
26453 uint8_t *pBuf,
26454 uint32_t nBuf,
26455 uint32_t *pnConsumed)
26456{
26457 uint8_t *pIeLen = 0;
26458 uint32_t nConsumedOnEntry = *pnConsumed;
26459 uint32_t nNeeded = 0U;
26460 nNeeded += (pSrc->num_channel_list + 1);
26461 while (pSrc->present) {
26462 if (nNeeded > nBuf)
26463 return DOT11F_BUFFER_OVERFLOW;
26464 *pBuf = 73;
26465 ++pBuf; ++(*pnConsumed);
26466 pIeLen = pBuf;
26467 ++pBuf; ++(*pnConsumed);
26468 *pBuf = pSrc->operating_class;
26469 *pnConsumed += 1;
26470 pBuf += 1;
26471 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->channel_list), pSrc->num_channel_list);
26472 *pnConsumed += pSrc->num_channel_list;
26473 /* fieldsEndFlag = 1 */
26474 break;
26475 }
26476 (void)pCtx;
26477 if (pIeLen) {
26478 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
26479 }
26480 return DOT11F_PARSE_SUCCESS;
26481} /* End dot11f_pack_ie_ht2040_bss_intolerant_report. */
26482
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070026483uint32_t dot11f_pack_ie_mu_edca_param_set(tpAniSirGlobal pCtx,
26484 tDot11fIEmu_edca_param_set *pSrc,
26485 uint8_t *pBuf,
26486 uint32_t nBuf,
26487 uint32_t *pnConsumed)
26488{
26489 uint8_t *pIeLen = 0;
26490 uint32_t nConsumedOnEntry = *pnConsumed;
26491 uint32_t nNeeded = 0U;
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080026492 uint8_t tmp182__;
26493 uint8_t tmp183__;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053026494 uint8_t tmp184__;
26495 uint8_t tmp185__;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070026496 uint8_t tmp186__;
26497 uint8_t tmp187__;
26498 uint8_t tmp188__;
26499 uint8_t tmp189__;
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070026500 nNeeded += 13;
26501 while (pSrc->present) {
26502 if (nNeeded > nBuf)
26503 return DOT11F_BUFFER_OVERFLOW;
Kiran Kumar Lokere27026ae2018-03-09 11:38:19 -080026504 *pBuf = 255;
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070026505 ++pBuf; ++(*pnConsumed);
26506 pIeLen = pBuf;
26507 ++pBuf; ++(*pnConsumed);
Kiran Kumar Lokere27026ae2018-03-09 11:38:19 -080026508 *pBuf = 38;
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070026509 ++pBuf; ++(*pnConsumed);
26510 *pBuf = pSrc->qos;
26511 *pnConsumed += 1;
26512 pBuf += 1;
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080026513 tmp182__ = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070026514 tmp182__ |= (pSrc->acbe_aifsn << 0);
26515 tmp182__ |= (pSrc->acbe_acm << 4);
26516 tmp182__ |= (pSrc->acbe_aci << 5);
26517 tmp182__ |= (pSrc->unused1 << 7);
Naveen Rawat69623ef2018-04-27 16:11:01 -070026518 if (unlikely(nBuf < 1))
26519 return DOT11F_INCOMPLETE_IE;
26520
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080026521 *pBuf = tmp182__;
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070026522 *pnConsumed += 1;
26523 pBuf += 1;
26524 nBuf -= 1 ;
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080026525 tmp183__ = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070026526 tmp183__ |= (pSrc->acbe_acwmin << 0);
26527 tmp183__ |= (pSrc->acbe_acwmax << 4);
Naveen Rawat69623ef2018-04-27 16:11:01 -070026528 if (unlikely(nBuf < 1))
26529 return DOT11F_INCOMPLETE_IE;
26530
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080026531 *pBuf = tmp183__;
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070026532 *pnConsumed += 1;
26533 pBuf += 1;
26534 nBuf -= 1 ;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070026535 *pBuf = pSrc->acbe_muedca_timer;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053026536 *pnConsumed += 1;
26537 pBuf += 1;
26538 tmp184__ = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070026539 tmp184__ |= (pSrc->acbk_aifsn << 0);
26540 tmp184__ |= (pSrc->acbk_acm << 4);
26541 tmp184__ |= (pSrc->acbk_aci << 5);
26542 tmp184__ |= (pSrc->unused2 << 7);
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053026543 if (unlikely(nBuf < 1))
26544 return DOT11F_INCOMPLETE_IE;
26545
26546 *pBuf = tmp184__;
26547 *pnConsumed += 1;
26548 pBuf += 1;
26549 nBuf -= 1 ;
26550 tmp185__ = 0U;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070026551 tmp185__ |= (pSrc->acbk_acwmin << 0);
26552 tmp185__ |= (pSrc->acbk_acwmax << 4);
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053026553 if (unlikely(nBuf < 1))
26554 return DOT11F_INCOMPLETE_IE;
26555
26556 *pBuf = tmp185__;
26557 *pnConsumed += 1;
26558 pBuf += 1;
26559 nBuf -= 1 ;
Kiran Kumar Lokere1f96b4a2018-08-22 14:47:11 -070026560 *pBuf = pSrc->acbk_muedca_timer;
26561 *pnConsumed += 1;
26562 pBuf += 1;
26563 tmp186__ = 0U;
26564 tmp186__ |= (pSrc->acvi_aifsn << 0);
26565 tmp186__ |= (pSrc->acvi_acm << 4);
26566 tmp186__ |= (pSrc->acvi_aci << 5);
26567 tmp186__ |= (pSrc->unused3 << 7);
26568 if (unlikely(nBuf < 1))
26569 return DOT11F_INCOMPLETE_IE;
26570
26571 *pBuf = tmp186__;
26572 *pnConsumed += 1;
26573 pBuf += 1;
26574 nBuf -= 1 ;
26575 tmp187__ = 0U;
26576 tmp187__ |= (pSrc->acvi_acwmin << 0);
26577 tmp187__ |= (pSrc->acvi_acwmax << 4);
26578 if (unlikely(nBuf < 1))
26579 return DOT11F_INCOMPLETE_IE;
26580
26581 *pBuf = tmp187__;
26582 *pnConsumed += 1;
26583 pBuf += 1;
26584 nBuf -= 1 ;
26585 *pBuf = pSrc->acvi_muedca_timer;
26586 *pnConsumed += 1;
26587 pBuf += 1;
26588 tmp188__ = 0U;
26589 tmp188__ |= (pSrc->acvo_aifsn << 0);
26590 tmp188__ |= (pSrc->acvo_acm << 4);
26591 tmp188__ |= (pSrc->acvo_aci << 5);
26592 tmp188__ |= (pSrc->unused4 << 7);
26593 if (unlikely(nBuf < 1))
26594 return DOT11F_INCOMPLETE_IE;
26595
26596 *pBuf = tmp188__;
26597 *pnConsumed += 1;
26598 pBuf += 1;
26599 nBuf -= 1 ;
26600 tmp189__ = 0U;
26601 tmp189__ |= (pSrc->acvo_acwmin << 0);
26602 tmp189__ |= (pSrc->acvo_acwmax << 4);
26603 if (unlikely(nBuf < 1))
26604 return DOT11F_INCOMPLETE_IE;
26605
26606 *pBuf = tmp189__;
26607 *pnConsumed += 1;
26608 pBuf += 1;
26609 nBuf -= 1 ;
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070026610 *pBuf = pSrc->acvo_muedca_timer;
26611 *pnConsumed += 1;
26612 /* fieldsEndFlag = 1 */
26613 break;
26614 }
26615 (void)pCtx;
26616 if (pIeLen) {
26617 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
26618 }
26619 return DOT11F_PARSE_SUCCESS;
26620} /* End dot11f_pack_ie_mu_edca_param_set. */
26621
Selvaraj, Sridhar99edbc32017-06-22 10:49:59 +053026622uint32_t dot11f_pack_ie_osen_ie(tpAniSirGlobal pCtx,
26623 tDot11fIEosen_ie *pSrc,
26624 uint8_t *pBuf,
26625 uint32_t nBuf,
26626 uint32_t *pnConsumed)
26627{
26628 uint8_t *pIeLen = 0;
26629 uint32_t nConsumedOnEntry = *pnConsumed;
26630 uint32_t nNeeded = 0U;
26631 nNeeded += pSrc->num_data;
26632 while (pSrc->present) {
26633 if (nNeeded > nBuf)
26634 return DOT11F_BUFFER_OVERFLOW;
26635 *pBuf = 221;
26636 ++pBuf; ++(*pnConsumed);
26637 pIeLen = pBuf;
26638 ++pBuf; ++(*pnConsumed);
26639 *pBuf = 0x50;
26640 ++pBuf; ++(*pnConsumed);
26641 *pBuf = 0x6f;
26642 ++pBuf; ++(*pnConsumed);
26643 *pBuf = 0x9a;
26644 ++pBuf; ++(*pnConsumed);
26645 *pBuf = 0x12;
26646 ++pBuf; ++(*pnConsumed);
26647 DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->data), pSrc->num_data);
26648 *pnConsumed += pSrc->num_data;
26649 /* fieldsEndFlag = 1 */
26650 break;
26651 }
26652 (void)pCtx;
26653 if (pIeLen) {
26654 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
26655 }
26656 return DOT11F_PARSE_SUCCESS;
26657} /* End dot11f_pack_ie_osen_ie. */
26658
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080026659uint32_t dot11f_pack_ie_sec_chan_offset_ele(tpAniSirGlobal pCtx,
26660 tDot11fIEsec_chan_offset_ele *pSrc,
26661 uint8_t *pBuf,
26662 uint32_t nBuf,
26663 uint32_t *pnConsumed)
26664{
26665 uint8_t *pIeLen = 0;
26666 uint32_t nConsumedOnEntry = *pnConsumed;
26667 uint32_t nNeeded = 0U;
26668 nNeeded += 1;
26669 while (pSrc->present) {
26670 if (nNeeded > nBuf)
26671 return DOT11F_BUFFER_OVERFLOW;
26672 *pBuf = 62;
26673 ++pBuf; ++(*pnConsumed);
26674 pIeLen = pBuf;
26675 ++pBuf; ++(*pnConsumed);
26676 *pBuf = pSrc->secondaryChannelOffset;
26677 *pnConsumed += 1;
26678 /* fieldsEndFlag = 1 */
26679 break;
26680 }
26681 (void)pCtx;
26682 if (pIeLen) {
26683 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
26684 }
26685 return DOT11F_PARSE_SUCCESS;
26686} /* End dot11f_pack_ie_sec_chan_offset_ele. */
26687
Kapil Gupta4b2efbb2016-10-03 13:07:20 +053026688uint32_t dot11f_pack_ie_vendor_vht_ie(tpAniSirGlobal pCtx,
26689 tDot11fIEvendor_vht_ie *pSrc,
26690 uint8_t *pBuf,
26691 uint32_t nBuf,
26692 uint32_t *pnConsumed)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080026693{
26694 uint8_t *pIeLen = 0;
26695 uint32_t nConsumedOnEntry = *pnConsumed;
26696 uint32_t nNeeded = 0U;
26697 uint32_t status = DOT11F_PARSE_SUCCESS;
Kapil Gupta4b2efbb2016-10-03 13:07:20 +053026698 status = dot11f_get_packed_ie_vendor_vht_ie(pCtx, pSrc, &nNeeded);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080026699 if (!DOT11F_SUCCEEDED(status))
26700 return status;
26701 while (pSrc->present) {
26702 if (nNeeded > nBuf)
26703 return DOT11F_BUFFER_OVERFLOW;
26704 *pBuf = 221;
26705 ++pBuf; --nBuf; ++(*pnConsumed);
26706 pIeLen = pBuf;
26707 ++pBuf; --nBuf; ++(*pnConsumed);
26708 *pBuf = 0x0;
26709 ++pBuf; --nBuf; ++(*pnConsumed);
26710 *pBuf = 0x90;
26711 ++pBuf; --nBuf; ++(*pnConsumed);
26712 *pBuf = 0x4c;
26713 ++pBuf; --nBuf; ++(*pnConsumed);
Kiran Kumar Lokerecc448682017-07-20 18:08:01 -070026714 *pBuf = 0x4;
26715 ++pBuf; --nBuf; ++(*pnConsumed);
Kiran Kumar Lokere81722632017-09-26 12:11:43 -070026716 *pBuf = pSrc->sub_type;
26717 *pnConsumed += 1;
26718 pBuf += 1;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080026719 status = pack_core(pCtx,
26720 (uint8_t *)pSrc,
26721 pBuf,
26722 nBuf,
26723 pnConsumed,
Kapil Gupta4b2efbb2016-10-03 13:07:20 +053026724 FFS_vendor_vht_ie,
26725 IES_vendor_vht_ie);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080026726 break;
26727 }
26728 (void)pCtx;
26729 if (pIeLen) {
26730 *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
26731 }
26732 return status;
Kapil Gupta4b2efbb2016-10-03 13:07:20 +053026733} /* End dot11f_pack_ie_vendor_vht_ie. */
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080026734
26735uint32_t dot11f_pack_add_ts_request(tpAniSirGlobal pCtx,
26736 tDot11fAddTSRequest *pFrm,
26737 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
26738{
26739 uint32_t i = 0;
26740 uint32_t status = 0;
26741 (void)i;
26742 *pnConsumed = 0U;
26743 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
26744 FFS_AddTSRequest, IES_AddTSRequest);
26745
26746 return status;
26747
26748} /* End dot11f_unpack_add_ts_request. */
26749
26750uint32_t dot11f_pack_add_ts_response(tpAniSirGlobal pCtx,
26751 tDot11fAddTSResponse *pFrm,
26752 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
26753{
26754 uint32_t i = 0;
26755 uint32_t status = 0;
26756 (void)i;
26757 *pnConsumed = 0U;
26758 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
26759 FFS_AddTSResponse, IES_AddTSResponse);
26760
26761 return status;
26762
26763} /* End dot11f_unpack_add_ts_response. */
26764
26765uint32_t dot11f_pack_assoc_request(tpAniSirGlobal pCtx,
26766 tDot11fAssocRequest *pFrm,
26767 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
26768{
26769 uint32_t i = 0;
26770 uint32_t status = 0;
26771 (void)i;
26772 *pnConsumed = 0U;
26773 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
26774 FFS_AssocRequest, IES_AssocRequest);
26775
26776 return status;
26777
26778} /* End dot11f_unpack_assoc_request. */
26779
26780uint32_t dot11f_pack_assoc_response(tpAniSirGlobal pCtx,
26781 tDot11fAssocResponse *pFrm,
26782 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
26783{
26784 uint32_t i = 0;
26785 uint32_t status = 0;
26786 (void)i;
26787 *pnConsumed = 0U;
26788 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
26789 FFS_AssocResponse, IES_AssocResponse);
26790
26791 return status;
26792
26793} /* End dot11f_unpack_assoc_response. */
26794
26795uint32_t dot11f_pack_authentication(tpAniSirGlobal pCtx,
26796 tDot11fAuthentication *pFrm,
26797 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
26798{
26799 uint32_t i = 0;
26800 uint32_t status = 0;
26801 (void)i;
26802 *pnConsumed = 0U;
26803 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
26804 FFS_Authentication, IES_Authentication);
26805
26806 return status;
26807
26808} /* End dot11f_unpack_authentication. */
26809
26810uint32_t dot11f_pack_beacon(tpAniSirGlobal pCtx,
26811 tDot11fBeacon *pFrm,
26812 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
26813{
26814 uint32_t i = 0;
26815 uint32_t status = 0;
26816 (void)i;
26817 *pnConsumed = 0U;
26818 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
26819 FFS_Beacon, IES_Beacon);
26820
26821 return status;
26822
26823} /* End dot11f_unpack_beacon. */
26824
26825uint32_t dot11f_pack_beacon1(tpAniSirGlobal pCtx,
26826 tDot11fBeacon1 *pFrm,
26827 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
26828{
26829 uint32_t i = 0;
26830 uint32_t status = 0;
26831 (void)i;
26832 *pnConsumed = 0U;
26833 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
26834 FFS_Beacon1, IES_Beacon1);
26835
26836 return status;
26837
26838} /* End dot11f_unpack_beacon1. */
26839
26840uint32_t dot11f_pack_beacon2(tpAniSirGlobal pCtx,
26841 tDot11fBeacon2 *pFrm,
26842 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
26843{
26844 uint32_t i = 0;
26845 uint32_t status = 0;
26846 (void)i;
26847 *pnConsumed = 0U;
26848 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
26849 FFS_Beacon2, IES_Beacon2);
26850
26851 return status;
26852
26853} /* End dot11f_unpack_beacon2. */
26854
26855uint32_t dot11f_pack_beacon_i_es(tpAniSirGlobal pCtx,
26856 tDot11fBeaconIEs *pFrm,
26857 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
26858{
26859 uint32_t i = 0;
26860 uint32_t status = 0;
26861 (void)i;
26862 *pnConsumed = 0U;
26863 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
26864 FFS_BeaconIEs, IES_BeaconIEs);
26865
26866 return status;
26867
26868} /* End dot11f_unpack_beacon_i_es. */
26869
26870uint32_t dot11f_pack_channel_switch(tpAniSirGlobal pCtx,
26871 tDot11fChannelSwitch *pFrm,
26872 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
26873{
26874 uint32_t i = 0;
26875 uint32_t status = 0;
26876 (void)i;
26877 *pnConsumed = 0U;
26878 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
26879 FFS_ChannelSwitch, IES_ChannelSwitch);
26880
26881 return status;
26882
26883} /* End dot11f_unpack_channel_switch. */
26884
26885uint32_t dot11f_pack_de_auth(tpAniSirGlobal pCtx,
26886 tDot11fDeAuth *pFrm,
26887 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
26888{
26889 uint32_t i = 0;
26890 uint32_t status = 0;
26891 (void)i;
26892 *pnConsumed = 0U;
26893 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
26894 FFS_DeAuth, IES_DeAuth);
26895
26896 return status;
26897
26898} /* End dot11f_unpack_de_auth. */
26899
26900uint32_t dot11f_pack_del_ts(tpAniSirGlobal pCtx,
26901 tDot11fDelTS *pFrm,
26902 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
26903{
26904 uint32_t i = 0;
26905 uint32_t status = 0;
26906 (void)i;
26907 *pnConsumed = 0U;
26908 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
26909 FFS_DelTS, IES_DelTS);
26910
26911 return status;
26912
26913} /* End dot11f_unpack_del_ts. */
26914
26915uint32_t dot11f_pack_disassociation(tpAniSirGlobal pCtx,
26916 tDot11fDisassociation *pFrm,
26917 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
26918{
26919 uint32_t i = 0;
26920 uint32_t status = 0;
26921 (void)i;
26922 *pnConsumed = 0U;
26923 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
26924 FFS_Disassociation, IES_Disassociation);
26925
26926 return status;
26927
26928} /* End dot11f_unpack_disassociation. */
26929
26930uint32_t dot11f_pack_link_measurement_report(tpAniSirGlobal pCtx,
26931 tDot11fLinkMeasurementReport *pFrm,
26932 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
26933{
26934 uint32_t i = 0;
26935 uint32_t status = 0;
26936 (void)i;
26937 *pnConsumed = 0U;
26938 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
26939 FFS_LinkMeasurementReport, IES_LinkMeasurementReport);
26940
26941 return status;
26942
26943} /* End dot11f_unpack_link_measurement_report. */
26944
26945uint32_t dot11f_pack_link_measurement_request(tpAniSirGlobal pCtx,
26946 tDot11fLinkMeasurementRequest *pFrm,
26947 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
26948{
26949 uint32_t i = 0;
26950 uint32_t status = 0;
26951 (void)i;
26952 *pnConsumed = 0U;
26953 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
26954 FFS_LinkMeasurementRequest, IES_LinkMeasurementRequest);
26955
26956 return status;
26957
26958} /* End dot11f_unpack_link_measurement_request. */
26959
26960uint32_t dot11f_pack_measurement_report(tpAniSirGlobal pCtx,
26961 tDot11fMeasurementReport *pFrm,
26962 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
26963{
26964 uint32_t i = 0;
26965 uint32_t status = 0;
26966 (void)i;
26967 *pnConsumed = 0U;
26968 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
26969 FFS_MeasurementReport, IES_MeasurementReport);
26970
26971 return status;
26972
26973} /* End dot11f_unpack_measurement_report. */
26974
26975uint32_t dot11f_pack_measurement_request(tpAniSirGlobal pCtx,
26976 tDot11fMeasurementRequest *pFrm,
26977 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
26978{
26979 uint32_t i = 0;
26980 uint32_t status = 0;
26981 (void)i;
26982 *pnConsumed = 0U;
26983 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
26984 FFS_MeasurementRequest, IES_MeasurementRequest);
26985
26986 return status;
26987
26988} /* End dot11f_unpack_measurement_request. */
26989
26990uint32_t dot11f_pack_neighbor_report_request(tpAniSirGlobal pCtx,
26991 tDot11fNeighborReportRequest *pFrm,
26992 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
26993{
26994 uint32_t i = 0;
26995 uint32_t status = 0;
26996 (void)i;
26997 *pnConsumed = 0U;
26998 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
26999 FFS_NeighborReportRequest, IES_NeighborReportRequest);
27000
27001 return status;
27002
27003} /* End dot11f_unpack_neighbor_report_request. */
27004
27005uint32_t dot11f_pack_neighbor_report_response(tpAniSirGlobal pCtx,
27006 tDot11fNeighborReportResponse *pFrm,
27007 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27008{
27009 uint32_t i = 0;
27010 uint32_t status = 0;
27011 (void)i;
27012 *pnConsumed = 0U;
27013 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27014 FFS_NeighborReportResponse, IES_NeighborReportResponse);
27015
27016 return status;
27017
27018} /* End dot11f_unpack_neighbor_report_response. */
27019
27020uint32_t dot11f_pack_operating_mode(tpAniSirGlobal pCtx,
27021 tDot11fOperatingMode *pFrm,
27022 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27023{
27024 uint32_t i = 0;
27025 uint32_t status = 0;
27026 (void)i;
27027 *pnConsumed = 0U;
27028 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27029 FFS_OperatingMode, IES_OperatingMode);
27030
27031 return status;
27032
27033} /* End dot11f_unpack_operating_mode. */
27034
27035uint32_t dot11f_pack_probe_request(tpAniSirGlobal pCtx,
27036 tDot11fProbeRequest *pFrm,
27037 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27038{
27039 uint32_t i = 0;
27040 uint32_t status = 0;
27041 (void)i;
27042 *pnConsumed = 0U;
27043 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27044 FFS_ProbeRequest, IES_ProbeRequest);
27045
27046 return status;
27047
27048} /* End dot11f_unpack_probe_request. */
27049
27050uint32_t dot11f_pack_probe_response(tpAniSirGlobal pCtx,
27051 tDot11fProbeResponse *pFrm,
27052 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27053{
27054 uint32_t i = 0;
27055 uint32_t status = 0;
27056 (void)i;
27057 *pnConsumed = 0U;
27058 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27059 FFS_ProbeResponse, IES_ProbeResponse);
27060
27061 return status;
27062
27063} /* End dot11f_unpack_probe_response. */
27064
27065uint32_t dot11f_pack_qos_map_configure(tpAniSirGlobal pCtx,
27066 tDot11fQosMapConfigure *pFrm,
27067 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27068{
27069 uint32_t i = 0;
27070 uint32_t status = 0;
27071 (void)i;
27072 *pnConsumed = 0U;
27073 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27074 FFS_QosMapConfigure, IES_QosMapConfigure);
27075
27076 return status;
27077
27078} /* End dot11f_unpack_qos_map_configure. */
27079
27080uint32_t dot11f_pack_radio_measurement_report(tpAniSirGlobal pCtx,
27081 tDot11fRadioMeasurementReport *pFrm,
27082 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27083{
27084 uint32_t i = 0;
27085 uint32_t status = 0;
27086 (void)i;
27087 *pnConsumed = 0U;
27088 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27089 FFS_RadioMeasurementReport, IES_RadioMeasurementReport);
27090
27091 return status;
27092
27093} /* End dot11f_unpack_radio_measurement_report. */
27094
27095uint32_t dot11f_pack_radio_measurement_request(tpAniSirGlobal pCtx,
27096 tDot11fRadioMeasurementRequest *pFrm,
27097 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27098{
27099 uint32_t i = 0;
27100 uint32_t status = 0;
27101 (void)i;
27102 *pnConsumed = 0U;
27103 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27104 FFS_RadioMeasurementRequest, IES_RadioMeasurementRequest);
27105
27106 return status;
27107
27108} /* End dot11f_unpack_radio_measurement_request. */
27109
27110uint32_t dot11f_pack_re_assoc_request(tpAniSirGlobal pCtx,
27111 tDot11fReAssocRequest *pFrm,
27112 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27113{
27114 uint32_t i = 0;
27115 uint32_t status = 0;
27116 (void)i;
27117 *pnConsumed = 0U;
27118 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27119 FFS_ReAssocRequest, IES_ReAssocRequest);
27120
27121 return status;
27122
27123} /* End dot11f_unpack_re_assoc_request. */
27124
27125uint32_t dot11f_pack_re_assoc_response(tpAniSirGlobal pCtx,
27126 tDot11fReAssocResponse *pFrm,
27127 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27128{
27129 uint32_t i = 0;
27130 uint32_t status = 0;
27131 (void)i;
27132 *pnConsumed = 0U;
27133 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27134 FFS_ReAssocResponse, IES_ReAssocResponse);
27135
27136 return status;
27137
27138} /* End dot11f_unpack_re_assoc_response. */
27139
27140uint32_t dot11f_pack_sm_power_save(tpAniSirGlobal pCtx,
27141 tDot11fSMPowerSave *pFrm,
27142 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27143{
27144 uint32_t i = 0;
27145 uint32_t status = 0;
27146 (void)i;
27147 *pnConsumed = 0U;
27148 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27149 FFS_SMPowerSave, IES_SMPowerSave);
27150
27151 return status;
27152
27153} /* End dot11f_unpack_sm_power_save. */
27154
27155uint32_t dot11f_pack_sa_query_req(tpAniSirGlobal pCtx,
27156 tDot11fSaQueryReq *pFrm,
27157 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27158{
27159 uint32_t i = 0;
27160 uint32_t status = 0;
27161 (void)i;
27162 *pnConsumed = 0U;
27163 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27164 FFS_SaQueryReq, IES_SaQueryReq);
27165
27166 return status;
27167
27168} /* End dot11f_unpack_sa_query_req. */
27169
27170uint32_t dot11f_pack_sa_query_rsp(tpAniSirGlobal pCtx,
27171 tDot11fSaQueryRsp *pFrm,
27172 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27173{
27174 uint32_t i = 0;
27175 uint32_t status = 0;
27176 (void)i;
27177 *pnConsumed = 0U;
27178 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27179 FFS_SaQueryRsp, IES_SaQueryRsp);
27180
27181 return status;
27182
27183} /* End dot11f_unpack_sa_query_rsp. */
27184
27185uint32_t dot11f_pack_tdls_dis_req(tpAniSirGlobal pCtx,
27186 tDot11fTDLSDisReq *pFrm,
27187 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27188{
27189 uint32_t i = 0;
27190 uint32_t status = 0;
27191 (void)i;
27192 *pnConsumed = 0U;
27193 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27194 FFS_TDLSDisReq, IES_TDLSDisReq);
27195
27196 return status;
27197
27198} /* End dot11f_unpack_tdls_dis_req. */
27199
27200uint32_t dot11f_pack_tdls_dis_rsp(tpAniSirGlobal pCtx,
27201 tDot11fTDLSDisRsp *pFrm,
27202 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27203{
27204 uint32_t i = 0;
27205 uint32_t status = 0;
27206 (void)i;
27207 *pnConsumed = 0U;
27208 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27209 FFS_TDLSDisRsp, IES_TDLSDisRsp);
27210
27211 return status;
27212
27213} /* End dot11f_unpack_tdls_dis_rsp. */
27214
27215uint32_t dot11f_pack_tdls_peer_traffic_ind(tpAniSirGlobal pCtx,
27216 tDot11fTDLSPeerTrafficInd *pFrm,
27217 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27218{
27219 uint32_t i = 0;
27220 uint32_t status = 0;
27221 (void)i;
27222 *pnConsumed = 0U;
27223 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27224 FFS_TDLSPeerTrafficInd, IES_TDLSPeerTrafficInd);
27225
27226 return status;
27227
27228} /* End dot11f_unpack_tdls_peer_traffic_ind. */
27229
27230uint32_t dot11f_pack_tdls_peer_traffic_rsp(tpAniSirGlobal pCtx,
27231 tDot11fTDLSPeerTrafficRsp *pFrm,
27232 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27233{
27234 uint32_t i = 0;
27235 uint32_t status = 0;
27236 (void)i;
27237 *pnConsumed = 0U;
27238 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27239 FFS_TDLSPeerTrafficRsp, IES_TDLSPeerTrafficRsp);
27240
27241 return status;
27242
27243} /* End dot11f_unpack_tdls_peer_traffic_rsp. */
27244
27245uint32_t dot11f_pack_tdls_setup_cnf(tpAniSirGlobal pCtx,
27246 tDot11fTDLSSetupCnf *pFrm,
27247 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27248{
27249 uint32_t i = 0;
27250 uint32_t status = 0;
27251 (void)i;
27252 *pnConsumed = 0U;
27253 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27254 FFS_TDLSSetupCnf, IES_TDLSSetupCnf);
27255
27256 return status;
27257
27258} /* End dot11f_unpack_tdls_setup_cnf. */
27259
27260uint32_t dot11f_pack_tdls_setup_req(tpAniSirGlobal pCtx,
27261 tDot11fTDLSSetupReq *pFrm,
27262 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27263{
27264 uint32_t i = 0;
27265 uint32_t status = 0;
27266 (void)i;
27267 *pnConsumed = 0U;
27268 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27269 FFS_TDLSSetupReq, IES_TDLSSetupReq);
27270
27271 return status;
27272
27273} /* End dot11f_unpack_tdls_setup_req. */
27274
27275uint32_t dot11f_pack_tdls_setup_rsp(tpAniSirGlobal pCtx,
27276 tDot11fTDLSSetupRsp *pFrm,
27277 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27278{
27279 uint32_t i = 0;
27280 uint32_t status = 0;
27281 (void)i;
27282 *pnConsumed = 0U;
27283 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27284 FFS_TDLSSetupRsp, IES_TDLSSetupRsp);
27285
27286 return status;
27287
27288} /* End dot11f_unpack_tdls_setup_rsp. */
27289
27290uint32_t dot11f_pack_tdls_teardown(tpAniSirGlobal pCtx,
27291 tDot11fTDLSTeardown *pFrm,
27292 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27293{
27294 uint32_t i = 0;
27295 uint32_t status = 0;
27296 (void)i;
27297 *pnConsumed = 0U;
27298 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27299 FFS_TDLSTeardown, IES_TDLSTeardown);
27300
27301 return status;
27302
27303} /* End dot11f_unpack_tdls_teardown. */
27304
27305uint32_t dot11f_pack_tpc_report(tpAniSirGlobal pCtx,
27306 tDot11fTPCReport *pFrm,
27307 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27308{
27309 uint32_t i = 0;
27310 uint32_t status = 0;
27311 (void)i;
27312 *pnConsumed = 0U;
27313 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27314 FFS_TPCReport, IES_TPCReport);
27315
27316 return status;
27317
27318} /* End dot11f_unpack_tpc_report. */
27319
27320uint32_t dot11f_pack_tpc_request(tpAniSirGlobal pCtx,
27321 tDot11fTPCRequest *pFrm,
27322 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27323{
27324 uint32_t i = 0;
27325 uint32_t status = 0;
27326 (void)i;
27327 *pnConsumed = 0U;
27328 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27329 FFS_TPCRequest, IES_TPCRequest);
27330
27331 return status;
27332
27333} /* End dot11f_unpack_tpc_request. */
27334
27335uint32_t dot11f_pack_timing_advertisement_frame(tpAniSirGlobal pCtx,
27336 tDot11fTimingAdvertisementFrame *pFrm,
27337 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27338{
27339 uint32_t i = 0;
27340 uint32_t status = 0;
27341 (void)i;
27342 *pnConsumed = 0U;
27343 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27344 FFS_TimingAdvertisementFrame, IES_TimingAdvertisementFrame);
27345
27346 return status;
27347
27348} /* End dot11f_unpack_timing_advertisement_frame. */
27349
27350uint32_t dot11f_pack_vht_gid_management_action_frame(tpAniSirGlobal pCtx,
27351 tDot11fVHTGidManagementActionFrame *pFrm,
27352 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27353{
27354 uint32_t i = 0;
27355 uint32_t status = 0;
27356 (void)i;
27357 *pnConsumed = 0U;
27358 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27359 FFS_VHTGidManagementActionFrame, IES_VHTGidManagementActionFrame);
27360
27361 return status;
27362
27363} /* End dot11f_unpack_vht_gid_management_action_frame. */
27364
27365uint32_t dot11f_pack_wmm_add_ts_request(tpAniSirGlobal pCtx,
27366 tDot11fWMMAddTSRequest *pFrm,
27367 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27368{
27369 uint32_t i = 0;
27370 uint32_t status = 0;
27371 (void)i;
27372 *pnConsumed = 0U;
27373 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27374 FFS_WMMAddTSRequest, IES_WMMAddTSRequest);
27375
27376 return status;
27377
27378} /* End dot11f_unpack_wmm_add_ts_request. */
27379
27380uint32_t dot11f_pack_wmm_add_ts_response(tpAniSirGlobal pCtx,
27381 tDot11fWMMAddTSResponse *pFrm,
27382 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27383{
27384 uint32_t i = 0;
27385 uint32_t status = 0;
27386 (void)i;
27387 *pnConsumed = 0U;
27388 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27389 FFS_WMMAddTSResponse, IES_WMMAddTSResponse);
27390
27391 return status;
27392
27393} /* End dot11f_unpack_wmm_add_ts_response. */
27394
27395uint32_t dot11f_pack_wmm_del_ts(tpAniSirGlobal pCtx,
27396 tDot11fWMMDelTS *pFrm,
27397 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27398{
27399 uint32_t i = 0;
27400 uint32_t status = 0;
27401 (void)i;
27402 *pnConsumed = 0U;
27403 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27404 FFS_WMMDelTS, IES_WMMDelTS);
27405
27406 return status;
27407
27408} /* End dot11f_unpack_wmm_del_ts. */
27409
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -080027410uint32_t dot11f_pack_addba_req(tpAniSirGlobal pCtx,
27411 tDot11faddba_req *pFrm,
27412 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27413{
27414 uint32_t i = 0;
27415 uint32_t status = 0;
27416 (void)i;
27417 *pnConsumed = 0U;
27418 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27419 FFS_addba_req, IES_addba_req);
27420
27421 return status;
27422
27423} /* End dot11f_unpack_addba_req. */
27424
27425uint32_t dot11f_pack_addba_rsp(tpAniSirGlobal pCtx,
27426 tDot11faddba_rsp *pFrm,
27427 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27428{
27429 uint32_t i = 0;
27430 uint32_t status = 0;
27431 (void)i;
27432 *pnConsumed = 0U;
27433 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27434 FFS_addba_rsp, IES_addba_rsp);
27435
27436 return status;
27437
27438} /* End dot11f_unpack_addba_rsp. */
27439
27440uint32_t dot11f_pack_delba_req(tpAniSirGlobal pCtx,
27441 tDot11fdelba_req *pFrm,
27442 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27443{
27444 uint32_t i = 0;
27445 uint32_t status = 0;
27446 (void)i;
27447 *pnConsumed = 0U;
27448 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27449 FFS_delba_req, IES_delba_req);
27450
27451 return status;
27452
27453} /* End dot11f_unpack_delba_req. */
27454
Abhishek Singh518323d2015-10-19 17:42:01 +053027455uint32_t dot11f_pack_ext_channel_switch_action_frame(tpAniSirGlobal pCtx,
27456 tDot11fext_channel_switch_action_frame *pFrm,
27457 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27458{
27459 uint32_t i = 0;
27460 uint32_t status = 0;
27461 (void)i;
27462 *pnConsumed = 0U;
27463 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27464 FFS_ext_channel_switch_action_frame, IES_ext_channel_switch_action_frame);
27465
27466 return status;
27467
27468} /* End dot11f_unpack_ext_channel_switch_action_frame. */
27469
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080027470uint32_t dot11f_pack_ht2040_bss_coexistence_mgmt_action_frame(tpAniSirGlobal pCtx,
27471 tDot11fht2040_bss_coexistence_mgmt_action_frame *pFrm,
27472 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27473{
27474 uint32_t i = 0;
27475 uint32_t status = 0;
27476 (void)i;
27477 *pnConsumed = 0U;
27478 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27479 FFS_ht2040_bss_coexistence_mgmt_action_frame, IES_ht2040_bss_coexistence_mgmt_action_frame);
27480
27481 return status;
27482
27483} /* End dot11f_unpack_ht2040_bss_coexistence_mgmt_action_frame. */
27484
Abhishek Singh5695e2a2016-10-28 10:39:12 +053027485uint32_t dot11f_pack_p2p_oper_chan_change_confirm(tpAniSirGlobal pCtx,
27486 tDot11fp2p_oper_chan_change_confirm *pFrm,
27487 uint8_t *pBuf, uint32_t nBuf, uint32_t *pnConsumed)
27488{
27489 uint32_t i = 0;
27490 uint32_t status = 0;
27491 (void)i;
27492 *pnConsumed = 0U;
27493 status = pack_core(pCtx, (uint8_t *)pFrm, pBuf, nBuf, pnConsumed,
27494 FFS_p2p_oper_chan_change_confirm, IES_p2p_oper_chan_change_confirm);
27495
27496 return status;
27497
27498} /* End dot11f_unpack_p2p_oper_chan_change_confirm. */
27499
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080027500static uint32_t pack_core(tpAniSirGlobal pCtx,
27501 uint8_t *pSrc,
27502 uint8_t *pBuf,
27503 uint32_t nBuf,
27504 uint32_t *pnConsumed,
27505 const tFFDefn FFs[],
27506 const tIEDefn IEs[])
27507{
27508 const tFFDefn *pFf;
27509 const tIEDefn *pIe;
27510 tFRAMES_BOOL *pfFound;
27511 uint8_t *pBufRemaining;
27512 uint16_t i;
27513 uint32_t nBufRemaining, status, len;
27514 uint32_t countOffset = 0;
27515
27516 (void)pCtx; /* Shutup the compiler if we have no FFs nor IEs... */
27517 i = 0;
27518
27519 DOT11F_PARAMETER_CHECK2(pSrc, pBuf, nBuf, pnConsumed);
27520
27521 status = DOT11F_PARSE_SUCCESS;
27522 pBufRemaining = pBuf;
27523 nBufRemaining = nBuf;
27524
27525 pFf = &(FFs[0]);
27526 while (pFf->size) {
27527 if (pFf->size > nBufRemaining) {
27528 FRAMES_LOG3(pCtx, FRLOGE, FRFL("The Fixed Field %s req"
27529 "uires %d bytes, but there are only %d remaining.\n"),
27530 pFf->name, pFf->size, nBufRemaining);
27531 return DOT11F_BUFFER_OVERFLOW;
27532 }
27533
27534 switch (pFf->sig) {
27535 case SigFfAID:
27536 dot11f_pack_ff_aid(
27537 pCtx, (tDot11fFfAID *)
27538 (pSrc + pFf->offset), pBufRemaining);
27539 break;
27540 case SigFfAction:
27541 dot11f_pack_ff_action(
27542 pCtx, (tDot11fFfAction *)
27543 (pSrc + pFf->offset), pBufRemaining);
27544 break;
27545 case SigFfAuthAlgo:
27546 dot11f_pack_ff_auth_algo(
27547 pCtx, (tDot11fFfAuthAlgo *)
27548 (pSrc + pFf->offset), pBufRemaining);
27549 break;
27550 case SigFfAuthSeqNo:
27551 dot11f_pack_ff_auth_seq_no(
27552 pCtx, (tDot11fFfAuthSeqNo *)
27553 (pSrc + pFf->offset), pBufRemaining);
27554 break;
27555 case SigFfBeaconInterval:
27556 dot11f_pack_ff_beacon_interval(
27557 pCtx, (tDot11fFfBeaconInterval *)
27558 (pSrc + pFf->offset), pBufRemaining);
27559 break;
27560 case SigFfCapabilities:
27561 dot11f_pack_ff_capabilities(
27562 pCtx, (tDot11fFfCapabilities *)
27563 (pSrc + pFf->offset), pBufRemaining);
27564 break;
27565 case SigFfCategory:
27566 dot11f_pack_ff_category(
27567 pCtx, (tDot11fFfCategory *)
27568 (pSrc + pFf->offset), pBufRemaining);
27569 break;
27570 case SigFfCurrentAPAddress:
27571 dot11f_pack_ff_current_ap_address(
27572 pCtx, (tDot11fFfCurrentAPAddress *)
27573 (pSrc + pFf->offset), pBufRemaining);
27574 break;
27575 case SigFfDialogToken:
27576 dot11f_pack_ff_dialog_token(
27577 pCtx, (tDot11fFfDialogToken *)
27578 (pSrc + pFf->offset), pBufRemaining);
27579 break;
27580 case SigFfLinkMargin:
27581 dot11f_pack_ff_link_margin(
27582 pCtx, (tDot11fFfLinkMargin *)
27583 (pSrc + pFf->offset), pBufRemaining);
27584 break;
27585 case SigFfListenInterval:
27586 dot11f_pack_ff_listen_interval(
27587 pCtx, (tDot11fFfListenInterval *)
27588 (pSrc + pFf->offset), pBufRemaining);
27589 break;
27590 case SigFfMaxTxPower:
27591 dot11f_pack_ff_max_tx_power(
27592 pCtx, (tDot11fFfMaxTxPower *)
27593 (pSrc + pFf->offset), pBufRemaining);
27594 break;
27595 case SigFfNumOfRepetitions:
27596 dot11f_pack_ff_num_of_repetitions(
27597 pCtx, (tDot11fFfNumOfRepetitions *)
27598 (pSrc + pFf->offset), pBufRemaining);
27599 break;
27600 case SigFfOperatingMode:
27601 dot11f_pack_ff_operating_mode(
27602 pCtx, (tDot11fFfOperatingMode *)
27603 (pSrc + pFf->offset), pBufRemaining);
27604 break;
27605 case SigFfRCPI:
27606 dot11f_pack_ff_rcpi(
27607 pCtx, (tDot11fFfRCPI *)
27608 (pSrc + pFf->offset), pBufRemaining);
27609 break;
27610 case SigFfRSNI:
27611 dot11f_pack_ff_rsni(
27612 pCtx, (tDot11fFfRSNI *)
27613 (pSrc + pFf->offset), pBufRemaining);
27614 break;
27615 case SigFfReason:
27616 dot11f_pack_ff_reason(
27617 pCtx, (tDot11fFfReason *)
27618 (pSrc + pFf->offset), pBufRemaining);
27619 break;
27620 case SigFfRxAntennaId:
27621 dot11f_pack_ff_rx_antenna_id(
27622 pCtx, (tDot11fFfRxAntennaId *)
27623 (pSrc + pFf->offset), pBufRemaining);
27624 break;
27625 case SigFfSMPowerModeSet:
27626 dot11f_pack_ff_sm_power_mode_set(
27627 pCtx, (tDot11fFfSMPowerModeSet *)
27628 (pSrc + pFf->offset), pBufRemaining);
27629 break;
27630 case SigFfStatus:
27631 dot11f_pack_ff_status(
27632 pCtx, (tDot11fFfStatus *)
27633 (pSrc + pFf->offset), pBufRemaining);
27634 break;
27635 case SigFfStatusCode:
27636 dot11f_pack_ff_status_code(
27637 pCtx, (tDot11fFfStatusCode *)
27638 (pSrc + pFf->offset), pBufRemaining);
27639 break;
27640 case SigFfTPCEleID:
27641 dot11f_pack_ff_tpc_ele_id(
27642 pCtx, (tDot11fFfTPCEleID *)
27643 (pSrc + pFf->offset), pBufRemaining);
27644 break;
27645 case SigFfTPCEleLen:
27646 dot11f_pack_ff_tpc_ele_len(
27647 pCtx, (tDot11fFfTPCEleLen *)
27648 (pSrc + pFf->offset), pBufRemaining);
27649 break;
27650 case SigFfTSInfo:
27651 dot11f_pack_ff_ts_info(
27652 pCtx, (tDot11fFfTSInfo *)
27653 (pSrc + pFf->offset), pBufRemaining);
27654 break;
27655 case SigFfTimeStamp:
27656 dot11f_pack_ff_time_stamp(
27657 pCtx, (tDot11fFfTimeStamp *)
27658 (pSrc + pFf->offset), pBufRemaining);
27659 break;
27660 case SigFfTransactionId:
27661 dot11f_pack_ff_transaction_id(
27662 pCtx, (tDot11fFfTransactionId *)
27663 (pSrc + pFf->offset), pBufRemaining);
27664 break;
27665 case SigFfTxAntennaId:
27666 dot11f_pack_ff_tx_antenna_id(
27667 pCtx, (tDot11fFfTxAntennaId *)
27668 (pSrc + pFf->offset), pBufRemaining);
27669 break;
27670 case SigFfTxPower:
27671 dot11f_pack_ff_tx_power(
27672 pCtx, (tDot11fFfTxPower *)
27673 (pSrc + pFf->offset), pBufRemaining);
27674 break;
27675 case SigFfVhtMembershipStatusArray:
27676 dot11f_pack_ff_vht_membership_status_array(
27677 pCtx, (tDot11fFfVhtMembershipStatusArray *)
27678 (pSrc + pFf->offset), pBufRemaining);
27679 break;
27680 case SigFfVhtUserPositionArray:
27681 dot11f_pack_ff_vht_user_position_array(
27682 pCtx, (tDot11fFfVhtUserPositionArray *)
27683 (pSrc + pFf->offset), pBufRemaining);
27684 break;
Krishna Kumaar Natarajan48a6b4c2017-01-06 16:30:55 -080027685 case SigFfaddba_param_set:
27686 dot11f_pack_ff_addba_param_set(
27687 pCtx, (tDot11fFfaddba_param_set *)
27688 (pSrc + pFf->offset), pBufRemaining);
27689 break;
27690 case SigFfba_start_seq_ctrl:
27691 dot11f_pack_ff_ba_start_seq_ctrl(
27692 pCtx, (tDot11fFfba_start_seq_ctrl *)
27693 (pSrc + pFf->offset), pBufRemaining);
27694 break;
27695 case SigFfba_timeout:
27696 dot11f_pack_ff_ba_timeout(
27697 pCtx, (tDot11fFfba_timeout *)
27698 (pSrc + pFf->offset), pBufRemaining);
27699 break;
27700 case SigFfdelba_param_set:
27701 dot11f_pack_ff_delba_param_set(
27702 pCtx, (tDot11fFfdelba_param_set *)
27703 (pSrc + pFf->offset), pBufRemaining);
27704 break;
Abhishek Singh518323d2015-10-19 17:42:01 +053027705 case SigFfext_chan_switch_ann_action:
27706 dot11f_pack_ff_ext_chan_switch_ann_action(
27707 pCtx, (tDot11fFfext_chan_switch_ann_action *)
27708 (pSrc + pFf->offset), pBufRemaining);
27709 break;
Abhishek Singh5695e2a2016-10-28 10:39:12 +053027710 case SigFfp2p_action_oui:
27711 dot11f_pack_ff_p2p_action_oui(
27712 pCtx, (tDot11fFfp2p_action_oui *)
27713 (pSrc + pFf->offset), pBufRemaining);
27714 break;
27715 case SigFfp2p_action_subtype:
27716 dot11f_pack_ff_p2p_action_subtype(
27717 pCtx, (tDot11fFfp2p_action_subtype *)
27718 (pSrc + pFf->offset), pBufRemaining);
27719 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080027720 default:
27721 FRAMES_LOG1(pCtx, FRLOGE, FRFL("INTERNAL ERROR-- I don"
27722 "'t know about the Fixed Field %d; this is most l"
27723 "ikely a bug in 'framesg'.\n"), pFf->sig);
27724 return DOT11F_INTERNAL_ERROR;
27725 }
27726
27727 pBufRemaining += pFf->size;
27728 nBufRemaining -= pFf->size;
27729 *pnConsumed += pFf->size;
27730 ++pFf;
27731
27732 }
27733
27734 pIe = &(IEs[0]);
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053027735 while (0xff != pIe->eid || pIe->extn_eid) {
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080027736 pfFound = (tFRAMES_BOOL *)(pSrc + pIe->offset +
27737 pIe->presenceOffset);
27738 if (*pfFound && pIe->minSize > nBufRemaining) {
27739 FRAMES_LOG3(pCtx, FRLOGE, FRFL("The IE %s takes at le"
27740 "ast %d bytes, but there are only %d left in the b"
27741 "uffer.\n"), pIe->name, pIe->minSize, nBufRemaining);
27742 return DOT11F_BUFFER_OVERFLOW;
27743 }
27744
27745
27746 countOffset = ((0 == pIe->arraybound) ? 1 : *(uint16_t *)(pSrc + pIe->countOffset));
27747 for (i = 0; i < countOffset; ++i) {
27748 len = 0U;
27749 switch (pIe->sig) {
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080027750 case SigIeGTK:
27751 status |=
27752 dot11f_pack_ie_gtk(
27753 pCtx, (tDot11fIEGTK *)
27754 (pSrc + pIe->offset +
27755 sizeof(tDot11fIEGTK) * i),
27756 pBufRemaining, nBufRemaining, &len);
27757 break;
27758 case SigIeIGTK:
27759 status |=
27760 dot11f_pack_ie_igtk(
27761 pCtx, (tDot11fIEIGTK *)
27762 (pSrc + pIe->offset +
27763 sizeof(tDot11fIEIGTK) * i),
27764 pBufRemaining, nBufRemaining, &len);
27765 break;
27766 case SigIeR0KH_ID:
27767 status |=
27768 dot11f_pack_ie_r0_kh_id(
27769 pCtx, (tDot11fIER0KH_ID *)
27770 (pSrc + pIe->offset +
27771 sizeof(tDot11fIER0KH_ID) * i),
27772 pBufRemaining, nBufRemaining, &len);
27773 break;
27774 case SigIeR1KH_ID:
27775 status |=
27776 dot11f_pack_ie_r1_kh_id(
27777 pCtx, (tDot11fIER1KH_ID *)
27778 (pSrc + pIe->offset +
27779 sizeof(tDot11fIER1KH_ID) * i),
27780 pBufRemaining, nBufRemaining, &len);
27781 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080027782 case SigIeAPChannelReport:
27783 status |=
27784 dot11f_pack_ie_ap_channel_report(
27785 pCtx, (tDot11fIEAPChannelReport *)
27786 (pSrc + pIe->offset +
27787 sizeof(tDot11fIEAPChannelReport) * i),
27788 pBufRemaining, nBufRemaining, &len);
27789 break;
27790 case SigIeBcnReportingDetail:
27791 status |=
27792 dot11f_pack_ie_bcn_reporting_detail(
27793 pCtx, (tDot11fIEBcnReportingDetail *)
27794 (pSrc + pIe->offset +
27795 sizeof(tDot11fIEBcnReportingDetail) * i),
27796 pBufRemaining, nBufRemaining, &len);
27797 break;
27798 case SigIeBeaconReportFrmBody:
27799 status |=
27800 dot11f_pack_ie_beacon_report_frm_body(
27801 pCtx, (tDot11fIEBeaconReportFrmBody *)
27802 (pSrc + pIe->offset +
27803 sizeof(tDot11fIEBeaconReportFrmBody) * i),
27804 pBufRemaining, nBufRemaining, &len);
27805 break;
27806 case SigIeBeaconReporting:
27807 status |=
27808 dot11f_pack_ie_beacon_reporting(
27809 pCtx, (tDot11fIEBeaconReporting *)
27810 (pSrc + pIe->offset +
27811 sizeof(tDot11fIEBeaconReporting) * i),
27812 pBufRemaining, nBufRemaining, &len);
27813 break;
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080027814 case SigIeCondensedCountryStr:
27815 status |=
27816 dot11f_pack_ie_condensed_country_str(
27817 pCtx, (tDot11fIECondensedCountryStr *)
27818 (pSrc + pIe->offset +
27819 sizeof(tDot11fIECondensedCountryStr) * i),
27820 pBufRemaining, nBufRemaining, &len);
27821 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080027822 case SigIeMeasurementPilot:
27823 status |=
27824 dot11f_pack_ie_measurement_pilot(
27825 pCtx, (tDot11fIEMeasurementPilot *)
27826 (pSrc + pIe->offset +
27827 sizeof(tDot11fIEMeasurementPilot) * i),
27828 pBufRemaining, nBufRemaining, &len);
27829 break;
27830 case SigIeMultiBssid:
27831 status |=
27832 dot11f_pack_ie_multi_bssid(
27833 pCtx, (tDot11fIEMultiBssid *)
27834 (pSrc + pIe->offset +
27835 sizeof(tDot11fIEMultiBssid) * i),
27836 pBufRemaining, nBufRemaining, &len);
27837 break;
27838 case SigIeRICData:
27839 status |=
27840 dot11f_pack_ie_ric_data(
27841 pCtx, (tDot11fIERICData *)
27842 (pSrc + pIe->offset +
27843 sizeof(tDot11fIERICData) * i),
27844 pBufRemaining, nBufRemaining, &len);
27845 break;
27846 case SigIeRICDescriptor:
27847 status |=
27848 dot11f_pack_ie_ric_descriptor(
27849 pCtx, (tDot11fIERICDescriptor *)
27850 (pSrc + pIe->offset +
27851 sizeof(tDot11fIERICDescriptor) * i),
27852 pBufRemaining, nBufRemaining, &len);
27853 break;
27854 case SigIeRRMEnabledCap:
27855 status |=
27856 dot11f_pack_ie_rrm_enabled_cap(
27857 pCtx, (tDot11fIERRMEnabledCap *)
27858 (pSrc + pIe->offset +
27859 sizeof(tDot11fIERRMEnabledCap) * i),
27860 pBufRemaining, nBufRemaining, &len);
27861 break;
27862 case SigIeRequestedInfo:
27863 status |=
27864 dot11f_pack_ie_requested_info(
27865 pCtx, (tDot11fIERequestedInfo *)
27866 (pSrc + pIe->offset +
27867 sizeof(tDot11fIERequestedInfo) * i),
27868 pBufRemaining, nBufRemaining, &len);
27869 break;
27870 case SigIeSSID:
27871 status |=
27872 dot11f_pack_ie_ssid(
27873 pCtx, (tDot11fIESSID *)
27874 (pSrc + pIe->offset +
27875 sizeof(tDot11fIESSID) * i),
27876 pBufRemaining, nBufRemaining, &len);
27877 break;
27878 case SigIeSchedule:
27879 status |=
27880 dot11f_pack_ie_schedule(
27881 pCtx, (tDot11fIESchedule *)
27882 (pSrc + pIe->offset +
27883 sizeof(tDot11fIESchedule) * i),
27884 pBufRemaining, nBufRemaining, &len);
27885 break;
27886 case SigIeTCLAS:
27887 status |=
27888 dot11f_pack_ie_tclas(
27889 pCtx, (tDot11fIETCLAS *)
27890 (pSrc + pIe->offset +
27891 sizeof(tDot11fIETCLAS) * i),
27892 pBufRemaining, nBufRemaining, &len);
27893 break;
27894 case SigIeTCLASSPROC:
27895 status |=
27896 dot11f_pack_ie_tclassproc(
27897 pCtx, (tDot11fIETCLASSPROC *)
27898 (pSrc + pIe->offset +
27899 sizeof(tDot11fIETCLASSPROC) * i),
27900 pBufRemaining, nBufRemaining, &len);
27901 break;
27902 case SigIeTSDelay:
27903 status |=
27904 dot11f_pack_ie_ts_delay(
27905 pCtx, (tDot11fIETSDelay *)
27906 (pSrc + pIe->offset +
27907 sizeof(tDot11fIETSDelay) * i),
27908 pBufRemaining, nBufRemaining, &len);
27909 break;
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080027910 case SigIeTSFInfo:
27911 status |=
27912 dot11f_pack_ie_tsf_info(
27913 pCtx, (tDot11fIETSFInfo *)
27914 (pSrc + pIe->offset +
27915 sizeof(tDot11fIETSFInfo) * i),
27916 pBufRemaining, nBufRemaining, &len);
27917 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080027918 case SigIeTSPEC:
27919 status |=
27920 dot11f_pack_ie_tspec(
27921 pCtx, (tDot11fIETSPEC *)
27922 (pSrc + pIe->offset +
27923 sizeof(tDot11fIETSPEC) * i),
27924 pBufRemaining, nBufRemaining, &len);
27925 break;
27926 case SigIeVHTCaps:
27927 status |=
27928 dot11f_pack_ie_vht_caps(
27929 pCtx, (tDot11fIEVHTCaps *)
27930 (pSrc + pIe->offset +
27931 sizeof(tDot11fIEVHTCaps) * i),
27932 pBufRemaining, nBufRemaining, &len);
27933 break;
27934 case SigIeVHTOperation:
27935 status |=
27936 dot11f_pack_ie_vht_operation(
27937 pCtx, (tDot11fIEVHTOperation *)
27938 (pSrc + pIe->offset +
27939 sizeof(tDot11fIEVHTOperation) * i),
27940 pBufRemaining, nBufRemaining, &len);
27941 break;
27942 case SigIeWMMSchedule:
27943 status |=
27944 dot11f_pack_ie_wmm_schedule(
27945 pCtx, (tDot11fIEWMMSchedule *)
27946 (pSrc + pIe->offset +
27947 sizeof(tDot11fIEWMMSchedule) * i),
27948 pBufRemaining, nBufRemaining, &len);
27949 break;
27950 case SigIeWMMTCLAS:
27951 status |=
27952 dot11f_pack_ie_wmmtclas(
27953 pCtx, (tDot11fIEWMMTCLAS *)
27954 (pSrc + pIe->offset +
27955 sizeof(tDot11fIEWMMTCLAS) * i),
27956 pBufRemaining, nBufRemaining, &len);
27957 break;
27958 case SigIeWMMTCLASPROC:
27959 status |=
27960 dot11f_pack_ie_wmmtclasproc(
27961 pCtx, (tDot11fIEWMMTCLASPROC *)
27962 (pSrc + pIe->offset +
27963 sizeof(tDot11fIEWMMTCLASPROC) * i),
27964 pBufRemaining, nBufRemaining, &len);
27965 break;
27966 case SigIeWMMTSDelay:
27967 status |=
27968 dot11f_pack_ie_wmmts_delay(
27969 pCtx, (tDot11fIEWMMTSDelay *)
27970 (pSrc + pIe->offset +
27971 sizeof(tDot11fIEWMMTSDelay) * i),
27972 pBufRemaining, nBufRemaining, &len);
27973 break;
27974 case SigIeWMMTSPEC:
27975 status |=
27976 dot11f_pack_ie_wmmtspec(
27977 pCtx, (tDot11fIEWMMTSPEC *)
27978 (pSrc + pIe->offset +
27979 sizeof(tDot11fIEWMMTSPEC) * i),
27980 pBufRemaining, nBufRemaining, &len);
27981 break;
27982 case SigIeWiderBWChanSwitchAnn:
27983 status |=
27984 dot11f_pack_ie_wider_bw_chan_switch_ann(
27985 pCtx, (tDot11fIEWiderBWChanSwitchAnn *)
27986 (pSrc + pIe->offset +
27987 sizeof(tDot11fIEWiderBWChanSwitchAnn) * i),
27988 pBufRemaining, nBufRemaining, &len);
27989 break;
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080027990 case SigIeazimuth_req:
27991 status |=
27992 dot11f_pack_ie_azimuth_req(
27993 pCtx, (tDot11fIEazimuth_req *)
27994 (pSrc + pIe->offset +
27995 sizeof(tDot11fIEazimuth_req) * i),
27996 pBufRemaining, nBufRemaining, &len);
27997 break;
Vignesh Viswanathan3b4bf982018-06-05 15:04:23 +053027998 case SigIebeacon_report_frm_body_fragment_id:
27999 status |=
28000 dot11f_pack_ie_beacon_report_frm_body_fragment_id(
28001 pCtx, (tDot11fIEbeacon_report_frm_body_fragment_id *)
28002 (pSrc + pIe->offset +
28003 sizeof(tDot11fIEbeacon_report_frm_body_fragment_id) * i),
28004 pBufRemaining, nBufRemaining, &len);
28005 break;
28006 case SigIelast_beacon_report_indication:
28007 status |=
28008 dot11f_pack_ie_last_beacon_report_indication(
28009 pCtx, (tDot11fIElast_beacon_report_indication *)
28010 (pSrc + pIe->offset +
28011 sizeof(tDot11fIElast_beacon_report_indication) * i),
28012 pBufRemaining, nBufRemaining, &len);
28013 break;
Krishna Kumaar Natarajan062d0542016-03-01 17:56:11 -080028014 case SigIemax_age:
28015 status |=
28016 dot11f_pack_ie_max_age(
28017 pCtx, (tDot11fIEmax_age *)
28018 (pSrc + pIe->offset +
28019 sizeof(tDot11fIEmax_age) * i),
28020 pBufRemaining, nBufRemaining, &len);
28021 break;
28022 case SigIeneighbor_rpt:
28023 status |=
28024 dot11f_pack_ie_neighbor_rpt(
28025 pCtx, (tDot11fIEneighbor_rpt *)
28026 (pSrc + pIe->offset +
28027 sizeof(tDot11fIEneighbor_rpt) * i),
28028 pBufRemaining, nBufRemaining, &len);
28029 break;
28030 case SigIereq_mac_addr:
28031 status |=
28032 dot11f_pack_ie_req_mac_addr(
28033 pCtx, (tDot11fIEreq_mac_addr *)
28034 (pSrc + pIe->offset +
28035 sizeof(tDot11fIEreq_mac_addr) * i),
28036 pBufRemaining, nBufRemaining, &len);
28037 break;
28038 case SigIetgt_mac_addr:
28039 status |=
28040 dot11f_pack_ie_tgt_mac_addr(
28041 pCtx, (tDot11fIEtgt_mac_addr *)
28042 (pSrc + pIe->offset +
28043 sizeof(tDot11fIEtgt_mac_addr) * i),
28044 pBufRemaining, nBufRemaining, &len);
28045 break;
Abhishek Singh37456d22016-08-29 16:05:11 +053028046 case SigIevht_transmit_power_env:
28047 status |=
28048 dot11f_pack_ie_vht_transmit_power_env(
28049 pCtx, (tDot11fIEvht_transmit_power_env *)
28050 (pSrc + pIe->offset +
28051 sizeof(tDot11fIEvht_transmit_power_env) * i),
28052 pBufRemaining, nBufRemaining, &len);
28053 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080028054 case SigIeAID:
28055 status |=
28056 dot11f_pack_ie_aid(
28057 pCtx, (tDot11fIEAID *)
28058 (pSrc + pIe->offset +
28059 sizeof(tDot11fIEAID) * i),
28060 pBufRemaining, nBufRemaining, &len);
28061 break;
28062 case SigIeCFParams:
28063 status |=
28064 dot11f_pack_ie_cf_params(
28065 pCtx, (tDot11fIECFParams *)
28066 (pSrc + pIe->offset +
28067 sizeof(tDot11fIECFParams) * i),
28068 pBufRemaining, nBufRemaining, &len);
28069 break;
28070 case SigIeChallengeText:
28071 status |=
28072 dot11f_pack_ie_challenge_text(
28073 pCtx, (tDot11fIEChallengeText *)
28074 (pSrc + pIe->offset +
28075 sizeof(tDot11fIEChallengeText) * i),
28076 pBufRemaining, nBufRemaining, &len);
28077 break;
28078 case SigIeChanSwitchAnn:
28079 status |=
28080 dot11f_pack_ie_chan_switch_ann(
28081 pCtx, (tDot11fIEChanSwitchAnn *)
28082 (pSrc + pIe->offset +
28083 sizeof(tDot11fIEChanSwitchAnn) * i),
28084 pBufRemaining, nBufRemaining, &len);
28085 break;
28086 case SigIeChannelSwitchWrapper:
28087 status |=
28088 dot11f_pack_ie_channel_switch_wrapper(
28089 pCtx, (tDot11fIEChannelSwitchWrapper *)
28090 (pSrc + pIe->offset +
28091 sizeof(tDot11fIEChannelSwitchWrapper) * i),
28092 pBufRemaining, nBufRemaining, &len);
28093 break;
28094 case SigIeCountry:
28095 status |=
28096 dot11f_pack_ie_country(
28097 pCtx, (tDot11fIECountry *)
28098 (pSrc + pIe->offset +
28099 sizeof(tDot11fIECountry) * i),
28100 pBufRemaining, nBufRemaining, &len);
28101 break;
28102 case SigIeDSParams:
28103 status |=
28104 dot11f_pack_ie_ds_params(
28105 pCtx, (tDot11fIEDSParams *)
28106 (pSrc + pIe->offset +
28107 sizeof(tDot11fIEDSParams) * i),
28108 pBufRemaining, nBufRemaining, &len);
28109 break;
28110 case SigIeEDCAParamSet:
28111 status |=
28112 dot11f_pack_ie_edca_param_set(
28113 pCtx, (tDot11fIEEDCAParamSet *)
28114 (pSrc + pIe->offset +
28115 sizeof(tDot11fIEEDCAParamSet) * i),
28116 pBufRemaining, nBufRemaining, &len);
28117 break;
28118 case SigIeERPInfo:
28119 status |=
28120 dot11f_pack_ie_erp_info(
28121 pCtx, (tDot11fIEERPInfo *)
28122 (pSrc + pIe->offset +
28123 sizeof(tDot11fIEERPInfo) * i),
28124 pBufRemaining, nBufRemaining, &len);
28125 break;
28126 case SigIeESECckmOpaque:
28127 status |=
28128 dot11f_pack_ie_ese_cckm_opaque(
28129 pCtx, (tDot11fIEESECckmOpaque *)
28130 (pSrc + pIe->offset +
28131 sizeof(tDot11fIEESECckmOpaque) * i),
28132 pBufRemaining, nBufRemaining, &len);
28133 break;
28134 case SigIeESERadMgmtCap:
28135 status |=
28136 dot11f_pack_ie_ese_rad_mgmt_cap(
28137 pCtx, (tDot11fIEESERadMgmtCap *)
28138 (pSrc + pIe->offset +
28139 sizeof(tDot11fIEESERadMgmtCap) * i),
28140 pBufRemaining, nBufRemaining, &len);
28141 break;
28142 case SigIeESETrafStrmMet:
28143 status |=
28144 dot11f_pack_ie_ese_traf_strm_met(
28145 pCtx, (tDot11fIEESETrafStrmMet *)
28146 (pSrc + pIe->offset +
28147 sizeof(tDot11fIEESETrafStrmMet) * i),
28148 pBufRemaining, nBufRemaining, &len);
28149 break;
28150 case SigIeESETrafStrmRateSet:
28151 status |=
28152 dot11f_pack_ie_ese_traf_strm_rate_set(
28153 pCtx, (tDot11fIEESETrafStrmRateSet *)
28154 (pSrc + pIe->offset +
28155 sizeof(tDot11fIEESETrafStrmRateSet) * i),
28156 pBufRemaining, nBufRemaining, &len);
28157 break;
28158 case SigIeESETxmitPower:
28159 status |=
28160 dot11f_pack_ie_ese_txmit_power(
28161 pCtx, (tDot11fIEESETxmitPower *)
28162 (pSrc + pIe->offset +
28163 sizeof(tDot11fIEESETxmitPower) * i),
28164 pBufRemaining, nBufRemaining, &len);
28165 break;
28166 case SigIeESEVersion:
28167 status |=
28168 dot11f_pack_ie_ese_version(
28169 pCtx, (tDot11fIEESEVersion *)
28170 (pSrc + pIe->offset +
28171 sizeof(tDot11fIEESEVersion) * i),
28172 pBufRemaining, nBufRemaining, &len);
28173 break;
28174 case SigIeExtCap:
28175 status |=
28176 dot11f_pack_ie_ext_cap(
28177 pCtx, (tDot11fIEExtCap *)
28178 (pSrc + pIe->offset +
28179 sizeof(tDot11fIEExtCap) * i),
28180 pBufRemaining, nBufRemaining, &len);
28181 break;
28182 case SigIeExtSuppRates:
28183 status |=
28184 dot11f_pack_ie_ext_supp_rates(
28185 pCtx, (tDot11fIEExtSuppRates *)
28186 (pSrc + pIe->offset +
28187 sizeof(tDot11fIEExtSuppRates) * i),
28188 pBufRemaining, nBufRemaining, &len);
28189 break;
28190 case SigIeFHParamSet:
28191 status |=
28192 dot11f_pack_ie_fh_param_set(
28193 pCtx, (tDot11fIEFHParamSet *)
28194 (pSrc + pIe->offset +
28195 sizeof(tDot11fIEFHParamSet) * i),
28196 pBufRemaining, nBufRemaining, &len);
28197 break;
28198 case SigIeFHParams:
28199 status |=
28200 dot11f_pack_ie_fh_params(
28201 pCtx, (tDot11fIEFHParams *)
28202 (pSrc + pIe->offset +
28203 sizeof(tDot11fIEFHParams) * i),
28204 pBufRemaining, nBufRemaining, &len);
28205 break;
28206 case SigIeFHPattTable:
28207 status |=
28208 dot11f_pack_ie_fh_patt_table(
28209 pCtx, (tDot11fIEFHPattTable *)
28210 (pSrc + pIe->offset +
28211 sizeof(tDot11fIEFHPattTable) * i),
28212 pBufRemaining, nBufRemaining, &len);
28213 break;
28214 case SigIeFTInfo:
28215 status |=
28216 dot11f_pack_ie_ft_info(
28217 pCtx, (tDot11fIEFTInfo *)
28218 (pSrc + pIe->offset +
28219 sizeof(tDot11fIEFTInfo) * i),
28220 pBufRemaining, nBufRemaining, &len);
28221 break;
28222 case SigIeHTCaps:
28223 status |=
28224 dot11f_pack_ie_ht_caps(
28225 pCtx, (tDot11fIEHTCaps *)
28226 (pSrc + pIe->offset +
28227 sizeof(tDot11fIEHTCaps) * i),
28228 pBufRemaining, nBufRemaining, &len);
28229 break;
28230 case SigIeHTInfo:
28231 status |=
28232 dot11f_pack_ie_ht_info(
28233 pCtx, (tDot11fIEHTInfo *)
28234 (pSrc + pIe->offset +
28235 sizeof(tDot11fIEHTInfo) * i),
28236 pBufRemaining, nBufRemaining, &len);
28237 break;
28238 case SigIeIBSSParams:
28239 status |=
28240 dot11f_pack_ie_ibss_params(
28241 pCtx, (tDot11fIEIBSSParams *)
28242 (pSrc + pIe->offset +
28243 sizeof(tDot11fIEIBSSParams) * i),
28244 pBufRemaining, nBufRemaining, &len);
28245 break;
28246 case SigIeLinkIdentifier:
28247 status |=
28248 dot11f_pack_ie_link_identifier(
28249 pCtx, (tDot11fIELinkIdentifier *)
28250 (pSrc + pIe->offset +
28251 sizeof(tDot11fIELinkIdentifier) * i),
28252 pBufRemaining, nBufRemaining, &len);
28253 break;
Selvaraj, Sridharba726cb2016-07-22 13:41:03 +053028254 case SigIeMBO_IE:
28255 status |=
28256 dot11f_pack_ie_MBO_IE(
28257 pCtx, (tDot11fIEMBO_IE *)
28258 (pSrc + pIe->offset +
28259 sizeof(tDot11fIEMBO_IE) * i),
28260 pBufRemaining, nBufRemaining, &len);
28261 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080028262 case SigIeMeasurementReport:
28263 status |=
28264 dot11f_pack_ie_measurement_report(
28265 pCtx, (tDot11fIEMeasurementReport *)
28266 (pSrc + pIe->offset +
28267 sizeof(tDot11fIEMeasurementReport) * i),
28268 pBufRemaining, nBufRemaining, &len);
28269 break;
28270 case SigIeMeasurementRequest:
28271 status |=
28272 dot11f_pack_ie_measurement_request(
28273 pCtx, (tDot11fIEMeasurementRequest *)
28274 (pSrc + pIe->offset +
28275 sizeof(tDot11fIEMeasurementRequest) * i),
28276 pBufRemaining, nBufRemaining, &len);
28277 break;
28278 case SigIeMobilityDomain:
28279 status |=
28280 dot11f_pack_ie_mobility_domain(
28281 pCtx, (tDot11fIEMobilityDomain *)
28282 (pSrc + pIe->offset +
28283 sizeof(tDot11fIEMobilityDomain) * i),
28284 pBufRemaining, nBufRemaining, &len);
28285 break;
28286 case SigIeNeighborReport:
28287 status |=
28288 dot11f_pack_ie_neighbor_report(
28289 pCtx, (tDot11fIENeighborReport *)
28290 (pSrc + pIe->offset +
28291 sizeof(tDot11fIENeighborReport) * i),
28292 pBufRemaining, nBufRemaining, &len);
28293 break;
28294 case SigIeOBSSScanParameters:
28295 status |=
28296 dot11f_pack_ie_obss_scan_parameters(
28297 pCtx, (tDot11fIEOBSSScanParameters *)
28298 (pSrc + pIe->offset +
28299 sizeof(tDot11fIEOBSSScanParameters) * i),
28300 pBufRemaining, nBufRemaining, &len);
28301 break;
28302 case SigIeOperatingMode:
28303 status |=
28304 dot11f_pack_ie_operating_mode(
28305 pCtx, (tDot11fIEOperatingMode *)
28306 (pSrc + pIe->offset +
28307 sizeof(tDot11fIEOperatingMode) * i),
28308 pBufRemaining, nBufRemaining, &len);
28309 break;
28310 case SigIeP2PAssocReq:
28311 status |=
28312 dot11f_pack_ie_p2_p_assoc_req(
28313 pCtx, (tDot11fIEP2PAssocReq *)
28314 (pSrc + pIe->offset +
28315 sizeof(tDot11fIEP2PAssocReq) * i),
28316 pBufRemaining, nBufRemaining, &len);
28317 break;
28318 case SigIeP2PAssocRes:
28319 status |=
28320 dot11f_pack_ie_p2_p_assoc_res(
28321 pCtx, (tDot11fIEP2PAssocRes *)
28322 (pSrc + pIe->offset +
28323 sizeof(tDot11fIEP2PAssocRes) * i),
28324 pBufRemaining, nBufRemaining, &len);
28325 break;
28326 case SigIeP2PBeacon:
28327 status |=
28328 dot11f_pack_ie_p2_p_beacon(
28329 pCtx, (tDot11fIEP2PBeacon *)
28330 (pSrc + pIe->offset +
28331 sizeof(tDot11fIEP2PBeacon) * i),
28332 pBufRemaining, nBufRemaining, &len);
28333 break;
28334 case SigIeP2PBeaconProbeRes:
28335 status |=
28336 dot11f_pack_ie_p2_p_beacon_probe_res(
28337 pCtx, (tDot11fIEP2PBeaconProbeRes *)
28338 (pSrc + pIe->offset +
28339 sizeof(tDot11fIEP2PBeaconProbeRes) * i),
28340 pBufRemaining, nBufRemaining, &len);
28341 break;
28342 case SigIeP2PDeAuth:
28343 status |=
28344 dot11f_pack_ie_p2_p_de_auth(
28345 pCtx, (tDot11fIEP2PDeAuth *)
28346 (pSrc + pIe->offset +
28347 sizeof(tDot11fIEP2PDeAuth) * i),
28348 pBufRemaining, nBufRemaining, &len);
28349 break;
28350 case SigIeP2PDisAssoc:
28351 status |=
28352 dot11f_pack_ie_p2_p_dis_assoc(
28353 pCtx, (tDot11fIEP2PDisAssoc *)
28354 (pSrc + pIe->offset +
28355 sizeof(tDot11fIEP2PDisAssoc) * i),
28356 pBufRemaining, nBufRemaining, &len);
28357 break;
28358 case SigIeP2PIEOpaque:
28359 status |=
28360 dot11f_pack_ie_p2_pie_opaque(
28361 pCtx, (tDot11fIEP2PIEOpaque *)
28362 (pSrc + pIe->offset +
28363 sizeof(tDot11fIEP2PIEOpaque) * i),
28364 pBufRemaining, nBufRemaining, &len);
28365 break;
28366 case SigIeP2PProbeReq:
28367 status |=
28368 dot11f_pack_ie_p2_p_probe_req(
28369 pCtx, (tDot11fIEP2PProbeReq *)
28370 (pSrc + pIe->offset +
28371 sizeof(tDot11fIEP2PProbeReq) * i),
28372 pBufRemaining, nBufRemaining, &len);
28373 break;
28374 case SigIeP2PProbeRes:
28375 status |=
28376 dot11f_pack_ie_p2_p_probe_res(
28377 pCtx, (tDot11fIEP2PProbeRes *)
28378 (pSrc + pIe->offset +
28379 sizeof(tDot11fIEP2PProbeRes) * i),
28380 pBufRemaining, nBufRemaining, &len);
28381 break;
28382 case SigIePTIControl:
28383 status |=
28384 dot11f_pack_ie_pti_control(
28385 pCtx, (tDot11fIEPTIControl *)
28386 (pSrc + pIe->offset +
28387 sizeof(tDot11fIEPTIControl) * i),
28388 pBufRemaining, nBufRemaining, &len);
28389 break;
28390 case SigIePUBufferStatus:
28391 status |=
28392 dot11f_pack_ie_pu_buffer_status(
28393 pCtx, (tDot11fIEPUBufferStatus *)
28394 (pSrc + pIe->offset +
28395 sizeof(tDot11fIEPUBufferStatus) * i),
28396 pBufRemaining, nBufRemaining, &len);
28397 break;
28398 case SigIePowerCaps:
28399 status |=
28400 dot11f_pack_ie_power_caps(
28401 pCtx, (tDot11fIEPowerCaps *)
28402 (pSrc + pIe->offset +
28403 sizeof(tDot11fIEPowerCaps) * i),
28404 pBufRemaining, nBufRemaining, &len);
28405 break;
28406 case SigIePowerConstraints:
28407 status |=
28408 dot11f_pack_ie_power_constraints(
28409 pCtx, (tDot11fIEPowerConstraints *)
28410 (pSrc + pIe->offset +
28411 sizeof(tDot11fIEPowerConstraints) * i),
28412 pBufRemaining, nBufRemaining, &len);
28413 break;
28414 case SigIeQBSSLoad:
28415 status |=
28416 dot11f_pack_ie_qbss_load(
28417 pCtx, (tDot11fIEQBSSLoad *)
28418 (pSrc + pIe->offset +
28419 sizeof(tDot11fIEQBSSLoad) * i),
28420 pBufRemaining, nBufRemaining, &len);
28421 break;
Selvaraj, Sridharc2fe7a32017-02-02 19:20:16 +053028422 case SigIeQCN_IE:
28423 status |=
28424 dot11f_pack_ie_QCN_IE(
28425 pCtx, (tDot11fIEQCN_IE *)
28426 (pSrc + pIe->offset +
28427 sizeof(tDot11fIEQCN_IE) * i),
28428 pBufRemaining, nBufRemaining, &len);
28429 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080028430 case SigIeQComVendorIE:
28431 status |=
28432 dot11f_pack_ie_QComVendorIE(
28433 pCtx, (tDot11fIEQComVendorIE *)
28434 (pSrc + pIe->offset +
28435 sizeof(tDot11fIEQComVendorIE) * i),
28436 pBufRemaining, nBufRemaining, &len);
28437 break;
28438 case SigIeQOSCapsAp:
28439 status |=
28440 dot11f_pack_ie_qos_caps_ap(
28441 pCtx, (tDot11fIEQOSCapsAp *)
28442 (pSrc + pIe->offset +
28443 sizeof(tDot11fIEQOSCapsAp) * i),
28444 pBufRemaining, nBufRemaining, &len);
28445 break;
28446 case SigIeQOSCapsStation:
28447 status |=
28448 dot11f_pack_ie_qos_caps_station(
28449 pCtx, (tDot11fIEQOSCapsStation *)
28450 (pSrc + pIe->offset +
28451 sizeof(tDot11fIEQOSCapsStation) * i),
28452 pBufRemaining, nBufRemaining, &len);
28453 break;
28454 case SigIeQosMapSet:
28455 status |=
28456 dot11f_pack_ie_qos_map_set(
28457 pCtx, (tDot11fIEQosMapSet *)
28458 (pSrc + pIe->offset +
28459 sizeof(tDot11fIEQosMapSet) * i),
28460 pBufRemaining, nBufRemaining, &len);
28461 break;
28462 case SigIeQuiet:
28463 status |=
28464 dot11f_pack_ie_quiet(
28465 pCtx, (tDot11fIEQuiet *)
28466 (pSrc + pIe->offset +
28467 sizeof(tDot11fIEQuiet) * i),
28468 pBufRemaining, nBufRemaining, &len);
28469 break;
28470 case SigIeRCPIIE:
28471 status |=
28472 dot11f_pack_ie_rcpiie(
28473 pCtx, (tDot11fIERCPIIE *)
28474 (pSrc + pIe->offset +
28475 sizeof(tDot11fIERCPIIE) * i),
28476 pBufRemaining, nBufRemaining, &len);
28477 break;
28478 case SigIeRICDataDesc:
28479 status |=
28480 dot11f_pack_ie_ric_data_desc(
28481 pCtx, (tDot11fIERICDataDesc *)
28482 (pSrc + pIe->offset +
28483 sizeof(tDot11fIERICDataDesc) * i),
28484 pBufRemaining, nBufRemaining, &len);
28485 break;
28486 case SigIeRSN:
28487 status |=
28488 dot11f_pack_ie_rsn(
28489 pCtx, (tDot11fIERSN *)
28490 (pSrc + pIe->offset +
28491 sizeof(tDot11fIERSN) * i),
28492 pBufRemaining, nBufRemaining, &len);
28493 break;
28494 case SigIeRSNIIE:
28495 status |=
28496 dot11f_pack_ie_rsniie(
28497 pCtx, (tDot11fIERSNIIE *)
28498 (pSrc + pIe->offset +
28499 sizeof(tDot11fIERSNIIE) * i),
28500 pBufRemaining, nBufRemaining, &len);
28501 break;
28502 case SigIeRSNOpaque:
28503 status |=
28504 dot11f_pack_ie_rsn_opaque(
28505 pCtx, (tDot11fIERSNOpaque *)
28506 (pSrc + pIe->offset +
28507 sizeof(tDot11fIERSNOpaque) * i),
28508 pBufRemaining, nBufRemaining, &len);
28509 break;
28510 case SigIeSuppChannels:
28511 status |=
28512 dot11f_pack_ie_supp_channels(
28513 pCtx, (tDot11fIESuppChannels *)
28514 (pSrc + pIe->offset +
28515 sizeof(tDot11fIESuppChannels) * i),
28516 pBufRemaining, nBufRemaining, &len);
28517 break;
28518 case SigIeSuppOperatingClasses:
28519 status |=
28520 dot11f_pack_ie_supp_operating_classes(
28521 pCtx, (tDot11fIESuppOperatingClasses *)
28522 (pSrc + pIe->offset +
28523 sizeof(tDot11fIESuppOperatingClasses) * i),
28524 pBufRemaining, nBufRemaining, &len);
28525 break;
28526 case SigIeSuppRates:
28527 status |=
28528 dot11f_pack_ie_supp_rates(
28529 pCtx, (tDot11fIESuppRates *)
28530 (pSrc + pIe->offset +
28531 sizeof(tDot11fIESuppRates) * i),
28532 pBufRemaining, nBufRemaining, &len);
28533 break;
28534 case SigIeTIM:
28535 status |=
28536 dot11f_pack_ie_tim(
28537 pCtx, (tDot11fIETIM *)
28538 (pSrc + pIe->offset +
28539 sizeof(tDot11fIETIM) * i),
28540 pBufRemaining, nBufRemaining, &len);
28541 break;
28542 case SigIeTPCReport:
28543 status |=
28544 dot11f_pack_ie_tpc_report(
28545 pCtx, (tDot11fIETPCReport *)
28546 (pSrc + pIe->offset +
28547 sizeof(tDot11fIETPCReport) * i),
28548 pBufRemaining, nBufRemaining, &len);
28549 break;
28550 case SigIeTPCRequest:
28551 status |=
28552 dot11f_pack_ie_tpc_request(
28553 pCtx, (tDot11fIETPCRequest *)
28554 (pSrc + pIe->offset +
28555 sizeof(tDot11fIETPCRequest) * i),
28556 pBufRemaining, nBufRemaining, &len);
28557 break;
28558 case SigIeTimeAdvertisement:
28559 status |=
28560 dot11f_pack_ie_time_advertisement(
28561 pCtx, (tDot11fIETimeAdvertisement *)
28562 (pSrc + pIe->offset +
28563 sizeof(tDot11fIETimeAdvertisement) * i),
28564 pBufRemaining, nBufRemaining, &len);
28565 break;
28566 case SigIeTimeoutInterval:
28567 status |=
28568 dot11f_pack_ie_timeout_interval(
28569 pCtx, (tDot11fIETimeoutInterval *)
28570 (pSrc + pIe->offset +
28571 sizeof(tDot11fIETimeoutInterval) * i),
28572 pBufRemaining, nBufRemaining, &len);
28573 break;
28574 case SigIeVHTExtBssLoad:
28575 status |=
28576 dot11f_pack_ie_vht_ext_bss_load(
28577 pCtx, (tDot11fIEVHTExtBssLoad *)
28578 (pSrc + pIe->offset +
28579 sizeof(tDot11fIEVHTExtBssLoad) * i),
28580 pBufRemaining, nBufRemaining, &len);
28581 break;
28582 case SigIeVendor1IE:
28583 status |=
28584 dot11f_pack_ie_vendor1_ie(
28585 pCtx, (tDot11fIEVendor1IE *)
28586 (pSrc + pIe->offset +
28587 sizeof(tDot11fIEVendor1IE) * i),
28588 pBufRemaining, nBufRemaining, &len);
28589 break;
28590 case SigIeVendor3IE:
28591 status |=
28592 dot11f_pack_ie_vendor3_ie(
28593 pCtx, (tDot11fIEVendor3IE *)
28594 (pSrc + pIe->offset +
28595 sizeof(tDot11fIEVendor3IE) * i),
28596 pBufRemaining, nBufRemaining, &len);
28597 break;
28598 case SigIeWAPI:
28599 status |=
28600 dot11f_pack_ie_wapi(
28601 pCtx, (tDot11fIEWAPI *)
28602 (pSrc + pIe->offset +
28603 sizeof(tDot11fIEWAPI) * i),
28604 pBufRemaining, nBufRemaining, &len);
28605 break;
28606 case SigIeWAPIOpaque:
28607 status |=
28608 dot11f_pack_ie_wapi_opaque(
28609 pCtx, (tDot11fIEWAPIOpaque *)
28610 (pSrc + pIe->offset +
28611 sizeof(tDot11fIEWAPIOpaque) * i),
28612 pBufRemaining, nBufRemaining, &len);
28613 break;
28614 case SigIeWFATPC:
28615 status |=
28616 dot11f_pack_ie_wfatpc(
28617 pCtx, (tDot11fIEWFATPC *)
28618 (pSrc + pIe->offset +
28619 sizeof(tDot11fIEWFATPC) * i),
28620 pBufRemaining, nBufRemaining, &len);
28621 break;
28622 case SigIeWFDIEOpaque:
28623 status |=
28624 dot11f_pack_ie_wfdie_opaque(
28625 pCtx, (tDot11fIEWFDIEOpaque *)
28626 (pSrc + pIe->offset +
28627 sizeof(tDot11fIEWFDIEOpaque) * i),
28628 pBufRemaining, nBufRemaining, &len);
28629 break;
28630 case SigIeWMMCaps:
28631 status |=
28632 dot11f_pack_ie_wmm_caps(
28633 pCtx, (tDot11fIEWMMCaps *)
28634 (pSrc + pIe->offset +
28635 sizeof(tDot11fIEWMMCaps) * i),
28636 pBufRemaining, nBufRemaining, &len);
28637 break;
28638 case SigIeWMMInfoAp:
28639 status |=
28640 dot11f_pack_ie_wmm_info_ap(
28641 pCtx, (tDot11fIEWMMInfoAp *)
28642 (pSrc + pIe->offset +
28643 sizeof(tDot11fIEWMMInfoAp) * i),
28644 pBufRemaining, nBufRemaining, &len);
28645 break;
28646 case SigIeWMMInfoStation:
28647 status |=
28648 dot11f_pack_ie_wmm_info_station(
28649 pCtx, (tDot11fIEWMMInfoStation *)
28650 (pSrc + pIe->offset +
28651 sizeof(tDot11fIEWMMInfoStation) * i),
28652 pBufRemaining, nBufRemaining, &len);
28653 break;
28654 case SigIeWMMParams:
28655 status |=
28656 dot11f_pack_ie_wmm_params(
28657 pCtx, (tDot11fIEWMMParams *)
28658 (pSrc + pIe->offset +
28659 sizeof(tDot11fIEWMMParams) * i),
28660 pBufRemaining, nBufRemaining, &len);
28661 break;
28662 case SigIeWPA:
28663 status |=
28664 dot11f_pack_ie_wpa(
28665 pCtx, (tDot11fIEWPA *)
28666 (pSrc + pIe->offset +
28667 sizeof(tDot11fIEWPA) * i),
28668 pBufRemaining, nBufRemaining, &len);
28669 break;
28670 case SigIeWPAOpaque:
28671 status |=
28672 dot11f_pack_ie_wpa_opaque(
28673 pCtx, (tDot11fIEWPAOpaque *)
28674 (pSrc + pIe->offset +
28675 sizeof(tDot11fIEWPAOpaque) * i),
28676 pBufRemaining, nBufRemaining, &len);
28677 break;
28678 case SigIeWSC:
28679 status |=
28680 dot11f_pack_ie_wsc(
28681 pCtx, (tDot11fIEWSC *)
28682 (pSrc + pIe->offset +
28683 sizeof(tDot11fIEWSC) * i),
28684 pBufRemaining, nBufRemaining, &len);
28685 break;
28686 case SigIeWscAssocReq:
28687 status |=
28688 dot11f_pack_ie_wsc_assoc_req(
28689 pCtx, (tDot11fIEWscAssocReq *)
28690 (pSrc + pIe->offset +
28691 sizeof(tDot11fIEWscAssocReq) * i),
28692 pBufRemaining, nBufRemaining, &len);
28693 break;
28694 case SigIeWscAssocRes:
28695 status |=
28696 dot11f_pack_ie_wsc_assoc_res(
28697 pCtx, (tDot11fIEWscAssocRes *)
28698 (pSrc + pIe->offset +
28699 sizeof(tDot11fIEWscAssocRes) * i),
28700 pBufRemaining, nBufRemaining, &len);
28701 break;
28702 case SigIeWscBeacon:
28703 status |=
28704 dot11f_pack_ie_wsc_beacon(
28705 pCtx, (tDot11fIEWscBeacon *)
28706 (pSrc + pIe->offset +
28707 sizeof(tDot11fIEWscBeacon) * i),
28708 pBufRemaining, nBufRemaining, &len);
28709 break;
28710 case SigIeWscBeaconProbeRes:
28711 status |=
28712 dot11f_pack_ie_wsc_beacon_probe_res(
28713 pCtx, (tDot11fIEWscBeaconProbeRes *)
28714 (pSrc + pIe->offset +
28715 sizeof(tDot11fIEWscBeaconProbeRes) * i),
28716 pBufRemaining, nBufRemaining, &len);
28717 break;
28718 case SigIeWscIEOpaque:
28719 status |=
28720 dot11f_pack_ie_wsc_ie_opaque(
28721 pCtx, (tDot11fIEWscIEOpaque *)
28722 (pSrc + pIe->offset +
28723 sizeof(tDot11fIEWscIEOpaque) * i),
28724 pBufRemaining, nBufRemaining, &len);
28725 break;
28726 case SigIeWscProbeReq:
28727 status |=
28728 dot11f_pack_ie_wsc_probe_req(
28729 pCtx, (tDot11fIEWscProbeReq *)
28730 (pSrc + pIe->offset +
28731 sizeof(tDot11fIEWscProbeReq) * i),
28732 pBufRemaining, nBufRemaining, &len);
28733 break;
28734 case SigIeWscProbeRes:
28735 status |=
28736 dot11f_pack_ie_wsc_probe_res(
28737 pCtx, (tDot11fIEWscProbeRes *)
28738 (pSrc + pIe->offset +
28739 sizeof(tDot11fIEWscProbeRes) * i),
28740 pBufRemaining, nBufRemaining, &len);
28741 break;
28742 case SigIeWscReassocRes:
28743 status |=
28744 dot11f_pack_ie_wsc_reassoc_res(
28745 pCtx, (tDot11fIEWscReassocRes *)
28746 (pSrc + pIe->offset +
28747 sizeof(tDot11fIEWscReassocRes) * i),
28748 pBufRemaining, nBufRemaining, &len);
28749 break;
Kiran Kumar Lokere40875852018-01-15 12:36:19 -080028750 case SigIeaddba_extn_element:
28751 status |=
28752 dot11f_pack_ie_addba_extn_element(
28753 pCtx, (tDot11fIEaddba_extn_element *)
28754 (pSrc + pIe->offset +
28755 sizeof(tDot11fIEaddba_extn_element) * i),
28756 pBufRemaining, nBufRemaining, &len);
28757 break;
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070028758 case SigIebss_color_change:
28759 status |=
28760 dot11f_pack_ie_bss_color_change(
28761 pCtx, (tDot11fIEbss_color_change *)
28762 (pSrc + pIe->offset +
28763 sizeof(tDot11fIEbss_color_change) * i),
28764 pBufRemaining, nBufRemaining, &len);
28765 break;
Padma, Santhosh Kumar666f96e2017-11-10 13:22:59 +053028766 case SigIedh_parameter_element:
28767 status |=
28768 dot11f_pack_ie_dh_parameter_element(
28769 pCtx, (tDot11fIEdh_parameter_element *)
28770 (pSrc + pIe->offset +
28771 sizeof(tDot11fIEdh_parameter_element) * i),
28772 pBufRemaining, nBufRemaining, &len);
28773 break;
Abhishek Singhd8c3f102017-07-29 14:10:37 +053028774 case SigIeesp_information:
28775 status |=
28776 dot11f_pack_ie_esp_information(
28777 pCtx, (tDot11fIEesp_information *)
28778 (pSrc + pIe->offset +
28779 sizeof(tDot11fIEesp_information) * i),
28780 pBufRemaining, nBufRemaining, &len);
28781 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080028782 case SigIeext_chan_switch_ann:
28783 status |=
28784 dot11f_pack_ie_ext_chan_switch_ann(
28785 pCtx, (tDot11fIEext_chan_switch_ann *)
28786 (pSrc + pIe->offset +
28787 sizeof(tDot11fIEext_chan_switch_ann) * i),
28788 pBufRemaining, nBufRemaining, &len);
28789 break;
Selvaraj, Sridharcfe65022017-04-15 13:21:31 +053028790 case SigIefils_assoc_delay_info:
28791 status |=
28792 dot11f_pack_ie_fils_assoc_delay_info(
28793 pCtx, (tDot11fIEfils_assoc_delay_info *)
28794 (pSrc + pIe->offset +
28795 sizeof(tDot11fIEfils_assoc_delay_info) * i),
28796 pBufRemaining, nBufRemaining, &len);
28797 break;
28798 case SigIefils_hlp_container:
28799 status |=
28800 dot11f_pack_ie_fils_hlp_container(
28801 pCtx, (tDot11fIEfils_hlp_container *)
28802 (pSrc + pIe->offset +
28803 sizeof(tDot11fIEfils_hlp_container) * i),
28804 pBufRemaining, nBufRemaining, &len);
28805 break;
28806 case SigIefils_indication:
28807 status |=
28808 dot11f_pack_ie_fils_indication(
28809 pCtx, (tDot11fIEfils_indication *)
28810 (pSrc + pIe->offset +
28811 sizeof(tDot11fIEfils_indication) * i),
28812 pBufRemaining, nBufRemaining, &len);
28813 break;
28814 case SigIefils_kde:
28815 status |=
28816 dot11f_pack_ie_fils_kde(
28817 pCtx, (tDot11fIEfils_kde *)
28818 (pSrc + pIe->offset +
28819 sizeof(tDot11fIEfils_kde) * i),
28820 pBufRemaining, nBufRemaining, &len);
28821 break;
28822 case SigIefils_key_confirmation:
28823 status |=
28824 dot11f_pack_ie_fils_key_confirmation(
28825 pCtx, (tDot11fIEfils_key_confirmation *)
28826 (pSrc + pIe->offset +
28827 sizeof(tDot11fIEfils_key_confirmation) * i),
28828 pBufRemaining, nBufRemaining, &len);
28829 break;
28830 case SigIefils_nonce:
28831 status |=
28832 dot11f_pack_ie_fils_nonce(
28833 pCtx, (tDot11fIEfils_nonce *)
28834 (pSrc + pIe->offset +
28835 sizeof(tDot11fIEfils_nonce) * i),
28836 pBufRemaining, nBufRemaining, &len);
28837 break;
28838 case SigIefils_public_key:
28839 status |=
28840 dot11f_pack_ie_fils_public_key(
28841 pCtx, (tDot11fIEfils_public_key *)
28842 (pSrc + pIe->offset +
28843 sizeof(tDot11fIEfils_public_key) * i),
28844 pBufRemaining, nBufRemaining, &len);
28845 break;
28846 case SigIefils_session:
28847 status |=
28848 dot11f_pack_ie_fils_session(
28849 pCtx, (tDot11fIEfils_session *)
28850 (pSrc + pIe->offset +
28851 sizeof(tDot11fIEfils_session) * i),
28852 pBufRemaining, nBufRemaining, &len);
28853 break;
28854 case SigIefils_wrapped_data:
28855 status |=
28856 dot11f_pack_ie_fils_wrapped_data(
28857 pCtx, (tDot11fIEfils_wrapped_data *)
28858 (pSrc + pIe->offset +
28859 sizeof(tDot11fIEfils_wrapped_data) * i),
28860 pBufRemaining, nBufRemaining, &len);
28861 break;
Sridhar Selvaraj6d3e0d72017-08-17 17:32:37 +053028862 case SigIefragment_ie:
28863 status |=
28864 dot11f_pack_ie_fragment_ie(
28865 pCtx, (tDot11fIEfragment_ie *)
28866 (pSrc + pIe->offset +
28867 sizeof(tDot11fIEfragment_ie) * i),
28868 pBufRemaining, nBufRemaining, &len);
28869 break;
Naveen Rawatea921ce2017-09-08 15:07:58 -070028870 case SigIehe_cap:
28871 status |=
28872 dot11f_pack_ie_he_cap(
28873 pCtx, (tDot11fIEhe_cap *)
28874 (pSrc + pIe->offset +
28875 sizeof(tDot11fIEhe_cap) * i),
28876 pBufRemaining, nBufRemaining, &len);
28877 break;
28878 case SigIehe_op:
28879 status |=
28880 dot11f_pack_ie_he_op(
28881 pCtx, (tDot11fIEhe_op *)
28882 (pSrc + pIe->offset +
28883 sizeof(tDot11fIEhe_op) * i),
28884 pBufRemaining, nBufRemaining, &len);
28885 break;
Nitesh Shah0ddd4f62016-05-27 10:07:32 +053028886 case SigIehs20vendor_ie:
28887 status |=
28888 dot11f_pack_ie_hs20vendor_ie(
28889 pCtx, (tDot11fIEhs20vendor_ie *)
28890 (pSrc + pIe->offset +
28891 sizeof(tDot11fIEhs20vendor_ie) * i),
28892 pBufRemaining, nBufRemaining, &len);
28893 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080028894 case SigIeht2040_bss_coexistence:
28895 status |=
28896 dot11f_pack_ie_ht2040_bss_coexistence(
28897 pCtx, (tDot11fIEht2040_bss_coexistence *)
28898 (pSrc + pIe->offset +
28899 sizeof(tDot11fIEht2040_bss_coexistence) * i),
28900 pBufRemaining, nBufRemaining, &len);
28901 break;
28902 case SigIeht2040_bss_intolerant_report:
28903 status |=
28904 dot11f_pack_ie_ht2040_bss_intolerant_report(
28905 pCtx, (tDot11fIEht2040_bss_intolerant_report *)
28906 (pSrc + pIe->offset +
28907 sizeof(tDot11fIEht2040_bss_intolerant_report) * i),
28908 pBufRemaining, nBufRemaining, &len);
28909 break;
Krishna Kumaar Natarajan0baebf82017-04-24 08:16:36 -070028910 case SigIemu_edca_param_set:
28911 status |=
28912 dot11f_pack_ie_mu_edca_param_set(
28913 pCtx, (tDot11fIEmu_edca_param_set *)
28914 (pSrc + pIe->offset +
28915 sizeof(tDot11fIEmu_edca_param_set) * i),
28916 pBufRemaining, nBufRemaining, &len);
28917 break;
Selvaraj, Sridhar99edbc32017-06-22 10:49:59 +053028918 case SigIeosen_ie:
28919 status |=
28920 dot11f_pack_ie_osen_ie(
28921 pCtx, (tDot11fIEosen_ie *)
28922 (pSrc + pIe->offset +
28923 sizeof(tDot11fIEosen_ie) * i),
28924 pBufRemaining, nBufRemaining, &len);
28925 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080028926 case SigIesec_chan_offset_ele:
28927 status |=
28928 dot11f_pack_ie_sec_chan_offset_ele(
28929 pCtx, (tDot11fIEsec_chan_offset_ele *)
28930 (pSrc + pIe->offset +
28931 sizeof(tDot11fIEsec_chan_offset_ele) * i),
28932 pBufRemaining, nBufRemaining, &len);
28933 break;
Kapil Gupta4b2efbb2016-10-03 13:07:20 +053028934 case SigIevendor_vht_ie:
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080028935 status |=
Kapil Gupta4b2efbb2016-10-03 13:07:20 +053028936 dot11f_pack_ie_vendor_vht_ie(
28937 pCtx, (tDot11fIEvendor_vht_ie *)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080028938 (pSrc + pIe->offset +
Kapil Gupta4b2efbb2016-10-03 13:07:20 +053028939 sizeof(tDot11fIEvendor_vht_ie) * i),
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080028940 pBufRemaining, nBufRemaining, &len);
28941 break;
28942 default:
28943 FRAMES_LOG1(pCtx, FRLOGE, FRFL("INTERNAL ERROR-- I don"
28944 "'t know about the IE %d; this is most likely a b"
28945 "ug in 'framesc'.\n"), pFf->sig);
28946 return DOT11F_INTERNAL_ERROR;
28947 }
28948
28949 pBufRemaining += len;
28950 nBufRemaining -= len;
28951 *pnConsumed += len;
28952 }
28953
28954 ++pIe;
28955
28956 }
28957
28958 return status;
28959
28960}
28961
28962static uint32_t pack_tlv_core(tpAniSirGlobal pCtx,
28963 uint8_t *pSrc,
28964 uint8_t *pBuf,
28965 uint32_t nBuf,
28966 uint32_t *pnConsumed,
28967 const tTLVDefn TLVs[],
28968 uint32_t *pidx)
28969{
28970 const tTLVDefn *pTlv;
28971 tFRAMES_BOOL *pfFound;
28972 uint8_t *pBufRemaining;
28973 uint32_t nBufRemaining, status, len;
28974
28975 DOT11F_PARAMETER_CHECK2(pSrc, pBuf, nBuf, pnConsumed);
28976
28977 (void)pCtx;
28978 status = DOT11F_PARSE_SUCCESS;
28979 pBufRemaining = pBuf;
28980 nBufRemaining = nBuf;
28981
28982 pTlv = &(TLVs[0]);
28983 while (0xffff != pTlv->id) {
28984 pfFound = (tFRAMES_BOOL *)(pSrc + pTlv->offset +
28985 pTlv->presenceOffset);
28986 if (*pfFound && pTlv->minSize > nBufRemaining) {
28987 FRAMES_LOG3(pCtx, FRLOGE, FRFL("The TLV %s takes at least"
28988 " %d bytes, but there are only %d left in the buffer."
28989 "\n"), pTlv->name, pTlv->minSize, nBufRemaining);
28990 return DOT11F_BUFFER_OVERFLOW;
28991 }
28992
28993 len = 0U;
28994
28995 if (*pfFound) {
28996 switch (pTlv->sig) {
28997 case SigTlvAuthorizedMACs:
28998 status |=
28999 dot11f_pack_tlv_authorized_ma_cs(
29000 pCtx, (tDot11fTLVAuthorizedMACs *)
29001 (pSrc + pTlv->offset), pBufRemaining,
29002 nBufRemaining, &len);
29003 break;
29004 case SigTlvRequestToEnroll:
29005 status |=
29006 dot11f_pack_tlv_request_to_enroll(
29007 pCtx, (tDot11fTLVRequestToEnroll *)
29008 (pSrc + pTlv->offset), pBufRemaining,
29009 nBufRemaining, &len);
29010 break;
29011 case SigTlvVersion2:
29012 status |=
29013 dot11f_pack_tlv_version2(
29014 pCtx, (tDot11fTLVVersion2 *)
29015 (pSrc + pTlv->offset), pBufRemaining,
29016 nBufRemaining, &len);
29017 break;
29018 case SigTlvAPSetupLocked:
29019 status |=
29020 dot11f_pack_tlv_ap_setup_locked(
29021 pCtx, (tDot11fTLVAPSetupLocked *)
29022 (pSrc + pTlv->offset), pBufRemaining,
29023 nBufRemaining, &len);
29024 break;
29025 case SigTlvAssociationState:
29026 status |=
29027 dot11f_pack_tlv_association_state(
29028 pCtx, (tDot11fTLVAssociationState *)
29029 (pSrc + pTlv->offset), pBufRemaining,
29030 nBufRemaining, &len);
29031 break;
29032 case SigTlvConfigMethods:
29033 status |=
29034 dot11f_pack_tlv_config_methods(
29035 pCtx, (tDot11fTLVConfigMethods *)
29036 (pSrc + pTlv->offset), pBufRemaining,
29037 nBufRemaining, &len);
29038 break;
29039 case SigTlvConfigurationError:
29040 status |=
29041 dot11f_pack_tlv_configuration_error(
29042 pCtx, (tDot11fTLVConfigurationError *)
29043 (pSrc + pTlv->offset), pBufRemaining,
29044 nBufRemaining, &len);
29045 break;
29046 case SigTlvDeviceName:
29047 status |=
29048 dot11f_pack_tlv_device_name(
29049 pCtx, (tDot11fTLVDeviceName *)
29050 (pSrc + pTlv->offset), pBufRemaining,
29051 nBufRemaining, &len);
29052 break;
29053 case SigTlvDevicePasswordID:
29054 status |=
29055 dot11f_pack_tlv_device_password_id(
29056 pCtx, (tDot11fTLVDevicePasswordID *)
29057 (pSrc + pTlv->offset), pBufRemaining,
29058 nBufRemaining, &len);
29059 break;
29060 case SigTlvExtendedListenTiming:
29061 status |=
29062 dot11f_pack_tlv_extended_listen_timing(
29063 pCtx, (tDot11fTLVExtendedListenTiming *)
29064 (pSrc + pTlv->offset), pBufRemaining,
29065 nBufRemaining, &len);
29066 break;
29067 case SigTlvListenChannel:
29068 status |=
29069 dot11f_pack_tlv_listen_channel(
29070 pCtx, (tDot11fTLVListenChannel *)
29071 (pSrc + pTlv->offset), pBufRemaining,
29072 nBufRemaining, &len);
29073 break;
29074 case SigTlvManufacturer:
29075 status |=
29076 dot11f_pack_tlv_manufacturer(
29077 pCtx, (tDot11fTLVManufacturer *)
29078 (pSrc + pTlv->offset), pBufRemaining,
29079 nBufRemaining, &len);
29080 break;
29081 case SigTlvMinorReasonCode:
29082 status |=
29083 dot11f_pack_tlv_minor_reason_code(
29084 pCtx, (tDot11fTLVMinorReasonCode *)
29085 (pSrc + pTlv->offset), pBufRemaining,
29086 nBufRemaining, &len);
29087 break;
29088 case SigTlvModelName:
29089 status |=
29090 dot11f_pack_tlv_model_name(
29091 pCtx, (tDot11fTLVModelName *)
29092 (pSrc + pTlv->offset), pBufRemaining,
29093 nBufRemaining, &len);
29094 break;
29095 case SigTlvModelNumber:
29096 status |=
29097 dot11f_pack_tlv_model_number(
29098 pCtx, (tDot11fTLVModelNumber *)
29099 (pSrc + pTlv->offset), pBufRemaining,
29100 nBufRemaining, &len);
29101 break;
29102 case SigTlvNoticeOfAbsence:
29103 status |=
29104 dot11f_pack_tlv_notice_of_absence(
29105 pCtx, (tDot11fTLVNoticeOfAbsence *)
29106 (pSrc + pTlv->offset), pBufRemaining,
29107 nBufRemaining, &len);
29108 break;
29109 case SigTlvOperatingChannel:
29110 status |=
29111 dot11f_pack_tlv_operating_channel(
29112 pCtx, (tDot11fTLVOperatingChannel *)
29113 (pSrc + pTlv->offset), pBufRemaining,
29114 nBufRemaining, &len);
29115 break;
29116 case SigTlvP2PCapability:
29117 status |=
29118 dot11f_pack_tlv_p2_p_capability(
29119 pCtx, (tDot11fTLVP2PCapability *)
29120 (pSrc + pTlv->offset), pBufRemaining,
29121 nBufRemaining, &len);
29122 break;
29123 case SigTlvP2PDeviceId:
29124 status |=
29125 dot11f_pack_tlv_p2_p_device_id(
29126 pCtx, (tDot11fTLVP2PDeviceId *)
29127 (pSrc + pTlv->offset), pBufRemaining,
29128 nBufRemaining, &len);
29129 break;
29130 case SigTlvP2PDeviceInfo:
29131 status |=
29132 dot11f_pack_tlv_p2_p_device_info(
29133 pCtx, (tDot11fTLVP2PDeviceInfo *)
29134 (pSrc + pTlv->offset), pBufRemaining,
29135 nBufRemaining, &len);
29136 break;
29137 case SigTlvP2PGroupInfo:
29138 status |=
29139 dot11f_pack_tlv_p2_p_group_info(
29140 pCtx, (tDot11fTLVP2PGroupInfo *)
29141 (pSrc + pTlv->offset), pBufRemaining,
29142 nBufRemaining, &len);
29143 break;
29144 case SigTlvP2PStatus:
29145 status |=
29146 dot11f_pack_tlv_p2_p_status(
29147 pCtx, (tDot11fTLVP2PStatus *)
29148 (pSrc + pTlv->offset), pBufRemaining,
29149 nBufRemaining, &len);
29150 break;
29151 case SigTlvPrimaryDeviceType:
29152 status |=
29153 dot11f_pack_tlv_primary_device_type(
29154 pCtx, (tDot11fTLVPrimaryDeviceType *)
29155 (pSrc + pTlv->offset), pBufRemaining,
29156 nBufRemaining, &len);
29157 break;
29158 case SigTlvRFBands:
29159 status |=
29160 dot11f_pack_tlv_rf_bands(
29161 pCtx, (tDot11fTLVRFBands *)
29162 (pSrc + pTlv->offset), pBufRemaining,
29163 nBufRemaining, &len);
29164 break;
29165 case SigTlvRequestDeviceType:
29166 status |=
29167 dot11f_pack_tlv_request_device_type(
29168 pCtx, (tDot11fTLVRequestDeviceType *)
29169 (pSrc + pTlv->offset), pBufRemaining,
29170 nBufRemaining, &len);
29171 break;
29172 case SigTlvRequestType:
29173 status |=
29174 dot11f_pack_tlv_request_type(
29175 pCtx, (tDot11fTLVRequestType *)
29176 (pSrc + pTlv->offset), pBufRemaining,
29177 nBufRemaining, &len);
29178 break;
29179 case SigTlvResponseType:
29180 status |=
29181 dot11f_pack_tlv_response_type(
29182 pCtx, (tDot11fTLVResponseType *)
29183 (pSrc + pTlv->offset), pBufRemaining,
29184 nBufRemaining, &len);
29185 break;
29186 case SigTlvSelectedRegistrar:
29187 status |=
29188 dot11f_pack_tlv_selected_registrar(
29189 pCtx, (tDot11fTLVSelectedRegistrar *)
29190 (pSrc + pTlv->offset), pBufRemaining,
29191 nBufRemaining, &len);
29192 break;
29193 case SigTlvSelectedRegistrarConfigMethods:
29194 status |=
29195 dot11f_pack_tlv_selected_registrar_config_methods(
29196 pCtx, (tDot11fTLVSelectedRegistrarConfigMethods *)
29197 (pSrc + pTlv->offset), pBufRemaining,
29198 nBufRemaining, &len);
29199 break;
29200 case SigTlvSerialNumber:
29201 status |=
29202 dot11f_pack_tlv_serial_number(
29203 pCtx, (tDot11fTLVSerialNumber *)
29204 (pSrc + pTlv->offset), pBufRemaining,
29205 nBufRemaining, &len);
29206 break;
29207 case SigTlvUUID_E:
29208 status |=
29209 dot11f_pack_tlv_uuid_e(
29210 pCtx, (tDot11fTLVUUID_E *)
29211 (pSrc + pTlv->offset), pBufRemaining,
29212 nBufRemaining, &len);
29213 break;
29214 case SigTlvUUID_R:
29215 status |=
29216 dot11f_pack_tlv_uuid_r(
29217 pCtx, (tDot11fTLVUUID_R *)
29218 (pSrc + pTlv->offset), pBufRemaining,
29219 nBufRemaining, &len);
29220 break;
29221 case SigTlvVendorExtension:
29222 status |=
29223 dot11f_pack_tlv_vendor_extension(
29224 pCtx, (tDot11fTLVVendorExtension *)
29225 (pSrc + pTlv->offset), pBufRemaining,
29226 nBufRemaining, &len);
29227 break;
29228 case SigTlvVersion:
29229 status |=
29230 dot11f_pack_tlv_version(
29231 pCtx, (tDot11fTLVVersion *)
29232 (pSrc + pTlv->offset), pBufRemaining,
29233 nBufRemaining, &len);
29234 break;
29235 case SigTlvWPSState:
29236 status |=
29237 dot11f_pack_tlv_wps_state(
29238 pCtx, (tDot11fTLVWPSState *)
29239 (pSrc + pTlv->offset), pBufRemaining,
29240 nBufRemaining, &len);
29241 break;
Abhishek Singh951eed82017-07-06 16:53:19 +053029242 case SigTlvassoc_disallowed:
29243 status |=
29244 dot11f_pack_tlv_assoc_disallowed(
29245 pCtx, (tDot11fTLVassoc_disallowed *)
29246 (pSrc + pTlv->offset), pBufRemaining,
29247 nBufRemaining, &len);
29248 break;
29249 case SigTlvassoc_retry_delay:
29250 status |=
29251 dot11f_pack_tlv_assoc_retry_delay(
29252 pCtx, (tDot11fTLVassoc_retry_delay *)
29253 (pSrc + pTlv->offset), pBufRemaining,
29254 nBufRemaining, &len);
29255 break;
29256 case SigTlvcellular_data_cap:
29257 status |=
29258 dot11f_pack_tlv_cellular_data_cap(
29259 pCtx, (tDot11fTLVcellular_data_cap *)
29260 (pSrc + pTlv->offset), pBufRemaining,
29261 nBufRemaining, &len);
29262 break;
29263 case SigTlvcellular_data_con_pref:
29264 status |=
29265 dot11f_pack_tlv_cellular_data_con_pref(
29266 pCtx, (tDot11fTLVcellular_data_con_pref *)
29267 (pSrc + pTlv->offset), pBufRemaining,
29268 nBufRemaining, &len);
29269 break;
29270 case SigTlvmbo_ap_cap:
29271 status |=
29272 dot11f_pack_tlv_mbo_ap_cap(
29273 pCtx, (tDot11fTLVmbo_ap_cap *)
29274 (pSrc + pTlv->offset), pBufRemaining,
29275 nBufRemaining, &len);
29276 break;
29277 case SigTlvnon_prefferd_chan_rep:
29278 status |=
29279 dot11f_pack_tlv_non_prefferd_chan_rep(
29280 pCtx, (tDot11fTLVnon_prefferd_chan_rep *)
29281 (pSrc + pTlv->offset), pBufRemaining,
29282 nBufRemaining, &len);
29283 break;
29284 case SigTlvoce_cap:
29285 status |=
29286 dot11f_pack_tlv_oce_cap(
29287 pCtx, (tDot11fTLVoce_cap *)
29288 (pSrc + pTlv->offset), pBufRemaining,
29289 nBufRemaining, &len);
29290 break;
29291 case SigTlvreduced_wan_metrics:
29292 status |=
29293 dot11f_pack_tlv_reduced_wan_metrics(
29294 pCtx, (tDot11fTLVreduced_wan_metrics *)
29295 (pSrc + pTlv->offset), pBufRemaining,
29296 nBufRemaining, &len);
29297 break;
29298 case SigTlvrssi_assoc_rej:
29299 status |=
29300 dot11f_pack_tlv_rssi_assoc_rej(
29301 pCtx, (tDot11fTLVrssi_assoc_rej *)
29302 (pSrc + pTlv->offset), pBufRemaining,
29303 nBufRemaining, &len);
29304 break;
29305 case SigTlvtransition_reason:
29306 status |=
29307 dot11f_pack_tlv_transition_reason(
29308 pCtx, (tDot11fTLVtransition_reason *)
29309 (pSrc + pTlv->offset), pBufRemaining,
29310 nBufRemaining, &len);
29311 break;
29312 case SigTlvtransition_reject_reason:
29313 status |=
29314 dot11f_pack_tlv_transition_reject_reason(
29315 pCtx, (tDot11fTLVtransition_reject_reason *)
29316 (pSrc + pTlv->offset), pBufRemaining,
29317 nBufRemaining, &len);
29318 break;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080029319 case SigTlvP2PInterface:
29320 status |=
29321 dot11f_pack_tlv_p2_p_interface(
29322 pCtx, (tDot11fTLVP2PInterface *)
29323 (pSrc + pTlv->offset), pBufRemaining,
29324 nBufRemaining, &len);
29325 break;
29326 case SigTlvP2PManageability:
29327 status |=
29328 dot11f_pack_tlv_p2_p_manageability(
29329 pCtx, (tDot11fTLVP2PManageability *)
29330 (pSrc + pTlv->offset), pBufRemaining,
29331 nBufRemaining, &len);
29332 break;
29333 default:
29334 FRAMES_LOG1(pCtx, FRLOGE, FRFL("INTERNAL ERROR-- I don't "
29335 "know about the TLV %d; this is most likely a bug in "
29336 "'framesc'.\n"), pTlv->sig);
29337 return DOT11F_INTERNAL_ERROR;
29338 }
29339
29340 } /* End if on *pfFound */
29341 pBufRemaining += len;
29342 nBufRemaining -= len;
29343 *pnConsumed += len;
29344 ++pTlv;
29345 if (len)
29346 ++*pidx;
29347 }
29348
29349 return status;
29350
29351}