wlan:Add support to send SAP Restart Indication.
On non-android platforms, in AP-STA mode, incase
the STA does not come on the same channel as the SAP,
send a explicit SAP restart indication nl event
to the user-space.
CRs-Fixed: 720120
Change-Id: Id07610a4cf67c4b045674f65da32993a8ba4b6fb
diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h
index a2ac416..1b9b5ad 100644
--- a/CORE/HDD/inc/wlan_hdd_main.h
+++ b/CORE/HDD/inc/wlan_hdd_main.h
@@ -1472,6 +1472,7 @@
void hdd_deinit_batch_scan(hdd_adapter_t *pAdapter);
#endif /*End of FEATURE_WLAN_BATCH_SCAN*/
+void wlan_hdd_send_svc_nlink_msg(int type, void *data, int len);
boolean hdd_is_5g_supported(hdd_context_t * pHddCtx);
diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c
index 3e0242d..994c435 100644
--- a/CORE/HDD/src/wlan_hdd_hostapd.c
+++ b/CORE/HDD/src/wlan_hdd_hostapd.c
@@ -1495,6 +1495,9 @@
/* current operating channel is un-safe channel
* restart driver */
hdd_hostapd_stop(pHostapdAdapter->dev);
+ /* On LE, this event is handled by wlan-services to restart SAP.
+ On android, this event would be ignored. */
+ wlan_hdd_send_svc_nlink_msg(WLAN_SVC_SAP_RESTART_IND, NULL, 0);
break;
}
}
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index 8f04ff1c..2c2ba94 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -8249,6 +8249,48 @@
} while (0);
}
+void wlan_hdd_send_svc_nlink_msg(int type, void *data, int len)
+{
+ struct sk_buff *skb;
+ struct nlmsghdr *nlh;
+ tAniMsgHdr *ani_hdr;
+
+ skb = alloc_skb(NLMSG_SPACE(WLAN_NL_MAX_PAYLOAD), GFP_KERNEL);
+
+ if(skb == NULL) {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: alloc_skb failed", __func__);
+ return;
+ }
+
+ nlh = (struct nlmsghdr *)skb->data;
+ nlh->nlmsg_pid = 0; /* from kernel */
+ nlh->nlmsg_flags = 0;
+ nlh->nlmsg_seq = 0;
+ nlh->nlmsg_type = WLAN_NL_MSG_SVC;
+
+ ani_hdr = NLMSG_DATA(nlh);
+ ani_hdr->type = type;
+
+ switch(type) {
+ case WLAN_SVC_SAP_RESTART_IND:
+ ani_hdr->length = 0;
+ nlh->nlmsg_len = NLMSG_LENGTH((sizeof(tAniMsgHdr)));
+ skb_put(skb, NLMSG_SPACE(sizeof(tAniMsgHdr)));
+ break;
+ default:
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "Attempt to send unknown nlink message %d", type);
+ kfree_skb(skb);
+ return;
+ }
+
+ nl_srv_bcast(skb);
+
+ return;
+}
+
+
/**---------------------------------------------------------------------------
diff --git a/CORE/SVC/external/wlan_nlink_common.h b/CORE/SVC/external/wlan_nlink_common.h
index 6d9b711..9b0cd4c 100644
--- a/CORE/SVC/external/wlan_nlink_common.h
+++ b/CORE/SVC/external/wlan_nlink_common.h
@@ -89,7 +89,7 @@
// replaced by WLAN_STA_ASSOC_DONE_IND
#define WLAN_BTC_SOFTAP_BSS_START 0x11
-
+#define WLAN_SVC_SAP_RESTART_IND 0x108
// Event data for WLAN_BTC_QUERY_STATE_RSP & WLAN_STA_ASSOC_DONE_IND
typedef struct
{
@@ -103,6 +103,7 @@
ANI_NL_MSG_PTT = ANI_NL_MSG_BASE + 0x07,// Quarky GUI
WLAN_NL_MSG_BTC,
ANI_NL_MSG_LOG = ANI_NL_MSG_BASE + 0x0C,
+ WLAN_NL_MSG_SVC,
ANI_NL_MSG_MAX
} tAniNlModTypes, tWlanNlModTypes;