diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 7117313..6dfd713 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -282,6 +282,11 @@
 #define CFG_ENABLE_ADAPT_RX_DRAIN_MAX       WNI_CFG_ENABLE_ADAPT_RX_DRAIN_STAMAX
 #define CFG_ENABLE_ADAPT_RX_DRAIN_DEFAULT   WNI_CFG_ENABLE_ADAPT_RX_DRAIN_STADEF
 
+//Enable Prop IE
+#define CFG_ENABLE_OXYNWK_NAME                   "gEnableOxygenNwk"
+#define CFG_ENABLE_OXYNWK_MIN                    ( 0 )
+#define CFG_ENABLE_OXYNWK_MAX                    ( 1 )
+#define CFG_ENABLE_OXYNWK_DEFAULT                ( 0 )
 
 typedef enum
 {
@@ -2167,6 +2172,7 @@
    v_BOOL_t                    bFastRoamInConIniFeatureEnabled;
 #endif
    v_BOOL_t                    fEnableAdaptRxDrain;
+   v_BOOL_t                    enableOxygenNwk;
 } hdd_config_t;
 /*--------------------------------------------------------------------------- 
   Function declarations and documenation
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index d21d609..abc8651 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -2343,6 +2343,12 @@
                  CFG_ENABLE_ADAPT_RX_DRAIN_MIN,
                  CFG_ENABLE_ADAPT_RX_DRAIN_MAX),
 
+   REG_VARIABLE( CFG_ENABLE_OXYNWK_NAME, WLAN_PARAM_Integer,
+                 hdd_config_t, enableOxygenNwk,
+                 VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+                 CFG_ENABLE_OXYNWK_DEFAULT,
+                 CFG_ENABLE_OXYNWK_MIN,
+                 CFG_ENABLE_OXYNWK_MAX ),
 };
 
 /*
@@ -4085,6 +4091,9 @@
 
    smeConfig.csrConfig.enableTxLdpc = pConfig->enableTxLdpc;
 
+   // Prop IE enabling/disabling option
+   smeConfig.csrConfig.enableOxygenNwk = pConfig->enableOxygenNwk;
+
    /* update SSR config */
    sme_UpdateEnableSSR((tHalHandle)(pHddCtx->hHal), pHddCtx->cfg_ini->enableSSR);
    /* Update the Directed scan offload setting */
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index 20f5903..efbed87 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -643,6 +643,8 @@
 
     tANI_U8                 txLdpcIniFeatureEnabled;
 
+    tANI_U8                 oxygenNwkIniFeatureEnabled;
+
     tSirRSNie               rsnIE;             // RSN IE to be sent in
                                                // Beacon and Probe
                                                // Response frames
diff --git a/CORE/MAC/inc/wniCfgAp.h b/CORE/MAC/inc/wniCfgAp.h
index c2f8b73..a801532 100644
--- a/CORE/MAC/inc/wniCfgAp.h
+++ b/CORE/MAC/inc/wniCfgAp.h
@@ -360,6 +360,7 @@
 #define WNI_CFG_TDLS_PUAPSD_INACT_TIME    300
 #define WNI_CFG_TDLS_RX_FRAME_THRESHOLD    301
 #define WNI_CFG_ENABLE_ADAPT_RX_DRAIN    302
+#define WNI_CFG_OXYGEN_NETWORK_DATA    303
 
 /*
  * String parameter lengths 
@@ -2522,10 +2523,18 @@
 #define WNI_CFG_ENABLE_ADAPT_RX_DRAIN_STAMAX    1
 #define WNI_CFG_ENABLE_ADAPT_RX_DRAIN_STADEF    1
 
-#define CFG_PARAM_MAX_NUM         303
-#define CFG_AP_IBUF_MAX_SIZE      242
+#define WNI_CFG_OXYGEN_NETWORK_DATA_STAMIN    0
+#define WNI_CFG_OXYGEN_NETWORK_DATA_STAMAX    8192
+#define WNI_CFG_OXYGEN_NETWORK_DATA_STADEF    8192
+
+#define WNI_CFG_OXYGEN_NETWORK_DATA_APMIN    0
+#define WNI_CFG_OXYGEN_NETWORK_DATA_APMAX    8192
+#define WNI_CFG_OXYGEN_NETWORK_DATA_APDEF    8192
+
+#define CFG_PARAM_MAX_NUM         304
+#define CFG_AP_IBUF_MAX_SIZE      243
 #define CFG_AP_SBUF_MAX_SIZE      3422
-#define CFG_STA_IBUF_MAX_SIZE     237
+#define CFG_STA_IBUF_MAX_SIZE     238
 #define CFG_STA_SBUF_MAX_SIZE     3388
 #define CFG_SEM_MAX_NUM           19
 
diff --git a/CORE/MAC/inc/wniCfgSta.h b/CORE/MAC/inc/wniCfgSta.h
index 930c94c..b769b39 100644
--- a/CORE/MAC/inc/wniCfgSta.h
+++ b/CORE/MAC/inc/wniCfgSta.h
@@ -354,6 +354,7 @@
 #define WNI_CFG_TDLS_PUAPSD_INACT_TIME    300
 #define WNI_CFG_TDLS_RX_FRAME_THRESHOLD    301
 #define WNI_CFG_ENABLE_ADAPT_RX_DRAIN    302
+#define WNI_CFG_OXYGEN_NETWORK_DATA    303
 
 /*
  * String parameter lengths 
@@ -1635,8 +1636,12 @@
 #define WNI_CFG_ENABLE_ADAPT_RX_DRAIN_STAMAX    1
 #define WNI_CFG_ENABLE_ADAPT_RX_DRAIN_STADEF    1
 
-#define CFG_PARAM_MAX_NUM        303
-#define CFG_STA_IBUF_MAX_SIZE    237
+#define WNI_CFG_OXYGEN_NETWORK_DATA_STAMIN    0
+#define WNI_CFG_OXYGEN_NETWORK_DATA_STAMAX    8192
+#define WNI_CFG_OXYGEN_NETWORK_DATA_STADEF    8192
+
+#define CFG_PARAM_MAX_NUM        304
+#define CFG_STA_IBUF_MAX_SIZE    238
 #define CFG_STA_SBUF_MAX_SIZE    3388
 #define CFG_SEM_MAX_NUM          19
 
diff --git a/CORE/MAC/src/cfg/cfgUtil/cfg.txt b/CORE/MAC/src/cfg/cfgUtil/cfg.txt
index 6fce429..504fe58 100644
--- a/CORE/MAC/src/cfg/cfgUtil/cfg.txt
+++ b/CORE/MAC/src/cfg/cfgUtil/cfg.txt
@@ -4557,3 +4557,13 @@
 NV    RW    NP
 HAL
 0    1    1
+*
+* Oxygen network data (prop IE for IBSS)
+*
+WNI_CFG_OXYGEN_NETWORK_DATA   I    2    0
+V    RW    NP
+SCH
+0    0x2000   0x2000
+V    RW    NP
+SCH
+0    0x2000   0x2000
diff --git a/CORE/MAC/src/include/dot11f.h b/CORE/MAC/src/include/dot11f.h
index 3a82e65..023a482 100644
--- a/CORE/MAC/src/include/dot11f.h
+++ b/CORE/MAC/src/include/dot11f.h
@@ -52,7 +52,7 @@
   *
   *
   * This file was automatically generated by 'framesc'
-  * Tue Jul  2 15:39:44 2013 from the following file(s):
+  * Thu Jul 11 19:02:48 2013 from the following file(s):
   *
   * dot11f.frms
   * 
@@ -4198,6 +4198,31 @@
 #ifdef __cplusplus
 }; /* End extern "C". */
 #endif /* C++ */
+// EID 221 (0xdd) {OUI 0x00, 0x16, 0x32}
+typedef struct sDot11fIEOxygenNetwork {
+    tANI_U8      present;
+    tANI_U16     data;
+} tDot11fIEOxygenNetwork;
+
+#define DOT11F_EID_OXYGENNETWORK ( 221 )
+
+// N.B. These #defines do *not* include the EID & length
+#define DOT11F_IE_OXYGENNETWORK_MIN_LEN ( 5 )
+
+#define DOT11F_IE_OXYGENNETWORK_MAX_LEN ( 5 )
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* C++ */
+tANI_U32 dot11fUnpackIeOxygenNetwork(tpAniSirGlobal, tANI_U8*,tANI_U8, tDot11fIEOxygenNetwork*);
+
+tANI_U32 dot11fPackIeOxygenNetwork(tpAniSirGlobal, tDot11fIEOxygenNetwork*, tANI_U8*, tANI_U32, tANI_U32*);
+
+tANI_U32 dot11fGetPackedIEOxygenNetwork(tpAniSirGlobal, tDot11fIEOxygenNetwork*, tANI_U32*);
+
+#ifdef __cplusplus
+}; /* End extern "C". */
+#endif /* C++ */
 // EID 221 (0xdd) {OUI 0x50, 0x6f, 0x9a, 0x09} (Multi-IE)
 typedef struct sDot11fIEP2PAssocReq {
     tANI_U8      present;
@@ -6321,6 +6346,7 @@
     tDot11fIEExtCap               ExtCap;
     tDot11fIEOperatingMode        OperatingMode;
     tDot11fIEWiderBWChanSwitchAnn WiderBWChanSwitchAnn;
+    tDot11fIEOxygenNetwork        OxygenNetwork;
 } tDot11fBeacon;
 
 #define DOT11F_BEACON ( 8 )
@@ -6394,6 +6420,7 @@
     tDot11fIEExtCap               ExtCap;
     tDot11fIEOperatingMode        OperatingMode;
     tDot11fIEWiderBWChanSwitchAnn WiderBWChanSwitchAnn;
