mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-16 04:13:31 +00:00
enable VHT80 for encrypted mesh 1s
This commit is contained in:
parent
f963411269
commit
4218c16a0c
@ -11,7 +11,7 @@ include $(INCLUDE_DIR)/kernel.mk
|
|||||||
PKG_NAME:=mac80211
|
PKG_NAME:=mac80211
|
||||||
|
|
||||||
PKG_VERSION:=2017-11-01
|
PKG_VERSION:=2017-11-01
|
||||||
PKG_RELEASE:=5
|
PKG_RELEASE:=8
|
||||||
PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
|
PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
|
||||||
PKG_HASH:=8437ab7886b988c8152e7a4db30b7f41009e49a3b2cb863edd05da1ecd7eb05a
|
PKG_HASH:=8437ab7886b988c8152e7a4db30b7f41009e49a3b2cb863edd05da1ecd7eb05a
|
||||||
|
|
||||||
@ -1797,11 +1797,16 @@ ifneq ($(CONFIG_PACKAGE_kmod-cfg80211)$(CONFIG_PACKAGE_kmod-lib80211),)
|
|||||||
endef
|
endef
|
||||||
endif
|
endif
|
||||||
|
|
||||||
define Build/Configure
|
#do not Build/Configure for EXTERNAL KERNEL
|
||||||
cmp $(PKG_BUILD_DIR)/include/linux/ath9k_platform.h $(LINUX_DIR)/include/linux/ath9k_platform.h
|
ifeq ($(strip $(CONFIG_EXTERNAL_KERNEL_TREE)),"")
|
||||||
cmp $(PKG_BUILD_DIR)/include/linux/ath5k_platform.h $(LINUX_DIR)/include/linux/ath5k_platform.h
|
ifeq ($(strip $(CONFIG_KERNEL_GIT_CLONE_URI)),"")
|
||||||
cmp $(PKG_BUILD_DIR)/include/linux/rt2x00_platform.h $(LINUX_DIR)/include/linux/rt2x00_platform.h
|
define Build/Configure
|
||||||
endef
|
cmp $(PKG_BUILD_DIR)/include/linux/ath9k_platform.h $(LINUX_DIR)/include/linux/ath9k_platform.h
|
||||||
|
cmp $(PKG_BUILD_DIR)/include/linux/ath5k_platform.h $(LINUX_DIR)/include/linux/ath5k_platform.h
|
||||||
|
cmp $(PKG_BUILD_DIR)/include/linux/rt2x00_platform.h $(LINUX_DIR)/include/linux/rt2x00_platform.h
|
||||||
|
endef
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
define Build/Compile
|
define Build/Compile
|
||||||
$(SH_FUNC) var2file "$(call shvar,mac80211_config)" $(PKG_BUILD_DIR)/.config
|
$(SH_FUNC) var2file "$(call shvar,mac80211_config)" $(PKG_BUILD_DIR)/.config
|
||||||
|
@ -518,7 +518,11 @@ mac80211_prepare_vif() {
|
|||||||
|
|
||||||
mac80211_setup_supplicant() {
|
mac80211_setup_supplicant() {
|
||||||
wpa_supplicant_prepare_interface "$ifname" nl80211 || return 1
|
wpa_supplicant_prepare_interface "$ifname" nl80211 || return 1
|
||||||
wpa_supplicant_add_network "$ifname"
|
if [ "$mode" = "sta" ]; then
|
||||||
|
wpa_supplicant_add_network "$ifname"
|
||||||
|
else
|
||||||
|
wpa_supplicant_add_network "$ifname" "$freq" "$htmode" "$noscan"
|
||||||
|
fi
|
||||||
wpa_supplicant_run "$ifname" ${hostapd_ctrl:+-H $hostapd_ctrl}
|
wpa_supplicant_run "$ifname" ${hostapd_ctrl:+-H $hostapd_ctrl}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -606,6 +610,51 @@ mac80211_setup_adhoc() {
|
|||||||
${keyspec:+keys $keyspec}
|
${keyspec:+keys $keyspec}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mac80211_setup_mesh() {
|
||||||
|
json_get_vars ssid mesh_id mcast_rate
|
||||||
|
|
||||||
|
mcval=
|
||||||
|
[ -n "$mcast_rate" ] && wpa_supplicant_add_rate mcval "$mcast_rate"
|
||||||
|
[ -n "$mesh_id" ] && ssid="$mesh_id"
|
||||||
|
|
||||||
|
case "$htmode" in
|
||||||
|
VHT20|HT20) mesh_htmode=HT20;;
|
||||||
|
HT40*|VHT40)
|
||||||
|
case "$hwmode" in
|
||||||
|
a)
|
||||||
|
case "$(( ($channel / 4) % 2 ))" in
|
||||||
|
1) mesh_htmode="HT40+" ;;
|
||||||
|
0) mesh_htmode="HT40-";;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
case "$htmode" in
|
||||||
|
HT40+) mesh_htmode="HT40+";;
|
||||||
|
HT40-) mesh_htmode="HT40-";;
|
||||||
|
*)
|
||||||
|
if [ "$channel" -lt 7 ]; then
|
||||||
|
mesh_htmode="HT40+"
|
||||||
|
else
|
||||||
|
mesh_htmode="HT40-"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
VHT80)
|
||||||
|
mesh_htmode="80Mhz"
|
||||||
|
;;
|
||||||
|
VHT160)
|
||||||
|
mesh_htmode="160Mhz"
|
||||||
|
;;
|
||||||
|
*) mesh_htmode="NOHT" ;;
|
||||||
|
esac
|
||||||
|
iw dev "$ifname" mesh join "$ssid" freq $freq $mesh_htmode \
|
||||||
|
${mcval:+mcast-rate $mcval} \
|
||||||
|
beacon-interval $beacon_int
|
||||||
|
}
|
||||||
|
|
||||||
mac80211_setup_vif() {
|
mac80211_setup_vif() {
|
||||||
local name="$1"
|
local name="$1"
|
||||||
local failed
|
local failed
|
||||||
@ -629,57 +678,13 @@ mac80211_setup_vif() {
|
|||||||
|
|
||||||
case "$mode" in
|
case "$mode" in
|
||||||
mesh)
|
mesh)
|
||||||
json_get_vars key
|
wireless_vif_parse_encryption
|
||||||
if [ -n "$key" ]; then
|
freq="$(get_freq "$phy" "$channel")"
|
||||||
wireless_vif_parse_encryption
|
if [ "$wpa" -gt 0 -o "$auto_channel" -gt 0 ] || chan_is_dfs "$phy" "$channel"; then
|
||||||
freq="$(get_freq "$phy" "$channel")"
|
mac80211_setup_supplicant || failed=1
|
||||||
mac80211_setup_supplicant_noctl || failed=1
|
|
||||||
else
|
else
|
||||||
json_get_vars mesh_id mcast_rate
|
mac80211_setup_mesh
|
||||||
|
|
||||||
mcval=
|
|
||||||
[ -n "$mcast_rate" ] && wpa_supplicant_add_rate mcval "$mcast_rate"
|
|
||||||
|
|
||||||
case "$htmode" in
|
|
||||||
VHT20|HT20) mesh_htmode=HT20;;
|
|
||||||
HT40*|VHT40)
|
|
||||||
case "$hwmode" in
|
|
||||||
a)
|
|
||||||
case "$(( ($channel / 4) % 2 ))" in
|
|
||||||
1) mesh_htmode="HT40+" ;;
|
|
||||||
0) mesh_htmode="HT40-";;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
case "$htmode" in
|
|
||||||
HT40+) mesh_htmode="HT40+";;
|
|
||||||
HT40-) mesh_htmode="HT40-";;
|
|
||||||
*)
|
|
||||||
if [ "$channel" -lt 7 ]; then
|
|
||||||
mesh_htmode="HT40+"
|
|
||||||
else
|
|
||||||
mesh_htmode="HT40-"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
VHT80)
|
|
||||||
mesh_htmode="80Mhz"
|
|
||||||
;;
|
|
||||||
VHT160)
|
|
||||||
mesh_htmode="160Mhz"
|
|
||||||
;;
|
|
||||||
*) mesh_htmode="NOHT" ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
freq="$(get_freq "$phy" "$channel")"
|
|
||||||
iw dev "$ifname" mesh join "$mesh_id" freq $freq $mesh_htmode \
|
|
||||||
${mcval:+mcast-rate $mcval} \
|
|
||||||
beacon-interval $beacon_int
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for var in $MP_CONFIG_INT $MP_CONFIG_BOOL $MP_CONFIG_STRING; do
|
for var in $MP_CONFIG_INT $MP_CONFIG_BOOL $MP_CONFIG_STRING; do
|
||||||
json_get_var mp_val "$var"
|
json_get_var mp_val "$var"
|
||||||
[ -n "$mp_val" ] && iw dev "$ifname" set mesh_param "$var" "$mp_val"
|
[ -n "$mp_val" ] && iw dev "$ifname" set mesh_param "$var" "$mp_val"
|
||||||
@ -710,6 +715,13 @@ get_freq() {
|
|||||||
iw "$phy" info | grep -E -m1 "(\* ${chan:-....} MHz${chan:+|\\[$chan\\]})" | grep MHz | awk '{print $2}'
|
iw "$phy" info | grep -E -m1 "(\* ${chan:-....} MHz${chan:+|\\[$chan\\]})" | grep MHz | awk '{print $2}'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
chan_is_dfs() {
|
||||||
|
local phy="$1"
|
||||||
|
local chan="$2"
|
||||||
|
iw "$phy" info | grep -E -m1 "(\* ${chan:-....} MHz${chan:+|\\[$chan\\]})" | grep -q "MHz.*radar detection"
|
||||||
|
return $!
|
||||||
|
}
|
||||||
|
|
||||||
mac80211_interface_cleanup() {
|
mac80211_interface_cleanup() {
|
||||||
local phy="$1"
|
local phy="$1"
|
||||||
|
|
||||||
|
@ -113,7 +113,6 @@ detect_mac80211() {
|
|||||||
set wireless.radio${devidx}.hwmode=11${mode_band}
|
set wireless.radio${devidx}.hwmode=11${mode_band}
|
||||||
${dev_id}
|
${dev_id}
|
||||||
${ht_capab}
|
${ht_capab}
|
||||||
set wireless.radio${devidx}.disabled=0
|
|
||||||
|
|
||||||
set wireless.default_radio${devidx}=wifi-iface
|
set wireless.default_radio${devidx}=wifi-iface
|
||||||
set wireless.default_radio${devidx}.device=radio${devidx}
|
set wireless.default_radio${devidx}.device=radio${devidx}
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=hostapd
|
PKG_NAME:=hostapd
|
||||||
PKG_RELEASE:=3
|
PKG_RELEASE:=5
|
||||||
|
|
||||||
PKG_SOURCE_URL:=http://w1.fi/hostap.git
|
PKG_SOURCE_URL:=http://w1.fi/hostap.git
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
|
@ -229,7 +229,8 @@ hostapd_set_bss_options() {
|
|||||||
wps_independent wps_device_type wps_device_name wps_manufacturer wps_pin \
|
wps_independent wps_device_type wps_device_name wps_manufacturer wps_pin \
|
||||||
macfilter ssid wmm uapsd hidden short_preamble rsn_preauth \
|
macfilter ssid wmm uapsd hidden short_preamble rsn_preauth \
|
||||||
iapp_interface eapol_version dynamic_vlan ieee80211w nasid \
|
iapp_interface eapol_version dynamic_vlan ieee80211w nasid \
|
||||||
acct_server acct_secret acct_port acct_interval
|
acct_server acct_secret acct_port acct_interval \
|
||||||
|
bss_load_update_period chan_util_avg_period
|
||||||
|
|
||||||
set_default isolate 0
|
set_default isolate 0
|
||||||
set_default maxassoc 0
|
set_default maxassoc 0
|
||||||
@ -243,7 +244,9 @@ hostapd_set_bss_options() {
|
|||||||
set_default tdls_prohibit 0
|
set_default tdls_prohibit 0
|
||||||
set_default eapol_version 0
|
set_default eapol_version 0
|
||||||
set_default acct_port 1813
|
set_default acct_port 1813
|
||||||
|
set_default bss_load_update_period 60
|
||||||
|
set_default chan_util_avg_period 600
|
||||||
|
|
||||||
append bss_conf "ctrl_interface=/var/run/hostapd"
|
append bss_conf "ctrl_interface=/var/run/hostapd"
|
||||||
if [ "$isolate" -gt 0 ]; then
|
if [ "$isolate" -gt 0 ]; then
|
||||||
append bss_conf "ap_isolate=$isolate" "$N"
|
append bss_conf "ap_isolate=$isolate" "$N"
|
||||||
@ -255,6 +258,8 @@ hostapd_set_bss_options() {
|
|||||||
append bss_conf "ap_max_inactivity=$max_inactivity" "$N"
|
append bss_conf "ap_max_inactivity=$max_inactivity" "$N"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
append bss_conf "bss_load_update_period=$bss_load_update_period" "$N"
|
||||||
|
append bss_conf "chan_util_avg_period=$chan_util_avg_period" "$N"
|
||||||
append bss_conf "disassoc_low_ack=$disassoc_low_ack" "$N"
|
append bss_conf "disassoc_low_ack=$disassoc_low_ack" "$N"
|
||||||
append bss_conf "preamble=$short_preamble" "$N"
|
append bss_conf "preamble=$short_preamble" "$N"
|
||||||
append bss_conf "wmm_enabled=$wmm" "$N"
|
append bss_conf "wmm_enabled=$wmm" "$N"
|
||||||
@ -669,7 +674,7 @@ wpa_supplicant_add_network() {
|
|||||||
|
|
||||||
[[ "$_w_mode" = "adhoc" ]] && {
|
[[ "$_w_mode" = "adhoc" ]] && {
|
||||||
append network_data "mode=1" "$N$T"
|
append network_data "mode=1" "$N$T"
|
||||||
[ -n "$channel" ] && wpa_supplicant_set_fixed_freq "$freq" "$htmode"
|
[ -n "$freq" ] && wpa_supplicant_set_fixed_freq "$freq" "$htmode"
|
||||||
|
|
||||||
scan_ssid="scan_ssid=0"
|
scan_ssid="scan_ssid=0"
|
||||||
|
|
||||||
@ -678,11 +683,11 @@ wpa_supplicant_add_network() {
|
|||||||
|
|
||||||
[[ "$_w_mode" = "mesh" ]] && {
|
[[ "$_w_mode" = "mesh" ]] && {
|
||||||
json_get_vars mesh_id mesh_fwding
|
json_get_vars mesh_id mesh_fwding
|
||||||
ssid="${mesh_id}"
|
[ -n "$mesh_id" ] && ssid="${mesh_id}"
|
||||||
|
|
||||||
append network_data "mode=5" "$N$T"
|
append network_data "mode=5" "$N$T"
|
||||||
[ -n "$mesh_fwding" ] && append network_data "mesh_fwding=${mesh_fwding}" "$N$T"
|
[ -n "$mesh_fwding" ] && append network_data "mesh_fwding=${mesh_fwding}" "$N$T"
|
||||||
[ -n "$channel" ] && wpa_supplicant_set_fixed_freq "$freq" "$htmode"
|
[ -n "$freq" ] && wpa_supplicant_set_fixed_freq "$freq" "$htmode"
|
||||||
[ "$noscan" = "1" ] && append network_data "noscan=1" "$N$T"
|
[ "$noscan" = "1" ] && append network_data "noscan=1" "$N$T"
|
||||||
append wpa_key_mgmt "SAE"
|
append wpa_key_mgmt "SAE"
|
||||||
scan_ssid=""
|
scan_ssid=""
|
||||||
|
@ -20,11 +20,9 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
wpa_supplicant/mesh.c | 10 +++++++---
|
wpa_supplicant/mesh.c | 10 +++++++---
|
||||||
1 file changed, 7 insertions(+), 3 deletions(-)
|
1 file changed, 7 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
diff --git a/wpa_supplicant/mesh.c b/wpa_supplicant/mesh.c
|
|
||||||
index 22dec4822..0bf87245d 100644
|
|
||||||
--- a/wpa_supplicant/mesh.c
|
--- a/wpa_supplicant/mesh.c
|
||||||
+++ b/wpa_supplicant/mesh.c
|
+++ b/wpa_supplicant/mesh.c
|
||||||
@@ -154,10 +154,14 @@ int wpas_mesh_init_rsn(struct wpa_supplicant *wpa_s)
|
@@ -154,10 +154,14 @@ int wpas_mesh_init_rsn(struct wpa_suppli
|
||||||
struct wpa_ssid *ssid = wpa_s->current_ssid;
|
struct wpa_ssid *ssid = wpa_s->current_ssid;
|
||||||
struct hostapd_data *bss = ifmsh->bss[0];
|
struct hostapd_data *bss = ifmsh->bss[0];
|
||||||
static int default_groups[] = { 19, 20, 21, 25, 26, -1 };
|
static int default_groups[] = { 19, 20, 21, 25, 26, -1 };
|
||||||
@ -40,7 +38,7 @@ index 22dec4822..0bf87245d 100644
|
|||||||
wpa_printf(MSG_ERROR,
|
wpa_printf(MSG_ERROR,
|
||||||
"mesh: Passphrase for SAE not configured");
|
"mesh: Passphrase for SAE not configured");
|
||||||
return -1;
|
return -1;
|
||||||
@@ -177,9 +181,9 @@ int wpas_mesh_init_rsn(struct wpa_supplicant *wpa_s)
|
@@ -177,9 +181,9 @@ int wpas_mesh_init_rsn(struct wpa_suppli
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,6 +50,3 @@ index 22dec4822..0bf87245d 100644
|
|||||||
|
|
||||||
wpa_s->mesh_rsn = mesh_rsn_auth_init(wpa_s, mconf);
|
wpa_s->mesh_rsn = mesh_rsn_auth_init(wpa_s, mconf);
|
||||||
if (!wpa_s->mesh_rsn)
|
if (!wpa_s->mesh_rsn)
|
||||||
--
|
|
||||||
2.17.0
|
|
||||||
|
|
||||||
|
@ -24,8 +24,6 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
wpa_supplicant/wpa_supplicant.conf | 6 ++++++
|
wpa_supplicant/wpa_supplicant.conf | 6 ++++++
|
||||||
10 files changed, 37 insertions(+), 2 deletions(-)
|
10 files changed, 37 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h
|
|
||||||
index 03ab80d43..804385e93 100644
|
|
||||||
--- a/src/ap/ap_config.h
|
--- a/src/ap/ap_config.h
|
||||||
+++ b/src/ap/ap_config.h
|
+++ b/src/ap/ap_config.h
|
||||||
@@ -49,6 +49,7 @@ struct mesh_conf {
|
@@ -49,6 +49,7 @@ struct mesh_conf {
|
||||||
@ -44,8 +42,6 @@ index 03ab80d43..804385e93 100644
|
|||||||
|
|
||||||
u8 radio_measurements[RRM_CAPABILITIES_IE_LEN];
|
u8 radio_measurements[RRM_CAPABILITIES_IE_LEN];
|
||||||
|
|
||||||
diff --git a/src/drivers/driver.h b/src/drivers/driver.h
|
|
||||||
index 6c9245584..7f1ec3697 100644
|
|
||||||
--- a/src/drivers/driver.h
|
--- a/src/drivers/driver.h
|
||||||
+++ b/src/drivers/driver.h
|
+++ b/src/drivers/driver.h
|
||||||
@@ -1363,6 +1363,7 @@ struct wpa_driver_mesh_bss_params {
|
@@ -1363,6 +1363,7 @@ struct wpa_driver_mesh_bss_params {
|
||||||
@ -64,11 +60,9 @@ index 6c9245584..7f1ec3697 100644
|
|||||||
u16 ht_opmode;
|
u16 ht_opmode;
|
||||||
};
|
};
|
||||||
|
|
||||||
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
|
|
||||||
index e9cb4ae2f..f3de61886 100644
|
|
||||||
--- a/src/drivers/driver_nl80211.c
|
--- a/src/drivers/driver_nl80211.c
|
||||||
+++ b/src/drivers/driver_nl80211.c
|
+++ b/src/drivers/driver_nl80211.c
|
||||||
@@ -9197,6 +9197,9 @@ static int nl80211_put_mesh_config(struct nl_msg *msg,
|
@@ -9197,6 +9197,9 @@ static int nl80211_put_mesh_config(struc
|
||||||
if (((params->flags & WPA_DRIVER_MESH_CONF_FLAG_AUTO_PLINKS) &&
|
if (((params->flags & WPA_DRIVER_MESH_CONF_FLAG_AUTO_PLINKS) &&
|
||||||
nla_put_u8(msg, NL80211_MESHCONF_AUTO_OPEN_PLINKS,
|
nla_put_u8(msg, NL80211_MESHCONF_AUTO_OPEN_PLINKS,
|
||||||
params->auto_plinks)) ||
|
params->auto_plinks)) ||
|
||||||
@ -78,11 +72,9 @@ index e9cb4ae2f..f3de61886 100644
|
|||||||
((params->flags & WPA_DRIVER_MESH_CONF_FLAG_MAX_PEER_LINKS) &&
|
((params->flags & WPA_DRIVER_MESH_CONF_FLAG_MAX_PEER_LINKS) &&
|
||||||
nla_put_u16(msg, NL80211_MESHCONF_MAX_PEER_LINKS,
|
nla_put_u16(msg, NL80211_MESHCONF_MAX_PEER_LINKS,
|
||||||
params->max_peer_links)) ||
|
params->max_peer_links)) ||
|
||||||
diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c
|
|
||||||
index a0b8cd007..0212e3f86 100644
|
|
||||||
--- a/wpa_supplicant/config.c
|
--- a/wpa_supplicant/config.c
|
||||||
+++ b/wpa_supplicant/config.c
|
+++ b/wpa_supplicant/config.c
|
||||||
@@ -2211,6 +2211,7 @@ static const struct parse_data ssid_fields[] = {
|
@@ -2211,6 +2211,7 @@ static const struct parse_data ssid_fiel
|
||||||
#ifdef CONFIG_MESH
|
#ifdef CONFIG_MESH
|
||||||
{ INT_RANGE(mode, 0, 5) },
|
{ INT_RANGE(mode, 0, 5) },
|
||||||
{ INT_RANGE(no_auto_peer, 0, 1) },
|
{ INT_RANGE(no_auto_peer, 0, 1) },
|
||||||
@ -90,7 +82,7 @@ index a0b8cd007..0212e3f86 100644
|
|||||||
{ INT_RANGE(mesh_rssi_threshold, -255, 1) },
|
{ INT_RANGE(mesh_rssi_threshold, -255, 1) },
|
||||||
#else /* CONFIG_MESH */
|
#else /* CONFIG_MESH */
|
||||||
{ INT_RANGE(mode, 0, 4) },
|
{ INT_RANGE(mode, 0, 4) },
|
||||||
@@ -2757,6 +2758,7 @@ void wpa_config_set_network_defaults(struct wpa_ssid *ssid)
|
@@ -2757,6 +2758,7 @@ void wpa_config_set_network_defaults(str
|
||||||
ssid->dot11MeshRetryTimeout = DEFAULT_MESH_RETRY_TIMEOUT;
|
ssid->dot11MeshRetryTimeout = DEFAULT_MESH_RETRY_TIMEOUT;
|
||||||
ssid->dot11MeshConfirmTimeout = DEFAULT_MESH_CONFIRM_TIMEOUT;
|
ssid->dot11MeshConfirmTimeout = DEFAULT_MESH_CONFIRM_TIMEOUT;
|
||||||
ssid->dot11MeshHoldingTimeout = DEFAULT_MESH_HOLDING_TIMEOUT;
|
ssid->dot11MeshHoldingTimeout = DEFAULT_MESH_HOLDING_TIMEOUT;
|
||||||
@ -98,7 +90,7 @@ index a0b8cd007..0212e3f86 100644
|
|||||||
ssid->mesh_rssi_threshold = DEFAULT_MESH_RSSI_THRESHOLD;
|
ssid->mesh_rssi_threshold = DEFAULT_MESH_RSSI_THRESHOLD;
|
||||||
#endif /* CONFIG_MESH */
|
#endif /* CONFIG_MESH */
|
||||||
#ifdef CONFIG_HT_OVERRIDES
|
#ifdef CONFIG_HT_OVERRIDES
|
||||||
@@ -3886,6 +3888,7 @@ struct wpa_config * wpa_config_alloc_empty(const char *ctrl_interface,
|
@@ -3886,6 +3888,7 @@ struct wpa_config * wpa_config_alloc_emp
|
||||||
config->user_mpm = DEFAULT_USER_MPM;
|
config->user_mpm = DEFAULT_USER_MPM;
|
||||||
config->max_peer_links = DEFAULT_MAX_PEER_LINKS;
|
config->max_peer_links = DEFAULT_MAX_PEER_LINKS;
|
||||||
config->mesh_max_inactivity = DEFAULT_MESH_MAX_INACTIVITY;
|
config->mesh_max_inactivity = DEFAULT_MESH_MAX_INACTIVITY;
|
||||||
@ -106,7 +98,7 @@ index a0b8cd007..0212e3f86 100644
|
|||||||
config->dot11RSNASAERetransPeriod =
|
config->dot11RSNASAERetransPeriod =
|
||||||
DEFAULT_DOT11_RSNA_SAE_RETRANS_PERIOD;
|
DEFAULT_DOT11_RSNA_SAE_RETRANS_PERIOD;
|
||||||
config->fast_reauth = DEFAULT_FAST_REAUTH;
|
config->fast_reauth = DEFAULT_FAST_REAUTH;
|
||||||
@@ -4508,6 +4511,7 @@ static const struct global_parse_data global_fields[] = {
|
@@ -4508,6 +4511,7 @@ static const struct global_parse_data gl
|
||||||
{ INT(user_mpm), 0 },
|
{ INT(user_mpm), 0 },
|
||||||
{ INT_RANGE(max_peer_links, 0, 255), 0 },
|
{ INT_RANGE(max_peer_links, 0, 255), 0 },
|
||||||
{ INT(mesh_max_inactivity), 0 },
|
{ INT(mesh_max_inactivity), 0 },
|
||||||
@ -114,8 +106,6 @@ index a0b8cd007..0212e3f86 100644
|
|||||||
{ INT(dot11RSNASAERetransPeriod), 0 },
|
{ INT(dot11RSNASAERetransPeriod), 0 },
|
||||||
#endif /* CONFIG_MESH */
|
#endif /* CONFIG_MESH */
|
||||||
{ INT(disable_scan_offload), 0 },
|
{ INT(disable_scan_offload), 0 },
|
||||||
diff --git a/wpa_supplicant/config.h b/wpa_supplicant/config.h
|
|
||||||
index 05c4f8fb9..491d8aa5c 100644
|
|
||||||
--- a/wpa_supplicant/config.h
|
--- a/wpa_supplicant/config.h
|
||||||
+++ b/wpa_supplicant/config.h
|
+++ b/wpa_supplicant/config.h
|
||||||
@@ -18,6 +18,7 @@
|
@@ -18,6 +18,7 @@
|
||||||
@ -135,11 +125,9 @@ index 05c4f8fb9..491d8aa5c 100644
|
|||||||
/**
|
/**
|
||||||
* dot11RSNASAERetransPeriod - Timeout to retransmit SAE Auth frame
|
* dot11RSNASAERetransPeriod - Timeout to retransmit SAE Auth frame
|
||||||
*
|
*
|
||||||
diff --git a/wpa_supplicant/config_file.c b/wpa_supplicant/config_file.c
|
|
||||||
index 5a7186961..c4112b3ff 100644
|
|
||||||
--- a/wpa_supplicant/config_file.c
|
--- a/wpa_supplicant/config_file.c
|
||||||
+++ b/wpa_supplicant/config_file.c
|
+++ b/wpa_supplicant/config_file.c
|
||||||
@@ -816,6 +816,7 @@ static void wpa_config_write_network(FILE *f, struct wpa_ssid *ssid)
|
@@ -816,6 +816,7 @@ static void wpa_config_write_network(FIL
|
||||||
#endif /* IEEE8021X_EAPOL */
|
#endif /* IEEE8021X_EAPOL */
|
||||||
INT(mode);
|
INT(mode);
|
||||||
INT(no_auto_peer);
|
INT(no_auto_peer);
|
||||||
@ -147,7 +135,7 @@ index 5a7186961..c4112b3ff 100644
|
|||||||
INT(frequency);
|
INT(frequency);
|
||||||
INT(fixed_freq);
|
INT(fixed_freq);
|
||||||
#ifdef CONFIG_ACS
|
#ifdef CONFIG_ACS
|
||||||
@@ -1433,6 +1434,9 @@ static void wpa_config_write_global(FILE *f, struct wpa_config *config)
|
@@ -1433,6 +1434,9 @@ static void wpa_config_write_global(FILE
|
||||||
fprintf(f, "mesh_max_inactivity=%d\n",
|
fprintf(f, "mesh_max_inactivity=%d\n",
|
||||||
config->mesh_max_inactivity);
|
config->mesh_max_inactivity);
|
||||||
|
|
||||||
@ -157,8 +145,6 @@ index 5a7186961..c4112b3ff 100644
|
|||||||
if (config->dot11RSNASAERetransPeriod !=
|
if (config->dot11RSNASAERetransPeriod !=
|
||||||
DEFAULT_DOT11_RSNA_SAE_RETRANS_PERIOD)
|
DEFAULT_DOT11_RSNA_SAE_RETRANS_PERIOD)
|
||||||
fprintf(f, "dot11RSNASAERetransPeriod=%d\n",
|
fprintf(f, "dot11RSNASAERetransPeriod=%d\n",
|
||||||
diff --git a/wpa_supplicant/config_ssid.h b/wpa_supplicant/config_ssid.h
|
|
||||||
index 87a45c435..24d1848e0 100644
|
|
||||||
--- a/wpa_supplicant/config_ssid.h
|
--- a/wpa_supplicant/config_ssid.h
|
||||||
+++ b/wpa_supplicant/config_ssid.h
|
+++ b/wpa_supplicant/config_ssid.h
|
||||||
@@ -492,6 +492,11 @@ struct wpa_ssid {
|
@@ -492,6 +492,11 @@ struct wpa_ssid {
|
||||||
@ -173,11 +159,9 @@ index 87a45c435..24d1848e0 100644
|
|||||||
int ht;
|
int ht;
|
||||||
int ht40;
|
int ht40;
|
||||||
|
|
||||||
diff --git a/wpa_supplicant/mesh.c b/wpa_supplicant/mesh.c
|
|
||||||
index 3c2ee97da..22c10a015 100644
|
|
||||||
--- a/wpa_supplicant/mesh.c
|
--- a/wpa_supplicant/mesh.c
|
||||||
+++ b/wpa_supplicant/mesh.c
|
+++ b/wpa_supplicant/mesh.c
|
||||||
@@ -121,6 +121,7 @@ static struct mesh_conf * mesh_config_create(struct wpa_supplicant *wpa_s,
|
@@ -121,6 +121,7 @@ static struct mesh_conf * mesh_config_cr
|
||||||
conf->mesh_cc_id = 0;
|
conf->mesh_cc_id = 0;
|
||||||
conf->mesh_sp_id = MESH_SYNC_METHOD_NEIGHBOR_OFFSET;
|
conf->mesh_sp_id = MESH_SYNC_METHOD_NEIGHBOR_OFFSET;
|
||||||
conf->mesh_auth_id = (conf->security & MESH_CONF_SEC_AUTH) ? 1 : 0;
|
conf->mesh_auth_id = (conf->security & MESH_CONF_SEC_AUTH) ? 1 : 0;
|
||||||
@ -185,7 +169,7 @@ index 3c2ee97da..22c10a015 100644
|
|||||||
conf->dot11MeshMaxRetries = ssid->dot11MeshMaxRetries;
|
conf->dot11MeshMaxRetries = ssid->dot11MeshMaxRetries;
|
||||||
conf->dot11MeshRetryTimeout = ssid->dot11MeshRetryTimeout;
|
conf->dot11MeshRetryTimeout = ssid->dot11MeshRetryTimeout;
|
||||||
conf->dot11MeshConfirmTimeout = ssid->dot11MeshConfirmTimeout;
|
conf->dot11MeshConfirmTimeout = ssid->dot11MeshConfirmTimeout;
|
||||||
@@ -254,6 +255,7 @@ static int wpa_supplicant_mesh_init(struct wpa_supplicant *wpa_s,
|
@@ -256,6 +257,7 @@ static int wpa_supplicant_mesh_init(stru
|
||||||
bss->conf->start_disabled = 1;
|
bss->conf->start_disabled = 1;
|
||||||
bss->conf->mesh = MESH_ENABLED;
|
bss->conf->mesh = MESH_ENABLED;
|
||||||
bss->conf->ap_max_inactivity = wpa_s->conf->mesh_max_inactivity;
|
bss->conf->ap_max_inactivity = wpa_s->conf->mesh_max_inactivity;
|
||||||
@ -193,7 +177,7 @@ index 3c2ee97da..22c10a015 100644
|
|||||||
|
|
||||||
if (ieee80211_is_dfs(ssid->frequency) && wpa_s->conf->country[0]) {
|
if (ieee80211_is_dfs(ssid->frequency) && wpa_s->conf->country[0]) {
|
||||||
conf->ieee80211h = 1;
|
conf->ieee80211h = 1;
|
||||||
@@ -506,6 +508,10 @@ int wpa_supplicant_join_mesh(struct wpa_supplicant *wpa_s,
|
@@ -508,6 +510,10 @@ int wpa_supplicant_join_mesh(struct wpa_
|
||||||
}
|
}
|
||||||
params->conf.peer_link_timeout = wpa_s->conf->mesh_max_inactivity;
|
params->conf.peer_link_timeout = wpa_s->conf->mesh_max_inactivity;
|
||||||
|
|
||||||
@ -204,11 +188,9 @@ index 3c2ee97da..22c10a015 100644
|
|||||||
wpa_s->mesh_params = params;
|
wpa_s->mesh_params = params;
|
||||||
if (wpa_supplicant_mesh_init(wpa_s, ssid, ¶ms->freq)) {
|
if (wpa_supplicant_mesh_init(wpa_s, ssid, ¶ms->freq)) {
|
||||||
wpa_msg(wpa_s, MSG_ERROR, "Failed to init mesh");
|
wpa_msg(wpa_s, MSG_ERROR, "Failed to init mesh");
|
||||||
diff --git a/wpa_supplicant/mesh_mpm.c b/wpa_supplicant/mesh_mpm.c
|
|
||||||
index bc3cc5ef9..e7058e646 100644
|
|
||||||
--- a/wpa_supplicant/mesh_mpm.c
|
--- a/wpa_supplicant/mesh_mpm.c
|
||||||
+++ b/wpa_supplicant/mesh_mpm.c
|
+++ b/wpa_supplicant/mesh_mpm.c
|
||||||
@@ -288,9 +288,9 @@ static void mesh_mpm_send_plink_action(struct wpa_supplicant *wpa_s,
|
@@ -288,9 +288,9 @@ static void mesh_mpm_send_plink_action(s
|
||||||
info = (bss->num_plinks > 63 ? 63 : bss->num_plinks) << 1;
|
info = (bss->num_plinks > 63 ? 63 : bss->num_plinks) << 1;
|
||||||
/* TODO: Add Connected to Mesh Gate/AS subfields */
|
/* TODO: Add Connected to Mesh Gate/AS subfields */
|
||||||
wpabuf_put_u8(buf, info);
|
wpabuf_put_u8(buf, info);
|
||||||
@ -220,8 +202,6 @@ index bc3cc5ef9..e7058e646 100644
|
|||||||
} else { /* Peer closing frame */
|
} else { /* Peer closing frame */
|
||||||
/* IE: Mesh ID */
|
/* IE: Mesh ID */
|
||||||
wpabuf_put_u8(buf, WLAN_EID_MESH_ID);
|
wpabuf_put_u8(buf, WLAN_EID_MESH_ID);
|
||||||
diff --git a/wpa_supplicant/wpa_supplicant.conf b/wpa_supplicant/wpa_supplicant.conf
|
|
||||||
index 972e7e73d..e1c475f37 100644
|
|
||||||
--- a/wpa_supplicant/wpa_supplicant.conf
|
--- a/wpa_supplicant/wpa_supplicant.conf
|
||||||
+++ b/wpa_supplicant/wpa_supplicant.conf
|
+++ b/wpa_supplicant/wpa_supplicant.conf
|
||||||
@@ -153,6 +153,12 @@ ap_scan=1
|
@@ -153,6 +153,12 @@ ap_scan=1
|
||||||
@ -237,6 +217,3 @@ index 972e7e73d..e1c475f37 100644
|
|||||||
# cert_in_cb - Whether to include a peer certificate dump in events
|
# cert_in_cb - Whether to include a peer certificate dump in events
|
||||||
# This controls whether peer certificates for authentication server and
|
# This controls whether peer certificates for authentication server and
|
||||||
# its certificate chain are included in EAP peer certificate events. This is
|
# its certificate chain are included in EAP peer certificate events. This is
|
||||||
--
|
|
||||||
2.17.0
|
|
||||||
|
|
||||||
|
@ -0,0 +1,23 @@
|
|||||||
|
From: Felix Fietkau <nbd@nbd.name>
|
||||||
|
Date: Thu, 3 May 2018 12:34:31 +0200
|
||||||
|
Subject: [PATCH] mesh: fix crash with CONFIG_TAXONOMY enabled
|
||||||
|
|
||||||
|
wpa_s->ifmsh needs to be allocated using hostapd_alloc_iface() instead
|
||||||
|
of a direct call to os_zalloc, otherwise the linked list for station
|
||||||
|
taxonomy items remains uninitialized, leading to a crash on the first
|
||||||
|
attempt to traverse that list
|
||||||
|
|
||||||
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
---
|
||||||
|
|
||||||
|
--- a/wpa_supplicant/mesh.c
|
||||||
|
+++ b/wpa_supplicant/mesh.c
|
||||||
|
@@ -216,7 +216,7 @@ static int wpa_supplicant_mesh_init(stru
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
- wpa_s->ifmsh = ifmsh = os_zalloc(sizeof(*wpa_s->ifmsh));
|
||||||
|
+ wpa_s->ifmsh = ifmsh = hostapd_alloc_iface();
|
||||||
|
if (!ifmsh)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
@ -1,8 +1,6 @@
|
|||||||
diff --git a/src/rsn_supp/pmksa_cache.h b/src/rsn_supp/pmksa_cache.h
|
|
||||||
index 626761dea..6c49fa924 100644
|
|
||||||
--- a/src/rsn_supp/pmksa_cache.h
|
--- a/src/rsn_supp/pmksa_cache.h
|
||||||
+++ b/src/rsn_supp/pmksa_cache.h
|
+++ b/src/rsn_supp/pmksa_cache.h
|
||||||
@@ -101,7 +101,7 @@ static inline void pmksa_cache_deinit(struct rsn_pmksa_cache *pmksa)
|
@@ -101,7 +101,7 @@ static inline void pmksa_cache_deinit(st
|
||||||
|
|
||||||
static inline struct rsn_pmksa_cache_entry *
|
static inline struct rsn_pmksa_cache_entry *
|
||||||
pmksa_cache_get(struct rsn_pmksa_cache *pmksa, const u8 *aa, const u8 *pmkid,
|
pmksa_cache_get(struct rsn_pmksa_cache *pmksa, const u8 *aa, const u8 *pmkid,
|
||||||
@ -11,7 +9,7 @@ index 626761dea..6c49fa924 100644
|
|||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -148,7 +148,8 @@ static inline int pmksa_cache_set_current(struct wpa_sm *sm, const u8 *pmkid,
|
@@ -148,7 +148,8 @@ static inline int pmksa_cache_set_curren
|
||||||
const u8 *bssid,
|
const u8 *bssid,
|
||||||
void *network_ctx,
|
void *network_ctx,
|
||||||
int try_opportunistic,
|
int try_opportunistic,
|
||||||
|
@ -15,11 +15,9 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
|
|||||||
wpa_supplicant/wpa_supplicant.c | 3 +++
|
wpa_supplicant/wpa_supplicant.c | 3 +++
|
||||||
3 files changed, 5 insertions(+)
|
3 files changed, 5 insertions(+)
|
||||||
|
|
||||||
diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c
|
|
||||||
index f65bbb02f..7e8f014cc 100644
|
|
||||||
--- a/wpa_supplicant/config.c
|
--- a/wpa_supplicant/config.c
|
||||||
+++ b/wpa_supplicant/config.c
|
+++ b/wpa_supplicant/config.c
|
||||||
@@ -2798,6 +2798,7 @@ void wpa_config_set_network_defaults(struct wpa_ssid *ssid)
|
@@ -2796,6 +2796,7 @@ void wpa_config_set_network_defaults(str
|
||||||
ssid->mka_priority = DEFAULT_PRIO_NOT_KEY_SERVER;
|
ssid->mka_priority = DEFAULT_PRIO_NOT_KEY_SERVER;
|
||||||
#endif /* CONFIG_MACSEC */
|
#endif /* CONFIG_MACSEC */
|
||||||
ssid->mac_addr = -1;
|
ssid->mac_addr = -1;
|
||||||
@ -27,8 +25,6 @@ index f65bbb02f..7e8f014cc 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
diff --git a/wpa_supplicant/config_ssid.h b/wpa_supplicant/config_ssid.h
|
|
||||||
index 9fd56c32f..2ddb777b2 100644
|
|
||||||
--- a/wpa_supplicant/config_ssid.h
|
--- a/wpa_supplicant/config_ssid.h
|
||||||
+++ b/wpa_supplicant/config_ssid.h
|
+++ b/wpa_supplicant/config_ssid.h
|
||||||
@@ -37,6 +37,7 @@
|
@@ -37,6 +37,7 @@
|
||||||
@ -39,11 +35,9 @@ index 9fd56c32f..2ddb777b2 100644
|
|||||||
|
|
||||||
struct psk_list_entry {
|
struct psk_list_entry {
|
||||||
struct dl_list list;
|
struct dl_list list;
|
||||||
diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
|
|
||||||
index dcd787bec..ca893f942 100644
|
|
||||||
--- a/wpa_supplicant/wpa_supplicant.c
|
--- a/wpa_supplicant/wpa_supplicant.c
|
||||||
+++ b/wpa_supplicant/wpa_supplicant.c
|
+++ b/wpa_supplicant/wpa_supplicant.c
|
||||||
@@ -2293,6 +2293,9 @@ void ibss_mesh_setup_freq(struct wpa_supplicant *wpa_s,
|
@@ -2285,6 +2285,9 @@ void ibss_mesh_setup_freq(struct wpa_sup
|
||||||
vht_caps |= VHT_CAP_SUPP_CHAN_WIDTH_160MHZ;
|
vht_caps |= VHT_CAP_SUPP_CHAN_WIDTH_160MHZ;
|
||||||
seg0 = 114;
|
seg0 = 114;
|
||||||
}
|
}
|
||||||
@ -53,6 +47,3 @@ index dcd787bec..ca893f942 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (hostapd_set_freq_params(&vht_freq, mode->mode, freq->freq,
|
if (hostapd_set_freq_params(&vht_freq, mode->mode, freq->freq,
|
||||||
--
|
|
||||||
2.17.0
|
|
||||||
|
|
||||||
|
@ -31,13 +31,11 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
|
|||||||
wpa_supplicant/wpa_supplicant.c | 18 +++++++++++++-----
|
wpa_supplicant/wpa_supplicant.c | 18 +++++++++++++-----
|
||||||
1 file changed, 13 insertions(+), 5 deletions(-)
|
1 file changed, 13 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
|
|
||||||
index ca893f942..8429cfd43 100644
|
|
||||||
--- a/wpa_supplicant/wpa_supplicant.c
|
--- a/wpa_supplicant/wpa_supplicant.c
|
||||||
+++ b/wpa_supplicant/wpa_supplicant.c
|
+++ b/wpa_supplicant/wpa_supplicant.c
|
||||||
@@ -2132,9 +2132,15 @@ void ibss_mesh_setup_freq(struct wpa_supplicant *wpa_s,
|
@@ -2117,9 +2117,15 @@ void ibss_mesh_setup_freq(struct wpa_sup
|
||||||
if (pri_chan->flag & (HOSTAPD_CHAN_DISABLED | HOSTAPD_CHAN_NO_IR))
|
if (!dfs_enabled)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
+ freq->channel = pri_chan->chan;
|
+ freq->channel = pri_chan->chan;
|
||||||
+
|
+
|
||||||
@ -53,16 +51,16 @@ index ca893f942..8429cfd43 100644
|
|||||||
#endif /* CONFIG_HT_OVERRIDES */
|
#endif /* CONFIG_HT_OVERRIDES */
|
||||||
|
|
||||||
/* Check/setup HT40+/HT40- */
|
/* Check/setup HT40+/HT40- */
|
||||||
@@ -2159,8 +2165,6 @@ void ibss_mesh_setup_freq(struct wpa_supplicant *wpa_s,
|
@@ -2147,8 +2153,6 @@ void ibss_mesh_setup_freq(struct wpa_sup
|
||||||
if (sec_chan->flag & (HOSTAPD_CHAN_DISABLED | HOSTAPD_CHAN_NO_IR))
|
if (!dfs_enabled)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
- freq->channel = pri_chan->chan;
|
- freq->channel = pri_chan->chan;
|
||||||
-
|
-
|
||||||
if (ht40 == -1) {
|
if (ht40 == -1) {
|
||||||
if (!(pri_chan->flag & HOSTAPD_CHAN_HT40MINUS))
|
if (!(pri_chan->flag & HOSTAPD_CHAN_HT40MINUS))
|
||||||
return;
|
return;
|
||||||
@@ -2204,6 +2208,7 @@ void ibss_mesh_setup_freq(struct wpa_supplicant *wpa_s,
|
@@ -2192,6 +2196,7 @@ void ibss_mesh_setup_freq(struct wpa_sup
|
||||||
wpa_scan_results_free(scan_res);
|
wpa_scan_results_free(scan_res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,7 +68,7 @@ index ca893f942..8429cfd43 100644
|
|||||||
wpa_printf(MSG_DEBUG,
|
wpa_printf(MSG_DEBUG,
|
||||||
"IBSS/mesh: setup freq channel %d, sec_channel_offset %d",
|
"IBSS/mesh: setup freq channel %d, sec_channel_offset %d",
|
||||||
freq->channel, freq->sec_channel_offset);
|
freq->channel, freq->sec_channel_offset);
|
||||||
@@ -2295,7 +2300,10 @@ void ibss_mesh_setup_freq(struct wpa_supplicant *wpa_s,
|
@@ -2287,7 +2292,10 @@ void ibss_mesh_setup_freq(struct wpa_sup
|
||||||
}
|
}
|
||||||
} else if (ssid->max_oper_chwidth == VHT_CHANWIDTH_USE_HT) {
|
} else if (ssid->max_oper_chwidth == VHT_CHANWIDTH_USE_HT) {
|
||||||
chwidth = VHT_CHANWIDTH_USE_HT;
|
chwidth = VHT_CHANWIDTH_USE_HT;
|
||||||
@ -82,6 +80,3 @@ index ca893f942..8429cfd43 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (hostapd_set_freq_params(&vht_freq, mode->mode, freq->freq,
|
if (hostapd_set_freq_params(&vht_freq, mode->mode, freq->freq,
|
||||||
--
|
|
||||||
2.17.0
|
|
||||||
|
|
||||||
|
@ -0,0 +1,45 @@
|
|||||||
|
From 444adf78eeb129e415d53fcb2fa2f05b6a69abdc Mon Sep 17 00:00:00 2001
|
||||||
|
From: Sven Eckelmann <sven.eckelmann@openmesh.com>
|
||||||
|
Date: Mon, 7 May 2018 15:24:29 +0200
|
||||||
|
Subject: wpa_supplicant: Fix parsing of max_oper_chwidth
|
||||||
|
|
||||||
|
The max_oper_chwidth is parsed in wpa_config_set as INT_RANGE (see
|
||||||
|
ssid_fields). The actual parsing for INT_RANGE is done by
|
||||||
|
wpa_config_parse_int which can only store the result as full integer.
|
||||||
|
|
||||||
|
max_oper_chwidth is stored as u8 (a single byte) in wpa_ssid. This means
|
||||||
|
that on little endian systems, the least significant byte of the parsed
|
||||||
|
value are really stored in the max_oper_chwidth. But on big endian system,
|
||||||
|
the only most significant byte is stored as max_oper_chwidth. This means
|
||||||
|
that 0 is always stored because the provided range doesn't allow any other
|
||||||
|
value for systems with multi-byte-wide integers.
|
||||||
|
|
||||||
|
This also means that for common systems with 4-byte-wide integers, the
|
||||||
|
remaining 3 bytes were written after the actual member of the struct. This
|
||||||
|
should not have influenced the behavior of succeeding members because these
|
||||||
|
bytes would have been part of the padding between the members on most
|
||||||
|
systems.
|
||||||
|
|
||||||
|
Increasing its size to a full int fixes the write operations outside of the
|
||||||
|
member and allows to use the max_oper_chwidth setting on big endian
|
||||||
|
systems.
|
||||||
|
|
||||||
|
Fixes: 0f29bc68d18e ("IBSS/mesh: Add support for VHT80P80 configuration")
|
||||||
|
Signed-off-by: Sven Eckelmann <sven.eckelmann@openmesh.com>
|
||||||
|
|
||||||
|
Forwarded: https://patchwork.ozlabs.org/patch/909751/
|
||||||
|
---
|
||||||
|
wpa_supplicant/config_ssid.h | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/wpa_supplicant/config_ssid.h
|
||||||
|
+++ b/wpa_supplicant/config_ssid.h
|
||||||
|
@@ -503,7 +503,7 @@ struct wpa_ssid {
|
||||||
|
|
||||||
|
int vht;
|
||||||
|
|
||||||
|
- u8 max_oper_chwidth;
|
||||||
|
+ int max_oper_chwidth;
|
||||||
|
|
||||||
|
unsigned int vht_center_freq1;
|
||||||
|
unsigned int vht_center_freq2;
|
@ -156,7 +156,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
|
||||||
@@ -5428,8 +5428,8 @@ union wpa_event_data {
|
@@ -5430,8 +5430,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.
|
||||||
*/
|
*/
|
||||||
@ -167,7 +167,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* wpa_supplicant_event_global - Report a driver event for wpa_supplicant
|
* wpa_supplicant_event_global - Report a driver event for wpa_supplicant
|
||||||
@@ -5441,7 +5441,7 @@ void wpa_supplicant_event(void *ctx, enu
|
@@ -5443,7 +5443,7 @@ void wpa_supplicant_event(void *ctx, enu
|
||||||
* Same as wpa_supplicant_event(), but we search for the interface in
|
* Same as wpa_supplicant_event(), but we search for the interface in
|
||||||
* wpa_global.
|
* wpa_global.
|
||||||
*/
|
*/
|
||||||
@ -253,7 +253,7 @@
|
|||||||
struct wpa_supplicant *wpa_s;
|
struct wpa_supplicant *wpa_s;
|
||||||
--- a/wpa_supplicant/wpa_supplicant.c
|
--- a/wpa_supplicant/wpa_supplicant.c
|
||||||
+++ b/wpa_supplicant/wpa_supplicant.c
|
+++ b/wpa_supplicant/wpa_supplicant.c
|
||||||
@@ -5725,7 +5725,6 @@ struct wpa_interface * wpa_supplicant_ma
|
@@ -5736,7 +5736,6 @@ struct wpa_interface * wpa_supplicant_ma
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -261,7 +261,7 @@
|
|||||||
/**
|
/**
|
||||||
* wpa_supplicant_match_existing - Match existing interfaces
|
* wpa_supplicant_match_existing - Match existing interfaces
|
||||||
* @global: Pointer to global data from wpa_supplicant_init()
|
* @global: Pointer to global data from wpa_supplicant_init()
|
||||||
@@ -5762,6 +5761,11 @@ static int wpa_supplicant_match_existing
|
@@ -5773,6 +5772,11 @@ static int wpa_supplicant_match_existing
|
||||||
|
|
||||||
#endif /* CONFIG_MATCH_IFACE */
|
#endif /* CONFIG_MATCH_IFACE */
|
||||||
|
|
||||||
@ -273,7 +273,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* wpa_supplicant_add_iface - Add a new network interface
|
* wpa_supplicant_add_iface - Add a new network interface
|
||||||
@@ -6018,6 +6022,8 @@ struct wpa_global * wpa_supplicant_init(
|
@@ -6029,6 +6033,8 @@ struct wpa_global * wpa_supplicant_init(
|
||||||
#ifndef CONFIG_NO_WPA_MSG
|
#ifndef CONFIG_NO_WPA_MSG
|
||||||
wpa_msg_register_ifname_cb(wpa_supplicant_msg_ifname_cb);
|
wpa_msg_register_ifname_cb(wpa_supplicant_msg_ifname_cb);
|
||||||
#endif /* CONFIG_NO_WPA_MSG */
|
#endif /* CONFIG_NO_WPA_MSG */
|
||||||
|
@ -13,7 +13,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
|
||||||
@@ -761,6 +761,8 @@ struct hostapd_config {
|
@@ -763,6 +763,8 @@ struct hostapd_config {
|
||||||
|
|
||||||
int ht_op_mode_fixed;
|
int ht_op_mode_fixed;
|
||||||
u16 ht_capab;
|
u16 ht_capab;
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
Index: hostapd-2018-04-09-fa617ee6/wpa_supplicant/config.c
|
--- a/wpa_supplicant/config.c
|
||||||
===================================================================
|
+++ b/wpa_supplicant/config.c
|
||||||
--- hostapd-2018-04-09-fa617ee6.orig/wpa_supplicant/config.c
|
|
||||||
+++ hostapd-2018-04-09-fa617ee6/wpa_supplicant/config.c
|
|
||||||
@@ -2216,6 +2216,7 @@ static const struct parse_data ssid_fiel
|
@@ -2216,6 +2216,7 @@ static const struct parse_data ssid_fiel
|
||||||
#else /* CONFIG_MESH */
|
#else /* CONFIG_MESH */
|
||||||
{ INT_RANGE(mode, 0, 4) },
|
{ INT_RANGE(mode, 0, 4) },
|
||||||
@ -10,10 +8,8 @@ Index: hostapd-2018-04-09-fa617ee6/wpa_supplicant/config.c
|
|||||||
{ INT_RANGE(proactive_key_caching, 0, 1) },
|
{ INT_RANGE(proactive_key_caching, 0, 1) },
|
||||||
{ INT_RANGE(disabled, 0, 2) },
|
{ INT_RANGE(disabled, 0, 2) },
|
||||||
{ STR(id_str) },
|
{ STR(id_str) },
|
||||||
Index: hostapd-2018-04-09-fa617ee6/wpa_supplicant/config_file.c
|
--- a/wpa_supplicant/config_file.c
|
||||||
===================================================================
|
+++ b/wpa_supplicant/config_file.c
|
||||||
--- hostapd-2018-04-09-fa617ee6.orig/wpa_supplicant/config_file.c
|
|
||||||
+++ hostapd-2018-04-09-fa617ee6/wpa_supplicant/config_file.c
|
|
||||||
@@ -816,6 +816,7 @@ static void wpa_config_write_network(FIL
|
@@ -816,6 +816,7 @@ static void wpa_config_write_network(FIL
|
||||||
#endif /* IEEE8021X_EAPOL */
|
#endif /* IEEE8021X_EAPOL */
|
||||||
INT(mode);
|
INT(mode);
|
||||||
@ -22,10 +18,8 @@ Index: hostapd-2018-04-09-fa617ee6/wpa_supplicant/config_file.c
|
|||||||
INT(mesh_fwding);
|
INT(mesh_fwding);
|
||||||
INT(frequency);
|
INT(frequency);
|
||||||
INT(fixed_freq);
|
INT(fixed_freq);
|
||||||
Index: hostapd-2018-04-09-fa617ee6/wpa_supplicant/mesh.c
|
--- a/wpa_supplicant/mesh.c
|
||||||
===================================================================
|
+++ b/wpa_supplicant/mesh.c
|
||||||
--- hostapd-2018-04-09-fa617ee6.orig/wpa_supplicant/mesh.c
|
|
||||||
+++ hostapd-2018-04-09-fa617ee6/wpa_supplicant/mesh.c
|
|
||||||
@@ -287,6 +287,8 @@ static int wpa_supplicant_mesh_init(stru
|
@@ -287,6 +287,8 @@ static int wpa_supplicant_mesh_init(stru
|
||||||
frequency);
|
frequency);
|
||||||
goto out_free;
|
goto out_free;
|
||||||
@ -35,10 +29,8 @@ Index: hostapd-2018-04-09-fa617ee6/wpa_supplicant/mesh.c
|
|||||||
if (ssid->ht40)
|
if (ssid->ht40)
|
||||||
conf->secondary_channel = ssid->ht40;
|
conf->secondary_channel = ssid->ht40;
|
||||||
if (conf->hw_mode == HOSTAPD_MODE_IEEE80211A && ssid->vht) {
|
if (conf->hw_mode == HOSTAPD_MODE_IEEE80211A && ssid->vht) {
|
||||||
Index: hostapd-2018-04-09-fa617ee6/wpa_supplicant/wpa_supplicant.c
|
--- a/wpa_supplicant/wpa_supplicant.c
|
||||||
===================================================================
|
+++ b/wpa_supplicant/wpa_supplicant.c
|
||||||
--- hostapd-2018-04-09-fa617ee6.orig/wpa_supplicant/wpa_supplicant.c
|
|
||||||
+++ hostapd-2018-04-09-fa617ee6/wpa_supplicant/wpa_supplicant.c
|
|
||||||
@@ -2024,12 +2024,12 @@ void ibss_mesh_setup_freq(struct wpa_sup
|
@@ -2024,12 +2024,12 @@ void ibss_mesh_setup_freq(struct wpa_sup
|
||||||
{
|
{
|
||||||
enum hostapd_hw_mode hw_mode;
|
enum hostapd_hw_mode hw_mode;
|
||||||
@ -63,10 +55,8 @@ Index: hostapd-2018-04-09-fa617ee6/wpa_supplicant/wpa_supplicant.c
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
for (chan_idx = 0; chan_idx < mode->num_channels; chan_idx++) {
|
for (chan_idx = 0; chan_idx < mode->num_channels; chan_idx++) {
|
||||||
Index: hostapd-2018-04-09-fa617ee6/wpa_supplicant/config_ssid.h
|
--- a/wpa_supplicant/config_ssid.h
|
||||||
===================================================================
|
+++ b/wpa_supplicant/config_ssid.h
|
||||||
--- hostapd-2018-04-09-fa617ee6.orig/wpa_supplicant/config_ssid.h
|
|
||||||
+++ hostapd-2018-04-09-fa617ee6/wpa_supplicant/config_ssid.h
|
|
||||||
@@ -835,6 +835,8 @@ struct wpa_ssid {
|
@@ -835,6 +835,8 @@ struct wpa_ssid {
|
||||||
*/
|
*/
|
||||||
int no_auto_peer;
|
int no_auto_peer;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/wpa_supplicant/wpa_supplicant.c
|
--- a/wpa_supplicant/wpa_supplicant.c
|
||||||
+++ b/wpa_supplicant/wpa_supplicant.c
|
+++ b/wpa_supplicant/wpa_supplicant.c
|
||||||
@@ -4176,7 +4176,7 @@ wpa_supplicant_alloc(struct wpa_supplica
|
@@ -4187,7 +4187,7 @@ wpa_supplicant_alloc(struct wpa_supplica
|
||||||
if (wpa_s == NULL)
|
if (wpa_s == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
wpa_s->scan_req = INITIAL_SCAN_REQ;
|
wpa_s->scan_req = INITIAL_SCAN_REQ;
|
||||||
|
@ -1,26 +1,3 @@
|
|||||||
--- a/wpa_supplicant/wpa_supplicant_i.h
|
|
||||||
+++ b/wpa_supplicant/wpa_supplicant_i.h
|
|
||||||
@@ -101,6 +101,11 @@ struct wpa_interface {
|
|
||||||
const char *ifname;
|
|
||||||
|
|
||||||
/**
|
|
||||||
+ * hostapd_ctrl - path to hostapd control socket for notification
|
|
||||||
+ */
|
|
||||||
+ const char *hostapd_ctrl;
|
|
||||||
+
|
|
||||||
+ /**
|
|
||||||
* bridge_ifname - Optional bridge interface name
|
|
||||||
*
|
|
||||||
* If the driver interface (ifname) is included in a Linux bridge
|
|
||||||
@@ -513,6 +518,8 @@ struct wpa_supplicant {
|
|
||||||
#endif /* CONFIG_CTRL_IFACE_BINDER */
|
|
||||||
char bridge_ifname[16];
|
|
||||||
|
|
||||||
+ struct wpa_ctrl *hostapd;
|
|
||||||
+
|
|
||||||
char *confname;
|
|
||||||
char *confanother;
|
|
||||||
|
|
||||||
--- a/wpa_supplicant/Makefile
|
--- a/wpa_supplicant/Makefile
|
||||||
+++ b/wpa_supplicant/Makefile
|
+++ b/wpa_supplicant/Makefile
|
||||||
@@ -26,6 +26,10 @@ CFLAGS += $(EXTRA_CFLAGS)
|
@@ -26,6 +26,10 @@ CFLAGS += $(EXTRA_CFLAGS)
|
||||||
@ -43,6 +20,94 @@
|
|||||||
ifndef CONFIG_OS
|
ifndef CONFIG_OS
|
||||||
ifdef CONFIG_NATIVE_WINDOWS
|
ifdef CONFIG_NATIVE_WINDOWS
|
||||||
CONFIG_OS=win32
|
CONFIG_OS=win32
|
||||||
|
--- a/wpa_supplicant/bss.c
|
||||||
|
+++ b/wpa_supplicant/bss.c
|
||||||
|
@@ -11,6 +11,7 @@
|
||||||
|
#include "utils/common.h"
|
||||||
|
#include "utils/eloop.h"
|
||||||
|
#include "common/ieee802_11_defs.h"
|
||||||
|
+#include "common/ieee802_11_common.h"
|
||||||
|
#include "drivers/driver.h"
|
||||||
|
#include "eap_peer/eap.h"
|
||||||
|
#include "wpa_supplicant_i.h"
|
||||||
|
@@ -290,6 +291,10 @@ void calculate_update_time(const struct
|
||||||
|
static void wpa_bss_copy_res(struct wpa_bss *dst, struct wpa_scan_res *src,
|
||||||
|
struct os_reltime *fetch_time)
|
||||||
|
{
|
||||||
|
+ struct ieee80211_ht_capabilities *capab;
|
||||||
|
+ struct ieee80211_ht_operation *oper;
|
||||||
|
+ struct ieee802_11_elems elems;
|
||||||
|
+
|
||||||
|
dst->flags = src->flags;
|
||||||
|
os_memcpy(dst->bssid, src->bssid, ETH_ALEN);
|
||||||
|
dst->freq = src->freq;
|
||||||
|
@@ -302,6 +307,15 @@ static void wpa_bss_copy_res(struct wpa_
|
||||||
|
dst->est_throughput = src->est_throughput;
|
||||||
|
dst->snr = src->snr;
|
||||||
|
|
||||||
|
+ memset(&elems, 0, sizeof(elems));
|
||||||
|
+ ieee802_11_parse_elems((u8 *) (src + 1), src->ie_len, &elems, 0);
|
||||||
|
+ capab = (struct ieee80211_ht_capabilities *) elems.ht_capabilities;
|
||||||
|
+ oper = (struct ieee80211_ht_operation *) elems.ht_operation;
|
||||||
|
+ if (capab)
|
||||||
|
+ dst->ht_capab = le_to_host16(capab->ht_capabilities_info);
|
||||||
|
+ if (oper)
|
||||||
|
+ dst->ht_param = oper->ht_param;
|
||||||
|
+
|
||||||
|
calculate_update_time(fetch_time, src->age, &dst->last_update);
|
||||||
|
}
|
||||||
|
|
||||||
|
--- a/wpa_supplicant/bss.h
|
||||||
|
+++ b/wpa_supplicant/bss.h
|
||||||
|
@@ -80,6 +80,10 @@ struct wpa_bss {
|
||||||
|
u8 ssid[SSID_MAX_LEN];
|
||||||
|
/** Length of SSID */
|
||||||
|
size_t ssid_len;
|
||||||
|
+ /** HT capabilities */
|
||||||
|
+ u16 ht_capab;
|
||||||
|
+ /* Five octets of HT Operation Information */
|
||||||
|
+ u8 ht_param;
|
||||||
|
/** Frequency of the channel in MHz (e.g., 2412 = channel 1) */
|
||||||
|
int freq;
|
||||||
|
/** Beacon interval in TUs (host byte order) */
|
||||||
|
--- a/wpa_supplicant/main.c
|
||||||
|
+++ b/wpa_supplicant/main.c
|
||||||
|
@@ -34,7 +34,7 @@ static void usage(void)
|
||||||
|
"vW] [-P<pid file>] "
|
||||||
|
"[-g<global ctrl>] \\\n"
|
||||||
|
" [-G<group>] \\\n"
|
||||||
|
- " -i<ifname> -c<config file> [-C<ctrl>] [-D<driver>] "
|
||||||
|
+ " -i<ifname> -c<config file> [-C<ctrl>] [-D<driver>] [-H<hostapd path>] "
|
||||||
|
"[-p<driver_param>] \\\n"
|
||||||
|
" [-b<br_ifname>] [-e<entropy file>]"
|
||||||
|
#ifdef CONFIG_DEBUG_FILE
|
||||||
|
@@ -74,6 +74,7 @@ static void usage(void)
|
||||||
|
" -g = global ctrl_interface\n"
|
||||||
|
" -G = global ctrl_interface group\n"
|
||||||
|
" -h = show this help text\n"
|
||||||
|
+ " -H = connect to a hostapd instance to manage state changes\n"
|
||||||
|
" -i = interface name\n"
|
||||||
|
" -I = additional configuration file\n"
|
||||||
|
" -K = include keys (passwords, etc.) in debug output\n"
|
||||||
|
@@ -201,7 +202,7 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
c = getopt(argc, argv,
|
||||||
|
- "b:Bc:C:D:de:f:g:G:hi:I:KLMm:No:O:p:P:qsTtuvW");
|
||||||
|
+ "b:Bc:C:D:de:f:g:G:hH:i:I:KLMm:No:O:p:P:qsTtuvW");
|
||||||
|
if (c < 0)
|
||||||
|
break;
|
||||||
|
switch (c) {
|
||||||
|
@@ -248,6 +249,9 @@ int main(int argc, char *argv[])
|
||||||
|
usage();
|
||||||
|
exitcode = 0;
|
||||||
|
goto out;
|
||||||
|
+ case 'H':
|
||||||
|
+ iface->hostapd_ctrl = optarg;
|
||||||
|
+ break;
|
||||||
|
case 'i':
|
||||||
|
iface->ifname = optarg;
|
||||||
|
break;
|
||||||
--- a/wpa_supplicant/wpa_supplicant.c
|
--- a/wpa_supplicant/wpa_supplicant.c
|
||||||
+++ b/wpa_supplicant/wpa_supplicant.c
|
+++ b/wpa_supplicant/wpa_supplicant.c
|
||||||
@@ -125,6 +125,55 @@ static void wpas_update_fils_connect_par
|
@@ -125,6 +125,55 @@ static void wpas_update_fils_connect_par
|
||||||
@ -118,15 +183,20 @@
|
|||||||
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
|
||||||
@@ -5351,6 +5404,20 @@ static int wpa_supplicant_init_iface(str
|
@@ -1920,6 +1973,8 @@ void wpa_supplicant_associate(struct wpa
|
||||||
|
wpa_ssid_txt(ssid->ssid, ssid->ssid_len),
|
||||||
|
ssid->id);
|
||||||
|
wpas_notify_mesh_group_started(wpa_s, ssid);
|
||||||
|
+ if (wpa_s->hostapd)
|
||||||
|
+ hostapd_reload(wpa_s, wpa_s->current_bss);
|
||||||
|
#else /* CONFIG_MESH */
|
||||||
|
wpa_msg(wpa_s, MSG_ERROR,
|
||||||
|
"mesh mode support not included in the build");
|
||||||
|
@@ -5362,6 +5417,16 @@ static int wpa_supplicant_init_iface(str
|
||||||
sizeof(wpa_s->bridge_ifname));
|
sizeof(wpa_s->bridge_ifname));
|
||||||
}
|
}
|
||||||
|
|
||||||
+ if (iface->hostapd_ctrl) {
|
+ if (iface->hostapd_ctrl) {
|
||||||
+ char *cmd = "STOP_AP";
|
|
||||||
+ char buf[256];
|
|
||||||
+ int len = sizeof(buf);
|
|
||||||
+
|
|
||||||
+ wpa_s->hostapd = wpa_ctrl_open(iface->hostapd_ctrl);
|
+ wpa_s->hostapd = wpa_ctrl_open(iface->hostapd_ctrl);
|
||||||
+ if (!wpa_s->hostapd) {
|
+ if (!wpa_s->hostapd) {
|
||||||
+ wpa_printf(MSG_ERROR, "\nFailed to connect to hostapd\n");
|
+ wpa_printf(MSG_ERROR, "\nFailed to connect to hostapd\n");
|
||||||
@ -139,7 +209,7 @@
|
|||||||
/* RSNA Supplicant Key Management - INITIALIZE */
|
/* RSNA Supplicant Key Management - INITIALIZE */
|
||||||
eapol_sm_notify_portEnabled(wpa_s->eapol, FALSE);
|
eapol_sm_notify_portEnabled(wpa_s->eapol, FALSE);
|
||||||
eapol_sm_notify_portValid(wpa_s->eapol, FALSE);
|
eapol_sm_notify_portValid(wpa_s->eapol, FALSE);
|
||||||
@@ -5672,6 +5739,11 @@ static void wpa_supplicant_deinit_iface(
|
@@ -5683,6 +5748,11 @@ static void wpa_supplicant_deinit_iface(
|
||||||
if (terminate)
|
if (terminate)
|
||||||
wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_TERMINATING);
|
wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_TERMINATING);
|
||||||
|
|
||||||
@ -151,91 +221,26 @@
|
|||||||
if (wpa_s->ctrl_iface) {
|
if (wpa_s->ctrl_iface) {
|
||||||
wpa_supplicant_ctrl_iface_deinit(wpa_s->ctrl_iface);
|
wpa_supplicant_ctrl_iface_deinit(wpa_s->ctrl_iface);
|
||||||
wpa_s->ctrl_iface = NULL;
|
wpa_s->ctrl_iface = NULL;
|
||||||
--- a/wpa_supplicant/bss.c
|
--- a/wpa_supplicant/wpa_supplicant_i.h
|
||||||
+++ b/wpa_supplicant/bss.c
|
+++ b/wpa_supplicant/wpa_supplicant_i.h
|
||||||
@@ -11,6 +11,7 @@
|
@@ -101,6 +101,11 @@ struct wpa_interface {
|
||||||
#include "utils/common.h"
|
const char *ifname;
|
||||||
#include "utils/eloop.h"
|
|
||||||
#include "common/ieee802_11_defs.h"
|
/**
|
||||||
+#include "common/ieee802_11_common.h"
|
+ * hostapd_ctrl - path to hostapd control socket for notification
|
||||||
#include "drivers/driver.h"
|
+ */
|
||||||
#include "eap_peer/eap.h"
|
+ const char *hostapd_ctrl;
|
||||||
#include "wpa_supplicant_i.h"
|
|
||||||
@@ -290,6 +291,10 @@ void calculate_update_time(const struct
|
|
||||||
static void wpa_bss_copy_res(struct wpa_bss *dst, struct wpa_scan_res *src,
|
|
||||||
struct os_reltime *fetch_time)
|
|
||||||
{
|
|
||||||
+ struct ieee80211_ht_capabilities *capab;
|
|
||||||
+ struct ieee80211_ht_operation *oper;
|
|
||||||
+ struct ieee802_11_elems elems;
|
|
||||||
+
|
+
|
||||||
dst->flags = src->flags;
|
+ /**
|
||||||
os_memcpy(dst->bssid, src->bssid, ETH_ALEN);
|
* bridge_ifname - Optional bridge interface name
|
||||||
dst->freq = src->freq;
|
*
|
||||||
@@ -302,6 +307,15 @@ static void wpa_bss_copy_res(struct wpa_
|
* If the driver interface (ifname) is included in a Linux bridge
|
||||||
dst->est_throughput = src->est_throughput;
|
@@ -513,6 +518,8 @@ struct wpa_supplicant {
|
||||||
dst->snr = src->snr;
|
#endif /* CONFIG_CTRL_IFACE_BINDER */
|
||||||
|
char bridge_ifname[16];
|
||||||
|
|
||||||
+ memset(&elems, 0, sizeof(elems));
|
+ struct wpa_ctrl *hostapd;
|
||||||
+ ieee802_11_parse_elems((u8 *) (src + 1), src->ie_len, &elems, 0);
|
|
||||||
+ capab = (struct ieee80211_ht_capabilities *) elems.ht_capabilities;
|
|
||||||
+ oper = (struct ieee80211_ht_operation *) elems.ht_operation;
|
|
||||||
+ if (capab)
|
|
||||||
+ dst->ht_capab = le_to_host16(capab->ht_capabilities_info);
|
|
||||||
+ if (oper)
|
|
||||||
+ dst->ht_param = oper->ht_param;
|
|
||||||
+
|
+
|
||||||
calculate_update_time(fetch_time, src->age, &dst->last_update);
|
char *confname;
|
||||||
}
|
char *confanother;
|
||||||
|
|
||||||
--- a/wpa_supplicant/main.c
|
|
||||||
+++ b/wpa_supplicant/main.c
|
|
||||||
@@ -34,7 +34,7 @@ static void usage(void)
|
|
||||||
"vW] [-P<pid file>] "
|
|
||||||
"[-g<global ctrl>] \\\n"
|
|
||||||
" [-G<group>] \\\n"
|
|
||||||
- " -i<ifname> -c<config file> [-C<ctrl>] [-D<driver>] "
|
|
||||||
+ " -i<ifname> -c<config file> [-C<ctrl>] [-D<driver>] [-H<hostapd path>] "
|
|
||||||
"[-p<driver_param>] \\\n"
|
|
||||||
" [-b<br_ifname>] [-e<entropy file>]"
|
|
||||||
#ifdef CONFIG_DEBUG_FILE
|
|
||||||
@@ -74,6 +74,7 @@ static void usage(void)
|
|
||||||
" -g = global ctrl_interface\n"
|
|
||||||
" -G = global ctrl_interface group\n"
|
|
||||||
" -h = show this help text\n"
|
|
||||||
+ " -H = connect to a hostapd instance to manage state changes\n"
|
|
||||||
" -i = interface name\n"
|
|
||||||
" -I = additional configuration file\n"
|
|
||||||
" -K = include keys (passwords, etc.) in debug output\n"
|
|
||||||
@@ -201,7 +202,7 @@ int main(int argc, char *argv[])
|
|
||||||
|
|
||||||
for (;;) {
|
|
||||||
c = getopt(argc, argv,
|
|
||||||
- "b:Bc:C:D:de:f:g:G:hi:I:KLMm:No:O:p:P:qsTtuvW");
|
|
||||||
+ "b:Bc:C:D:de:f:g:G:hH:i:I:KLMm:No:O:p:P:qsTtuvW");
|
|
||||||
if (c < 0)
|
|
||||||
break;
|
|
||||||
switch (c) {
|
|
||||||
@@ -248,6 +249,9 @@ int main(int argc, char *argv[])
|
|
||||||
usage();
|
|
||||||
exitcode = 0;
|
|
||||||
goto out;
|
|
||||||
+ case 'H':
|
|
||||||
+ iface->hostapd_ctrl = optarg;
|
|
||||||
+ break;
|
|
||||||
case 'i':
|
|
||||||
iface->ifname = optarg;
|
|
||||||
break;
|
|
||||||
--- a/wpa_supplicant/bss.h
|
|
||||||
+++ b/wpa_supplicant/bss.h
|
|
||||||
@@ -80,6 +80,10 @@ struct wpa_bss {
|
|
||||||
u8 ssid[SSID_MAX_LEN];
|
|
||||||
/** Length of SSID */
|
|
||||||
size_t ssid_len;
|
|
||||||
+ /** HT capabilities */
|
|
||||||
+ u16 ht_capab;
|
|
||||||
+ /* Five octets of HT Operation Information */
|
|
||||||
+ u8 ht_param;
|
|
||||||
/** Frequency of the channel in MHz (e.g., 2412 = channel 1) */
|
|
||||||
int freq;
|
|
||||||
/** Beacon interval in TUs (host byte order) */
|
|
||||||
|
@ -140,7 +140,7 @@ Signed-hostap: Antonio Quartulli <ordex@autistici.org>
|
|||||||
/* Helper macros for network block parser */
|
/* Helper macros for network block parser */
|
||||||
|
|
||||||
#ifdef OFFSET
|
#ifdef OFFSET
|
||||||
@@ -2279,6 +2371,8 @@ static const struct parse_data ssid_fiel
|
@@ -2281,6 +2373,8 @@ static const struct parse_data ssid_fiel
|
||||||
{ INT(ap_max_inactivity) },
|
{ INT(ap_max_inactivity) },
|
||||||
{ INT(dtim_period) },
|
{ INT(dtim_period) },
|
||||||
{ INT(beacon_int) },
|
{ INT(beacon_int) },
|
||||||
@ -162,7 +162,7 @@ Signed-hostap: Antonio Quartulli <ordex@autistici.org>
|
|||||||
|
|
||||||
|
|
||||||
#define DEFAULT_EAP_WORKAROUND ((unsigned int) -1)
|
#define DEFAULT_EAP_WORKAROUND ((unsigned int) -1)
|
||||||
@@ -743,6 +745,9 @@ struct wpa_ssid {
|
@@ -749,6 +751,9 @@ struct wpa_ssid {
|
||||||
*/
|
*/
|
||||||
void *parent_cred;
|
void *parent_cred;
|
||||||
|
|
||||||
@ -174,7 +174,7 @@ Signed-hostap: Antonio Quartulli <ordex@autistici.org>
|
|||||||
* macsec_policy - Determines the policy for MACsec secure session
|
* macsec_policy - Determines the policy for MACsec secure session
|
||||||
--- a/wpa_supplicant/wpa_supplicant.c
|
--- a/wpa_supplicant/wpa_supplicant.c
|
||||||
+++ b/wpa_supplicant/wpa_supplicant.c
|
+++ b/wpa_supplicant/wpa_supplicant.c
|
||||||
@@ -2987,6 +2987,12 @@ static void wpas_start_assoc_cb(struct w
|
@@ -3000,6 +3000,12 @@ static void wpas_start_assoc_cb(struct w
|
||||||
params.beacon_int = ssid->beacon_int;
|
params.beacon_int = ssid->beacon_int;
|
||||||
else
|
else
|
||||||
params.beacon_int = wpa_s->conf->beacon_int;
|
params.beacon_int = wpa_s->conf->beacon_int;
|
||||||
|
@ -19,7 +19,7 @@ Tested-by: Simon Wunderlich <simon.wunderlich@openmesh.com>
|
|||||||
|
|
||||||
--- a/src/drivers/driver.h
|
--- a/src/drivers/driver.h
|
||||||
+++ b/src/drivers/driver.h
|
+++ b/src/drivers/driver.h
|
||||||
@@ -1395,6 +1395,7 @@ struct wpa_driver_mesh_join_params {
|
@@ -1397,6 +1397,7 @@ struct wpa_driver_mesh_join_params {
|
||||||
#define WPA_DRIVER_MESH_FLAG_AMPE 0x00000008
|
#define WPA_DRIVER_MESH_FLAG_AMPE 0x00000008
|
||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
u8 handle_dfs;
|
u8 handle_dfs;
|
||||||
@ -48,7 +48,7 @@ Tested-by: Simon Wunderlich <simon.wunderlich@openmesh.com>
|
|||||||
static int nl80211_put_mesh_config(struct nl_msg *msg,
|
static int nl80211_put_mesh_config(struct nl_msg *msg,
|
||||||
struct wpa_driver_mesh_bss_params *params)
|
struct wpa_driver_mesh_bss_params *params)
|
||||||
{
|
{
|
||||||
@@ -9275,6 +9287,7 @@ static int nl80211_join_mesh(struct i802
|
@@ -9278,6 +9290,7 @@ static int nl80211_join_mesh(struct i802
|
||||||
nl80211_put_basic_rates(msg, params->basic_rates) ||
|
nl80211_put_basic_rates(msg, params->basic_rates) ||
|
||||||
nl80211_put_mesh_id(msg, params->meshid, params->meshid_len) ||
|
nl80211_put_mesh_id(msg, params->meshid, params->meshid_len) ||
|
||||||
nl80211_put_beacon_int(msg, params->beacon_int) ||
|
nl80211_put_beacon_int(msg, params->beacon_int) ||
|
||||||
@ -58,7 +58,7 @@ Tested-by: Simon Wunderlich <simon.wunderlich@openmesh.com>
|
|||||||
|
|
||||||
--- a/wpa_supplicant/mesh.c
|
--- a/wpa_supplicant/mesh.c
|
||||||
+++ b/wpa_supplicant/mesh.c
|
+++ b/wpa_supplicant/mesh.c
|
||||||
@@ -448,6 +448,7 @@ int wpa_supplicant_join_mesh(struct wpa_
|
@@ -456,6 +456,7 @@ int wpa_supplicant_join_mesh(struct wpa_
|
||||||
|
|
||||||
params->meshid = ssid->ssid;
|
params->meshid = ssid->ssid;
|
||||||
params->meshid_len = ssid->ssid_len;
|
params->meshid_len = ssid->ssid_len;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/wpa_supplicant/wpa_supplicant.c
|
--- a/wpa_supplicant/wpa_supplicant.c
|
||||||
+++ b/wpa_supplicant/wpa_supplicant.c
|
+++ b/wpa_supplicant/wpa_supplicant.c
|
||||||
@@ -2095,11 +2095,13 @@ void ibss_mesh_setup_freq(struct wpa_sup
|
@@ -2097,11 +2097,13 @@ void ibss_mesh_setup_freq(struct wpa_sup
|
||||||
for (j = 0; j < wpa_s->last_scan_res_used; j++) {
|
for (j = 0; j < wpa_s->last_scan_res_used; j++) {
|
||||||
struct wpa_bss *bss = wpa_s->last_scan_res[j];
|
struct wpa_bss *bss = wpa_s->last_scan_res[j];
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user