nl80211: Add get_noa() support for WFD certification (BRCM)
BUG: b/5367351
Change-Id: I14ed79e10ade205c5dd4cdc0d2e888ed1279d1bb
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index dfca9ef..9dc2494 100644
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -209,6 +209,7 @@
static void mlme_event_deauth_disassoc(struct wpa_driver_nl80211_data *drv,
enum wpa_event_type type,
const u8 *frame, size_t len);
+int wpa_driver_get_p2p_noa(void *priv, u8 *buf, size_t len);
int wpa_driver_set_p2p_noa(void *priv, u8 count, int start, int duration);
int wpa_driver_set_p2p_ps(void *priv, int legacy_ps, int opp_ps, int ctwindow);
int wpa_driver_set_ap_wps_p2p_ie(void *priv, const struct wpabuf *beacon,
@@ -6837,6 +6838,7 @@
.remove_pmkid = nl80211_remove_pmkid,
.flush_pmkid = nl80211_flush_pmkid,
#ifdef ANDROID_BRCM_P2P_PATCH
+ .get_noa = wpa_driver_get_p2p_noa,
.set_noa = wpa_driver_set_p2p_noa,
.set_p2p_powersave = wpa_driver_set_p2p_ps,
.set_ap_wps_ie = wpa_driver_set_ap_wps_p2p_ie,
diff --git a/src/p2p/p2p_group.c b/src/p2p/p2p_group.c
index 9fb9f00..0d05319 100644
--- a/src/p2p/p2p_group.c
+++ b/src/p2p/p2p_group.c
@@ -499,7 +499,11 @@
} else {
if (group->noa) {
if (wpabuf_size(group->noa) >= noa_len) {
+ #ifdef ANDROID_BRCM_P2P_PATCH
+ group->noa->used = 0;
+ #else
group->noa->size = 0;
+ #endif
wpabuf_put_data(group->noa, noa, noa_len);
} else {
wpabuf_free(group->noa);
@@ -658,11 +662,11 @@
else
wpa_hexdump(MSG_DEBUG, "P2P: Current NoA", curr_noa,
curr_noa_len);
-
+#ifndef ANDROID_BRCM_P2P_PATCH
/* TODO: properly process request and store copy */
if (curr_noa_len > 0)
return P2P_SC_FAIL_UNABLE_TO_ACCOMMODATE;
-
+#endif
return P2P_SC_SUCCESS;
}
diff --git a/src/p2p/p2p_i.h b/src/p2p/p2p_i.h
index 52d9311..afb891e 100644
--- a/src/p2p/p2p_i.h
+++ b/src/p2p/p2p_i.h
@@ -532,6 +532,11 @@
/* p2p_group.c */
const u8 * p2p_group_get_interface_addr(struct p2p_group *group);
+
+#ifdef ANDROID_BRCM_P2P_PATCH
+void p2p_get_group_noa(struct p2p_group *group, u8 *noa, size_t* noa_len);
+#endif
+
u8 p2p_group_presence_req(struct p2p_group *group,
const u8 *client_interface_addr,
const u8 *noa, size_t noa_len);