+    tDot11fIEOxygenNetwork        OxygenNetwork;
 } tDot11fBeacon2;
 
 #define DOT11F_BEACON2 ( 10 )
@@ -6455,6 +6482,7 @@
     tDot11fIEExtCap               ExtCap;
     tDot11fIEOperatingMode        OperatingMode;
     tDot11fIEWiderBWChanSwitchAnn WiderBWChanSwitchAnn;
+    tDot11fIEOxygenNetwork        OxygenNetwork;
 } tDot11fBeaconIEs;
 
 #define DOT11F_BEACONIES ( 11 )
@@ -7049,6 +7077,7 @@
     tDot11fIEVHTOperation     VHTOperation;
     tDot11fIEVHTExtBssLoad    VHTExtBssLoad;
     tDot11fIEExtCap           ExtCap;
+    tDot11fIEOxygenNetwork    OxygenNetwork;
 } tDot11fProbeResponse;
 
 #define DOT11F_PROBERESPONSE ( 36 )
diff --git a/CORE/MAC/src/pe/include/limSession.h b/CORE/MAC/src/pe/include/limSession.h
index f28227d..214e816 100644
--- a/CORE/MAC/src/pe/include/limSession.h
+++ b/CORE/MAC/src/pe/include/limSession.h
@@ -353,6 +353,8 @@
 #endif
     tANI_BOOLEAN fWaitForProbeRsp;
     tANI_BOOLEAN fIgnoreCapsChange;
+    tANI_U8    oxygenNwkIniFeatureEnabled;
+
 }tPESession, *tpPESession;
 
 #define LIM_MAX_ACTIVE_SESSIONS 4
diff --git a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
index f6f2b6e..612710f 100644
--- a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
@@ -648,6 +648,9 @@
         psessionEntry->txLdpcIniFeatureEnabled = 
                                     pSmeStartBssReq->txLdpcIniFeatureEnabled;
 
+        psessionEntry->oxygenNwkIniFeatureEnabled =
+                                    pSmeStartBssReq->oxygenNwkIniFeatureEnabled;
+
         palCopyMemory(pMac->hHdd, (void*)&psessionEntry->rateSet,
             (void*)&pSmeStartBssReq->operationalRateSet,
             sizeof(tSirMacRateSet));
diff --git a/CORE/MAC/src/pe/lim/limSendManagementFrames.c b/CORE/MAC/src/pe/lim/limSendManagementFrames.c
index dfee03d..9138561 100644
--- a/CORE/MAC/src/pe/lim/limSendManagementFrames.c
+++ b/CORE/MAC/src/pe/lim/limSendManagementFrames.c
@@ -646,6 +646,18 @@
     }
 #endif
 
+    if (psessionEntry->oxygenNwkIniFeatureEnabled &&
+       (eLIM_STA_IN_IBSS_ROLE == psessionEntry->limSystemRole)) {
+        if (wlan_cfgGetInt(pMac, WNI_CFG_OXYGEN_NETWORK_DATA,
+                                     &tmp) != eSIR_SUCCESS){
+            limLog(pMac, LOGW, FL("Unable to get WNI_CFG_OXYGEN_NETWORK_DATA"));
+        }
+        else {
+            pFrm->OxygenNetwork.present = 1;
+            pFrm->OxygenNetwork.data = (tmp & 0xffff);
+        }
+    }
+
     if ( psessionEntry->pLimStartBssReq ) 
     {
       PopulateDot11fWPA( pMac, &( psessionEntry->pLimStartBssReq->rsnIE ),
diff --git a/CORE/MAC/src/pe/lim/limSerDesUtils.c b/CORE/MAC/src/pe/lim/limSerDesUtils.c
index 7990a69..5a85403 100644
--- a/CORE/MAC/src/pe/lim/limSerDesUtils.c
+++ b/CORE/MAC/src/pe/lim/limSerDesUtils.c
@@ -674,6 +674,11 @@
     if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE)
         return eSIR_FAILURE;
 
+    // Extract oxygenNwkIniFeatureEnabled
+    pStartBssReq->oxygenNwkIniFeatureEnabled = *pBuf++;
+    len--;
+    if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE)
+       return eSIR_FAILURE;
 
     // Extract rsnIe
     pStartBssReq->rsnIE.length = limGetU16(pBuf);
@@ -1163,7 +1168,6 @@
     if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE)
         return eSIR_FAILURE;
 
-
     // Extract Titan CB Neighbor BSS info
     pJoinReq->cbNeighbors.cbBssFoundPri = *pBuf;
     pBuf++;
diff --git a/CORE/MAC/src/pe/sch/schBeaconGen.c b/CORE/MAC/src/pe/sch/schBeaconGen.c
index 55940de..55c3292 100644
--- a/CORE/MAC/src/pe/sch/schBeaconGen.c
+++ b/CORE/MAC/src/pe/sch/schBeaconGen.c
@@ -362,6 +362,19 @@
     }
 #endif
 
+    if (psessionEntry->oxygenNwkIniFeatureEnabled &&
+       (eLIM_STA_IN_IBSS_ROLE == psessionEntry->limSystemRole)) {
+        if ((status = wlan_cfgGetInt(pMac, WNI_CFG_OXYGEN_NETWORK_DATA,
+                                     &tmp)) != eSIR_SUCCESS)
+        {
+            limLog(pMac, LOGW, FL("Unable to get WNI_CFG_OXYGEN_NETWORK_DATA"));
+        }
+        else {
+            pBcn2->OxygenNetwork.present = 1;
+            pBcn2->OxygenNetwork.data = (tmp & 0xffff);
+        }
+    }
+
     PopulateDot11fExtSuppRates( pMac, POPULATE_DOT11F_RATES_OPERATIONAL,
                                 &pBcn2->ExtSuppRates, psessionEntry );
  
diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h
index aa88d71..1cb06c9 100644
--- a/CORE/SME/inc/csrApi.h
+++ b/CORE/SME/inc/csrApi.h
@@ -1111,6 +1111,8 @@
     tANI_U8 scanCfgAgingTime;
 
     tANI_U8   enableTxLdpc;
+
+    tANI_BOOLEAN  enableOxygenNwk;
 }tCsrConfigParam;
 
 //Tush
diff --git a/CORE/SME/inc/csrInternal.h b/CORE/SME/inc/csrInternal.h
index 01efb81..4962386 100644
--- a/CORE/SME/inc/csrInternal.h
+++ b/CORE/SME/inc/csrInternal.h
@@ -653,6 +653,7 @@
     tANI_BOOLEAN enableVhtFor24GHz;
 #endif
     tANI_U8   txLdpcEnable;
+    tANI_BOOLEAN  enableOxygenNwk;
 
 }tCsrConfig;
 
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index aba9f11..e757a2f 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -1652,6 +1652,7 @@
         pMac->roam.configParam.enableVhtFor24GHz = pParam->enableVhtFor24GHz;
 #endif
         pMac->roam.configParam.txLdpcEnable = pParam->enableTxLdpc;
+        pMac->roam.configParam.enableOxygenNwk = pParam->enableOxygenNwk;
     }
     
     return status;
@@ -1773,6 +1774,8 @@
 #endif
 
         pParam->enableTxLdpc = pMac->roam.configParam.txLdpcEnable;
+        pParam->enableOxygenNwk = pMac->roam.configParam.enableOxygenNwk;
+
         csrSetChannels(pMac, pParam);
 
         status = eHAL_STATUS_SUCCESS;
@@ -13110,9 +13113,12 @@
         //txLdpcIniFeatureEnabled
         *pBuf = (tANI_U8)(tANI_U8)pMac->roam.configParam.txLdpcEnable;
         pBuf++;
