mirror of https://github.com/hak5/openwrt.git
parent
297b9756bc
commit
327d4d9f67
|
@ -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
|
||||||
|
|
|
@ -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,
|
|
|
@ -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];
|
|
@ -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 */
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -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];
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
|
@ -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");
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
*/
|
*/
|
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
|
@ -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;
|
|
@ -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);
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 */
|
||||||
}
|
}
|
|
@ -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);
|
|
||||||
}
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
|
|
|
@ -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;
|
|
@ -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;
|
||||||
|
|
|
@ -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) {
|
|
@ -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
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
};
|
};
|
|
@ -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 */
|
|
@ -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));
|
||||||
}
|
}
|
Loading…
Reference in New Issue