hostapd: update to 20101109, reorganize patches

SVN-Revision: 23932
This commit is contained in:
Felix Fietkau 2010-11-09 01:36:36 +00:00
parent 297b9756bc
commit 327d4d9f67
28 changed files with 163 additions and 275 deletions

View file

@ -8,9 +8,9 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=hostapd PKG_NAME:=hostapd
PKG_VERSION:=20100705 PKG_VERSION:=20101109
PKG_RELEASE:=2 PKG_RELEASE:=1
PKG_REV:=2f1ce78bf78cecd7021385b04a4f55f22e76ab97 PKG_REV:=8672562b04a6f51cba5dad19b27a296caa17f0c0
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=git://w1.fi/srv/git/hostap.git PKG_SOURCE_URL:=git://w1.fi/srv/git/hostap.git

View file

@ -1,21 +0,0 @@
--- a/src/drivers/nl80211_copy.h
+++ b/src/drivers/nl80211_copy.h
@@ -709,6 +709,9 @@ enum nl80211_commands {
* NL80211_CMD_AUTHENTICATE, NL80211_CMD_DEAUTHENTICATE,
* NL80211_CMD_DISASSOCIATE.
*
+ * @NL80211_ATTR_AP_ISOLATE: (AP mode) Do not forward traffic between stations
+ * connected to this BSS.
+ *
* @NL80211_ATTR_MAX: highest attribute number currently defined
* @__NL80211_ATTR_AFTER_LAST: internal use
*/
@@ -864,6 +867,8 @@ enum nl80211_attrs {
NL80211_ATTR_LOCAL_STATE_CHANGE,
+ NL80211_ATTR_AP_ISOLATE,
+
/* add attributes here, update the policy in nl80211.c */
__NL80211_ATTR_AFTER_LAST,

View file

@ -0,0 +1,18 @@
--- a/src/drivers/driver_madwifi.c
+++ b/src/drivers/driver_madwifi.c
@@ -69,6 +69,7 @@
#define MADWIFI_NG
#endif /* IEEE80211_IOCTL_SETWMMPARAMS */
+#define WPA_KEY_RSC_LEN 8
#ifdef HOSTAPD
@@ -1510,7 +1511,6 @@ wpa_driver_madwifi_set_key(const char *i
wk.ik_keyix = key_idx;
wk.ik_keylen = key_len;
#ifdef WORDS_BIGENDIAN
-#define WPA_KEY_RSC_LEN 8
{
size_t i;
u8 tmp[WPA_KEY_RSC_LEN];

View file

@ -1,21 +0,0 @@
--- a/src/drivers/driver_madwifi.c
+++ b/src/drivers/driver_madwifi.c
@@ -1177,8 +1177,6 @@ madwifi_init(struct hostapd_data *hapd,
goto bad;
}
- /* mark down during setup */
- linux_set_iface_flags(drv->ioctl_sock, drv->iface, 0);
madwifi_set_privacy(drv, 0); /* default to no privacy */
madwifi_receive_probe_req(drv);
@@ -1268,8 +1266,7 @@ madwifi_set_countermeasures(void *priv,
static int
madwifi_commit(void *priv)
{
- struct madwifi_driver_data *drv = priv;
- return linux_set_iface_flags(drv->ioctl_sock, drv->iface, 1);
+ return 0;
}
#else /* HOSTAPD */

View file

@ -1,10 +0,0 @@
--- a/src/ap/hostapd.c
+++ b/src/ap/hostapd.c
@@ -660,7 +660,6 @@ static int setup_interface(struct hostap
country[3] = '\0';
if (hostapd_set_country(hapd, country) < 0) {
wpa_printf(MSG_ERROR, "Failed to set country code");
- return -1;
}
}

View file

@ -1,28 +0,0 @@
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -22,6 +22,7 @@
#include <netlink/genl/genl.h>
#include <netlink/genl/family.h>
#include <netlink/genl/ctrl.h>
+#include <linux/rtnetlink.h>
#include <netpacket/packet.h>
#include <linux/filter.h>
#include "nl80211_copy.h"
--- a/src/drivers/driver_madwifi.c
+++ b/src/drivers/driver_madwifi.c
@@ -69,6 +69,7 @@
#define MADWIFI_NG
#endif /* IEEE80211_IOCTL_SETWMMPARAMS */
+#define WPA_KEY_RSC_LEN 8
#ifdef HOSTAPD
@@ -1506,7 +1507,6 @@ wpa_driver_madwifi_set_key(const char *i
wk.ik_keyix = key_idx;
wk.ik_keylen = key_len;
#ifdef WORDS_BIGENDIAN
-#define WPA_KEY_RSC_LEN 8
{
size_t i;
u8 tmp[WPA_KEY_RSC_LEN];

View file

@ -1,6 +1,6 @@
--- a/wpa_supplicant/scan.c --- a/wpa_supplicant/scan.c
+++ b/wpa_supplicant/scan.c +++ b/wpa_supplicant/scan.c
@@ -248,6 +248,7 @@ static void wpa_supplicant_scan(void *el @@ -250,6 +250,7 @@ static void wpa_supplicant_scan(void *el
enum wps_request_type req_type = WPS_REQ_ENROLLEE_INFO; enum wps_request_type req_type = WPS_REQ_ENROLLEE_INFO;
#endif /* CONFIG_WPS */ #endif /* CONFIG_WPS */
struct wpa_driver_scan_params params; struct wpa_driver_scan_params params;
@ -8,7 +8,7 @@
size_t max_ssids; size_t max_ssids;
enum wpa_states prev_state; enum wpa_states prev_state;
@@ -316,6 +317,16 @@ static void wpa_supplicant_scan(void *el @@ -306,6 +307,16 @@ static void wpa_supplicant_scan(void *el
wpa_s->wpa_state == WPA_INACTIVE) wpa_s->wpa_state == WPA_INACTIVE)
wpa_supplicant_set_state(wpa_s, WPA_SCANNING); wpa_supplicant_set_state(wpa_s, WPA_SCANNING);
@ -25,7 +25,7 @@
/* Find the starting point from which to continue scanning */ /* Find the starting point from which to continue scanning */
ssid = wpa_s->conf->ssid; ssid = wpa_s->conf->ssid;
if (wpa_s->prev_scan_ssid != WILDCARD_SSID_SCAN) { if (wpa_s->prev_scan_ssid != WILDCARD_SSID_SCAN) {
@@ -379,6 +390,9 @@ static void wpa_supplicant_scan(void *el @@ -369,6 +380,9 @@ static void wpa_supplicant_scan(void *el
int_array_sort_unique(params.freqs); int_array_sort_unique(params.freqs);
} }

View file

@ -145,7 +145,7 @@
madwifi_raw_receive, drv, 1); madwifi_raw_receive, drv, 1);
if (drv->sock_raw == NULL) if (drv->sock_raw == NULL)
return -1; return -1;
@@ -1016,7 +1018,7 @@ madwifi_get_we_version(struct madwifi_dr @@ -1017,7 +1019,7 @@ madwifi_get_we_version(struct madwifi_dr
return -1; return -1;
memset(&iwr, 0, sizeof(iwr)); memset(&iwr, 0, sizeof(iwr));
@ -154,7 +154,7 @@
iwr.u.data.pointer = (caddr_t) range; iwr.u.data.pointer = (caddr_t) range;
iwr.u.data.length = buflen; iwr.u.data.length = buflen;
@@ -1133,17 +1135,17 @@ madwifi_init(struct hostapd_data *hapd, @@ -1134,17 +1136,17 @@ madwifi_init(struct hostapd_data *hapd,
perror("socket[PF_INET,SOCK_DGRAM]"); perror("socket[PF_INET,SOCK_DGRAM]");
goto bad; goto bad;
} }
@ -175,7 +175,7 @@
handle_read, drv, 1); handle_read, drv, 1);
if (drv->sock_xmit == NULL) if (drv->sock_xmit == NULL)
goto bad; goto bad;
@@ -1157,7 +1159,7 @@ madwifi_init(struct hostapd_data *hapd, @@ -1158,7 +1160,7 @@ madwifi_init(struct hostapd_data *hapd,
1); 1);
if (drv->sock_recv == NULL) if (drv->sock_recv == NULL)
goto bad; goto bad;
@ -184,7 +184,7 @@
wpa_printf(MSG_DEBUG, "Interface in bridge %s; configure for " wpa_printf(MSG_DEBUG, "Interface in bridge %s; configure for "
"EAPOL receive", brname); "EAPOL receive", brname);
drv->sock_recv = l2_packet_init(brname, NULL, ETH_P_EAPOL, drv->sock_recv = l2_packet_init(brname, NULL, ETH_P_EAPOL,
@@ -1168,7 +1170,7 @@ madwifi_init(struct hostapd_data *hapd, @@ -1169,7 +1171,7 @@ madwifi_init(struct hostapd_data *hapd,
drv->sock_recv = drv->sock_xmit; drv->sock_recv = drv->sock_xmit;
memset(&iwr, 0, sizeof(iwr)); memset(&iwr, 0, sizeof(iwr));
@ -193,7 +193,16 @@
iwr.u.mode = IW_MODE_MASTER; iwr.u.mode = IW_MODE_MASTER;
@@ -1203,7 +1205,7 @@ madwifi_deinit(void *priv) @@ -1180,7 +1182,7 @@ madwifi_init(struct hostapd_data *hapd,
}
/* mark down during setup */
- linux_set_iface_flags(drv->ioctl_sock, drv->iface, 0);
+ linux_set_iface_flags(drv->ioctl_sock, drv->ifname, 0);
madwifi_set_privacy(drv, 0); /* default to no privacy */
madwifi_receive_probe_req(drv);
@@ -1206,7 +1208,7 @@ madwifi_deinit(void *priv)
struct madwifi_driver_data *drv = priv; struct madwifi_driver_data *drv = priv;
netlink_deinit(drv->netlink); netlink_deinit(drv->netlink);
@ -202,7 +211,7 @@
if (drv->ioctl_sock >= 0) if (drv->ioctl_sock >= 0)
close(drv->ioctl_sock); close(drv->ioctl_sock);
if (drv->sock_recv != NULL && drv->sock_recv != drv->sock_xmit) if (drv->sock_recv != NULL && drv->sock_recv != drv->sock_xmit)
@@ -1222,7 +1224,7 @@ madwifi_set_ssid(void *priv, const u8 *b @@ -1225,7 +1227,7 @@ madwifi_set_ssid(void *priv, const u8 *b
struct iwreq iwr; struct iwreq iwr;
memset(&iwr, 0, sizeof(iwr)); memset(&iwr, 0, sizeof(iwr));
@ -211,7 +220,7 @@
iwr.u.essid.flags = 1; /* SSID active */ iwr.u.essid.flags = 1; /* SSID active */
iwr.u.essid.pointer = (caddr_t) buf; iwr.u.essid.pointer = (caddr_t) buf;
iwr.u.essid.length = len + 1; iwr.u.essid.length = len + 1;
@@ -1243,7 +1245,7 @@ madwifi_get_ssid(void *priv, u8 *buf, in @@ -1246,7 +1248,7 @@ madwifi_get_ssid(void *priv, u8 *buf, in
int ret = 0; int ret = 0;
memset(&iwr, 0, sizeof(iwr)); memset(&iwr, 0, sizeof(iwr));
@ -220,8 +229,12 @@
iwr.u.essid.pointer = (caddr_t) buf; iwr.u.essid.pointer = (caddr_t) buf;
iwr.u.essid.length = len; iwr.u.essid.length = len;
@@ -1270,137 +1272,16 @@ madwifi_commit(void *priv) @@ -1271,140 +1273,19 @@ static int
return 0; madwifi_commit(void *priv)
{
struct madwifi_driver_data *drv = priv;
- return linux_set_iface_flags(drv->ioctl_sock, drv->iface, 1);
+ return linux_set_iface_flags(drv->ioctl_sock, drv->ifname, 1);
} }
-#else /* HOSTAPD */ -#else /* HOSTAPD */
@ -361,7 +374,7 @@
const u8 *wpa_ie, size_t wpa_ie_len) const u8 *wpa_ie, size_t wpa_ie_len)
{ {
struct iwreq iwr; struct iwreq iwr;
@@ -1411,7 +1292,7 @@ wpa_driver_madwifi_set_wpa_ie(struct wpa @@ -1415,7 +1296,7 @@ wpa_driver_madwifi_set_wpa_ie(struct wpa
iwr.u.data.pointer = (void *) wpa_ie; iwr.u.data.pointer = (void *) wpa_ie;
iwr.u.data.length = wpa_ie_len; iwr.u.data.length = wpa_ie_len;
@ -370,7 +383,7 @@
perror("ioctl[IEEE80211_IOCTL_SETOPTIE]"); perror("ioctl[IEEE80211_IOCTL_SETOPTIE]");
return -1; return -1;
} }
@@ -1419,156 +1300,51 @@ wpa_driver_madwifi_set_wpa_ie(struct wpa @@ -1423,156 +1304,51 @@ wpa_driver_madwifi_set_wpa_ie(struct wpa
} }
static int static int
@ -535,7 +548,7 @@
ret = -1; ret = -1;
if (wpa_driver_madwifi_set_auth_alg(drv, params->auth_alg) < 0) if (wpa_driver_madwifi_set_auth_alg(drv, params->auth_alg) < 0)
ret = -1; ret = -1;
@@ -1591,12 +1367,12 @@ wpa_driver_madwifi_associate(void *priv, @@ -1595,12 +1371,12 @@ wpa_driver_madwifi_associate(void *priv,
params->wpa_ie_len == 0) params->wpa_ie_len == 0)
privacy = 0; privacy = 0;
@ -550,7 +563,7 @@
ret = -1; ret = -1;
if (params->bssid == NULL) { if (params->bssid == NULL) {
@@ -1604,14 +1380,14 @@ wpa_driver_madwifi_associate(void *priv, @@ -1608,14 +1384,14 @@ wpa_driver_madwifi_associate(void *priv,
* roaming */ * roaming */
/* FIX: this does not seem to work; would probably need to /* FIX: this does not seem to work; would probably need to
* change something in the driver */ * change something in the driver */
@ -567,7 +580,7 @@
ret = -1; ret = -1;
if (wpa_driver_wext_set_ssid(drv->wext, params->ssid, if (wpa_driver_wext_set_ssid(drv->wext, params->ssid,
params->ssid_len) < 0) params->ssid_len) < 0)
@@ -1620,7 +1396,7 @@ wpa_driver_madwifi_associate(void *priv, @@ -1624,7 +1400,7 @@ wpa_driver_madwifi_associate(void *priv,
mlme.im_op = IEEE80211_MLME_ASSOC; mlme.im_op = IEEE80211_MLME_ASSOC;
os_memcpy(mlme.im_macaddr, params->bssid, IEEE80211_ADDR_LEN); os_memcpy(mlme.im_macaddr, params->bssid, IEEE80211_ADDR_LEN);
if (set80211priv(drv, IEEE80211_IOCTL_SETMLME, &mlme, if (set80211priv(drv, IEEE80211_IOCTL_SETMLME, &mlme,
@ -576,7 +589,7 @@
wpa_printf(MSG_DEBUG, "%s: SETMLME[ASSOC] failed", wpa_printf(MSG_DEBUG, "%s: SETMLME[ASSOC] failed",
__func__); __func__);
ret = -1; ret = -1;
@@ -1633,7 +1409,7 @@ wpa_driver_madwifi_associate(void *priv, @@ -1637,7 +1413,7 @@ wpa_driver_madwifi_associate(void *priv,
static int static int
wpa_driver_madwifi_set_auth_alg(void *priv, int auth_alg) wpa_driver_madwifi_set_auth_alg(void *priv, int auth_alg)
{ {
@ -585,7 +598,7 @@
int authmode; int authmode;
if ((auth_alg & WPA_AUTH_ALG_OPEN) && if ((auth_alg & WPA_AUTH_ALG_OPEN) &&
@@ -1644,13 +1420,13 @@ wpa_driver_madwifi_set_auth_alg(void *pr @@ -1648,13 +1424,13 @@ wpa_driver_madwifi_set_auth_alg(void *pr
else else
authmode = IEEE80211_AUTH_OPEN; authmode = IEEE80211_AUTH_OPEN;
@ -601,7 +614,7 @@
struct iwreq iwr; struct iwreq iwr;
int ret = 0; int ret = 0;
const u8 *ssid = params->ssids[0].ssid; const u8 *ssid = params->ssids[0].ssid;
@@ -1668,7 +1444,7 @@ wpa_driver_madwifi_scan(void *priv, stru @@ -1672,7 +1448,7 @@ wpa_driver_madwifi_scan(void *priv, stru
if (wpa_driver_wext_set_ssid(drv->wext, ssid, ssid_len) < 0) if (wpa_driver_wext_set_ssid(drv->wext, ssid, ssid_len) < 0)
ret = -1; ret = -1;
@ -610,7 +623,7 @@
perror("ioctl[SIOCSIWSCAN]"); perror("ioctl[SIOCSIWSCAN]");
ret = -1; ret = -1;
} }
@@ -1690,14 +1466,14 @@ wpa_driver_madwifi_scan(void *priv, stru @@ -1694,14 +1470,14 @@ wpa_driver_madwifi_scan(void *priv, stru
static int wpa_driver_madwifi_get_bssid(void *priv, u8 *bssid) static int wpa_driver_madwifi_get_bssid(void *priv, u8 *bssid)
{ {
@ -627,7 +640,7 @@
return wpa_driver_wext_get_ssid(drv->wext, ssid); return wpa_driver_wext_get_ssid(drv->wext, ssid);
} }
@@ -1705,14 +1481,16 @@ static int wpa_driver_madwifi_get_ssid(v @@ -1709,14 +1485,16 @@ static int wpa_driver_madwifi_get_ssid(v
static struct wpa_scan_results * static struct wpa_scan_results *
wpa_driver_madwifi_get_scan_results(void *priv) wpa_driver_madwifi_get_scan_results(void *priv)
{ {
@ -646,7 +659,7 @@
return wpa_driver_wext_set_operstate(drv->wext, state); return wpa_driver_wext_set_operstate(drv->wext, state);
} }
@@ -1733,7 +1511,7 @@ static int wpa_driver_madwifi_set_probe_ @@ -1737,7 +1515,7 @@ static int wpa_driver_madwifi_set_probe_
ret = set80211priv(priv, IEEE80211_IOCTL_SET_APPIEBUF, probe_req_ie, ret = set80211priv(priv, IEEE80211_IOCTL_SET_APPIEBUF, probe_req_ie,
sizeof(struct ieee80211req_getset_appiebuf) + sizeof(struct ieee80211req_getset_appiebuf) +
@ -655,7 +668,7 @@
os_free(probe_req_ie); os_free(probe_req_ie);
@@ -1743,7 +1521,7 @@ static int wpa_driver_madwifi_set_probe_ @@ -1747,7 +1525,7 @@ static int wpa_driver_madwifi_set_probe_
static void * wpa_driver_madwifi_init(void *ctx, const char *ifname) static void * wpa_driver_madwifi_init(void *ctx, const char *ifname)
{ {
@ -664,7 +677,7 @@
drv = os_zalloc(sizeof(*drv)); drv = os_zalloc(sizeof(*drv));
if (drv == NULL) if (drv == NULL)
@@ -1754,17 +1532,17 @@ static void * wpa_driver_madwifi_init(vo @@ -1758,17 +1536,17 @@ static void * wpa_driver_madwifi_init(vo
drv->ctx = ctx; drv->ctx = ctx;
os_strlcpy(drv->ifname, ifname, sizeof(drv->ifname)); os_strlcpy(drv->ifname, ifname, sizeof(drv->ifname));
@ -686,7 +699,7 @@
wpa_printf(MSG_DEBUG, "%s: failed to enable WPA support", wpa_printf(MSG_DEBUG, "%s: failed to enable WPA support",
__FUNCTION__); __FUNCTION__);
goto fail3; goto fail3;
@@ -1773,7 +1551,7 @@ static void * wpa_driver_madwifi_init(vo @@ -1777,7 +1555,7 @@ static void * wpa_driver_madwifi_init(vo
return drv; return drv;
fail3: fail3:
@ -695,7 +708,7 @@
fail2: fail2:
wpa_driver_wext_deinit(drv->wext); wpa_driver_wext_deinit(drv->wext);
fail: fail:
@@ -1784,38 +1562,37 @@ fail: @@ -1788,38 +1566,37 @@ fail:
static void wpa_driver_madwifi_deinit(void *priv) static void wpa_driver_madwifi_deinit(void *priv)
{ {
@ -741,7 +754,7 @@
#ifdef HOSTAPD #ifdef HOSTAPD
.hapd_init = madwifi_init, .hapd_init = madwifi_init,
.hapd_deinit = madwifi_deinit, .hapd_deinit = madwifi_deinit,
@@ -1835,7 +1612,8 @@ const struct wpa_driver_ops wpa_driver_m @@ -1839,7 +1616,8 @@ const struct wpa_driver_ops wpa_driver_m
.sta_clear_stats = madwifi_sta_clear_stats, .sta_clear_stats = madwifi_sta_clear_stats,
.commit = madwifi_commit, .commit = madwifi_commit,
.set_ap_wps_ie = madwifi_set_ap_wps_ie, .set_ap_wps_ie = madwifi_set_ap_wps_ie,
@ -751,7 +764,7 @@
.get_bssid = wpa_driver_madwifi_get_bssid, .get_bssid = wpa_driver_madwifi_get_bssid,
.get_ssid = wpa_driver_madwifi_get_ssid, .get_ssid = wpa_driver_madwifi_get_ssid,
.init = wpa_driver_madwifi_init, .init = wpa_driver_madwifi_init,
@@ -1847,5 +1625,5 @@ const struct wpa_driver_ops wpa_driver_m @@ -1851,5 +1629,5 @@ const struct wpa_driver_ops wpa_driver_m
.disassociate = wpa_driver_madwifi_disassociate, .disassociate = wpa_driver_madwifi_disassociate,
.associate = wpa_driver_madwifi_associate, .associate = wpa_driver_madwifi_associate,
.set_operstate = wpa_driver_madwifi_set_operstate, .set_operstate = wpa_driver_madwifi_set_operstate,

View file

@ -1,6 +1,6 @@
--- a/src/drivers/driver_nl80211.c --- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c
@@ -4652,9 +4652,11 @@ static int i802_set_wds_sta(void *priv, @@ -4987,9 +4987,11 @@ static int i802_set_wds_sta(void *priv,
wpa_printf(MSG_DEBUG, "nl80211: Set WDS STA addr=" MACSTR wpa_printf(MSG_DEBUG, "nl80211: Set WDS STA addr=" MACSTR
" aid=%d val=%d name=%s", MAC2STR(addr), aid, val, name); " aid=%d val=%d name=%s", MAC2STR(addr), aid, val, name);
if (val) { if (val) {
@ -16,7 +16,7 @@
} else { } else {
--- a/src/ap/ieee802_11.c --- a/src/ap/ieee802_11.c
+++ b/src/ap/ieee802_11.c +++ b/src/ap/ieee802_11.c
@@ -1627,6 +1627,9 @@ static void handle_assoc_cb(struct hosta @@ -1659,6 +1659,9 @@ static void handle_assoc_cb(struct hosta
"Could not add STA to kernel driver"); "Could not add STA to kernel driver");
} }

View file

@ -10,7 +10,7 @@
--- a/hostapd/config_file.c --- a/hostapd/config_file.c
+++ b/hostapd/config_file.c +++ b/hostapd/config_file.c
@@ -1193,6 +1193,8 @@ struct hostapd_config * hostapd_config_r @@ -1208,6 +1208,8 @@ struct hostapd_config * hostapd_config_r
sizeof(conf->bss[0].iface)); sizeof(conf->bss[0].iface));
} else if (os_strcmp(buf, "bridge") == 0) { } else if (os_strcmp(buf, "bridge") == 0) {
os_strlcpy(bss->bridge, pos, sizeof(bss->bridge)); os_strlcpy(bss->bridge, pos, sizeof(bss->bridge));
@ -21,7 +21,7 @@
/* clear to get error below if setting is invalid */ /* clear to get error below if setting is invalid */
--- a/src/drivers/driver_nl80211.c --- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c
@@ -4642,7 +4642,8 @@ static int i802_set_sta_vlan(void *priv, @@ -4977,7 +4977,8 @@ static int i802_set_sta_vlan(void *priv,
} }
@ -31,7 +31,7 @@
{ {
struct i802_bss *bss = priv; struct i802_bss *bss = priv;
struct wpa_driver_nl80211_data *drv = bss->drv; struct wpa_driver_nl80211_data *drv = bss->drv;
@@ -4656,6 +4657,10 @@ static int i802_set_wds_sta(void *priv, @@ -4991,6 +4992,10 @@ static int i802_set_wds_sta(void *priv,
if (nl80211_create_iface(drv, name, NL80211_IFTYPE_AP_VLAN, if (nl80211_create_iface(drv, name, NL80211_IFTYPE_AP_VLAN,
NULL, 1) < 0) NULL, 1) < 0)
return -1; return -1;
@ -44,7 +44,7 @@
return i802_set_sta_vlan(priv, addr, name, 0); return i802_set_sta_vlan(priv, addr, name, 0);
--- a/src/ap/ap_drv_ops.c --- a/src/ap/ap_drv_ops.c
+++ b/src/ap/ap_drv_ops.c +++ b/src/ap/ap_drv_ops.c
@@ -265,9 +265,15 @@ static int hostapd_vlan_if_remove(struct @@ -366,9 +366,15 @@ static int hostapd_vlan_if_remove(struct
static int hostapd_set_wds_sta(struct hostapd_data *hapd, const u8 *addr, static int hostapd_set_wds_sta(struct hostapd_data *hapd, const u8 *addr,
int aid, int val) int aid, int val)
{ {
@ -63,7 +63,7 @@
--- a/src/drivers/driver.h --- a/src/drivers/driver.h
+++ b/src/drivers/driver.h +++ b/src/drivers/driver.h
@@ -1622,7 +1622,8 @@ struct wpa_driver_ops { @@ -1700,7 +1700,8 @@ struct wpa_driver_ops {
* @val: 1 = bind to 4-address WDS; 0 = unbind * @val: 1 = bind to 4-address WDS; 0 = unbind
* Returns: 0 on success, -1 on failure * Returns: 0 on success, -1 on failure
*/ */

View file

@ -1,6 +1,6 @@
--- a/src/ap/hostapd.c --- a/src/ap/hostapd.c
+++ b/src/ap/hostapd.c +++ b/src/ap/hostapd.c
@@ -716,6 +716,16 @@ int hostapd_setup_interface_complete(str @@ -728,6 +728,16 @@ int hostapd_setup_interface_complete(str
} }
} }

View file

@ -1,6 +1,6 @@
--- a/hostapd/config_file.c --- a/hostapd/config_file.c
+++ b/hostapd/config_file.c +++ b/hostapd/config_file.c
@@ -1266,6 +1266,8 @@ struct hostapd_config * hostapd_config_r @@ -1281,6 +1281,8 @@ struct hostapd_config * hostapd_config_r
} }
} else if (os_strcmp(buf, "wds_sta") == 0) { } else if (os_strcmp(buf, "wds_sta") == 0) {
bss->wds_sta = atoi(pos); bss->wds_sta = atoi(pos);
@ -21,7 +21,7 @@
* algorithms, WPA_AUTH_ALG_{OPEN,SHARED,LEAP} */ * algorithms, WPA_AUTH_ALG_{OPEN,SHARED,LEAP} */
--- a/src/drivers/driver.h --- a/src/drivers/driver.h
+++ b/src/drivers/driver.h +++ b/src/drivers/driver.h
@@ -1626,6 +1626,14 @@ struct wpa_driver_ops { @@ -1704,6 +1704,14 @@ struct wpa_driver_ops {
const char *bridge_ifname); const char *bridge_ifname);
/** /**
@ -38,7 +38,7 @@
* @freq: Frequency (in MHz) of the channel * @freq: Frequency (in MHz) of the channel
--- a/src/drivers/driver_nl80211.c --- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c
@@ -4339,6 +4339,29 @@ static int i802_set_rate_sets(void *priv @@ -4661,6 +4661,29 @@ static int i802_set_rate_sets(void *priv
return -ENOBUFS; return -ENOBUFS;
} }
@ -68,7 +68,7 @@
#endif /* HOSTAPD */ #endif /* HOSTAPD */
@@ -5448,6 +5471,7 @@ const struct wpa_driver_ops wpa_driver_n @@ -5840,6 +5863,7 @@ const struct wpa_driver_ops wpa_driver_n
.set_tx_queue_params = i802_set_tx_queue_params, .set_tx_queue_params = i802_set_tx_queue_params,
.set_sta_vlan = i802_set_sta_vlan, .set_sta_vlan = i802_set_sta_vlan,
.set_wds_sta = i802_set_wds_sta, .set_wds_sta = i802_set_wds_sta,
@ -78,7 +78,7 @@
.send_action = wpa_driver_nl80211_send_action, .send_action = wpa_driver_nl80211_send_action,
--- a/src/ap/ap_drv_ops.c --- a/src/ap/ap_drv_ops.c
+++ b/src/ap/ap_drv_ops.c +++ b/src/ap/ap_drv_ops.c
@@ -180,6 +180,14 @@ static int hostapd_set_radius_acl_expire @@ -281,6 +281,14 @@ static int hostapd_set_radius_acl_expire
} }
@ -93,7 +93,7 @@
static int hostapd_set_bss_params(struct hostapd_data *hapd, static int hostapd_set_bss_params(struct hostapd_data *hapd,
int use_protection) int use_protection)
{ {
@@ -229,6 +237,12 @@ static int hostapd_set_bss_params(struct @@ -330,6 +338,12 @@ static int hostapd_set_bss_params(struct
"driver"); "driver");
ret = -1; ret = -1;
} }

View file

@ -1,6 +1,6 @@
--- a/src/drivers/driver_nl80211.c --- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c
@@ -1135,7 +1135,6 @@ nla_put_failure: @@ -1380,7 +1380,6 @@ nla_put_failure:
} }
@ -8,23 +8,23 @@
struct wiphy_info_data { struct wiphy_info_data {
int max_scan_ssids; int max_scan_ssids;
int ap_supported; int ap_supported;
@@ -1247,7 +1246,6 @@ static int wpa_driver_nl80211_capa(struc @@ -1493,7 +1492,6 @@ static int wpa_driver_nl80211_capa(struc
return 0; return 0;
} }
-#endif /* HOSTAPD */ -#endif /* HOSTAPD */
static int wpa_driver_nl80211_init_nl(struct wpa_driver_nl80211_data *drv, static int wpa_driver_nl80211_init_nl(struct wpa_driver_nl80211_data *drv)
@@ -1411,6 +1409,7 @@ static void * wpa_driver_nl80211_init(vo @@ -1667,6 +1665,7 @@ static void * wpa_driver_nl80211_init(vo
drv->monitor_ifidx = -1; drv->monitor_ifidx = -1;
drv->monitor_sock = -1; drv->monitor_sock = -1;
drv->ioctl_sock = -1; drv->ioctl_sock = -1;
+ drv->nlmode = NL80211_IFTYPE_STATION; + drv->nlmode = NL80211_IFTYPE_STATION;
if (wpa_driver_nl80211_init_nl(drv, ctx)) { if (wpa_driver_nl80211_init_nl(drv)) {
os_free(drv); os_free(drv);
@@ -1530,32 +1529,32 @@ wpa_driver_nl80211_finish_drv_init(struc @@ -1823,32 +1822,32 @@ wpa_driver_nl80211_finish_drv_init(struc
drv->ifindex = if_nametoindex(bss->ifname); drv->ifindex = if_nametoindex(bss->ifname);
drv->first_bss.ifindex = drv->ifindex; drv->first_bss.ifindex = drv->ifindex;
@ -79,7 +79,7 @@
if (nl80211_register_action_frames(drv) < 0) { if (nl80211_register_action_frames(drv) < 0) {
wpa_printf(MSG_DEBUG, "nl80211: Failed to register Action " wpa_printf(MSG_DEBUG, "nl80211: Failed to register Action "
@@ -2219,13 +2218,9 @@ static int wpa_driver_nl80211_set_key(co @@ -2511,13 +2510,9 @@ static int wpa_driver_nl80211_set_key(co
*/ */
if (ret || !set_tx || alg == WPA_ALG_NONE) if (ret || !set_tx || alg == WPA_ALG_NONE)
return ret; return ret;
@ -94,7 +94,7 @@
msg = nlmsg_alloc(); msg = nlmsg_alloc();
if (!msg) if (!msg)
@@ -3066,7 +3061,8 @@ static void nl80211_remove_iface(struct @@ -3368,7 +3363,8 @@ static void nl80211_remove_iface(struct
#ifdef HOSTAPD #ifdef HOSTAPD
/* stop listening for EAPOL on this interface */ /* stop listening for EAPOL on this interface */
@ -104,7 +104,7 @@
#endif /* HOSTAPD */ #endif /* HOSTAPD */
msg = nlmsg_alloc(); msg = nlmsg_alloc();
@@ -3139,7 +3135,8 @@ static int nl80211_create_iface_once(str @@ -3441,7 +3437,8 @@ static int nl80211_create_iface_once(str
#ifdef HOSTAPD #ifdef HOSTAPD
/* start listening for EAPOL on this interface */ /* start listening for EAPOL on this interface */
@ -114,7 +114,7 @@
#endif /* HOSTAPD */ #endif /* HOSTAPD */
if (addr && iftype != NL80211_IFTYPE_MONITOR && if (addr && iftype != NL80211_IFTYPE_MONITOR &&
@@ -4842,6 +4839,7 @@ static void *i802_init(struct hostapd_da @@ -5177,6 +5174,7 @@ static void *i802_init(struct hostapd_da
return NULL; return NULL;
drv = bss->drv; drv = bss->drv;

View file

@ -1,13 +1,16 @@
--- a/wpa_supplicant/wpa_supplicant.c --- a/wpa_supplicant/wpa_supplicant.c
+++ b/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c
@@ -545,10 +545,16 @@ void wpa_supplicant_set_state(struct wpa @@ -550,6 +550,9 @@ void wpa_supplicant_set_state(struct wpa
wpa_s->new_connection = 0;
wpa_s->reassociated_connection = 1; wpa_s->reassociated_connection = 1;
wpa_drv_set_operstate(wpa_s, 1); wpa_drv_set_operstate(wpa_s, 1);
wpa_s->after_wps = 0;
+#ifndef IEEE8021X_EAPOL +#ifndef IEEE8021X_EAPOL
+ wpa_drv_set_supp_port(wpa_s, 1); + wpa_drv_set_supp_port(wpa_s, 1);
+#endif +#endif
} else if (state == WPA_DISCONNECTED || state == WPA_ASSOCIATING || wpa_s->after_wps = 0;
#ifdef CONFIG_P2P
wpas_p2p_completed(wpa_s);
@@ -558,6 +561,9 @@ void wpa_supplicant_set_state(struct wpa
state == WPA_ASSOCIATED) { state == WPA_ASSOCIATED) {
wpa_s->new_connection = 1; wpa_s->new_connection = 1;
wpa_drv_set_operstate(wpa_s, 0); wpa_drv_set_operstate(wpa_s, 0);

View file

@ -1,6 +1,6 @@
--- a/src/drivers/driver_nl80211.c --- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c
@@ -410,6 +410,10 @@ static void wpa_driver_nl80211_event_rtm @@ -452,6 +452,10 @@ static void wpa_driver_nl80211_event_rtm
return; return;
} }
@ -11,7 +11,7 @@
wpa_printf(MSG_DEBUG, "RTM_NEWLINK: operstate=%d ifi_flags=0x%x " wpa_printf(MSG_DEBUG, "RTM_NEWLINK: operstate=%d ifi_flags=0x%x "
"(%s%s%s%s)", "(%s%s%s%s)",
drv->operstate, ifi->ifi_flags, drv->operstate, ifi->ifi_flags,
@@ -481,6 +485,10 @@ static void wpa_driver_nl80211_event_rtm @@ -523,6 +527,10 @@ static void wpa_driver_nl80211_event_rtm
attrlen = len; attrlen = len;
attr = (struct rtattr *) buf; attr = (struct rtattr *) buf;
@ -22,9 +22,9 @@
rta_len = RTA_ALIGN(sizeof(struct rtattr)); rta_len = RTA_ALIGN(sizeof(struct rtattr));
while (RTA_OK(attr, attrlen)) { while (RTA_OK(attr, attrlen)) {
if (attr->rta_type == IFLA_IFNAME) { if (attr->rta_type == IFLA_IFNAME) {
@@ -1347,6 +1355,11 @@ static int wpa_driver_nl80211_init_nl(st @@ -1490,6 +1498,11 @@ static int wpa_driver_nl80211_capa(struc
eloop_register_read_sock(nl_socket_get_fd(drv->nl_handle_event), drv->capa.flags |= WPA_DRIVER_FLAGS_P2P_CAPABLE;
wpa_driver_nl80211_event_receive, drv, ctx); drv->capa.max_remain_on_chan = 5000;
+#ifdef HOSTAPD +#ifdef HOSTAPD
+ drv->num_if_indices = sizeof(drv->default_if_indices) / sizeof(int); + drv->num_if_indices = sizeof(drv->default_if_indices) / sizeof(int);
@ -32,9 +32,9 @@
+#endif +#endif
+ +
return 0; return 0;
}
err4: @@ -5184,8 +5197,6 @@ static void *i802_init(struct hostapd_da
@@ -4867,8 +4880,6 @@ static void *i802_init(struct hostapd_da
br_ifindex = 0; br_ifindex = 0;
} }

View file

@ -1,6 +1,6 @@
--- a/src/ap/hostapd.c --- a/src/ap/hostapd.c
+++ b/src/ap/hostapd.c +++ b/src/ap/hostapd.c
@@ -42,37 +42,8 @@ static int hostapd_setup_encryption(char @@ -43,37 +43,8 @@ static int hostapd_setup_encryption(char
extern int wpa_debug_level; extern int wpa_debug_level;
@ -39,7 +39,7 @@
if (hostapd_setup_wpa_psk(hapd->conf)) { if (hostapd_setup_wpa_psk(hapd->conf)) {
wpa_printf(MSG_ERROR, "Failed to re-configure WPA PSK " wpa_printf(MSG_ERROR, "Failed to re-configure WPA PSK "
"after reloading configuration"); "after reloading configuration");
@@ -110,10 +81,46 @@ int hostapd_reload_config(struct hostapd @@ -111,10 +82,46 @@ int hostapd_reload_config(struct hostapd
wpa_printf(MSG_ERROR, "Could not set SSID for kernel driver"); wpa_printf(MSG_ERROR, "Could not set SSID for kernel driver");
/* try to continue */ /* try to continue */
} }

View file

@ -1,41 +0,0 @@
From: Helmut Schaa <helmut.schaa@googlemail.com>
Date: Sat, 28 Aug 2010 09:25:44 +0000 (+0300)
Subject: hostapd: enable STBC only for STBC capable STAs
X-Git-Url: http://hostap.epitest.fi/gitweb/gitweb.cgi?p=hostap.git;a=commitdiff_plain;h=36af1c7d31bdc5ba4dacacbf32d3c7585665ae2b
hostapd: enable STBC only for STBC capable STAs
hostapd simply used its own STBC configuration in the STA's HT caps. This
resulted in TX STBC being used for STAs not supporting RX STBC, which in
turn resulted in the STA not receiving anything.
Fix this by handling the STBC flags in the same way mac80211 does. Mask
out RX STBC if we don't support TX STBC and vice versa.
Tested only with the nl80211 driver and a STBC incapable STA.
Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
---
diff --git a/src/ap/ieee802_11_ht.c b/src/ap/ieee802_11_ht.c
index 1b39a6a..b193ee0 100644
--- a/src/ap/ieee802_11_ht.c
+++ b/src/ap/ieee802_11_ht.c
@@ -256,7 +256,15 @@ void hostapd_get_ht_capab(struct hostapd_data *hapd,
cap &= hapd->iconf->ht_capab;
cap |= (hapd->iconf->ht_capab & HT_CAP_INFO_SMPS_DISABLED);
- /* FIXME: Rx STBC needs to be handled specially */
- cap |= (hapd->iconf->ht_capab & HT_CAP_INFO_RX_STBC_MASK);
+ /*
+ * STBC needs to be handled specially
+ * if we don't support RX STBC, mask out TX STBC in the STA's HT caps
+ * if we don't support TX STBC, mask out RX STBC in the STA's HT caps
+ */
+ if (!(hapd->iconf->ht_capab & HT_CAP_INFO_RX_STBC_MASK))
+ cap &= ~HT_CAP_INFO_TX_STBC;
+ if (!(hapd->iconf->ht_capab & HT_CAP_INFO_TX_STBC))
+ cap &= ~HT_CAP_INFO_RX_STBC_MASK;
+
neg_ht_cap->ht_capabilities_info = host_to_le16(cap);
}

View file

@ -1,25 +0,0 @@
From: Jouni Malinen <jouni.malinen@atheros.com>
Date: Tue, 26 Oct 2010 13:30:28 +0000 (+0300)
Subject: hostapd: Set operstate UP when initializing AP mode
X-Git-Url: http://w1.fi/gitweb/gitweb.cgi?p=hostap.git;a=commitdiff_plain;h=e11f5a2cbc333113a3a1cc1aeea7f698c3936ca3
hostapd: Set operstate UP when initializing AP mode
This is needed to avoid problems with other applications setting and
leaving the interface to IF_OPER_DORMANT state. In AP mode, the interface
is ready immediately after the keys are set, so we better make sure the
DORMANT state does not prevent normal operations after that.
---
--- a/src/ap/hostapd.c
+++ b/src/ap/hostapd.c
@@ -622,6 +622,9 @@ static int hostapd_setup_bss(struct host
ieee802_11_set_beacon(hapd);
+ if (hapd->driver && hapd->driver->set_operstate)
+ hapd->driver->set_operstate(hapd->drv_priv, 1);
+
return 0;
}

View file

@ -1,6 +1,6 @@
--- a/src/ap/hostapd.h --- a/src/ap/hostapd.h
+++ b/src/ap/hostapd.h +++ b/src/ap/hostapd.h
@@ -245,6 +245,7 @@ struct hostapd_iface { @@ -271,6 +271,7 @@ struct hostapd_iface {
int (*for_each_interface)(struct hapd_interfaces *interfaces, int (*for_each_interface)(struct hapd_interfaces *interfaces,
int (*cb)(struct hostapd_iface *iface, int (*cb)(struct hostapd_iface *iface,
void *ctx), void *ctx); void *ctx), void *ctx);
@ -10,7 +10,7 @@
/* hostapd.c */ /* hostapd.c */
--- a/src/ap/hostapd.c --- a/src/ap/hostapd.c
+++ b/src/ap/hostapd.c +++ b/src/ap/hostapd.c
@@ -755,6 +755,9 @@ int hostapd_setup_interface_complete(str @@ -784,6 +784,9 @@ int hostapd_setup_interface_complete(str
wpa_printf(MSG_DEBUG, "%s: Setup of interface done.", wpa_printf(MSG_DEBUG, "%s: Setup of interface done.",
iface->bss[0]->conf->iface); iface->bss[0]->conf->iface);
@ -116,7 +116,7 @@
os_program_deinit(); os_program_deinit();
--- a/hostapd/config_file.c --- a/hostapd/config_file.c
+++ b/hostapd/config_file.c +++ b/hostapd/config_file.c
@@ -1857,6 +1857,8 @@ struct hostapd_config * hostapd_config_r @@ -1882,6 +1882,8 @@ struct hostapd_config * hostapd_config_r
} }
#endif /* CONFIG_IEEE80211W */ #endif /* CONFIG_IEEE80211W */
#ifdef CONFIG_IEEE80211N #ifdef CONFIG_IEEE80211N
@ -127,7 +127,7 @@
} else if (os_strcmp(buf, "ht_capab") == 0) { } else if (os_strcmp(buf, "ht_capab") == 0) {
--- a/src/ap/ap_config.h --- a/src/ap/ap_config.h
+++ b/src/ap/ap_config.h +++ b/src/ap/ap_config.h
@@ -369,6 +369,7 @@ struct hostapd_config { @@ -380,6 +380,7 @@ struct hostapd_config {
int ht_op_mode_fixed; int ht_op_mode_fixed;
u16 ht_capab; u16 ht_capab;

View file

@ -26,7 +26,7 @@
LIBS += $(DRV_AP_LIBS) LIBS += $(DRV_AP_LIBS)
ifdef CONFIG_L2_PACKET ifdef CONFIG_L2_PACKET
@@ -739,6 +744,12 @@ install: all @@ -763,6 +768,12 @@ install: all
BCHECK=../src/drivers/build.hostapd BCHECK=../src/drivers/build.hostapd
@ -39,7 +39,7 @@
hostapd: $(BCHECK) $(OBJS) hostapd: $(BCHECK) $(OBJS)
$(CC) $(LDFLAGS) -o hostapd $(OBJS) $(LIBS) $(CC) $(LDFLAGS) -o hostapd $(OBJS) $(LIBS)
@@ -777,6 +788,12 @@ HOBJS += ../src/crypto/aes-internal.o @@ -801,6 +812,12 @@ HOBJS += ../src/crypto/aes-internal.o
HOBJS += ../src/crypto/aes-internal-enc.o HOBJS += ../src/crypto/aes-internal-enc.o
endif endif
@ -62,7 +62,7 @@
ifndef CONFIG_OS ifndef CONFIG_OS
ifdef CONFIG_NATIVE_WINDOWS ifdef CONFIG_NATIVE_WINDOWS
@@ -581,6 +582,10 @@ ifdef CONFIG_DYNAMIC_EAP_METHODS @@ -622,6 +623,10 @@ ifdef CONFIG_DYNAMIC_EAP_METHODS
CFLAGS += -DCONFIG_DYNAMIC_EAP_METHODS CFLAGS += -DCONFIG_DYNAMIC_EAP_METHODS
LIBS += -ldl -rdynamic LIBS += -ldl -rdynamic
endif endif
@ -73,7 +73,7 @@
endif endif
ifdef CONFIG_AP ifdef CONFIG_AP
@@ -635,6 +640,12 @@ CFLAGS += -DEAP_SERVER_WSC @@ -676,6 +681,12 @@ CFLAGS += -DEAP_SERVER_WSC
OBJS += ../src/ap/wps_hostapd.o OBJS += ../src/ap/wps_hostapd.o
OBJS += ../src/eap_server/eap_server_wsc.o OBJS += ../src/eap_server/eap_server_wsc.o
endif endif
@ -86,7 +86,7 @@
endif endif
ifdef NEED_RSN_AUTHENTICATOR ifdef NEED_RSN_AUTHENTICATOR
@@ -1270,6 +1281,12 @@ BCHECK=../src/drivers/build.wpa_supplica @@ -1317,6 +1328,12 @@ BCHECK=../src/drivers/build.wpa_supplica
wpa_priv: $(BCHECK) $(OBJS_priv) wpa_priv: $(BCHECK) $(OBJS_priv)
$(LDO) $(LDFLAGS) -o wpa_priv $(OBJS_priv) $(LIBS) $(LDO) $(LDFLAGS) -o wpa_priv $(OBJS_priv) $(LIBS)
@ -99,7 +99,7 @@
wpa_supplicant: .config $(BCHECK) $(OBJS) $(EXTRA_progs) wpa_supplicant: .config $(BCHECK) $(OBJS) $(EXTRA_progs)
$(LDO) $(LDFLAGS) -o wpa_supplicant $(OBJS) $(LIBS) $(EXTRALIBS) $(LDO) $(LDFLAGS) -o wpa_supplicant $(OBJS) $(LIBS) $(EXTRALIBS)
@@ -1329,6 +1346,12 @@ endif @@ -1376,6 +1393,12 @@ endif
$(Q)$(CC) -c -o $@ $(CFLAGS) $< $(Q)$(CC) -c -o $@ $(CFLAGS) $<
@$(E) " CC " $< @$(E) " CC " $<
@ -114,7 +114,7 @@
wpa_cli.exe: wpa_cli wpa_cli.exe: wpa_cli
--- a/src/drivers/driver.h --- a/src/drivers/driver.h
+++ b/src/drivers/driver.h +++ b/src/drivers/driver.h
@@ -2465,8 +2465,8 @@ union wpa_event_data { @@ -2667,8 +2667,8 @@ union wpa_event_data {
* Driver wrapper code should call this function whenever an event is received * Driver wrapper code should call this function whenever an event is received
* from the driver. * from the driver.
*/ */
@ -127,7 +127,7 @@
/* /*
--- a/src/ap/drv_callbacks.c --- a/src/ap/drv_callbacks.c
+++ b/src/ap/drv_callbacks.c +++ b/src/ap/drv_callbacks.c
@@ -375,8 +375,8 @@ static void hostapd_event_eapol_rx(struc @@ -420,8 +420,8 @@ static void hostapd_event_eapol_rx(struc
} }
@ -138,7 +138,7 @@
{ {
struct hostapd_data *hapd = ctx; struct hostapd_data *hapd = ctx;
@@ -453,5 +453,6 @@ void wpa_supplicant_event(void *ctx, enu @@ -498,5 +498,6 @@ void wpa_supplicant_event(void *ctx, enu
break; break;
} }
} }
@ -169,7 +169,7 @@
for (;;) { for (;;) {
--- a/wpa_supplicant/events.c --- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c +++ b/wpa_supplicant/events.c
@@ -1582,8 +1582,8 @@ static void ft_rx_action(struct wpa_supp @@ -1556,8 +1556,8 @@ static void ft_rx_action(struct wpa_supp
#endif /* CONFIG_IEEE80211R */ #endif /* CONFIG_IEEE80211R */
@ -182,7 +182,7 @@
u16 reason_code = 0; u16 reason_code = 0;
--- a/wpa_supplicant/wpa_supplicant.c --- a/wpa_supplicant/wpa_supplicant.c
+++ b/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c
@@ -2228,6 +2228,9 @@ struct wpa_supplicant * wpa_supplicant_g @@ -2314,6 +2314,9 @@ struct wpa_supplicant * wpa_supplicant_g
return NULL; return NULL;
} }
@ -192,7 +192,7 @@
/** /**
* wpa_supplicant_init - Initialize %wpa_supplicant * wpa_supplicant_init - Initialize %wpa_supplicant
@@ -2246,6 +2249,7 @@ struct wpa_global * wpa_supplicant_init( @@ -2332,6 +2335,7 @@ struct wpa_global * wpa_supplicant_init(
if (params == NULL) if (params == NULL)
return NULL; return NULL;

View file

@ -1,11 +1,11 @@
--- a/wpa_supplicant/events.c --- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c +++ b/wpa_supplicant/events.c
@@ -963,7 +963,7 @@ static void wpa_supplicant_event_scan_re @@ -893,7 +893,7 @@ static void wpa_supplicant_event_scan_re
wpa_printf(MSG_DEBUG, "Setup a new network"); wpa_printf(MSG_DEBUG, "Setup a new network");
wpa_supplicant_associate(wpa_s, NULL, ssid); wpa_supplicant_associate(wpa_s, NULL, ssid);
} else { } else {
- int timeout_sec = 5; - int timeout_sec = 5;
+ int timeout_sec = 0; + int timeout_sec = 0;
int timeout_usec = 0; int timeout_usec = 0;
wpa_supplicant_req_new_scan(wpa_s, timeout_sec, #ifdef CONFIG_P2P
timeout_usec); if (wpa_s->p2p_in_provisioning) {

View file

@ -1,6 +1,6 @@
--- a/src/drivers/driver_nl80211.c --- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c
@@ -75,7 +75,9 @@ struct wpa_driver_nl80211_data { @@ -115,7 +115,9 @@ struct wpa_driver_nl80211_data {
int ifindex; int ifindex;
int if_removed; int if_removed;
int if_disabled; int if_disabled;
@ -10,7 +10,7 @@
struct wpa_driver_capa capa; struct wpa_driver_capa capa;
int has_capability; int has_capability;
@@ -1361,7 +1363,7 @@ err1: @@ -1630,7 +1632,7 @@ err1:
return -1; return -1;
} }
@ -19,7 +19,7 @@
static void wpa_driver_nl80211_rfkill_blocked(void *ctx) static void wpa_driver_nl80211_rfkill_blocked(void *ctx)
{ {
wpa_printf(MSG_DEBUG, "nl80211: RFKILL blocked"); wpa_printf(MSG_DEBUG, "nl80211: RFKILL blocked");
@@ -1383,6 +1385,7 @@ static void wpa_driver_nl80211_rfkill_un @@ -1652,6 +1654,7 @@ static void wpa_driver_nl80211_rfkill_un
} }
/* rtnetlink ifup handler will report interface as enabled */ /* rtnetlink ifup handler will report interface as enabled */
} }
@ -27,7 +27,7 @@
/** /**
@@ -1396,7 +1399,9 @@ static void * wpa_driver_nl80211_init(vo @@ -1665,7 +1668,9 @@ static void * wpa_driver_nl80211_init(vo
{ {
struct wpa_driver_nl80211_data *drv; struct wpa_driver_nl80211_data *drv;
struct netlink_config *cfg; struct netlink_config *cfg;
@ -37,7 +37,7 @@
struct i802_bss *bss; struct i802_bss *bss;
drv = os_zalloc(sizeof(*drv)); drv = os_zalloc(sizeof(*drv));
@@ -1434,6 +1439,7 @@ static void * wpa_driver_nl80211_init(vo @@ -1703,6 +1708,7 @@ static void * wpa_driver_nl80211_init(vo
goto failed; goto failed;
} }
@ -45,7 +45,7 @@
rcfg = os_zalloc(sizeof(*rcfg)); rcfg = os_zalloc(sizeof(*rcfg));
if (rcfg == NULL) if (rcfg == NULL)
goto failed; goto failed;
@@ -1446,6 +1452,7 @@ static void * wpa_driver_nl80211_init(vo @@ -1715,6 +1721,7 @@ static void * wpa_driver_nl80211_init(vo
wpa_printf(MSG_DEBUG, "nl80211: RFKILL status not available"); wpa_printf(MSG_DEBUG, "nl80211: RFKILL status not available");
os_free(rcfg); os_free(rcfg);
} }
@ -53,7 +53,7 @@
if (wpa_driver_nl80211_finish_drv_init(drv)) if (wpa_driver_nl80211_finish_drv_init(drv))
goto failed; goto failed;
@@ -1453,7 +1460,9 @@ static void * wpa_driver_nl80211_init(vo @@ -1722,7 +1729,9 @@ static void * wpa_driver_nl80211_init(vo
return bss; return bss;
failed: failed:
@ -63,7 +63,7 @@
netlink_deinit(drv->netlink); netlink_deinit(drv->netlink);
if (drv->ioctl_sock >= 0) if (drv->ioctl_sock >= 0)
close(drv->ioctl_sock); close(drv->ioctl_sock);
@@ -1514,10 +1523,12 @@ static int nl80211_register_action_frame @@ -1820,10 +1829,12 @@ static int nl80211_register_action_frame
} }
@ -76,7 +76,7 @@
static int static int
@@ -1536,13 +1547,16 @@ wpa_driver_nl80211_finish_drv_init(struc @@ -1842,13 +1853,16 @@ wpa_driver_nl80211_finish_drv_init(struc
} }
if (linux_set_iface_flags(drv->ioctl_sock, bss->ifname, 1)) { if (linux_set_iface_flags(drv->ioctl_sock, bss->ifname, 1)) {
@ -94,7 +94,7 @@
wpa_printf(MSG_ERROR, "nl80211: Could not set " wpa_printf(MSG_ERROR, "nl80211: Could not set "
"interface '%s' UP", bss->ifname); "interface '%s' UP", bss->ifname);
return -1; return -1;
@@ -1567,8 +1581,10 @@ wpa_driver_nl80211_finish_drv_init(struc @@ -1873,8 +1887,10 @@ wpa_driver_nl80211_finish_drv_init(struc
} }
if (send_rfkill_event) { if (send_rfkill_event) {
@ -105,7 +105,7 @@
} }
return 0; return 0;
@@ -1647,7 +1663,9 @@ static void wpa_driver_nl80211_deinit(vo @@ -1955,7 +1971,9 @@ static void wpa_driver_nl80211_deinit(vo
netlink_send_oper_ifla(drv->netlink, drv->ifindex, 0, IF_OPER_UP); netlink_send_oper_ifla(drv->netlink, drv->ifindex, 0, IF_OPER_UP);
netlink_deinit(drv->netlink); netlink_deinit(drv->netlink);
@ -225,15 +225,15 @@
eloop_unregister_read_sock(drv->mlme_sock); eloop_unregister_read_sock(drv->mlme_sock);
--- a/src/drivers/drivers.mak --- a/src/drivers/drivers.mak
+++ b/src/drivers/drivers.mak +++ b/src/drivers/drivers.mak
@@ -31,7 +31,6 @@ NEED_SME=y @@ -43,7 +43,6 @@ NEED_SME=y
NEED_AP_MLME=y NEED_AP_MLME=y
NEED_NETLINK=y NEED_NETLINK=y
NEED_LINUX_IOCTL=y NEED_LINUX_IOCTL=y
-NEED_RFKILL=y -NEED_RFKILL=y
DRV_LIBS += -lnl ifdef CONFIG_LIBNL_TINY
DRV_LIBS += -lnl-tiny
ifdef CONFIG_LIBNL20 else
@@ -78,7 +77,6 @@ DRV_WPA_CFLAGS += -DCONFIG_DRIVER_WEXT @@ -94,7 +93,6 @@ DRV_WPA_CFLAGS += -DCONFIG_DRIVER_WEXT
CONFIG_WIRELESS_EXTENSION=y CONFIG_WIRELESS_EXTENSION=y
NEED_NETLINK=y NEED_NETLINK=y
NEED_LINUX_IOCTL=y NEED_LINUX_IOCTL=y
@ -241,7 +241,7 @@
endif endif
ifdef CONFIG_DRIVER_HERMES ifdef CONFIG_DRIVER_HERMES
@@ -166,6 +164,7 @@ endif @@ -183,6 +181,7 @@ endif
ifdef NEED_RFKILL ifdef NEED_RFKILL
DRV_OBJS += ../src/drivers/rfkill.o DRV_OBJS += ../src/drivers/rfkill.o

View file

@ -1,6 +1,6 @@
--- a/src/ap/hostapd.c --- a/src/ap/hostapd.c
+++ b/src/ap/hostapd.c +++ b/src/ap/hostapd.c
@@ -112,6 +112,10 @@ int hostapd_reload_config(struct hostapd @@ -113,6 +113,10 @@ int hostapd_reload_config(struct hostapd
oldconf = hapd->iconf; oldconf = hapd->iconf;
iface->conf = newconf; iface->conf = newconf;

View file

@ -1,6 +1,6 @@
--- a/src/drivers/driver_nl80211.c --- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c
@@ -1604,23 +1604,41 @@ wpa_driver_nl80211_finish_drv_init(struc @@ -1897,23 +1897,41 @@ wpa_driver_nl80211_finish_drv_init(struc
} }
@ -44,18 +44,18 @@
/** /**
* wpa_driver_nl80211_deinit - Deinitialize nl80211 driver interface * wpa_driver_nl80211_deinit - Deinitialize nl80211 driver interface
@@ -5512,4 +5530,5 @@ const struct wpa_driver_ops wpa_driver_n @@ -5905,4 +5923,5 @@ const struct wpa_driver_ops wpa_driver_n
.send_ft_action = nl80211_send_ft_action,
.signal_monitor = nl80211_signal_monitor, .signal_monitor = nl80211_signal_monitor,
.send_frame = nl80211_send_frame, .send_frame = nl80211_send_frame,
.set_intra_bss = nl80211_set_intra_bss,
+ .stop_ap = wpa_driver_nl80211_stop_ap, + .stop_ap = wpa_driver_nl80211_stop_ap,
}; };
--- a/src/drivers/driver.h --- a/src/drivers/driver.h
+++ b/src/drivers/driver.h +++ b/src/drivers/driver.h
@@ -1774,6 +1774,8 @@ struct wpa_driver_ops { @@ -1915,6 +1915,8 @@ struct wpa_driver_ops {
* set_intra_bss - Enables/Disables intra BSS bridging
*/ */
int (*send_frame)(void *priv, const u8 *data, size_t data_len, int (*set_intra_bss)(void *priv, int enabled);
int encrypt);
+ +
+ int (*stop_ap)(void *priv); + int (*stop_ap)(void *priv);
}; };

View file

@ -1,14 +1,14 @@
--- a/hostapd/ctrl_iface.c --- a/hostapd/ctrl_iface.c
+++ b/hostapd/ctrl_iface.c +++ b/hostapd/ctrl_iface.c
@@ -35,6 +35,7 @@ @@ -38,6 +38,7 @@
#include "ap/wps_hostapd.h" #include "wps/wps_defs.h"
#include "ap/ctrl_iface_ap.h" #include "wps/wps.h"
#include "ctrl_iface.h" #include "ctrl_iface.h"
+#include "config_file.h" +#include "config_file.h"
struct wpa_ctrl_dst { struct wpa_ctrl_dst {
@@ -45,6 +46,7 @@ struct wpa_ctrl_dst { @@ -48,6 +49,7 @@ struct wpa_ctrl_dst {
int errors; int errors;
}; };
@ -16,9 +16,9 @@
static void hostapd_ctrl_iface_send(struct hostapd_data *hapd, int level, static void hostapd_ctrl_iface_send(struct hostapd_data *hapd, int level,
const char *buf, size_t len); const char *buf, size_t len);
@@ -315,6 +317,66 @@ static int hostapd_ctrl_iface_wps_oob(st @@ -318,6 +320,66 @@ static int hostapd_ctrl_iface_disassocia
#endif /* CONFIG_WPS_OOB */ return 0;
#endif /* CONFIG_WPS */ }
+static int hostapd_ctrl_iface_set_down(struct hostapd_data *hapd) +static int hostapd_ctrl_iface_set_down(struct hostapd_data *hapd)
+{ +{
@ -81,9 +81,9 @@
+ iface->config_read_cb = hostapd_config_read; + iface->config_read_cb = hostapd_config_read;
+} +}
static void hostapd_ctrl_iface_receive(int sock, void *eloop_ctx, #ifdef CONFIG_IEEE80211W
void *sock_ctx) #ifdef NEED_AP_MLME
@@ -379,6 +441,10 @@ static void hostapd_ctrl_iface_receive(i @@ -814,6 +876,10 @@ static void hostapd_ctrl_iface_receive(i
reply_len += res; reply_len += res;
} }
#endif /* CONFIG_NO_RADIUS */ #endif /* CONFIG_NO_RADIUS */

View file

@ -1,6 +1,6 @@
--- a/wpa_supplicant/wpa_supplicant_i.h --- a/wpa_supplicant/wpa_supplicant_i.h
+++ b/wpa_supplicant/wpa_supplicant_i.h +++ b/wpa_supplicant/wpa_supplicant_i.h
@@ -98,6 +98,8 @@ struct wpa_interface { @@ -99,6 +99,8 @@ struct wpa_interface {
* receiving of EAPOL frames from an additional interface. * receiving of EAPOL frames from an additional interface.
*/ */
const char *bridge_ifname; const char *bridge_ifname;
@ -9,7 +9,7 @@
}; };
/** /**
@@ -316,6 +318,8 @@ struct wpa_supplicant { @@ -337,6 +339,8 @@ struct wpa_supplicant {
#endif /* CONFIG_CTRL_IFACE_DBUS_NEW */ #endif /* CONFIG_CTRL_IFACE_DBUS_NEW */
char bridge_ifname[16]; char bridge_ifname[16];
@ -34,7 +34,7 @@
--- a/wpa_supplicant/wpa_supplicant.c --- a/wpa_supplicant/wpa_supplicant.c
+++ b/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c
@@ -120,6 +120,55 @@ extern int wpa_debug_show_keys; @@ -122,6 +122,55 @@ extern int wpa_debug_show_keys;
extern int wpa_debug_timestamp; extern int wpa_debug_timestamp;
extern struct wpa_driver_ops *wpa_drivers[]; extern struct wpa_driver_ops *wpa_drivers[];
@ -90,10 +90,10 @@
/* Configure default/group WEP keys for static WEP */ /* Configure default/group WEP keys for static WEP */
int wpa_set_wep_keys(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid) int wpa_set_wep_keys(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid)
{ {
@@ -548,8 +597,16 @@ void wpa_supplicant_set_state(struct wpa @@ -557,8 +606,16 @@ void wpa_supplicant_set_state(struct wpa
#ifndef IEEE8021X_EAPOL #ifdef CONFIG_P2P
wpa_drv_set_supp_port(wpa_s, 1); wpas_p2p_completed(wpa_s);
#endif #endif /* CONFIG_P2P */
+#ifdef MULTICALL +#ifdef MULTICALL
+ if (wpa_s->hostapd) + if (wpa_s->hostapd)
+ hostapd_reload(wpa_s, wpa_s->current_bss); + hostapd_reload(wpa_s, wpa_s->current_bss);
@ -107,7 +107,7 @@
wpa_s->new_connection = 1; wpa_s->new_connection = 1;
wpa_drv_set_operstate(wpa_s, 0); wpa_drv_set_operstate(wpa_s, 0);
#ifndef IEEE8021X_EAPOL #ifndef IEEE8021X_EAPOL
@@ -1957,6 +2014,21 @@ static int wpa_supplicant_init_iface(str @@ -2027,6 +2084,21 @@ static int wpa_supplicant_init_iface(str
os_strlcpy(wpa_s->bridge_ifname, iface->bridge_ifname, os_strlcpy(wpa_s->bridge_ifname, iface->bridge_ifname,
sizeof(wpa_s->bridge_ifname)); sizeof(wpa_s->bridge_ifname));
} }