-        
-        
-        // set RSN IE 
+
+        // prop IE enabled in .ini file
+        *pBuf = (tANI_U8)pMac->roam.configParam.enableOxygenNwk;
+        pBuf++;
+
+        // set RSN IE
         if( pParam->nRSNIELength > sizeof(pMsg->rsnIE.rsnIEdata) )
         {
             status = eHAL_STATUS_INVALID_PARAMETER;
diff --git a/CORE/SYS/legacy/src/utils/src/dot11f.c b/CORE/SYS/legacy/src/utils/src/dot11f.c
index 411f593..8183945 100644
--- a/CORE/SYS/legacy/src/utils/src/dot11f.c
+++ b/CORE/SYS/legacy/src/utils/src/dot11f.c
@@ -29,7 +29,7 @@
   *
   *
   * This file was automatically generated by 'framesc'
-  * Tue Jul  2 15:39:44 2013 from the following file(s):
+  * Thu Jul 11 19:02:48 2013 from the following file(s):
   *
   * dot11f.frms
   * 
@@ -3886,6 +3886,20 @@
 #define SigIeOperatingMode ( 0x004c )
 
 
+tANI_U32 dot11fUnpackIeOxygenNetwork(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEOxygenNetwork *pDst)
+{
+    tANI_U32 status = DOT11F_PARSE_SUCCESS;
+    (void) pBuf; (void)ielen; /* Shutup the compiler */
+    if (pDst->present) status = DOT11F_DUPLICATE_IE;
+    pDst->present = 1;
+    framesntohs(pCtx, &pDst->data, pBuf, 0);
+    (void)pCtx;
+    return status;
+} /* End dot11fUnpackIeOxygenNetwork. */
+
+#define SigIeOxygenNetwork ( 0x004d )
+
+
     static const tTLVDefn TLVS_P2PAssocReq[ ] = {
         {offsetof(tDot11fIEP2PAssocReq, P2PCapability), offsetof(tDot11fTLVP2PCapability, present), "P2PCapability", SigTlvP2PCapability, DOT11F_TLV_P2PCAPABILITY, 0, 5, 5, 1, 1, 2, 0, },
         {offsetof(tDot11fIEP2PAssocReq, ExtendedListenTiming), offsetof(tDot11fTLVExtendedListenTiming, present), "ExtendedListenTiming", SigTlvExtendedListenTiming, DOT11F_TLV_EXTENDEDLISTENTIMING, 0, 7, 7, 0, 1, 2, 0, },
@@ -3902,7 +3916,7 @@
     return status;
 } /* End dot11fUnpackIeP2PAssocReq. */
 
-#define SigIeP2PAssocReq ( 0x004d )
+#define SigIeP2PAssocReq ( 0x004e )
 
 
     static const tTLVDefn TLVS_P2PAssocRes[ ] = {
@@ -3920,7 +3934,7 @@
     return status;
 } /* End dot11fUnpackIeP2PAssocRes. */
 
-#define SigIeP2PAssocRes ( 0x004e )
+#define SigIeP2PAssocRes ( 0x004f )
 
 
     static const tTLVDefn TLVS_P2PBeacon[ ] = {
@@ -3939,7 +3953,7 @@
     return status;
 } /* End dot11fUnpackIeP2PBeacon. */
 
-#define SigIeP2PBeacon ( 0x004f )
+#define SigIeP2PBeacon ( 0x0050 )
 
 
     static const tTLVDefn TLVS_P2PBeaconProbeRes[ ] = {
@@ -3961,7 +3975,7 @@
     return status;
 } /* End dot11fUnpackIeP2PBeaconProbeRes. */
 
-#define SigIeP2PBeaconProbeRes ( 0x0050 )
+#define SigIeP2PBeaconProbeRes ( 0x0051 )
 
 
     static const tTLVDefn TLVS_P2PDeAuth[ ] = {
@@ -3978,7 +3992,7 @@
     return status;
 } /* End dot11fUnpackIeP2PDeAuth. */
 
-#define SigIeP2PDeAuth ( 0x0051 )
+#define SigIeP2PDeAuth ( 0x0052 )
 
 
     static const tTLVDefn TLVS_P2PDeviceDiscoverabilityReq[ ] = {
@@ -3996,7 +4010,7 @@
     return status;
 } /* End dot11fUnpackIeP2PDeviceDiscoverabilityReq. */
 
-#define SigIeP2PDeviceDiscoverabilityReq ( 0x0052 )
+#define SigIeP2PDeviceDiscoverabilityReq ( 0x0053 )
 
 
     static const tTLVDefn TLVS_P2PDeviceDiscoverabilityRes[ ] = {
@@ -4013,7 +4027,7 @@
     return status;
 } /* End dot11fUnpackIeP2PDeviceDiscoverabilityRes. */
 
-#define SigIeP2PDeviceDiscoverabilityRes ( 0x0053 )
+#define SigIeP2PDeviceDiscoverabilityRes ( 0x0054 )
 
 
     static const tTLVDefn TLVS_P2PDisAssoc[ ] = {
@@ -4030,7 +4044,7 @@
     return status;
 } /* End dot11fUnpackIeP2PDisAssoc. */
 
-#define SigIeP2PDisAssoc ( 0x0054 )
+#define SigIeP2PDisAssoc ( 0x0055 )
 
 
     static const tTLVDefn TLVS_P2PGONegCnf[ ] = {
@@ -4051,7 +4065,7 @@
     return status;
 } /* End dot11fUnpackIeP2PGONegCnf. */
 
-#define SigIeP2PGONegCnf ( 0x0055 )
+#define SigIeP2PGONegCnf ( 0x0056 )
 
 
     static const tTLVDefn TLVS_P2PGONegReq[ ] = {
@@ -4076,7 +4090,7 @@
     return status;
 } /* End dot11fUnpackIeP2PGONegReq. */
 
-#define SigIeP2PGONegReq ( 0x0056 )
+#define SigIeP2PGONegReq ( 0x0057 )
 
 
     static const tTLVDefn TLVS_P2PGONegRes[ ] = {
@@ -4101,7 +4115,7 @@
     return status;
 } /* End dot11fUnpackIeP2PGONegRes. */
 
-#define SigIeP2PGONegRes ( 0x0057 )
+#define SigIeP2PGONegRes ( 0x0058 )
 
 
     static const tTLVDefn TLVS_P2PGONegWPS[ ] = {
@@ -4119,7 +4133,7 @@
     return status;
 } /* End dot11fUnpackIeP2PGONegWPS. */
 
-#define SigIeP2PGONegWPS ( 0x0058 )
+#define SigIeP2PGONegWPS ( 0x0059 )
 
 
 tANI_U32 dot11fUnpackIeP2PIEOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEP2PIEOpaque *pDst)
@@ -4139,7 +4153,7 @@
     return status;
 } /* End dot11fUnpackIeP2PIEOpaque. */
 
-#define SigIeP2PIEOpaque ( 0x0059 )
+#define SigIeP2PIEOpaque ( 0x005a )
 
 
     static const tTLVDefn TLVS_P2PInvitationReq[ ] = {
@@ -4162,7 +4176,7 @@
     return status;
 } /* End dot11fUnpackIeP2PInvitationReq. */
 
-#define SigIeP2PInvitationReq ( 0x005a )
+#define SigIeP2PInvitationReq ( 0x005b )
 
 
     static const tTLVDefn TLVS_P2PInvitationRes[ ] = {
@@ -4183,7 +4197,7 @@
     return status;
 } /* End dot11fUnpackIeP2PInvitationRes. */
 
-#define SigIeP2PInvitationRes ( 0x005b )
+#define SigIeP2PInvitationRes ( 0x005c )
 
 
     static const tTLVDefn TLVS_P2PNoticeOfAbsence[ ] = {
@@ -4200,7 +4214,7 @@
     return status;
 } /* End dot11fUnpackIeP2PNoticeOfAbsence. */
 
-#define SigIeP2PNoticeOfAbsence ( 0x005c )
+#define SigIeP2PNoticeOfAbsence ( 0x005d )
 
 
     static const tTLVDefn TLVS_P2PPresenceResponse[ ] = {
@@ -4218,7 +4232,7 @@
     return status;
 } /* End dot11fUnpackIeP2PPresenceResponse. */
 
-#define SigIeP2PPresenceResponse ( 0x005d )
+#define SigIeP2PPresenceResponse ( 0x005e )
 
 
     static const tTLVDefn TLVS_P2PProbeReq[ ] = {
@@ -4239,7 +4253,7 @@
     return status;
 } /* End dot11fUnpackIeP2PProbeReq. */
 
-#define SigIeP2PProbeReq ( 0x005e )
+#define SigIeP2PProbeReq ( 0x005f )
 
 
     static const tTLVDefn TLVS_P2PProbeRes[ ] = {
@@ -4260,7 +4274,7 @@
     return status;
 } /* End dot11fUnpackIeP2PProbeRes. */
 
-#define SigIeP2PProbeRes ( 0x005f )
+#define SigIeP2PProbeRes ( 0x0060 )
 
 
     static const tTLVDefn TLVS_P2PProvisionDiscoveryReq[ ] = {
@@ -4279,7 +4293,7 @@
     return status;
 } /* End dot11fUnpackIeP2PProvisionDiscoveryReq. */
 
-#define SigIeP2PProvisionDiscoveryReq ( 0x0060 )
+#define SigIeP2PProvisionDiscoveryReq ( 0x0061 )
 
 
     static const tTLVDefn TLVS_P2PWSCProvisionDiscoveryRes[ ] = {
@@ -4296,7 +4310,7 @@
     return status;
 } /* End dot11fUnpackIeP2PWSCProvisionDiscoveryRes. */
 
-#define SigIeP2PWSCProvisionDiscoveryRes ( 0x0061 )
+#define SigIeP2PWSCProvisionDiscoveryRes ( 0x0062 )
 
 
 tANI_U32 dot11fUnpackIePTIControl(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEPTIControl *pDst)
@@ -4313,7 +4327,7 @@
     return status;
 } /* End dot11fUnpackIePTIControl. */
 
-#define SigIePTIControl ( 0x0062 )
+#define SigIePTIControl ( 0x0063 )
 
 
 tANI_U32 dot11fUnpackIePUBufferStatus(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEPUBufferStatus *pDst)
@@ -4333,7 +4347,7 @@
     return status;
 } /* End dot11fUnpackIePUBufferStatus. */
 
-#define SigIePUBufferStatus ( 0x0063 )
+#define SigIePUBufferStatus ( 0x0064 )
 
 
 tANI_U32 dot11fUnpackIePowerCaps(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEPowerCaps *pDst)
@@ -4350,7 +4364,7 @@
     return status;
 } /* End dot11fUnpackIePowerCaps. */
 
-#define SigIePowerCaps ( 0x0064 )
+#define SigIePowerCaps ( 0x0065 )
 
 
 tANI_U32 dot11fUnpackIePowerConstraints(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEPowerConstraints *pDst)
@@ -4364,7 +4378,7 @@
     return status;
 } /* End dot11fUnpackIePowerConstraints. */
 
-#define SigIePowerConstraints ( 0x0065 )
+#define SigIePowerConstraints ( 0x0066 )
 
 
 tANI_U32 dot11fUnpackIeQBSSLoad(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEQBSSLoad *pDst)
@@ -4384,7 +4398,7 @@
     return status;
 } /* End dot11fUnpackIeQBSSLoad. */
 
-#define SigIeQBSSLoad ( 0x0066 )
+#define SigIeQBSSLoad ( 0x0067 )
 
 
 tANI_U32 dot11fUnpackIeQOSCapsAp(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEQOSCapsAp *pDst)
@@ -4404,7 +4418,7 @@
     return status;
 } /* End dot11fUnpackIeQOSCapsAp. */
 
-#define SigIeQOSCapsAp ( 0x0067 )
+#define SigIeQOSCapsAp ( 0x0068 )
 
 
 tANI_U32 dot11fUnpackIeQOSCapsStation(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEQOSCapsStation *pDst)
