aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAhmad Kholaif <akholaif@qca.qualcomm.com>2015-07-24 00:07:55 +0000
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2016-04-01 16:44:04 +0530
commit1e08971278e3865ed55b5ae13d0a990f234ebf98 (patch)
tree62bb6e817bfaa89655876715c26c214398b35188 /src
parentd8b6aff1de2a3560a15f7a2bdc3661d5b5b19394 (diff)
downloadandroid_external_wpa_supplicant_8-1e08971278e3865ed55b5ae13d0a990f234ebf98.tar.gz
android_external_wpa_supplicant_8-1e08971278e3865ed55b5ae13d0a990f234ebf98.tar.bz2
android_external_wpa_supplicant_8-1e08971278e3865ed55b5ae13d0a990f234ebf98.zip
P2P: Inform driver of the operating channel following group formation
Upon GO Negotiation completion, if the remote peer becomes GO, send a hint event over QCA vendor specific interface to inform the driver of the likely operating channel of the P2P GO. Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com> Git-commit: 7c813acf9ca69f3c6d442ce820237249a6216201 Git-repo : git://w1.fi/srv/git/hostap.git Change-Id: Ic3cbb824e1c8bac94839cde7819de75a03d75765 CRs-Fixed: 842468
Diffstat (limited to 'src')
-rw-r--r--src/drivers/driver.h12
-rw-r--r--src/drivers/driver_nl80211.c47
-rw-r--r--src/drivers/driver_nl80211.h1
-rw-r--r--src/drivers/driver_nl80211_capa.c3
4 files changed, 63 insertions, 0 deletions
diff --git a/src/drivers/driver.h b/src/drivers/driver.h
index 40b8cad2..0c4e4f2d 100644
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
@@ -3409,6 +3409,18 @@ struct wpa_driver_ops {
* Returns 0 on success, -1 on failure
*/
int (*abort_scan)(void *priv);
+
+ /**
+ * set_prob_oper_freq - Indicate probable P2P operating channel
+ * @priv: Private driver interface data
+ * @freq: Channel frequency in MHz
+ * Returns 0 on success, -1 on failure
+ *
+ * This command can be used to inform the driver of the operating
+ * frequency that an ongoing P2P group formation is likely to come up
+ * on. Local device is assuming P2P Client role.
+ */
+ int (*set_prob_oper_freq)(void *priv, unsigned int freq);
};
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index eba066ff..6aa4e3d5 100644
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -8501,6 +8501,52 @@ static int wpa_driver_do_acs(void *priv, struct drv_acs_params *params)
}
+static int nl80211_set_prob_oper_freq(void *priv, unsigned int freq)
+{
+ struct i802_bss *bss = priv;
+ struct wpa_driver_nl80211_data *drv = bss->drv;
+ struct nl_msg *msg;
+ int ret;
+ struct nlattr *params;
+
+ if (!drv->set_prob_oper_freq)
+ return -1;
+
+ wpa_printf(MSG_DEBUG,
+ "nl80211: Set P2P probable operating freq %u for ifindex %d",
+ freq, bss->ifindex);
+
+ if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) ||
+ nla_put_u32(msg, NL80211_ATTR_VENDOR_ID, OUI_QCA) ||
+ nla_put_u32(msg, NL80211_ATTR_VENDOR_SUBCMD,
+ QCA_NL80211_VENDOR_SUBCMD_SET_PROBABLE_OPER_CHANNEL) ||
+ !(params = nla_nest_start(msg, NL80211_ATTR_VENDOR_DATA)) ||
+ nla_put_u32(msg,
+ QCA_WLAN_VENDOR_ATTR_PROBABLE_OPER_CHANNEL_IFACE_TYPE,
+ QCA_IFACE_TYPE_P2P_CLIENT) ||
+ nla_put_u32(msg,
+ QCA_WLAN_VENDOR_ATTR_PROBABLE_OPER_CHANNEL_FREQ,
+ freq)) {
+ wpa_printf(MSG_ERROR,
+ "%s: err in adding vendor_cmd and vendor_data",
+ __func__);
+ nlmsg_free(msg);
+ return -1;
+ }
+ nla_nest_end(msg, params);
+
+ ret = send_and_recv_msgs(drv, msg, NULL, NULL);
+ msg = NULL;
+ if (ret) {
+ wpa_printf(MSG_ERROR, "%s: err in send_and_recv_msgs",
+ __func__);
+ return ret;
+ }
+ nlmsg_free(msg);
+ return 0;
+}
+
+
static int nl80211_set_band(void *priv, enum set_band band)
{
struct i802_bss *bss = priv;
@@ -8657,4 +8703,5 @@ const struct wpa_driver_ops wpa_driver_nl80211_ops = {
.del_tx_ts = nl80211_del_ts,
.do_acs = wpa_driver_do_acs,
.set_band = nl80211_set_band,
+ .set_prob_oper_freq = nl80211_set_prob_oper_freq,
};
diff --git a/src/drivers/driver_nl80211.h b/src/drivers/driver_nl80211.h
index 5e88a82d..d7ec0b94 100644
--- a/src/drivers/driver_nl80211.h
+++ b/src/drivers/driver_nl80211.h
@@ -146,6 +146,7 @@ struct wpa_driver_nl80211_data {
unsigned int set_rekey_offload:1;
unsigned int p2p_go_ctwindow_supported:1;
unsigned int setband_vendor_cmd_avail:1;
+ unsigned int set_prob_oper_freq:1;
u64 remain_on_chan_cookie;
u64 send_action_cookie;
diff --git a/src/drivers/driver_nl80211_capa.c b/src/drivers/driver_nl80211_capa.c
index 926c1154..e56f1113 100644
--- a/src/drivers/driver_nl80211_capa.c
+++ b/src/drivers/driver_nl80211_capa.c
@@ -589,6 +589,9 @@ static int wiphy_info_handler(struct nl_msg *msg, void *arg)
case QCA_NL80211_VENDOR_SUBCMD_GET_FEATURES:
drv->get_features_vendor_cmd_avail = 1;
break;
+ case QCA_NL80211_VENDOR_SUBCMD_SET_PROBABLE_OPER_CHANNEL:
+ drv->set_prob_oper_freq = 1;
+ break;
case QCA_NL80211_VENDOR_SUBCMD_DO_ACS:
drv->capa.flags |=
WPA_DRIVER_FLAGS_ACS_OFFLOAD;