HS2.0 REL2:Add support to forward various WNM Action frames
to supplicant
As part of HS2.0 REL2 support to forward certain types of WNM
action frames to wpa_supplicant is required.This commit adds
the support for that.
Change-Id: Ib4b8e72fca545c1f365ad58bb419b1e73d36e0c8
CRs-fixed: 648997
diff --git a/CORE/HDD/inc/wlan_hdd_cfg80211.h b/CORE/HDD/inc/wlan_hdd_cfg80211.h
index 929c48a..7da219e 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg80211.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg80211.h
@@ -75,6 +75,9 @@
#define WNM_BSS_ACTION_FRAME "\x0a\x07"
#define WNM_BSS_ACTION_FRAME_SIZE 2
+#define WNM_NOTIFICATION_FRAME "\x0a\x1a"
+#define WNM_NOTIFICATION_FRAME_SIZE 2
+
#define WPA_OUI_TYPE "\x00\x50\xf2\x01"
#define BLACKLIST_OUI_TYPE "\x00\x50\x00\x00"
#define WHITELIST_OUI_TYPE "\x00\x50\x00\x01"
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 95696ec..85739de 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -970,6 +970,19 @@
sme_RegisterMgmtFrame(hHal, pAdapter->sessionId, type,
(v_U8_t*)WNM_BSS_ACTION_FRAME,
WNM_BSS_ACTION_FRAME_SIZE );
+
+ /* WNM-Notification */
+ sme_RegisterMgmtFrame(hHal, pAdapter->sessionId, type,
+ (v_U8_t*)WNM_NOTIFICATION_FRAME,
+ WNM_NOTIFICATION_FRAME_SIZE );
+
+
+#ifdef WLAN_FEATURE_11W
+ /* SA Query Response Action Frame */
+ sme_RegisterMgmtFrame(hHal, pAdapter->sessionId, type,
+ (v_U8_t*)SA_QUERY_FRAME_RSP,
+ SA_QUERY_FRAME_RSP_SIZE );
+#endif /* WLAN_FEATURE_11W */
}
void wlan_hdd_cfg80211_pre_voss_stop(hdd_adapter_t* pAdapter)
@@ -1009,6 +1022,11 @@
sme_DeregisterMgmtFrame(hHal, pAdapter->sessionId, type,
(v_U8_t*)P2P_ACTION_FRAME,
P2P_ACTION_FRAME_SIZE );
+ /* WNM-Notification */
+ sme_DeregisterMgmtFrame(hHal, pAdapter->sessionId, type,
+ (v_U8_t*)WNM_NOTIFICATION_FRAME,
+ WNM_NOTIFICATION_FRAME_SIZE );
+
#ifdef WLAN_FEATURE_11W
/* SA Query Response Action Frame */
diff --git a/CORE/MAC/inc/sirMacProtDef.h b/CORE/MAC/inc/sirMacProtDef.h
index f5c5e96..cf46390 100644
--- a/CORE/MAC/inc/sirMacProtDef.h
+++ b/CORE/MAC/inc/sirMacProtDef.h
@@ -270,6 +270,13 @@
#define SIR_MAC_TDLS_DIS_RSP 14
#endif
+/* WNM Action field values; IEEE Std 802.11-2012, 8.5.14.1, Table 8-250 */
+#define SIR_MAC_WNM_BSS_TM_QUERY 6
+#define SIR_MAC_WNM_BSS_TM_REQUEST 7
+#define SIR_MAC_WNM_BSS_TM_RESPONSE 8
+#define SIR_MAC_WNM_NOTIF_REQUEST 26
+#define SIR_MAC_WNM_NOTIF_RESPONSE 27
+
#define SIR_MAC_MAX_RANDOM_LENGTH 2306
//-----------------------------------------------------------------------------
diff --git a/CORE/MAC/src/pe/lim/limProcessActionFrame.c b/CORE/MAC/src/pe/lim/limProcessActionFrame.c
index 2927a5c..2f85e83 100644
--- a/CORE/MAC/src/pe/lim/limProcessActionFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessActionFrame.c
@@ -2123,6 +2123,38 @@
}
break;
+ case SIR_MAC_ACTION_WNM:
+ {
+#ifdef WLAN_FEATURE_11W
+ if ((psessionEntry->limRmfEnabled) && (pHdr->fc.wep == 0))
+ {
+ PELOGE(limLog(pMac, LOGE, FL
+ ("Dropping unprotected Action category %d frame since RMF is enabled."),
+ pActionHdr->category);)
+ break;
+ }
+#endif
+ PELOGE(limLog(pMac, LOG1, FL("WNM Action category %d action %d."),
+ pActionHdr->category, pActionHdr->actionID);)
+ switch (pActionHdr->actionID)
+ {
+ case SIR_MAC_WNM_BSS_TM_QUERY:
+ case SIR_MAC_WNM_BSS_TM_REQUEST:
+ case SIR_MAC_WNM_BSS_TM_RESPONSE:
+ case SIR_MAC_WNM_NOTIF_REQUEST:
+ case SIR_MAC_WNM_NOTIF_RESPONSE:
+ {
+ tpSirMacMgmtHdr pHdr;
+ tANI_S8 rssi = WDA_GET_RX_RSSI_DB(pRxPacketInfo);
+ pHdr = WDA_GET_RX_MAC_HEADER(pRxPacketInfo);
+ /* Forward to the SME to HDD to wpa_supplicant */
+ limSendSmeMgmtFrameInd(pMac, 0, pRxPacketInfo,
+ psessionEntry, rssi);
+ break;
+ }
+ }
+ break;
+ }
#if defined WLAN_FEATURE_VOWIFI
case SIR_MAC_ACTION_RRM:
#ifdef WLAN_FEATURE_11W