@@ -4426,7 +4440,7 @@
     return status;
 } /* End dot11fUnpackIeQOSCapsStation. */
 
-#define SigIeQOSCapsStation ( 0x0068 )
+#define SigIeQOSCapsStation ( 0x0069 )
 
 
 tANI_U32 dot11fUnpackIeQuiet(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEQuiet *pDst)
@@ -4449,7 +4463,7 @@
     return status;
 } /* End dot11fUnpackIeQuiet. */
 
-#define SigIeQuiet ( 0x0069 )
+#define SigIeQuiet ( 0x006a )
 
 
 tANI_U32 dot11fUnpackIeRCPIIE(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIERCPIIE *pDst)
@@ -4463,7 +4477,7 @@
     return status;
 } /* End dot11fUnpackIeRCPIIE. */
 
-#define SigIeRCPIIE ( 0x006a )
+#define SigIeRCPIIE ( 0x006b )
 
 
     static const tFFDefn FFS_RICDataDesc[ ] = {
@@ -4503,7 +4517,7 @@
     return status;
 } /* End dot11fUnpackIeRICDataDesc. */
 
-#define SigIeRICDataDesc ( 0x006b )
+#define SigIeRICDataDesc ( 0x006c )
 
 
 tANI_U32 dot11fUnpackIeRSN(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIERSN *pDst)
@@ -4606,7 +4620,7 @@
     return status;
 } /* End dot11fUnpackIeRSN. */
 
-#define SigIeRSN ( 0x006c )
+#define SigIeRSN ( 0x006d )
 
 
 tANI_U32 dot11fUnpackIeRSNIIE(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIERSNIIE *pDst)
@@ -4620,7 +4634,7 @@
     return status;
 } /* End dot11fUnpackIeRSNIIE. */
 
-#define SigIeRSNIIE ( 0x006d )
+#define SigIeRSNIIE ( 0x006e )
 
 
 tANI_U32 dot11fUnpackIeRSNOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIERSNOpaque *pDst)
@@ -4640,7 +4654,7 @@
     return status;
 } /* End dot11fUnpackIeRSNOpaque. */
 
-#define SigIeRSNOpaque ( 0x006e )
+#define SigIeRSNOpaque ( 0x006f )
 
 
 tANI_U32 dot11fUnpackIeSuppChannels(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIESuppChannels *pDst)
@@ -4660,7 +4674,7 @@
     return status;
 } /* End dot11fUnpackIeSuppChannels. */
 
-#define SigIeSuppChannels ( 0x006f )
+#define SigIeSuppChannels ( 0x0070 )
 
 
 tANI_U32 dot11fUnpackIeSuppRates(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIESuppRates *pDst)
@@ -4688,7 +4702,7 @@
     return status;
 } /* End dot11fUnpackIeSuppRates. */
 
-#define SigIeSuppRates ( 0x0070 )
+#define SigIeSuppRates ( 0x0071 )
 
 
 tANI_U32 dot11fUnpackIeTIM(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIETIM *pDst)
@@ -4717,7 +4731,7 @@
     return status;
 } /* End dot11fUnpackIeTIM. */
 
-#define SigIeTIM ( 0x0071 )
+#define SigIeTIM ( 0x0072 )
 
 
 tANI_U32 dot11fUnpackIeTPCReport(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIETPCReport *pDst)
@@ -4734,7 +4748,7 @@
     return status;
 } /* End dot11fUnpackIeTPCReport. */
 
-#define SigIeTPCReport ( 0x0072 )
+#define SigIeTPCReport ( 0x0073 )
 
 
 tANI_U32 dot11fUnpackIeTPCRequest(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIETPCRequest *pDst)
@@ -4747,7 +4761,7 @@
     return status;
 } /* End dot11fUnpackIeTPCRequest. */
 
-#define SigIeTPCRequest ( 0x0073 )
+#define SigIeTPCRequest ( 0x0074 )
 
 
 tANI_U32 dot11fUnpackIeVHTCaps(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEVHTCaps *pDst)
@@ -4800,7 +4814,7 @@
     return status;
 } /* End dot11fUnpackIeVHTCaps. */
 
-#define SigIeVHTCaps ( 0x0074 )
+#define SigIeVHTCaps ( 0x0075 )
 
 
 tANI_U32 dot11fUnpackIeVHTExtBssLoad(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEVHTExtBssLoad *pDst)
@@ -4826,7 +4840,7 @@
     return status;
 } /* End dot11fUnpackIeVHTExtBssLoad. */
 
-#define SigIeVHTExtBssLoad ( 0x0075 )
+#define SigIeVHTExtBssLoad ( 0x0076 )
 
 
 tANI_U32 dot11fUnpackIeVHTOperation(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEVHTOperation *pDst)
@@ -4849,7 +4863,7 @@
     return status;
 } /* End dot11fUnpackIeVHTOperation. */
 
-#define SigIeVHTOperation ( 0x0076 )
+#define SigIeVHTOperation ( 0x0077 )
 
 
 tANI_U32 dot11fUnpackIeWAPI(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWAPI *pDst)
@@ -4918,7 +4932,7 @@
     return status;
 } /* End dot11fUnpackIeWAPI. */
 
-#define SigIeWAPI ( 0x0077 )
+#define SigIeWAPI ( 0x0078 )
 
 
 tANI_U32 dot11fUnpackIeWAPIOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWAPIOpaque *pDst)
@@ -4938,7 +4952,7 @@
     return status;
 } /* End dot11fUnpackIeWAPIOpaque. */
 
-#define SigIeWAPIOpaque ( 0x0078 )
+#define SigIeWAPIOpaque ( 0x0079 )
 
 
 tANI_U32 dot11fUnpackIeWFATPC(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWFATPC *pDst)
@@ -4955,7 +4969,7 @@
     return status;
 } /* End dot11fUnpackIeWFATPC. */
 
-#define SigIeWFATPC ( 0x0079 )
+#define SigIeWFATPC ( 0x007a )
 
 
 tANI_U32 dot11fUnpackIeWFDIEOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWFDIEOpaque *pDst)
@@ -4975,7 +4989,7 @@
     return status;
 } /* End dot11fUnpackIeWFDIEOpaque. */
 
-#define SigIeWFDIEOpaque ( 0x007a )
+#define SigIeWFDIEOpaque ( 0x007b )
 
 
 tANI_U32 dot11fUnpackIeWMMCaps(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWMMCaps *pDst)
@@ -5003,7 +5017,7 @@
     return status;
 } /* End dot11fUnpackIeWMMCaps. */
 
-#define SigIeWMMCaps ( 0x007b )
+#define SigIeWMMCaps ( 0x007c )
 
 
 tANI_U32 dot11fUnpackIeWMMInfoAp(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWMMInfoAp *pDst)
@@ -5024,7 +5038,7 @@
     return status;
 } /* End dot11fUnpackIeWMMInfoAp. */
 
-#define SigIeWMMInfoAp ( 0x007c )
+#define SigIeWMMInfoAp ( 0x007d )
 
 
 tANI_U32 dot11fUnpackIeWMMInfoStation(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWMMInfoStation *pDst)
@@ -5049,7 +5063,7 @@
     return status;
 } /* End dot11fUnpackIeWMMInfoStation. */
 
-#define SigIeWMMInfoStation ( 0x007d )
+#define SigIeWMMInfoStation ( 0x007e )
 
 
 tANI_U32 dot11fUnpackIeWMMParams(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWMMParams *pDst)
@@ -5142,7 +5156,7 @@
     return status;
 } /* End dot11fUnpackIeWMMParams. */
 
-#define SigIeWMMParams ( 0x007e )
+#define SigIeWMMParams ( 0x007f )
 
 
 tANI_U32 dot11fUnpackIeWPA(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWPA *pDst)
@@ -5224,7 +5238,7 @@
     return status;
 } /* End dot11fUnpackIeWPA. */
 
-#define SigIeWPA ( 0x007f )
+#define SigIeWPA ( 0x0080 )
 
 
 tANI_U32 dot11fUnpackIeWPAOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWPAOpaque *pDst)
@@ -5244,7 +5258,7 @@
     return status;
 } /* End dot11fUnpackIeWPAOpaque. */
 
-#define SigIeWPAOpaque ( 0x0080 )
+#define SigIeWPAOpaque ( 0x0081 )
 
 
     static const tTLVDefn TLVS_WSC[ ] = {
@@ -5282,7 +5296,7 @@
     return status;
 } /* End dot11fUnpackIeWSC. */
 
-#define SigIeWSC ( 0x0081 )
+#define SigIeWSC ( 0x0082 )
 
 
 tANI_U32 dot11fUnpackIeWiderBWChanSwitchAnn(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWiderBWChanSwitchAnn *pDst)
@@ -5302,7 +5316,7 @@
     return status;
 } /* End dot11fUnpackIeWiderBWChanSwitchAnn. */
 
-#define SigIeWiderBWChanSwitchAnn ( 0x0082 )
+#define SigIeWiderBWChanSwitchAnn ( 0x0083 )
 
 
     static const tTLVDefn TLVS_WscAssocReq[ ] = {
@@ -5321,7 +5335,7 @@
     return status;
 } /* End dot11fUnpackIeWscAssocReq. */
 
-#define SigIeWscAssocReq ( 0x0083 )
+#define SigIeWscAssocReq ( 0x0084 )
 
 
     static const tTLVDefn TLVS_WscAssocRes[ ] = {
@@ -5340,7 +5354,7 @@
     return status;
 } /* End dot11fUnpackIeWscAssocRes. */
 
