Update to new version 0.8.16 from BRCM
Sync with main tree commit b8349523e460493fa0b4de36c689595109e45e91
Author: Neeraj Kumar Garg <neerajkg@broadcom.com>
Date: Tue Dec 27 23:21:45 2011 +0200
P2P: Reject p2p_group_add if forced frequency is not acceptable
Change-Id: Icb4541a371b05c270e80440d7a7fdea7f33ff61e
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
diff --git a/src/drivers/driver_atheros.c b/src/drivers/driver_atheros.c
index 1e78f6e..b17d1a6 100644
--- a/src/drivers/driver_atheros.c
+++ b/src/drivers/driver_atheros.c
@@ -34,7 +34,7 @@
*/
#define ATH_WPS_IE
-#include "os/linux/include/ieee80211_external.h"
+#include "ieee80211_external.h"
#ifdef CONFIG_WPS
@@ -45,7 +45,7 @@
#endif
#endif /* CONFIG_WPS */
-#include "wireless_copy.h"
+#include "linux_wext.h"
#include "driver.h"
#include "eloop.h"
@@ -641,6 +641,7 @@
wpa_printf(MSG_DEBUG, "%s buflen = %lu", __func__,
(unsigned long) ie_len);
+ wpa_hexdump(MSG_DEBUG, "atheros: set_generic_elem", ie, ie_len);
wpabuf_free(drv->wpa_ie);
drv->wpa_ie = wpabuf_alloc_copy(ie, ie_len);
@@ -658,6 +659,8 @@
wpabuf_len(drv->wps_beacon_ie));
app_ie->app_buflen = ie_len + wpabuf_len(drv->wps_beacon_ie);
}
+ wpa_hexdump(MSG_DEBUG, "atheros: SET_APPIEBUF(Beacon)",
+ app_ie->app_buf, app_ie->app_buflen);
set80211priv(drv, IEEE80211_IOCTL_SET_APPIEBUF, app_ie,
sizeof(struct ieee80211req_getset_appiebuf) +
app_ie->app_buflen);
@@ -672,6 +675,8 @@
wpabuf_len(drv->wps_probe_resp_ie);
} else
app_ie->app_buflen = ie_len;
+ wpa_hexdump(MSG_DEBUG, "atheros: SET_APPIEBUF(ProbeResp)",
+ app_ie->app_buf, app_ie->app_buflen);
set80211priv(drv, IEEE80211_IOCTL_SET_APPIEBUF, app_ie,
sizeof(struct ieee80211req_getset_appiebuf) +
app_ie->app_buflen);
@@ -748,6 +753,8 @@
os_memset(&event, 0, sizeof(event));
event.rx_probe_req.sa = mgmt->sa;
+ event.rx_probe_req.da = mgmt->da;
+ event.rx_probe_req.bssid = mgmt->bssid;
event.rx_probe_req.ie = mgmt->u.probe_req.variable;
event.rx_probe_req.ie_len =
len - (IEEE80211_HDRLEN + sizeof(mgmt->u.probe_req));
@@ -785,8 +792,9 @@
u8 buf[512];
struct ieee80211req_getset_appiebuf *beac_ie;
- wpa_printf(MSG_DEBUG, "%s buflen = %lu", __func__,
- (unsigned long) len);
+ wpa_printf(MSG_DEBUG, "%s buflen = %lu frametype=%u", __func__,
+ (unsigned long) len, frametype);
+ wpa_hexdump(MSG_DEBUG, "atheros: IE", ie, len);
beac_ie = (struct ieee80211req_getset_appiebuf *) buf;
beac_ie->app_frmtype = frametype;
@@ -797,11 +805,15 @@
if (((frametype == IEEE80211_APPIE_FRAME_BEACON) ||
(frametype == IEEE80211_APPIE_FRAME_PROBE_RESP)) &&
(drv->wpa_ie != NULL)) {
+ wpa_hexdump_buf(MSG_DEBUG, "atheros: Append WPA/RSN IE",
+ drv->wpa_ie);
os_memcpy(&(beac_ie->app_buf[len]), wpabuf_head(drv->wpa_ie),
wpabuf_len(drv->wpa_ie));
beac_ie->app_buflen += wpabuf_len(drv->wpa_ie);
}
+ wpa_hexdump(MSG_DEBUG, "atheros: SET_APPIEBUF",
+ beac_ie->app_buf, beac_ie->app_buflen);
return set80211priv(drv, IEEE80211_IOCTL_SET_APPIEBUF, beac_ie,
sizeof(struct ieee80211req_getset_appiebuf) +
beac_ie->app_buflen);
@@ -814,6 +826,11 @@
{
struct atheros_driver_data *drv = priv;
+ wpa_hexdump_buf(MSG_DEBUG, "atheros: set_ap_wps_ie - beacon", beacon);
+ wpa_hexdump_buf(MSG_DEBUG, "atheros: set_ap_wps_ie - proberesp",
+ proberesp);
+ wpa_hexdump_buf(MSG_DEBUG, "atheros: set_ap_wps_ie - assocresp",
+ assocresp);
wpabuf_free(drv->wps_beacon_ie);
drv->wps_beacon_ie = beacon ? wpabuf_dup(beacon) : NULL;
wpabuf_free(drv->wps_probe_resp_ie);
@@ -1332,6 +1349,8 @@
os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ);
iwr.u.essid.pointer = (caddr_t) buf;
iwr.u.essid.length = len;
+ iwr.u.essid.length = (len > IW_ESSID_MAX_SIZE) ?
+ IW_ESSID_MAX_SIZE : len;
if (ioctl(drv->ioctl_sock, SIOCGIWESSID, &iwr) < 0) {
perror("ioctl[SIOCGIWESSID]");
@@ -1374,6 +1393,34 @@
return set80211param(priv, IEEE80211_PARAM_AUTHMODE, authmode);
}
+static int atheros_set_ap(void *priv, struct wpa_driver_ap_params *params)
+{
+ /*
+ * TODO: Use this to replace set_authmode, set_privacy, set_ieee8021x,
+ * set_generic_elem, and hapd_set_ssid.
+ */
+
+ wpa_printf(MSG_DEBUG, "atheros: set_ap - pairwise_ciphers=0x%x "
+ "group_cipher=0x%x key_mgmt_suites=0x%x auth_algs=0x%x "
+ "wpa_version=0x%x privacy=%d interworking=%d",
+ params->pairwise_ciphers, params->group_cipher,
+ params->key_mgmt_suites, params->auth_algs,
+ params->wpa_version, params->privacy, params->interworking);
+ wpa_hexdump_ascii(MSG_DEBUG, "atheros: SSID",
+ params->ssid, params->ssid_len);
+ if (params->hessid)
+ wpa_printf(MSG_DEBUG, "atheros: HESSID " MACSTR,
+ MAC2STR(params->hessid));
+ wpa_hexdump_buf(MSG_DEBUG, "atheros: beacon_ies",
+ params->beacon_ies);
+ wpa_hexdump_buf(MSG_DEBUG, "atheros: proberesp_ies",
+ params->proberesp_ies);
+ wpa_hexdump_buf(MSG_DEBUG, "atheros: assocresp_ies",
+ params->assocresp_ies);
+
+ return 0;
+}
+
const struct wpa_driver_ops wpa_driver_atheros_ops = {
.name = "atheros",
.hapd_init = atheros_init,
@@ -1396,4 +1443,5 @@
.commit = atheros_commit,
.set_ap_wps_ie = atheros_set_ap_wps_ie,
.set_authmode = atheros_set_authmode,
+ .set_ap = atheros_set_ap,
};