summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAshish Kumar Dhanotiya <adhanoti@codeaurora.org>2018-01-16 10:55:16 +0530
committersnandini <snandini@codeaurora.org>2018-01-17 06:30:07 -0800
commit2dadad5d73daecec17ecfa6b1d813355be347ee6 (patch)
treef63078146375c7f3b1aadcaa5445df043781ca77
parent4c49d0ef7c3be23fd3913095c0064394255121f6 (diff)
qcacld-3.0: Send STA authorized status to supplicant for AP
Currently there is no support from driver to send STA authorized event to supplicant. Use QCA_NL80211_VENDOR_SUBCMD_LINK_PROPERTIES vendor command to send STA authorized event to supplicant. Change-Id: I46416949f04dd28a1713cbebf1f7d0e84b5efda2 CRs-Fixed: 2172816
-rw-r--r--core/hdd/src/wlan_hdd_cfg80211.c72
-rw-r--r--uapi/linux/qca_vendor.h3
2 files changed, 75 insertions, 0 deletions
diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c
index 0fa9f313d604..3a0a0287baa3 100644
--- a/core/hdd/src/wlan_hdd_cfg80211.c
+++ b/core/hdd/src/wlan_hdd_cfg80211.c
@@ -1252,6 +1252,10 @@ static const struct nl80211_vendor_cmd_info wlan_hdd_cfg80211_vendor_events[] =
.vendor_id = QCA_NL80211_VENDOR_ID,
.subcmd = QCA_NL80211_VENDOR_SUBCMD_HANG,
},
+ [QCA_NL80211_VENDOR_SUBCMD_LINK_PROPERTIES_INDEX] = {
+ .vendor_id = QCA_NL80211_VENDOR_ID,
+ .subcmd = QCA_NL80211_VENDOR_SUBCMD_LINK_PROPERTIES,
+ },
};
/**
@@ -14595,6 +14599,67 @@ static bool wlan_hdd_is_duplicate_channel(uint8_t *arr,
}
#endif
+/*
+ *wlan_hdd_send_sta_authorized_event: Function to send station authorized
+ *event to user space in case of SAP
+ *pAdapter: Pointer to the adapter
+ *@pHddCtx: HDD Context
+ *@mac_addr: MAC address of the STA for whic the Authorized event needs to
+ *be sent
+ *This api is used to send station authorized event to user space
+ */
+static QDF_STATUS wlan_hdd_send_sta_authorized_event(
+ hdd_adapter_t *pAdapter,
+ hdd_context_t *pHddCtx,
+ struct qdf_mac_addr mac_addr)
+{
+ struct sk_buff *vendor_event;
+ uint32_t sta_flags = 0;
+ QDF_STATUS status;
+
+ ENTER();
+
+ if (!pHddCtx) {
+ hdd_err("HDD context is null");
+ return -EINVAL;
+ }
+
+ vendor_event =
+ cfg80211_vendor_event_alloc(
+ pHddCtx->wiphy, &pAdapter->wdev, sizeof(sta_flags) +
+ QDF_MAC_ADDR_SIZE + NLMSG_HDRLEN,
+ QCA_NL80211_VENDOR_SUBCMD_LINK_PROPERTIES_INDEX,
+ GFP_KERNEL);
+ if (!vendor_event) {
+ hdd_err("cfg80211_vendor_event_alloc failed");
+ return -EINVAL;
+ }
+
+ sta_flags |= BIT(NL80211_STA_FLAG_AUTHORIZED);
+
+ status = nla_put_u32(vendor_event,
+ QCA_WLAN_VENDOR_ATTR_LINK_PROPERTIES_STA_FLAGS,
+ sta_flags);
+ if (status) {
+ hdd_err("STA flag put fails");
+ kfree_skb(vendor_event);
+ return QDF_STATUS_E_FAILURE;
+ }
+ status = nla_put(vendor_event,
+ QCA_WLAN_VENDOR_ATTR_LINK_PROPERTIES_STA_MAC,
+ QDF_MAC_ADDR_SIZE, mac_addr.bytes);
+ if (status) {
+ hdd_err("STA MAC put fails");
+ kfree_skb(vendor_event);
+ return QDF_STATUS_E_FAILURE;
+ }
+
+ cfg80211_vendor_event(vendor_event, GFP_KERNEL);
+
+ EXIT();
+ return 0;
+}
+
/**
* __wlan_hdd_change_station() - change station
* @wiphy: Pointer to the wiphy structure
@@ -14666,6 +14731,13 @@ static int __wlan_hdd_change_station(struct wiphy *wiphy,
hdd_debug("Not able to change TL state to AUTHENTICATED");
return -EINVAL;
}
+ status = wlan_hdd_send_sta_authorized_event(
+ pAdapter,
+ pHddCtx,
+ STAMacAddress);
+ if (status != QDF_STATUS_SUCCESS) {
+ return -EINVAL;
+ }
}
} else if ((pAdapter->device_mode == QDF_STA_MODE) ||
(pAdapter->device_mode == QDF_P2P_CLIENT_MODE)) {
diff --git a/uapi/linux/qca_vendor.h b/uapi/linux/qca_vendor.h
index ec460be881c3..80640fac266e 100644
--- a/uapi/linux/qca_vendor.h
+++ b/uapi/linux/qca_vendor.h
@@ -784,6 +784,7 @@ enum qca_nl80211_vendor_subcmds_index {
QCA_NL80211_VENDOR_SUBCMD_NUD_STATS_GET_INDEX,
QCA_NL80211_VENDOR_SUBCMD_PWR_SAVE_FAIL_DETECTED_INDEX,
QCA_NL80211_VENDOR_SUBCMD_HANG_REASON_INDEX,
+ QCA_NL80211_VENDOR_SUBCMD_LINK_PROPERTIES_INDEX,
};
/**
@@ -2860,6 +2861,8 @@ enum qca_wlan_vendor_attr_link_properties {
QCA_WLAN_VENDOR_ATTR_LINK_PROPERTIES_NSS = 1,
QCA_WLAN_VENDOR_ATTR_LINK_PROPERTIES_RATE_FLAGS = 2,
QCA_WLAN_VENDOR_ATTR_LINK_PROPERTIES_FREQ = 3,
+ QCA_WLAN_VENDOR_ATTR_LINK_PROPERTIES_STA_FLAGS = 4,
+ QCA_WLAN_VENDOR_ATTR_LINK_PROPERTIES_STA_MAC = 5,
/* KEEP LAST */
QCA_WLAN_VENDOR_ATTR_LINK_PROPERTIES_AFTER_LAST,