-#define SigIeWscAssocRes ( 0x0084 )
+#define SigIeWscAssocRes ( 0x0085 )
 
 
     static const tTLVDefn TLVS_WscBeacon[ ] = {
@@ -5365,7 +5379,7 @@
     return status;
 } /* End dot11fUnpackIeWscBeacon. */
 
-#define SigIeWscBeacon ( 0x0085 )
+#define SigIeWscBeacon ( 0x0086 )
 
 
     static const tTLVDefn TLVS_WscBeaconProbeRes[ ] = {
@@ -5398,7 +5412,7 @@
     return status;
 } /* End dot11fUnpackIeWscBeaconProbeRes. */
 
-#define SigIeWscBeaconProbeRes ( 0x0086 )
+#define SigIeWscBeaconProbeRes ( 0x0087 )
 
 
 tANI_U32 dot11fUnpackIeWscIEOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWscIEOpaque *pDst)
@@ -5418,7 +5432,7 @@
     return status;
 } /* End dot11fUnpackIeWscIEOpaque. */
 
-#define SigIeWscIEOpaque ( 0x0087 )
+#define SigIeWscIEOpaque ( 0x0088 )
 
 
     static const tTLVDefn TLVS_WscProbeReq[ ] = {
@@ -5449,7 +5463,7 @@
     return status;
 } /* End dot11fUnpackIeWscProbeReq. */
 
-#define SigIeWscProbeReq ( 0x0088 )
+#define SigIeWscProbeReq ( 0x0089 )
 
 
     static const tTLVDefn TLVS_WscProbeRes[ ] = {
@@ -5482,7 +5496,7 @@
     return status;
 } /* End dot11fUnpackIeWscProbeRes. */
 
-#define SigIeWscProbeRes ( 0x0089 )
+#define SigIeWscProbeRes ( 0x008a )
 
 
     static const tTLVDefn TLVS_WscReassocRes[ ] = {
@@ -5501,7 +5515,7 @@
     return status;
 } /* End dot11fUnpackIeWscReassocRes. */
 
-#define SigIeWscReassocRes ( 0x008a )
+#define SigIeWscReassocRes ( 0x008b )
 
 
     static const tFFDefn FFS_AddBAReq[] = {
@@ -8413,6 +8427,7 @@
         {offsetof(tDot11fBeacon, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 10, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
         {offsetof(tDot11fBeacon, OperatingMode), offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode" , 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OPERATINGMODE, 0, },
         {offsetof(tDot11fBeacon, WiderBWChanSwitchAnn), offsetof(tDot11fIEWiderBWChanSwitchAnn, present), 0, "WiderBWChanSwitchAnn" , 0, 5, 5, SigIeWiderBWChanSwitchAnn, {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, },
+        {offsetof(tDot11fBeacon, OxygenNetwork), offsetof(tDot11fIEOxygenNetwork, present), 0, "OxygenNetwork" , 0, 7, 7, SigIeOxygenNetwork, {0, 22, 50, 0, 0}, 3, DOT11F_EID_OXYGENNETWORK, 0, },
     {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },    };
 
 tANI_U32 dot11fUnpackBeacon(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, tDot11fBeacon *pFrm)
@@ -9497,6 +9512,15 @@
             FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq0, 1);
             FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq1, 1);
         }
+        FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("OxygenNetwork:\n"));
+        if (!pFrm->OxygenNetwork.present)
+        {
+            FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("Not present.\n"));
+        }
+        else
+        {
+            FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* )&pFrm->OxygenNetwork.data, 2);
+        }
     }
 #   endif // DOT11F_DUMP_FRAMES
     return status;
@@ -9632,6 +9656,7 @@
         {offsetof(tDot11fBeacon2, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 10, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
         {offsetof(tDot11fBeacon2, OperatingMode), offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode" , 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OPERATINGMODE, 0, },
         {offsetof(tDot11fBeacon2, WiderBWChanSwitchAnn), offsetof(tDot11fIEWiderBWChanSwitchAnn, present), 0, "WiderBWChanSwitchAnn" , 0, 5, 5, SigIeWiderBWChanSwitchAnn, {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, },
+        {offsetof(tDot11fBeacon2, OxygenNetwork), offsetof(tDot11fIEOxygenNetwork, present), 0, "OxygenNetwork" , 0, 7, 7, SigIeOxygenNetwork, {0, 22, 50, 0, 0}, 3, DOT11F_EID_OXYGENNETWORK, 0, },
     {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },    };
 
 tANI_U32 dot11fUnpackBeacon2(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, tDot11fBeacon2 *pFrm)
@@ -10564,6 +10589,15 @@
             FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq0, 1);
             FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq1, 1);
         }
+        FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("OxygenNetwork:\n"));
+        if (!pFrm->OxygenNetwork.present)
+        {
+            FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("Not present.\n"));
+        }
+        else
+        {
+            FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->OxygenNetwork.data, 2);
+        }
     }
 #   endif // DOT11F_DUMP_FRAMES
     return status;
@@ -10619,6 +10653,7 @@
         {offsetof(tDot11fBeaconIEs, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 10, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
         {offsetof(tDot11fBeaconIEs, OperatingMode), offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode" , 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OPERATINGMODE, 0, },
         {offsetof(tDot11fBeaconIEs, WiderBWChanSwitchAnn), offsetof(tDot11fIEWiderBWChanSwitchAnn, present), 0, "WiderBWChanSwitchAnn" , 0, 5, 5, SigIeWiderBWChanSwitchAnn, {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, },
+        {offsetof(tDot11fBeaconIEs, OxygenNetwork), offsetof(tDot11fIEOxygenNetwork, present), 0, "OxygenNetwork" , 0, 7, 7, SigIeOxygenNetwork, {0, 22, 50, 0, 0}, 3, DOT11F_EID_OXYGENNETWORK, 0, },
     {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },    };
 
 tANI_U32 dot11fUnpackBeaconIEs(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, tDot11fBeaconIEs *pFrm)
@@ -11811,6 +11846,15 @@
             FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq0, 1);
             FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq1, 1);
         }
+        FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("OxygenNetwork:\n"));
+        if (!pFrm->OxygenNetwork.present)
+        {
+            FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("Not present.\n"));
+        }
+        else
+        {
+            FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* )&pFrm->OxygenNetwork.data, 2);
+        }
     }
 #   endif // DOT11F_DUMP_FRAMES
     return status;
@@ -14084,6 +14128,7 @@
         {offsetof(tDot11fProbeResponse, VHTOperation), offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation" , 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTOPERATION, 0, },
         {offsetof(tDot11fProbeResponse, VHTExtBssLoad), offsetof(tDot11fIEVHTExtBssLoad, present), 0, "VHTExtBssLoad" , 0, 7, 7, SigIeVHTExtBssLoad, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTEXTBSSLOAD, 0, },
         {offsetof(tDot11fProbeResponse, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 10, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
+        {offsetof(tDot11fProbeResponse, OxygenNetwork), offsetof(tDot11fIEOxygenNetwork, present), 0, "OxygenNetwork" , 0, 7, 7, SigIeOxygenNetwork, {0, 22, 50, 0, 0}, 3, DOT11F_EID_OXYGENNETWORK, 0, },
     {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },    };
 
 tANI_U32 dot11fUnpackProbeResponse(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, tDot11fProbeResponse *pFrm)
@@ -15222,6 +15267,15 @@
             FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("operModeNotification (1): %d\n"), pFrm->ExtCap.operModeNotification);
             FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("reserved7 (1): %d\n"), pFrm->ExtCap.reserved7);
         }
+        FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("OxygenNetwork:\n"));
+        if (!pFrm->OxygenNetwork.present)
+        {
+            FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("Not present.\n"));
+        }
+        else
+        {
+            FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* )&pFrm->OxygenNetwork.data, 2);
+        }
     }
 #   endif // DOT11F_DUMP_FRAMES
     return status;
@@ -20381,6 +20435,9 @@
                 case SigIeOperatingMode:
                         status |= dot11fUnpackIeOperatingMode(pCtx, pBufRemaining, len, ( tDot11fIEOperatingMode* )(pFrm + pIe->offset + sizeof(tDot11fIEOperatingMode)*countOffset) );
                             break;
+                case SigIeOxygenNetwork:
+                        status |= dot11fUnpackIeOxygenNetwork(pCtx, pBufRemaining, len, ( tDot11fIEOxygenNetwork* )(pFrm + pIe->offset + sizeof(tDot11fIEOxygenNetwork)*countOffset) );
+                            break;
                 case SigIeP2PAssocReq:
                         status |= dot11fUnpackIeP2PAssocReq(pCtx, pBufRemaining, len, ( tDot11fIEP2PAssocReq* )(pFrm + pIe->offset + sizeof(tDot11fIEP2PAssocReq)*countOffset) );
                             break;
@@ -22551,6 +22608,11 @@
                             byteCount = 1;
                             pIePresent = ( (tDot11fIEOperatingMode* )(pFrm + pIe->offset + offset * i  ))->present;
                             break;
+                case SigIeOxygenNetwork:
+                            offset = sizeof(tDot11fIEOxygenNetwork);
+                            byteCount = 2;
+                            pIePresent = ( (tDot11fIEOxygenNetwork* )(pFrm + pIe->offset + offset * i  ))->present;
+                            break;
                 case SigIeP2PAssocReq:
                             offset = sizeof(tDot11fIEP2PAssocReq);
                             status |= dot11fGetPackedIEP2PAssocReq(pCtx, ( tDot11fIEP2PAssocReq* )(pFrm + pIe->offset + offset * i ), pnNeeded);
