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