@@ -24815,7 +24877,7 @@
         ++pBuf; ++(*pnConsumed);
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->name ), pSrc->num_name);
         *pnConsumed += pSrc->num_name;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -24848,7 +24910,7 @@
         pBuf += 1;
         *pBuf = pSrc->type;
         *pnConsumed += 1;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -24878,7 +24940,7 @@
         ++pBuf; ++(*pnConsumed);
         DOT11F_MEMCPY(pCtx, pBuf, pSrc->countryStr, 2);
         *pnConsumed += 2;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -24922,7 +24984,7 @@
         pBuf += 8;
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->key ), pSrc->num_key);
         *pnConsumed += pSrc->num_key;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -24952,7 +25014,7 @@
         ++pBuf; ++(*pnConsumed);
         *pBuf = pSrc->enabled;
         *pnConsumed += 1;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -25054,7 +25116,7 @@
         pBuf += 6;
         *pBuf = pSrc->channel;
         *pnConsumed += 1;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -25087,7 +25149,7 @@
         pBuf += 2;
         frameshtons(pCtx, pBuf, pSrc->channel_util, 1);
         *pnConsumed += 2;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -25117,7 +25179,7 @@
         ++pBuf; ++(*pnConsumed);
         *pBuf = pSrc->type;
         *pnConsumed += 1;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -25147,7 +25209,7 @@
         ++pBuf; ++(*pnConsumed);
         frameshtons(pCtx, pBuf, pSrc->capability, 0);
         *pnConsumed += 2;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -25186,7 +25248,7 @@
         pBuf += 1;
         *pBuf = pSrc->channel_switch_count;
         *pnConsumed += 1;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -25303,7 +25365,7 @@
         nBuf -=  1 ;
         frameshtons(pCtx, pBuf, pSrc->acvo_txoplimit, 0);
         *pnConsumed += 2;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -25342,7 +25404,7 @@
         pBuf += 2;
         frameshtons(pCtx, pBuf, pSrc->quiet_offset, 0);
         *pnConsumed += 2;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -25372,7 +25434,7 @@
         ++pBuf; ++(*pnConsumed);
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->rates ), pSrc->num_rates);
         *pnConsumed += pSrc->num_rates;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -25402,7 +25464,7 @@
         ++pBuf; ++(*pnConsumed);
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->PMK_R0_ID ), pSrc->num_PMK_R0_ID);
         *pnConsumed += pSrc->num_PMK_R0_ID;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -25432,7 +25494,7 @@
         ++pBuf; ++(*pnConsumed);
         DOT11F_MEMCPY(pCtx, pBuf, pSrc->PMK_R1_ID, 6);
         *pnConsumed += 6;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -25465,7 +25527,7 @@
         pBuf += 2;
         frameshtons(pCtx, pBuf, pSrc->BeaconIntvl, 0);
         *pnConsumed += 2;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -25505,7 +25567,7 @@
         tmp98__ |= ( pSrc->rsvd << 12 );
         frameshtons(pCtx, pBuf, tmp98__, 0);
         *pnConsumed += 2;
-        // fieldsEndFlag  = 1 
+        // fieldsEndFlag  = 1
         nBuf -=  2 ;
         break;
     }
@@ -25545,7 +25607,7 @@
         pBuf += 1;
         *pBuf = pSrc->rev_fcs_state;
         *pnConsumed += 1;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -25575,7 +25637,7 @@
         ++pBuf; ++(*pnConsumed);
         *pBuf = pSrc->enable;
         *pnConsumed += 1;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -25611,7 +25673,7 @@
         pBuf += 1;
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->build_version ), pSrc->num_build_version);
         *pnConsumed += pSrc->num_build_version;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -25641,7 +25703,7 @@
         ++pBuf; ++(*pnConsumed);
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->wdsData ), pSrc->num_wdsData);
         *pnConsumed += pSrc->num_wdsData;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -25674,7 +25736,7 @@
         pBuf += 1;
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->channelList ), pSrc->num_channelList);
         *pnConsumed += pSrc->num_channelList;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -25704,7 +25766,7 @@
         ++pBuf; ++(*pnConsumed);
         *pBuf = pSrc->reportingDetail;
         *pnConsumed += 1;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -25734,7 +25796,7 @@
         ++pBuf; ++(*pnConsumed);
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->reportedFields ), pSrc->num_reportedFields);
         *pnConsumed += pSrc->num_reportedFields;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -25767,7 +25829,7 @@
         pBuf += 1;
         *pBuf = pSrc->threshold;
         *pnConsumed += 1;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -25800,7 +25862,7 @@
         pBuf += 1;
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->vendorSpecific ), pSrc->num_vendorSpecific);
         *pnConsumed += pSrc->num_vendorSpecific;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -25833,7 +25895,7 @@
         pBuf += 1;
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->vendorSpecific ), pSrc->num_vendorSpecific);
         *pnConsumed += pSrc->num_vendorSpecific;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -25869,7 +25931,7 @@
         pBuf += 1;
         frameshtons(pCtx, pBuf, pSrc->statusCode, 0);
         *pnConsumed += 2;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -25902,7 +25964,7 @@
         pBuf += 1;
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->variableData ), pSrc->num_variableData);
         *pnConsumed += pSrc->num_variableData;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -25987,7 +26049,7 @@
         tmp103__ |= ( pSrc->reserved << 2 );
         *pBuf = tmp103__;
         *pnConsumed += 1;
-        // fieldsEndFlag  = 1 
+        // fieldsEndFlag  = 1
         nBuf -=  1 ;
         break;
     }
@@ -26018,7 +26080,7 @@
         ++pBuf; ++(*pnConsumed);
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->requested_eids ), pSrc->num_requested_eids);
         *pnConsumed += pSrc->num_requested_eids;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -26048,7 +26110,7 @@
         ++pBuf; ++(*pnConsumed);
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->ssid ), pSrc->num_ssid);
         *pnConsumed += pSrc->num_ssid;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -26097,7 +26159,7 @@
         pBuf += 2;
         frameshtons(pCtx, pBuf, pSrc->spec_interval, 0);
         *pnConsumed += 2;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -26147,7 +26209,7 @@
                 pBuf += 6;
                 frameshtons(pCtx, pBuf, pSrc->info.EthParams.type, 0);
                 *pnConsumed += 2;
-                // fieldsEndFlag = 1 
+                // fieldsEndFlag = 1
             break;
             case 1:
                 *pBuf = pSrc->info.IpParams.version;
@@ -26176,7 +26238,7 @@
                         pBuf += 1;
                         *pBuf = pSrc->info.IpParams.params.IpV4Params.reserved;
                         *pnConsumed += 1;
-                        // fieldsEndFlag = 1 
+                        // fieldsEndFlag = 1
                     break;
                     case 6:
                         DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.IpParams.params.IpV6Params.source, 16);
@@ -26193,14 +26255,14 @@
                         pBuf += 2;
                         DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.IpParams.params.IpV6Params.flow_label, 3);
                         *pnConsumed += 3;
-                        // fieldsEndFlag = 1 
+                        // fieldsEndFlag = 1
                     break;
                 }
             break;
             case 2:
                 frameshtons(pCtx, pBuf, pSrc->info.Params8021dq.tag_type, 0);
                 *pnConsumed += 2;
-                // fieldsEndFlag = 1 
+                // fieldsEndFlag = 1
             break;
         }
         break;
@@ -26232,7 +26294,7 @@
         ++pBuf; ++(*pnConsumed);
         *pBuf = pSrc->processing;
         *pnConsumed += 1;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -26262,7 +26324,7 @@
         ++pBuf; ++(*pnConsumed);
         frameshtonl(pCtx, pBuf, pSrc->delay, 0);
         *pnConsumed += 4;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -26361,7 +26423,7 @@
         pBuf += 2;
         frameshtons(pCtx, pBuf, pSrc->medium_time, 0);
         *pnConsumed += 2;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -26423,7 +26485,7 @@
         pBuf += 2;
         frameshtons(pCtx, pBuf, pSrc->spec_interval, 0);
         *pnConsumed += 2;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -26486,7 +26548,7 @@
                 pBuf += 6;
                 frameshtons(pCtx, pBuf, pSrc->info.EthParams.type, 0);
                 *pnConsumed += 2;
-                // fieldsEndFlag = 1 
+                // fieldsEndFlag = 1
             break;
             case 1:
                 *pBuf = pSrc->info.IpParams.version;
@@ -26515,7 +26577,7 @@
                         pBuf += 1;
                         *pBuf = pSrc->info.IpParams.params.IpV4Params.reserved;
                         *pnConsumed += 1;
-                        // fieldsEndFlag = 1 
+                        // fieldsEndFlag = 1
                     break;
                     case 6:
                         DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.IpParams.params.IpV6Params.source, 10);
@@ -26532,14 +26594,14 @@
                         pBuf += 2;
                         DOT11F_MEMCPY(pCtx, pBuf, pSrc->info.IpParams.params.IpV6Params.flow_label, 3);
                         *pnConsumed += 3;
-                        // fieldsEndFlag = 1 
+                        // fieldsEndFlag = 1
                     break;
                 }
             break;
             case 2:
                 frameshtons(pCtx, pBuf, pSrc->info.Params8021dq.tag_type, 0);
                 *pnConsumed += 2;
-                // fieldsEndFlag = 1 
+                // fieldsEndFlag = 1
             break;
         }
         break;
@@ -26584,7 +26646,7 @@
         pBuf += 1;
         *pBuf = pSrc->processing;
         *pnConsumed += 1;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -26627,7 +26689,7 @@
         pBuf += 1;
         frameshtonl(pCtx, pBuf, pSrc->delay, 0);
         *pnConsumed += 4;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -26739,7 +26801,7 @@
         pBuf += 2;
         frameshtons(pCtx, pBuf, pSrc->medium_time, 0);
         *pnConsumed += 2;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -26849,7 +26911,7 @@
         ++pBuf; ++(*pnConsumed);
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->data ), pSrc->num_data);
         *pnConsumed += pSrc->num_data;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -26894,7 +26956,7 @@
         tmp112__ |= ( pSrc->reserved << 3 );
         *pBuf = tmp112__;
         *pnConsumed += 1;
-        // fieldsEndFlag  = 1 
+        // fieldsEndFlag  = 1
         nBuf -=  1 ;
         break;
     }
@@ -26939,7 +27001,7 @@
         pBuf += 1;
         frameshtons(pCtx, pBuf, pSrc->msmt_interval, 0);
         *pnConsumed += 2;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -26980,7 +27042,7 @@
         pBuf += 1;
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->tsrates ), pSrc->num_tsrates);
         *pnConsumed += pSrc->num_tsrates;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -27021,7 +27083,7 @@
         pBuf += 1;
         *pBuf = pSrc->reserved;
         *pnConsumed += 1;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -27059,7 +27121,7 @@
         ++pBuf; ++(*pnConsumed);
         *pBuf = pSrc->version;
         *pnConsumed += 1;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -27098,7 +27160,7 @@
         pBuf += 2;
         frameshtons(pCtx, pBuf, pSrc->cfp_durremaining, 0);
         *pnConsumed += 2;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -27128,7 +27190,7 @@
         ++pBuf; ++(*pnConsumed);
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->text ), pSrc->num_text);
         *pnConsumed += pSrc->num_text;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -27164,7 +27226,7 @@
         pBuf += 1;
         *pBuf = pSrc->switchCount;
         *pnConsumed += 1;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -27200,7 +27262,7 @@
         if ( pSrc->num_triplets )        {
             DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->triplets ), ( pSrc->num_triplets * 3 ));
             *pnConsumed += ( pSrc->num_triplets * 3 );
-            // fieldsEndFlag = 1 
+            // fieldsEndFlag = 1
         }
         else break;
         break;
@@ -27232,7 +27294,7 @@
         ++pBuf; ++(*pnConsumed);
         *pBuf = pSrc->curr_channel;
         *pnConsumed += 1;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -27349,7 +27411,7 @@
         nBuf -=  1 ;
         frameshtons(pCtx, pBuf, pSrc->acvo_txoplimit, 0);
         *pnConsumed += 2;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -27385,7 +27447,7 @@
         tmp121__ |= ( pSrc->unused << 3 );
         *pBuf = tmp121__;
         *pnConsumed += 1;
-        // fieldsEndFlag  = 1 
+        // fieldsEndFlag  = 1
         nBuf -=  1 ;
         break;
     }
@@ -27481,7 +27543,7 @@
         tmp124__ |= ( pSrc->reserved7 << 15 );
         frameshtons(pCtx, pBuf, tmp124__, 0);
         *pnConsumed += 2;
-        // fieldsEndFlag  = 1 
+        // fieldsEndFlag  = 1
         nBuf -=  2 ;
         break;
     }
@@ -27512,7 +27574,7 @@
         ++pBuf; ++(*pnConsumed);
         *pBuf = pSrc->secondaryChannelOffset;
         *pnConsumed += 1;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -27542,7 +27604,7 @@
         ++pBuf; ++(*pnConsumed);
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->rates ), pSrc->num_rates);
         *pnConsumed += pSrc->num_rates;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -27581,7 +27643,7 @@
         pBuf += 1;
         *pBuf = pSrc->hop_index;
         *pnConsumed += 1;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -27614,7 +27676,7 @@
         pBuf += 1;
         *pBuf = pSrc->nchannels;
         *pnConsumed += 1;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -27656,7 +27718,7 @@
         pBuf += 1;
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->randtable ), pSrc->num_randtable);
         *pnConsumed += pSrc->num_randtable;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -27742,7 +27804,7 @@
         pBuf += 1;
         frameshtonl(pCtx, pBuf, pSrc->timeoutValue, 0);
         *pnConsumed += 4;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -27851,7 +27913,7 @@
         nBuf -=  1 ;
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->rsvd ), pSrc->num_rsvd);
         *pnConsumed += pSrc->num_rsvd;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -27922,7 +27984,7 @@
         pBuf += 16;
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->rsvd ), pSrc->num_rsvd);
         *pnConsumed += pSrc->num_rsvd;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -27952,7 +28014,7 @@
         ++pBuf; ++(*pnConsumed);
         frameshtons(pCtx, pBuf, pSrc->atim, 0);
         *pnConsumed += 2;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -27988,7 +28050,7 @@
         pBuf += 6;
         DOT11F_MEMCPY(pCtx, pBuf, pSrc->RespStaAddr, 6);
         *pnConsumed += 6;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -28058,7 +28120,7 @@
                     tmp135__ |= ( pSrc->report.Basic.unused << 5 );
                     *pBuf = tmp135__;
                     *pnConsumed += 1;
-                    // fieldsEndFlag  = 1 
+                    // fieldsEndFlag  = 1
                     nBuf -=  1 ;
                 break;
                 case 1:
@@ -28073,7 +28135,7 @@
                     pBuf += 2;
                     *pBuf = pSrc->report.CCA.cca_busy_fraction;
                     *pnConsumed += 1;
-                    // fieldsEndFlag = 1 
+                    // fieldsEndFlag = 1
                 break;
                 case 2:
                     *pBuf = pSrc->report.RPIHistogram.channel;
@@ -28108,7 +28170,7 @@
                     pBuf += 1;
                     *pBuf = pSrc->report.RPIHistogram.rpi7_density;
                     *pnConsumed += 1;
-                    // fieldsEndFlag = 1 
+                    // fieldsEndFlag = 1
                 break;
                 case 5:
                     *pBuf = pSrc->report.Beacon.regClass;
@@ -28214,7 +28276,7 @@
                 pBuf += 8;
                 frameshtons(pCtx, pBuf, pSrc->measurement_request.Basic.meas_duration, 0);
                 *pnConsumed += 2;
-                // fieldsEndFlag = 1 
+                // fieldsEndFlag = 1
             break;
             case 1:
                 *pBuf = pSrc->measurement_request.CCA.channel_no;
@@ -28225,7 +28287,7 @@
                 pBuf += 8;
                 frameshtons(pCtx, pBuf, pSrc->measurement_request.CCA.meas_duration, 0);
                 *pnConsumed += 2;
-                // fieldsEndFlag = 1 
+                // fieldsEndFlag = 1
             break;
             case 2:
                 *pBuf = pSrc->measurement_request.RPIHistogram.channel_no;
@@ -28236,7 +28298,7 @@
                 pBuf += 8;
                 frameshtons(pCtx, pBuf, pSrc->measurement_request.RPIHistogram.meas_duration, 0);
                 *pnConsumed += 2;
-                // fieldsEndFlag = 1 
+                // fieldsEndFlag = 1
             break;
             case 5:
                 *pBuf = pSrc->measurement_request.Beacon.regClass;
@@ -28303,7 +28365,7 @@
         tmp138__ |= ( pSrc->reserved << 2 );
         *pBuf = tmp138__;
         *pnConsumed += 1;
-        // fieldsEndFlag  = 1 
+        // fieldsEndFlag  = 1
         nBuf -=  1 ;
         break;
     }
@@ -28414,7 +28476,7 @@
         tmp141__ |= ( pSrc->rxNSSType << 7 );
         *pBuf = tmp141__;
         *pnConsumed += 1;
-        // fieldsEndFlag  = 1 
+        // fieldsEndFlag  = 1
         nBuf -=  1 ;
         break;
     }
@@ -28426,6 +28488,42 @@
     return DOT11F_PARSE_SUCCESS;
 } /* End dot11fPackIeOperatingMode. */
 
+tANI_U32 dot11fPackIeOxygenNetwork(tpAniSirGlobal pCtx,
+                                   tDot11fIEOxygenNetwork *pSrc,
+                                   tANI_U8 *pBuf,
+                                   tANI_U32 nBuf,
+                                   tANI_U32 *pnConsumed)
+{
+    tANI_U8* pIeLen = 0;
+    tANI_U32 nConsumedOnEntry = *pnConsumed;
+    tANI_U32 nNeeded = 0U;
+    nNeeded  += 2;
+    while ( pSrc->present )
+    {
+        if ( nNeeded > nBuf ) return DOT11F_BUFFER_OVERFLOW;
+        *pBuf = 221;
+        ++pBuf; ++(*pnConsumed);
+        pIeLen = pBuf;
+        ++pBuf; ++(*pnConsumed);
+        *pBuf = 0x0;
+        ++pBuf; ++(*pnConsumed);
+        *pBuf = 0x16;
+        ++pBuf; ++(*pnConsumed);
+        *pBuf = 0x32;
+        ++pBuf; ++(*pnConsumed);
+        frameshtons(pCtx, pBuf, pSrc->data, 0);
+        *pnConsumed += 2;
+        // fieldsEndFlag = 1
+        break;
+    }
+    (void)pCtx;
+    if (pIeLen)
+    {
+        *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
+    }
+    return DOT11F_PARSE_SUCCESS;
+} /* End dot11fPackIeOxygenNetwork. */
+
 tANI_U32 dot11fPackIeP2PAssocReq(tpAniSirGlobal pCtx,
                                  tDot11fIEP2PAssocReq *pSrc,
                                  tANI_U8 *pBuf,
@@ -28969,7 +29067,7 @@
         ++pBuf; ++(*pnConsumed);
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->data ), pSrc->num_data);
         *pnConsumed += pSrc->num_data;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -29346,7 +29444,7 @@
         pBuf += 1;
         frameshtons(pCtx, pBuf, pSrc->sequence_control, 0);
         *pnConsumed += 2;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -29383,7 +29481,7 @@
         tmp142__ |= ( pSrc->reserved << 4 );
         *pBuf = tmp142__;
         *pnConsumed += 1;
-        // fieldsEndFlag  = 1 
+        // fieldsEndFlag  = 1
         nBuf -=  1 ;
         break;
     }
@@ -29417,7 +29515,7 @@
         pBuf += 1;
         *pBuf = pSrc->maxTxPower;
         *pnConsumed += 1;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -29447,7 +29545,7 @@
         ++pBuf; ++(*pnConsumed);
         *pBuf = pSrc->localPowerConstraints;
         *pnConsumed += 1;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -29483,7 +29581,7 @@
         pBuf += 1;
         frameshtons(pCtx, pBuf, pSrc->avail, 0);
         *pnConsumed += 2;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -29520,7 +29618,7 @@
         tmp143__ |= ( pSrc->reserved << 7 );
         *pBuf = tmp143__;
         *pnConsumed += 1;
-        // fieldsEndFlag  = 1 
+        // fieldsEndFlag  = 1
         nBuf -=  1 ;
         break;
     }
@@ -29560,7 +29658,7 @@
         tmp144__ |= ( pSrc->more_data_ack << 7 );
         *pBuf = tmp144__;
         *pnConsumed += 1;
-        // fieldsEndFlag  = 1 
+        // fieldsEndFlag  = 1
         nBuf -=  1 ;
         break;
     }
@@ -29600,7 +29698,7 @@
         pBuf += 2;
         frameshtons(pCtx, pBuf, pSrc->offset, 0);
         *pnConsumed += 2;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -29630,7 +29728,7 @@
         ++pBuf; ++(*pnConsumed);
         *pBuf = pSrc->rcpi;
         *pnConsumed += 1;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -29760,7 +29858,7 @@
         ++pBuf; ++(*pnConsumed);
         *pBuf = pSrc->rsni;
         *pnConsumed += 1;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -29790,7 +29888,7 @@
         ++pBuf; ++(*pnConsumed);
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->data ), pSrc->num_data);
         *pnConsumed += pSrc->num_data;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -29820,7 +29918,7 @@
         ++pBuf; ++(*pnConsumed);
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->bands ), ( pSrc->num_bands * 2 ));
         *pnConsumed += ( pSrc->num_bands * 2 );
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -29850,7 +29948,7 @@
         ++pBuf; ++(*pnConsumed);
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->rates ), pSrc->num_rates);
         *pnConsumed += pSrc->num_rates;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -29889,7 +29987,7 @@
         pBuf += 1;
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->vbmp ), pSrc->num_vbmp);
         *pnConsumed += pSrc->num_vbmp;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -29922,7 +30020,7 @@
         pBuf += 1;
         *pBuf = pSrc->link_margin;
         *pnConsumed += 1;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -30023,7 +30121,7 @@
         tmp147__ |= ( pSrc->reserved3 << 13 );
         frameshtons(pCtx, pBuf, tmp147__, 0);
         *pnConsumed += 2;
-        // fieldsEndFlag  = 1 
+        // fieldsEndFlag  = 1
         nBuf -=  2 ;
         break;
     }
@@ -30066,7 +30164,7 @@
         pBuf += 1;
         *pBuf = pSrc->OneSixtyMHzUtil;
         *pnConsumed += 1;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -30105,7 +30203,7 @@
         pBuf += 1;
         frameshtons(pCtx, pBuf, pSrc->basicMCSSet, 0);
         *pnConsumed += 2;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -30169,7 +30267,7 @@
         else break;
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->bkid ), ( pSrc->bkid_count * 16 ));
         *pnConsumed += ( pSrc->bkid_count * 16 );
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -30199,7 +30297,7 @@
         ++pBuf; ++(*pnConsumed);
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->data ), pSrc->num_data);
         *pnConsumed += pSrc->num_data;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -30242,7 +30340,7 @@
         pBuf += 1;
         *pBuf = pSrc->linkMargin;
         *pnConsumed += 1;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -30280,7 +30378,7 @@
         ++pBuf; ++(*pnConsumed);
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->data ), pSrc->num_data);
         *pnConsumed += pSrc->num_data;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -30330,7 +30428,7 @@
         tmp149__ |= ( pSrc->more_ack << 7 );
         *pBuf = tmp149__;
         *pnConsumed += 1;
-        // fieldsEndFlag  = 1 
+        // fieldsEndFlag  = 1
         nBuf -=  1 ;
         break;
     }
@@ -30379,7 +30477,7 @@
         tmp150__ |= ( pSrc->uapsd << 7 );
         *pBuf = tmp150__;
         *pnConsumed += 1;
-        // fieldsEndFlag  = 1 
+        // fieldsEndFlag  = 1
         nBuf -=  1 ;
         break;
     }
@@ -30432,7 +30530,7 @@
         tmp151__ |= ( pSrc->reserved2 << 7 );
         *pBuf = tmp151__;
         *pnConsumed += 1;
-        // fieldsEndFlag  = 1 
+        // fieldsEndFlag  = 1
         nBuf -=  1 ;
         break;
     }
@@ -30563,7 +30661,7 @@
         nBuf -=  1 ;
         frameshtons(pCtx, pBuf, pSrc->acvo_txoplimit, 0);
         *pnConsumed += 2;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -30631,7 +30729,7 @@
         if ( pSrc->caps )        {
             frameshtons(pCtx, pBuf, pSrc->caps, 0);
             *pnConsumed += 2;
-            // fieldsEndFlag = 1 
+            // fieldsEndFlag = 1
         }
         else break;
         break;
@@ -30671,7 +30769,7 @@
         ++pBuf; ++(*pnConsumed);
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->data ), pSrc->num_data);
         *pnConsumed += pSrc->num_data;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -30750,7 +30848,7 @@
         pBuf += 1;
         *pBuf = pSrc->newCenterChanFreq1;
         *pnConsumed += 1;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -30960,7 +31058,7 @@
         ++pBuf; ++(*pnConsumed);
         DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->data ), pSrc->num_data);
         *pnConsumed += pSrc->num_data;
-        // fieldsEndFlag = 1 
+        // fieldsEndFlag = 1
         break;
     }
     (void)pCtx;
@@ -34899,6 +34997,15 @@
             FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq0, 1);
             FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq1, 1);
         }
+        FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("OxygenNetwork:\n"));
+        if (!pFrm->OxygenNetwork.present)
+        {
+            FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("Not present.\n"));
+        }
+        else
+        {
+            FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), ( tANI_U8* )&pFrm->OxygenNetwork.data, 2);
+        }
         FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), FRFL("to:\n"));
         FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON), pBuf, nBuf);
     }
@@ -35915,6 +36022,15 @@
             FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq0, 1);
             FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq1, 1);
         }
+        FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("OxygenNetwork:\n"));
+        if (!pFrm->OxygenNetwork.present)
+        {
+            FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("Not present.\n"));
+        }
+        else
+        {
+            FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->OxygenNetwork.data, 2);
+        }
         FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("to:\n"));
         FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), pBuf, nBuf);
     }
@@ -37112,6 +37228,15 @@
             FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq0, 1);
             FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq1, 1);
         }
+        FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("OxygenNetwork:\n"));
+        if (!pFrm->OxygenNetwork.present)
+        {
+            FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("Not present.\n"));
+        }
+        else
+        {
+            FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), ( tANI_U8* )&pFrm->OxygenNetwork.data, 2);
+        }
         FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), FRFL("to:\n"));
         FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACONIES), pBuf, nBuf);
     }
@@ -40206,6 +40331,15 @@
             FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("operModeNotification (1): %d\n"), pFrm->ExtCap.operModeNotification);
             FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("reserved7 (1): %d\n"), pFrm->ExtCap.reserved7);
         }
+        FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("OxygenNetwork:\n"));
+        if (!pFrm->OxygenNetwork.present)
+        {
+            FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("Not present.\n"));
+        }
+        else
+        {
+            FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), ( tANI_U8* )&pFrm->OxygenNetwork.data, 2);
+        }
         FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), FRFL("to:\n"));
         FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBERESPONSE), pBuf, nBuf);
     }
@@ -44963,6 +45097,9 @@
                     case SigIeOperatingMode:
                         status |= dot11fPackIeOperatingMode(pCtx, ( tDot11fIEOperatingMode* )(pSrc + pIe->offset + sizeof(tDot11fIEOperatingMode) * i ),  pBufRemaining, nBufRemaining, &len);
                         break;
+                    case SigIeOxygenNetwork:
+                        status |= dot11fPackIeOxygenNetwork(pCtx, ( tDot11fIEOxygenNetwork* )(pSrc + pIe->offset + sizeof(tDot11fIEOxygenNetwork) * i ),  pBufRemaining, nBufRemaining, &len);
+                        break;
                     case SigIeP2PAssocReq:
                         status |= dot11fPackIeP2PAssocReq(pCtx, ( tDot11fIEP2PAssocReq* )(pSrc + pIe->offset + sizeof(tDot11fIEP2PAssocReq) * i ),  pBufRemaining, nBufRemaining, &len);
                         break;
diff --git a/firmware_bin/WCNSS_cfg.dat b/firmware_bin/WCNSS_cfg.dat
old mode 100644
new mode 100755
index b6af038..637a869
--- a/firmware_bin/WCNSS_cfg.dat
+++ b/firmware_bin/WCNSS_cfg.dat
Binary files differ
diff --git a/firmware_bin/WCNSS_qcom_cfg.ini b/firmware_bin/WCNSS_qcom_cfg.ini
index 60c8ba5..d44cc92 100644
--- a/firmware_bin/WCNSS_qcom_cfg.ini
+++ b/firmware_bin/WCNSS_qcom_cfg.ini
@@ -396,6 +396,9 @@
 #Scan offload
 gEnableDirectedScanOffload=0
 
+# Oxygen network (prop IE for IBSS)
+gEnableOxygenNwk=0
+
 END
 
 # Note: Configuration parser would not read anything past the END marker
