FIX: [hostapd] update hsotapd

id: 415209
This commit is contained in:
Patrick Walther 2023-08-10 11:41:40 +02:00
parent adb94d90b6
commit 1c97fae330
63 changed files with 11511 additions and 1778 deletions

View File

@ -1,4 +1,4 @@
From ae4dbb9e7a3f94a143b9a18e124773a7cb52589b Mon Sep 17 00:00:00 2001 From 21ce83b4ae2b9563175fdb4fc4312096cc399cf8 Mon Sep 17 00:00:00 2001
From: David Bauer <mail@david-bauer.net> From: David Bauer <mail@david-bauer.net>
Date: Wed, 5 May 2021 00:44:34 +0200 Date: Wed, 5 May 2021 00:44:34 +0200
Subject: [PATCH] wolfssl: add RNG to EC key Subject: [PATCH] wolfssl: add RNG to EC key
@ -10,16 +10,13 @@ the EC key when built hardened which is the default.
Set the RNG for the EC key to fix connections for OWE clients. Set the RNG for the EC key to fix connections for OWE clients.
Signed-off-by: David Bauer <mail@david-bauer.net> Signed-off-by: David Bauer <mail@david-bauer.net>
--- ---
src/crypto/crypto_wolfssl.c | 4 ++++ src/crypto/crypto_wolfssl.c | 4 ++++
1 file changed, 4 insertions(+) 1 file changed, 4 insertions(+)
diff --git a/src/crypto/crypto_wolfssl.c b/src/crypto/crypto_wolfssl.c
index f47beebeb..a28349b66 100644
--- a/src/crypto/crypto_wolfssl.c --- a/src/crypto/crypto_wolfssl.c
+++ b/src/crypto/crypto_wolfssl.c +++ b/src/crypto/crypto_wolfssl.c
@@ -1340,6 +1340,7 @@ int ecc_projective_add_point(ecc_point *P, ecc_point *Q, ecc_point *R, @@ -1340,6 +1340,7 @@ int ecc_projective_add_point(ecc_point *
struct crypto_ec { struct crypto_ec {
ecc_key key; ecc_key key;
@ -27,7 +24,7 @@ index f47beebeb..a28349b66 100644
mp_int a; mp_int a;
mp_int prime; mp_int prime;
mp_int order; mp_int order;
@@ -1394,6 +1395,8 @@ struct crypto_ec * crypto_ec_init(int group) @@ -1394,6 +1395,8 @@ struct crypto_ec * crypto_ec_init(int gr
return NULL; return NULL;
if (wc_ecc_init(&e->key) != 0 || if (wc_ecc_init(&e->key) != 0 ||
@ -36,7 +33,7 @@ index f47beebeb..a28349b66 100644
wc_ecc_set_curve(&e->key, 0, curve_id) != 0 || wc_ecc_set_curve(&e->key, 0, curve_id) != 0 ||
mp_init(&e->a) != MP_OKAY || mp_init(&e->a) != MP_OKAY ||
mp_init(&e->prime) != MP_OKAY || mp_init(&e->prime) != MP_OKAY ||
@@ -1425,6 +1428,7 @@ void crypto_ec_deinit(struct crypto_ec* e) @@ -1425,6 +1428,7 @@ void crypto_ec_deinit(struct crypto_ec*
mp_clear(&e->order); mp_clear(&e->order);
mp_clear(&e->prime); mp_clear(&e->prime);
mp_clear(&e->a); mp_clear(&e->a);

View File

@ -1,22 +1,20 @@
From 4b6c9580dae47d20f429f0e2738183969acf29b8 Mon Sep 17 00:00:00 2001 From 8de8cd8380af0c43d4fde67a668d79ef73b26b26 Mon Sep 17 00:00:00 2001
From: Peter Oh <peter.oh@bowerswilkins.com> From: Peter Oh <peter.oh@bowerswilkins.com>
Date: Tue, 30 Jun 2020 14:18:58 +0200 Date: Tue, 30 Jun 2020 14:18:58 +0200
Subject: [PATCH] mesh: Allow DFS channels to be selected if dfs is enabled Subject: [PATCH 10/19] mesh: Allow DFS channels to be selected if dfs is
enabled
Note: DFS is assumed to be usable if a country code has been set Note: DFS is assumed to be usable if a country code has been set
Signed-off-by: Benjamin Berg <benjamin@sipsolutions.net> Signed-off-by: Benjamin Berg <benjamin@sipsolutions.net>
Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com> Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
--- ---
wpa_supplicant/wpa_supplicant.c | 31 ++++++++++++++++++++++--------- wpa_supplicant/wpa_supplicant.c | 25 +++++++++++++++++++------
1 file changed, 22 insertions(+), 9 deletions(-) 1 file changed, 19 insertions(+), 6 deletions(-)
diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
index cf68417ca..fb47942c9 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
@@ -2425,7 +2425,7 @@ static int drv_supports_vht(struct wpa_supplicant *wpa_s, @@ -2638,7 +2638,7 @@ static int drv_supports_vht(struct wpa_s
} }
@ -25,7 +23,7 @@ index cf68417ca..fb47942c9 100644
{ {
int i; int i;
@@ -2434,7 +2434,10 @@ static bool ibss_mesh_is_80mhz_avail(int channel, struct hostapd_hw_modes *mode) @@ -2647,7 +2647,10 @@ static bool ibss_mesh_is_80mhz_avail(int
chan = hw_get_channel_chan(mode, i, NULL); chan = hw_get_channel_chan(mode, i, NULL);
if (!chan || if (!chan ||
@ -37,16 +35,16 @@ index cf68417ca..fb47942c9 100644
return false; return false;
} }
@@ -2463,6 +2466,8 @@ void ibss_mesh_setup_freq(struct wpa_supplicant *wpa_s, @@ -2774,7 +2777,7 @@ static void ibss_mesh_select_40mhz(struc
int chwidth, seg0, seg1; const struct wpa_ssid *ssid,
u32 vht_caps = 0; struct hostapd_hw_modes *mode,
bool is_24ghz, is_6ghz; struct hostapd_freq_params *freq,
+ bool dfs_enabled = wpa_s->conf->country[0] && - int obss_scan) {
+ (wpa_s->drv_flags & WPA_DRIVER_FLAGS_RADAR); + int obss_scan, bool dfs_enabled) {
int chan_idx;
freq->freq = ssid->frequency; struct hostapd_channel_data *pri_chan = NULL, *sec_chan = NULL;
int i, res;
@@ -2559,8 +2564,11 @@ void ibss_mesh_setup_freq(struct wpa_supplicant *wpa_s, @@ -2798,8 +2801,11 @@ static void ibss_mesh_select_40mhz(struc
return; return;
/* Check primary channel flags */ /* Check primary channel flags */
@ -57,9 +55,9 @@ index cf68417ca..fb47942c9 100644
+ if (!dfs_enabled) + if (!dfs_enabled)
+ return; + return;
freq->channel = pri_chan->chan; #ifdef CONFIG_HT_OVERRIDES
if (ssid->disable_ht40)
@@ -2593,8 +2601,11 @@ void ibss_mesh_setup_freq(struct wpa_supplicant *wpa_s, @@ -2825,8 +2831,11 @@ static void ibss_mesh_select_40mhz(struc
return; return;
/* Check secondary channel flags */ /* Check secondary channel flags */
@ -72,25 +70,34 @@ index cf68417ca..fb47942c9 100644
if (ht40 == -1) { if (ht40 == -1) {
if (!(pri_chan->flag & HOSTAPD_CHAN_HT40MINUS)) if (!(pri_chan->flag & HOSTAPD_CHAN_HT40MINUS))
@@ -2683,7 +2694,7 @@ skip_to_6ghz: @@ -2880,7 +2889,7 @@ static bool ibss_mesh_select_80_160mhz(s
return; const struct wpa_ssid *ssid,
struct hostapd_hw_modes *mode,
struct hostapd_freq_params *freq,
- int ieee80211_mode, bool is_6ghz) {
+ int ieee80211_mode, bool is_6ghz, bool dfs_enabled) {
static const int bw80[] = {
5180, 5260, 5500, 5580, 5660, 5745, 5825,
5955, 6035, 6115, 6195, 6275, 6355, 6435,
@@ -2925,7 +2934,7 @@ static bool ibss_mesh_select_80_160mhz(s
goto skip_80mhz;
/* Back to HT configuration if channel not usable */ /* Use 40 MHz if channel not usable */
- if (!ibss_mesh_is_80mhz_avail(channel, mode)) - if (!ibss_mesh_is_80mhz_avail(channel, mode))
+ if (!ibss_mesh_is_80mhz_avail(channel, mode, dfs_enabled)) + if (!ibss_mesh_is_80mhz_avail(channel, mode, dfs_enabled))
return; goto skip_80mhz;
chwidth = CHANWIDTH_80MHZ;
@@ -2697,7 +2708,7 @@ skip_to_6ghz:
* above; check the remaining four 20 MHz channels for the total
* of 160 MHz bandwidth.
*/
- if (!ibss_mesh_is_80mhz_avail(channel + 16, mode))
+ if (!ibss_mesh_is_80mhz_avail(channel + 16, mode, dfs_enabled))
return;
chwidth = CONF_OPER_CHWIDTH_80MHZ;
@@ -2939,7 +2948,7 @@ static bool ibss_mesh_select_80_160mhz(s
if ((mode->he_capab[ieee80211_mode].phy_cap[
HE_PHYCAP_CHANNEL_WIDTH_SET_IDX] &
HE_PHYCAP_CHANNEL_WIDTH_SET_160MHZ_IN_5G) && is_6ghz &&
- ibss_mesh_is_80mhz_avail(channel + 16, mode)) {
+ ibss_mesh_is_80mhz_avail(channel + 16, mode, dfs_enabled)) {
for (j = 0; j < ARRAY_SIZE(bw160); j++) { for (j = 0; j < ARRAY_SIZE(bw160); j++) {
@@ -2727,10 +2738,12 @@ skip_to_6ghz: if (freq->freq == bw160[j]) {
chwidth = CONF_OPER_CHWIDTH_160MHZ;
@@ -2967,10 +2976,12 @@ static bool ibss_mesh_select_80_160mhz(s
if (!chan) if (!chan)
continue; continue;
@ -105,4 +112,24 @@ index cf68417ca..fb47942c9 100644
+ continue; + continue;
/* Found a suitable second segment for 80+80 */ /* Found a suitable second segment for 80+80 */
chwidth = CHANWIDTH_80P80MHZ; chwidth = CONF_OPER_CHWIDTH_80P80MHZ;
@@ -3025,6 +3036,7 @@ void ibss_mesh_setup_freq(struct wpa_sup
int i, obss_scan = 1;
u8 channel;
bool is_6ghz;
+ bool dfs_enabled = wpa_s->conf->country[0] && (wpa_s->drv_flags & WPA_DRIVER_FLAGS_RADAR);
freq->freq = ssid->frequency;
@@ -3070,9 +3082,9 @@ void ibss_mesh_setup_freq(struct wpa_sup
freq->channel = channel;
/* Setup higher BW only for 5 GHz */
if (mode->mode == HOSTAPD_MODE_IEEE80211A) {
- ibss_mesh_select_40mhz(wpa_s, ssid, mode, freq, obss_scan);
+ ibss_mesh_select_40mhz(wpa_s, ssid, mode, freq, obss_scan, dfs_enabled);
if (!ibss_mesh_select_80_160mhz(wpa_s, ssid, mode, freq,
- ieee80211_mode, is_6ghz))
+ ieee80211_mode, is_6ghz, dfs_enabled))
freq->he_enabled = freq->vht_enabled = false;
}

View File

@ -1,7 +1,7 @@
From 1165051d5d5d32340384a6e10f73fa763530aac9 Mon Sep 17 00:00:00 2001 From fc8ea40f6130ac18d9c66797de2cf1d5af55d496 Mon Sep 17 00:00:00 2001
From: Markus Theil <markus.theil@tu-ilmenau.de> From: Markus Theil <markus.theil@tu-ilmenau.de>
Date: Tue, 30 Jun 2020 14:19:07 +0200 Date: Tue, 30 Jun 2020 14:19:07 +0200
Subject: [PATCH] mesh: use deterministic channel on channel switch Subject: [PATCH 19/19] mesh: use deterministic channel on channel switch
This patch uses a deterministic channel on DFS channel switch This patch uses a deterministic channel on DFS channel switch
in mesh networks. Otherwise, when switching to a usable but not in mesh networks. Otherwise, when switching to a usable but not
@ -14,14 +14,11 @@ of the mesh ID, in order to use at least a different number in each
mesh network. mesh network.
Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de> Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de>
--- ---
src/ap/dfs.c | 20 +++++++++++++++++++- src/ap/dfs.c | 20 +++++++++++++++++++-
src/drivers/driver_nl80211.c | 4 ++++ src/drivers/driver_nl80211.c | 4 ++++
2 files changed, 23 insertions(+), 1 deletion(-) 2 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/src/ap/dfs.c b/src/ap/dfs.c
index e46dd7ede..5a0d3497d 100644
--- a/src/ap/dfs.c --- a/src/ap/dfs.c
+++ b/src/ap/dfs.c +++ b/src/ap/dfs.c
@@ -17,6 +17,7 @@ @@ -17,6 +17,7 @@
@ -32,7 +29,7 @@ index e46dd7ede..5a0d3497d 100644
enum dfs_channel_type { enum dfs_channel_type {
@@ -515,9 +516,14 @@ dfs_get_valid_channel(struct hostapd_iface *iface, @@ -521,9 +522,14 @@ dfs_get_valid_channel(struct hostapd_ifa
int num_available_chandefs; int num_available_chandefs;
int chan_idx, chan_idx2; int chan_idx, chan_idx2;
int sec_chan_idx_80p80 = -1; int sec_chan_idx_80p80 = -1;
@ -47,7 +44,7 @@ index e46dd7ede..5a0d3497d 100644
wpa_printf(MSG_DEBUG, "DFS: Selecting random channel"); wpa_printf(MSG_DEBUG, "DFS: Selecting random channel");
*secondary_channel = 0; *secondary_channel = 0;
*oper_centr_freq_seg0_idx = 0; *oper_centr_freq_seg0_idx = 0;
@@ -537,8 +543,20 @@ dfs_get_valid_channel(struct hostapd_iface *iface, @@ -543,8 +549,20 @@ dfs_get_valid_channel(struct hostapd_ifa
if (num_available_chandefs == 0) if (num_available_chandefs == 0)
return NULL; return NULL;
@ -69,11 +66,9 @@ index e46dd7ede..5a0d3497d 100644
chan_idx = _rand % num_available_chandefs; chan_idx = _rand % num_available_chandefs;
dfs_find_channel(iface, &chan, chan_idx, type); dfs_find_channel(iface, &chan, chan_idx, type);
if (!chan) { if (!chan) {
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index 60e44a1a9..d62d685f4 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
@@ -9932,6 +9932,10 @@ static int nl80211_switch_channel(void *priv, struct csa_settings *settings) @@ -10977,6 +10977,10 @@ static int nl80211_switch_channel(void *
if (ret) if (ret)
goto error; goto error;

View File

@ -1,6 +1,6 @@
--- a/src/ap/ieee802_11.c --- a/src/ap/ieee802_11.c
+++ b/src/ap/ieee802_11.c +++ b/src/ap/ieee802_11.c
@@ -4944,6 +4944,13 @@ static int add_associated_sta(struct hos @@ -4601,6 +4601,13 @@ static int add_associated_sta(struct hos
* drivers to accept the STA parameter configuration. Since this is * drivers to accept the STA parameter configuration. Since this is
* after a new FT-over-DS exchange, a new TK has been derived, so key * after a new FT-over-DS exchange, a new TK has been derived, so key
* reinstallation is not a concern for this case. * reinstallation is not a concern for this case.
@ -14,7 +14,7 @@
*/ */
wpa_printf(MSG_DEBUG, "Add associated STA " MACSTR wpa_printf(MSG_DEBUG, "Add associated STA " MACSTR
" (added_unassoc=%d auth_alg=%u ft_over_ds=%u reassoc=%d authorized=%d ft_tk=%d fils_tk=%d)", " (added_unassoc=%d auth_alg=%u ft_over_ds=%u reassoc=%d authorized=%d ft_tk=%d fils_tk=%d)",
@@ -4957,7 +4964,8 @@ static int add_associated_sta(struct hos @@ -4614,7 +4621,8 @@ static int add_associated_sta(struct hos
(!(sta->flags & WLAN_STA_AUTHORIZED) || (!(sta->flags & WLAN_STA_AUTHORIZED) ||
(reassoc && sta->ft_over_ds && sta->auth_alg == WLAN_AUTH_FT) || (reassoc && sta->ft_over_ds && sta->auth_alg == WLAN_AUTH_FT) ||
(!wpa_auth_sta_ft_tk_already_set(sta->wpa_sm) && (!wpa_auth_sta_ft_tk_already_set(sta->wpa_sm) &&

View File

@ -1,4 +1,3 @@
From a035c0a0419a9936e043e90a8c6f66f2ab5f08b5 Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@nbd.name> From: Felix Fietkau <nbd@nbd.name>
Date: Thu, 8 Jul 2021 16:33:03 +0200 Date: Thu, 8 Jul 2021 16:33:03 +0200
Subject: [PATCH] hostapd: fix use of uninitialized stack variables Subject: [PATCH] hostapd: fix use of uninitialized stack variables
@ -11,16 +10,11 @@ seg0/1 remains uninitialized and filled with stack garbage, causing errors
such as "hostapd: 80 MHz: center segment 1 configured" such as "hostapd: 80 MHz: center segment 1 configured"
Signed-off-by: Felix Fietkau <nbd@nbd.name> Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- ---
src/ap/hostapd.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c
index f6fe8a8a0..2b07a9283 100644
--- a/src/ap/hostapd.c --- a/src/ap/hostapd.c
+++ b/src/ap/hostapd.c +++ b/src/ap/hostapd.c
@@ -3453,7 +3453,7 @@ static int hostapd_change_config_freq(struct hostapd_data *hapd, @@ -3764,7 +3764,7 @@ static int hostapd_change_config_freq(st
struct hostapd_freq_params *old_params) struct hostapd_freq_params *old_params)
{ {
int channel; int channel;

View File

@ -1,4 +1,3 @@
From 97eb8d6e7a1b8fe424b9a0cae1985b6057324fe6 Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@nbd.name> From: Felix Fietkau <nbd@nbd.name>
Date: Wed, 28 Jul 2021 05:43:29 +0200 Date: Wed, 28 Jul 2021 05:43:29 +0200
Subject: [PATCH] ndisc_snoop: call dl_list_del before freeing ipv6 addresses Subject: [PATCH] ndisc_snoop: call dl_list_del before freeing ipv6 addresses
@ -6,16 +5,11 @@ Subject: [PATCH] ndisc_snoop: call dl_list_del before freeing ipv6 addresses
Fixes a segmentation fault on sta disconnect Fixes a segmentation fault on sta disconnect
Signed-off-by: Felix Fietkau <nbd@nbd.name> Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- ---
src/ap/ndisc_snoop.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/ap/ndisc_snoop.c b/src/ap/ndisc_snoop.c
index 788c12fdc..bc1eb6251 100644
--- a/src/ap/ndisc_snoop.c --- a/src/ap/ndisc_snoop.c
+++ b/src/ap/ndisc_snoop.c +++ b/src/ap/ndisc_snoop.c
@@ -61,6 +61,7 @@ void sta_ip6addr_del(struct hostapd_data *hapd, struct sta_info *sta) @@ -61,6 +61,7 @@ void sta_ip6addr_del(struct hostapd_data
dl_list_for_each_safe(ip6addr, prev, &sta->ip6addr, struct ip6addr, dl_list_for_each_safe(ip6addr, prev, &sta->ip6addr, struct ip6addr,
list) { list) {
hostapd_drv_br_delete_ip_neigh(hapd, 6, (u8 *) &ip6addr->addr); hostapd_drv_br_delete_ip_neigh(hapd, 6, (u8 *) &ip6addr->addr);

View File

@ -1,4 +1,3 @@
From e5583c6d58d48ab01ee6fcd2086cb60448828cb8 Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@nbd.name> From: Felix Fietkau <nbd@nbd.name>
Date: Wed, 28 Jul 2021 05:49:46 +0200 Date: Wed, 28 Jul 2021 05:49:46 +0200
Subject: [PATCH] driver_nl80211: rewrite neigh code to not depend on Subject: [PATCH] driver_nl80211: rewrite neigh code to not depend on
@ -7,13 +6,8 @@ Subject: [PATCH] driver_nl80211: rewrite neigh code to not depend on
Removes an unnecessary dependency and also makes the code smaller Removes an unnecessary dependency and also makes the code smaller
Signed-off-by: Felix Fietkau <nbd@nbd.name> Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- ---
src/drivers/driver_nl80211.c | 148 ++++++++++++++---------------------
1 file changed, 58 insertions(+), 90 deletions(-)
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index d62d685f4..de6a6c2f6 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
@@ -16,9 +16,6 @@ @@ -16,9 +16,6 @@
@ -26,7 +20,7 @@ index d62d685f4..de6a6c2f6 100644
#include <linux/rtnetlink.h> #include <linux/rtnetlink.h>
#include <netpacket/packet.h> #include <netpacket/packet.h>
#include <linux/errqueue.h> #include <linux/errqueue.h>
@@ -5333,26 +5330,29 @@ fail: @@ -5783,26 +5780,29 @@ fail:
static void rtnl_neigh_delete_fdb_entry(struct i802_bss *bss, const u8 *addr) static void rtnl_neigh_delete_fdb_entry(struct i802_bss *bss, const u8 *addr)
{ {
@ -70,7 +64,7 @@ index d62d685f4..de6a6c2f6 100644
if (err < 0) { if (err < 0) {
wpa_printf(MSG_DEBUG, "nl80211: bridge FDB entry delete for " wpa_printf(MSG_DEBUG, "nl80211: bridge FDB entry delete for "
MACSTR " ifindex=%d failed: %s", MAC2STR(addr), MACSTR " ifindex=%d failed: %s", MAC2STR(addr),
@@ -5362,9 +5362,8 @@ static void rtnl_neigh_delete_fdb_entry(struct i802_bss *bss, const u8 *addr) @@ -5812,9 +5812,8 @@ static void rtnl_neigh_delete_fdb_entry(
MACSTR, MAC2STR(addr)); MACSTR, MAC2STR(addr));
} }
@ -82,7 +76,7 @@ index d62d685f4..de6a6c2f6 100644
} }
@@ -7747,7 +7746,6 @@ static void *i802_init(struct hostapd_data *hapd, @@ -8492,7 +8491,6 @@ static void *i802_init(struct hostapd_da
(params->num_bridge == 0 || !params->bridge[0])) (params->num_bridge == 0 || !params->bridge[0]))
add_ifidx(drv, br_ifindex, drv->ifindex); add_ifidx(drv, br_ifindex, drv->ifindex);
@ -90,7 +84,7 @@ index d62d685f4..de6a6c2f6 100644
if (bss->added_if_into_bridge || bss->already_in_bridge) { if (bss->added_if_into_bridge || bss->already_in_bridge) {
int err; int err;
@@ -7764,7 +7762,6 @@ static void *i802_init(struct hostapd_data *hapd, @@ -8509,7 +8507,6 @@ static void *i802_init(struct hostapd_da
goto failed; goto failed;
} }
} }
@ -98,7 +92,7 @@ index d62d685f4..de6a6c2f6 100644
if (drv->capa.flags2 & WPA_DRIVER_FLAGS2_CONTROL_PORT_RX) { if (drv->capa.flags2 & WPA_DRIVER_FLAGS2_CONTROL_PORT_RX) {
wpa_printf(MSG_DEBUG, wpa_printf(MSG_DEBUG,
@@ -10797,13 +10794,14 @@ static int wpa_driver_br_add_ip_neigh(void *priv, u8 version, @@ -11843,13 +11840,14 @@ static int wpa_driver_br_add_ip_neigh(vo
const u8 *ipaddr, int prefixlen, const u8 *ipaddr, int prefixlen,
const u8 *addr) const u8 *addr)
{ {
@ -118,7 +112,7 @@ index d62d685f4..de6a6c2f6 100644
int res; int res;
if (!ipaddr || prefixlen == 0 || !addr) if (!ipaddr || prefixlen == 0 || !addr)
@@ -10822,85 +10820,66 @@ static int wpa_driver_br_add_ip_neigh(void *priv, u8 version, @@ -11868,85 +11866,66 @@ static int wpa_driver_br_add_ip_neigh(vo
} }
if (version == 4) { if (version == 4) {
@ -226,7 +220,7 @@ index d62d685f4..de6a6c2f6 100644
addrsize = 16; addrsize = 16;
} else { } else {
return -EINVAL; return -EINVAL;
@@ -10918,41 +10897,30 @@ static int wpa_driver_br_delete_ip_neigh(void *priv, u8 version, @@ -11964,41 +11943,30 @@ static int wpa_driver_br_delete_ip_neigh
return -1; return -1;
} }

View File

@ -1,4 +1,3 @@
From 9450fcbac73a7f0eb1bcac4d7dd25d5d9309bb87 Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@nbd.name> From: Felix Fietkau <nbd@nbd.name>
Date: Mon, 18 Feb 2019 12:57:11 +0100 Date: Mon, 18 Feb 2019 12:57:11 +0100
Subject: [PATCH] mesh: allow processing authentication frames in blocked state Subject: [PATCH] mesh: allow processing authentication frames in blocked state
@ -13,16 +12,11 @@ To fix this, allow restarting authentication even if the link is in blocked
state, but don't initiate the attempt until the blocked period is over. state, but don't initiate the attempt until the blocked period is over.
Signed-off-by: Felix Fietkau <nbd@nbd.name> Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- ---
src/ap/ieee802_11.c | 9 ---------
1 file changed, 9 deletions(-)
diff --git a/src/ap/ieee802_11.c b/src/ap/ieee802_11.c
index e0d75498c..8f7e3de21 100644
--- a/src/ap/ieee802_11.c --- a/src/ap/ieee802_11.c
+++ b/src/ap/ieee802_11.c +++ b/src/ap/ieee802_11.c
@@ -3775,15 +3775,6 @@ static void handle_auth(struct hostapd_data *hapd, @@ -3012,15 +3012,6 @@ static void handle_auth(struct hostapd_d
seq_ctrl); seq_ctrl);
return; return;
} }
@ -31,7 +25,7 @@ index e0d75498c..8f7e3de21 100644
- sta->plink_state == PLINK_BLOCKED) { - sta->plink_state == PLINK_BLOCKED) {
- wpa_printf(MSG_DEBUG, "Mesh peer " MACSTR - wpa_printf(MSG_DEBUG, "Mesh peer " MACSTR
- " is blocked - drop Authentication frame", - " is blocked - drop Authentication frame",
- MAC2STR(mgmt->sa)); - MAC2STR(sa));
- return; - return;
- } - }
-#endif /* CONFIG_MESH */ -#endif /* CONFIG_MESH */

View File

@ -1,14 +1,3 @@
From 15ddf28504bf656e6c8de16db69fd0cb9cbf7ae0 Mon Sep 17 00:00:00 2001
From: OpenEmbedded <oe.patch@oe>
Date: Thu, 15 Sep 2022 12:35:24 +0000
---
hostapd/Makefile | 1 +
wpa_supplicant/Makefile | 1 +
2 files changed, 2 insertions(+)
diff --git a/hostapd/Makefile b/hostapd/Makefile
index 73cf28c1a..4e79daa73 100644
--- a/hostapd/Makefile --- a/hostapd/Makefile
+++ b/hostapd/Makefile +++ b/hostapd/Makefile
@@ -324,6 +324,7 @@ ifdef CONFIG_FILS @@ -324,6 +324,7 @@ ifdef CONFIG_FILS
@ -19,11 +8,9 @@ index 73cf28c1a..4e79daa73 100644
NEED_AES_SIV=y NEED_AES_SIV=y
ifdef CONFIG_FILS_SK_PFS ifdef CONFIG_FILS_SK_PFS
CFLAGS += -DCONFIG_FILS_SK_PFS CFLAGS += -DCONFIG_FILS_SK_PFS
diff --git a/wpa_supplicant/Makefile b/wpa_supplicant/Makefile
index a6bcb4c42..707d6dc88 100644
--- a/wpa_supplicant/Makefile --- a/wpa_supplicant/Makefile
+++ b/wpa_supplicant/Makefile +++ b/wpa_supplicant/Makefile
@@ -320,6 +320,7 @@ endif @@ -331,6 +331,7 @@ endif
ifdef CONFIG_FILS ifdef CONFIG_FILS
CFLAGS += -DCONFIG_FILS CFLAGS += -DCONFIG_FILS
NEED_SHA384=y NEED_SHA384=y

View File

@ -1,13 +1,3 @@
From ec89cf6113ab9324e0095b8ea64eb93a3ff98b11 Mon Sep 17 00:00:00 2001
From: Patrick Walther <patrick.walther@netmodule.com>
Date: Fri, 24 Jul 2020 14:41:09 +0200
---
src/utils/os_unix.c | 68 +++++++++++++++++++--------------------------
1 file changed, 28 insertions(+), 40 deletions(-)
diff --git a/src/utils/os_unix.c b/src/utils/os_unix.c
index 258deef9d..5b026f8f6 100644
--- a/src/utils/os_unix.c --- a/src/utils/os_unix.c
+++ b/src/utils/os_unix.c +++ b/src/utils/os_unix.c
@@ -10,6 +10,7 @@ @@ -10,6 +10,7 @@
@ -18,7 +8,7 @@ index 258deef9d..5b026f8f6 100644
#ifdef ANDROID #ifdef ANDROID
#include <sys/capability.h> #include <sys/capability.h>
@@ -188,59 +189,46 @@ int os_gmtime(os_time_t t, struct os_tm *tm) @@ -188,59 +189,46 @@ int os_gmtime(os_time_t t, struct os_tm
return 0; return 0;
} }
@ -76,8 +66,8 @@ index 258deef9d..5b026f8f6 100644
-#else /* __APPLE__ */ -#else /* __APPLE__ */
-#define os_daemon daemon -#define os_daemon daemon
-#endif /* __APPLE__ */ -#endif /* __APPLE__ */
-
-
-int os_daemonize(const char *pid_file) -int os_daemonize(const char *pid_file)
-{ -{
-#if defined(__uClinux__) || defined(__sun__) -#if defined(__uClinux__) || defined(__sun__)

View File

@ -0,0 +1,114 @@
From c8dba4bd750269bcc80fed3d546e2077cb4cdf0e Mon Sep 17 00:00:00 2001
From: Glenn Strauss <gstrauss@gluelogic.com>
Date: Tue, 19 Jul 2022 20:02:21 -0400
Subject: [PATCH 2/7] mbedtls: fips186_2_prf()
Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
---
hostapd/Makefile | 4 ---
src/crypto/crypto_mbedtls.c | 60 +++++++++++++++++++++++++++++++++++++
wpa_supplicant/Makefile | 4 ---
3 files changed, 60 insertions(+), 8 deletions(-)
--- a/hostapd/Makefile
+++ b/hostapd/Makefile
@@ -759,10 +759,6 @@ endif
OBJS += ../src/crypto/crypto_$(CONFIG_CRYPTO).o
HOBJS += ../src/crypto/crypto_$(CONFIG_CRYPTO).o
SOBJS += ../src/crypto/crypto_$(CONFIG_CRYPTO).o
-ifdef NEED_FIPS186_2_PRF
-OBJS += ../src/crypto/fips_prf_internal.o
-SHA1OBJS += ../src/crypto/sha1-internal.o
-endif
ifeq ($(CONFIG_CRYPTO), mbedtls)
ifdef CONFIG_DPP
LIBS += -lmbedx509
--- a/src/crypto/crypto_mbedtls.c
+++ b/src/crypto/crypto_mbedtls.c
@@ -132,6 +132,12 @@
#define CRYPTO_MBEDTLS_HMAC_KDF_SHA512
#endif
+#if defined(EAP_SIM) || defined(EAP_SIM_DYNAMIC) || defined(EAP_SERVER_SIM) \
+ || defined(EAP_AKA) || defined(EAP_AKA_DYNAMIC) || defined(EAP_SERVER_AKA)
+/* EAP_SIM=y EAP_AKA=y */
+#define CRYPTO_MBEDTLS_FIPS186_2_PRF
+#endif
+
#if defined(EAP_FAST) || defined(EAP_FAST_DYNAMIC) || defined(EAP_SERVER_FAST) \
|| defined(EAP_TEAP) || defined(EAP_TEAP_DYNAMIC) || defined(EAP_SERVER_FAST)
#define CRYPTO_MBEDTLS_SHA1_T_PRF
@@ -813,6 +819,60 @@ int sha1_t_prf(const u8 *key, size_t key
#endif /* CRYPTO_MBEDTLS_SHA1_T_PRF */
+#ifdef CRYPTO_MBEDTLS_FIPS186_2_PRF
+
+/* fips_prf_internal.c sha1-internal.c */
+
+/* used only by src/eap_common/eap_sim_common.c:eap_sim_prf()
+ * for eap_sim_derive_keys() and eap_sim_derive_keys_reauth()
+ * where xlen is 160 */
+
+int fips186_2_prf(const u8 *seed, size_t seed_len, u8 *x, size_t xlen)
+{
+ /* FIPS 186-2 + change notice 1 */
+
+ mbedtls_sha1_context ctx;
+ u8 * const xkey = ctx.MBEDTLS_PRIVATE(buffer);
+ u32 * const xstate = ctx.MBEDTLS_PRIVATE(state);
+ const u32 xstate_init[] =
+ { 0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0 };
+
+ mbedtls_sha1_init(&ctx);
+ os_memcpy(xkey, seed, seed_len < 64 ? seed_len : 64);
+
+ /* note: does not fill extra bytes if (xlen % 20) (SHA1_MAC_LEN) */
+ for (; xlen >= 20; xlen -= 20) {
+ /* XSEED_j = 0 */
+ /* XVAL = (XKEY + XSEED_j) mod 2^b */
+
+ /* w_i = G(t, XVAL) */
+ os_memcpy(xstate, xstate_init, sizeof(xstate_init));
+ mbedtls_internal_sha1_process(&ctx, xkey);
+
+ #if __BYTE_ORDER == __LITTLE_ENDIAN
+ xstate[0] = host_to_be32(xstate[0]);
+ xstate[1] = host_to_be32(xstate[1]);
+ xstate[2] = host_to_be32(xstate[2]);
+ xstate[3] = host_to_be32(xstate[3]);
+ xstate[4] = host_to_be32(xstate[4]);
+ #endif
+ os_memcpy(x, xstate, 20);
+ if (xlen == 20) /*(done; skip prep for next loop)*/
+ break;
+
+ /* XKEY = (1 + XKEY + w_i) mod 2^b */
+ for (u32 carry = 1, k = 20; k-- > 0; carry >>= 8)
+ xkey[k] = (carry += xkey[k] + x[k]) & 0xff;
+ x += 20;
+ /* x_j = w_0|w_1 (each pair of iterations through loop)*/
+ }
+
+ mbedtls_sha1_free(&ctx);
+ return 0;
+}
+
+#endif /* CRYPTO_MBEDTLS_FIPS186_2_PRF */
+
#endif /* MBEDTLS_SHA1_C */
--- a/wpa_supplicant/Makefile
+++ b/wpa_supplicant/Makefile
@@ -1174,10 +1174,6 @@ endif
OBJS += ../src/crypto/crypto_$(CONFIG_CRYPTO).o
OBJS_p += ../src/crypto/crypto_$(CONFIG_CRYPTO).o
OBJS_priv += ../src/crypto/crypto_$(CONFIG_CRYPTO).o
-ifdef NEED_FIPS186_2_PRF
-OBJS += ../src/crypto/fips_prf_internal.o
-SHA1OBJS += ../src/crypto/sha1-internal.o
-endif
ifeq ($(CONFIG_CRYPTO), mbedtls)
LIBS += -lmbedcrypto
LIBS_p += -lmbedcrypto

View File

@ -0,0 +1,421 @@
From 31bd19e0e0254b910cccfd3ddc6a6a9222bbcfc0 Mon Sep 17 00:00:00 2001
From: Glenn Strauss <gstrauss@gluelogic.com>
Date: Sun, 9 Oct 2022 05:12:17 -0400
Subject: [PATCH 3/7] mbedtls: annotate with TEST_FAIL() for hwsim tests
Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
---
src/crypto/crypto_mbedtls.c | 124 ++++++++++++++++++++++++++++++++++++
1 file changed, 124 insertions(+)
--- a/src/crypto/crypto_mbedtls.c
+++ b/src/crypto/crypto_mbedtls.c
@@ -280,6 +280,9 @@ __attribute_noinline__
static int md_vector(size_t num_elem, const u8 *addr[], const size_t *len,
u8 *mac, mbedtls_md_type_t md_type)
{
+ if (TEST_FAIL())
+ return -1;
+
mbedtls_md_context_t ctx;
mbedtls_md_init(&ctx);
if (mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(md_type), 0) != 0){
@@ -343,6 +346,9 @@ __attribute_noinline__
static int sha384_512_vector(size_t num_elem, const u8 *addr[],
const size_t *len, u8 *mac, int is384)
{
+ if (TEST_FAIL())
+ return -1;
+
struct mbedtls_sha512_context ctx;
mbedtls_sha512_init(&ctx);
#if MBEDTLS_VERSION_MAJOR >= 3
@@ -375,6 +381,9 @@ int sha384_vector(size_t num_elem, const
#include <mbedtls/sha256.h>
int sha256_vector(size_t num_elem, const u8 *addr[], const size_t *len, u8 *mac)
{
+ if (TEST_FAIL())
+ return -1;
+
struct mbedtls_sha256_context ctx;
mbedtls_sha256_init(&ctx);
#if MBEDTLS_VERSION_MAJOR >= 3
@@ -397,6 +406,9 @@ int sha256_vector(size_t num_elem, const
#include <mbedtls/sha1.h>
int sha1_vector(size_t num_elem, const u8 *addr[], const size_t *len, u8 *mac)
{
+ if (TEST_FAIL())
+ return -1;
+
struct mbedtls_sha1_context ctx;
mbedtls_sha1_init(&ctx);
#if MBEDTLS_VERSION_MAJOR >= 3
@@ -419,6 +431,9 @@ int sha1_vector(size_t num_elem, const u
#include <mbedtls/md5.h>
int md5_vector(size_t num_elem, const u8 *addr[], const size_t *len, u8 *mac)
{
+ if (TEST_FAIL())
+ return -1;
+
struct mbedtls_md5_context ctx;
mbedtls_md5_init(&ctx);
#if MBEDTLS_VERSION_MAJOR >= 3
@@ -441,6 +456,9 @@ int md5_vector(size_t num_elem, const u8
#include <mbedtls/md4.h>
int md4_vector(size_t num_elem, const u8 *addr[], const size_t *len, u8 *mac)
{
+ if (TEST_FAIL())
+ return -1;
+
struct mbedtls_md4_context ctx;
mbedtls_md4_init(&ctx);
mbedtls_md4_starts_ret(&ctx);
@@ -460,6 +478,9 @@ static int hmac_vector(const u8 *key, si
const u8 *addr[], const size_t *len, u8 *mac,
mbedtls_md_type_t md_type)
{
+ if (TEST_FAIL())
+ return -1;
+
mbedtls_md_context_t ctx;
mbedtls_md_init(&ctx);
if (mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(md_type), 1) != 0){
@@ -571,6 +592,9 @@ static int hmac_kdf_expand(const u8 *prk
const char *label, const u8 *info, size_t info_len,
u8 *okm, size_t okm_len, mbedtls_md_type_t md_type)
{
+ if (TEST_FAIL())
+ return -1;
+
const mbedtls_md_info_t *md_info = mbedtls_md_info_from_type(md_type);
#ifdef MBEDTLS_HKDF_C
if (label == NULL) /* RFC 5869 HKDF-Expand when (label == NULL) */
@@ -663,6 +687,9 @@ static int hmac_prf_bits(const u8 *key,
const u8 *data, size_t data_len, u8 *buf,
size_t buf_len_bits, mbedtls_md_type_t md_type)
{
+ if (TEST_FAIL())
+ return -1;
+
mbedtls_md_context_t ctx;
mbedtls_md_init(&ctx);
const mbedtls_md_info_t *md_info = mbedtls_md_info_from_type(md_type);
@@ -938,6 +965,9 @@ int pbkdf2_sha1(const char *passphrase,
static void *aes_crypt_init_mode(const u8 *key, size_t len, int mode)
{
+ if (TEST_FAIL())
+ return NULL;
+
mbedtls_aes_context *aes = os_malloc(sizeof(*aes));
if (!aes)
return NULL;
@@ -996,6 +1026,9 @@ void aes_decrypt_deinit(void *ctx)
/* aes-wrap.c */
int aes_wrap(const u8 *kek, size_t kek_len, int n, const u8 *plain, u8 *cipher)
{
+ if (TEST_FAIL())
+ return -1;
+
mbedtls_nist_kw_context ctx;
mbedtls_nist_kw_init(&ctx);
size_t olen;
@@ -1010,6 +1043,9 @@ int aes_wrap(const u8 *kek, size_t kek_l
/* aes-unwrap.c */
int aes_unwrap(const u8 *kek, size_t kek_len, int n, const u8 *cipher, u8 *plain)
{
+ if (TEST_FAIL())
+ return -1;
+
mbedtls_nist_kw_context ctx;
mbedtls_nist_kw_init(&ctx);
size_t olen;
@@ -1041,6 +1077,9 @@ int omac1_aes_vector(
const u8 *key, size_t key_len, size_t num_elem, const u8 *addr[],
const size_t *len, u8 *mac)
{
+ if (TEST_FAIL())
+ return -1;
+
mbedtls_cipher_type_t cipher_type;
switch (key_len) {
case 16: cipher_type = MBEDTLS_CIPHER_AES_128_ECB; break;
@@ -1103,6 +1142,9 @@ int omac1_aes_256(const u8 *key, const u
/* aes-encblock.c */
int aes_128_encrypt_block(const u8 *key, const u8 *in, u8 *out)
{
+ if (TEST_FAIL())
+ return -1;
+
mbedtls_aes_context aes;
mbedtls_aes_init(&aes);
int ret = mbedtls_aes_setkey_enc(&aes, key, 128)
@@ -1118,6 +1160,9 @@ int aes_128_encrypt_block(const u8 *key,
int aes_ctr_encrypt(const u8 *key, size_t key_len, const u8 *nonce,
u8 *data, size_t data_len)
{
+ if (TEST_FAIL())
+ return -1;
+
unsigned char counter[MBEDTLS_AES_BLOCK_SIZE];
unsigned char stream_block[MBEDTLS_AES_BLOCK_SIZE];
os_memcpy(counter, nonce, MBEDTLS_AES_BLOCK_SIZE);/*(must be writable)*/
@@ -1160,11 +1205,17 @@ static int aes_128_cbc_oper(const u8 *ke
int aes_128_cbc_encrypt(const u8 *key, const u8 *iv, u8 *data, size_t data_len)
{
+ if (TEST_FAIL())
+ return -1;
+
return aes_128_cbc_oper(key, iv, data, data_len, MBEDTLS_AES_ENCRYPT);
}
int aes_128_cbc_decrypt(const u8 *key, const u8 *iv, u8 *data, size_t data_len)
{
+ if (TEST_FAIL())
+ return -1;
+
return aes_128_cbc_oper(key, iv, data, data_len, MBEDTLS_AES_DECRYPT);
}
@@ -1407,6 +1458,10 @@ int crypto_hash_finish(struct crypto_has
}
mbedtls_md_free(mctx);
os_free(mctx);
+
+ if (TEST_FAIL())
+ return -1;
+
return 0;
}
@@ -1421,6 +1476,9 @@ int crypto_hash_finish(struct crypto_has
struct crypto_bignum *crypto_bignum_init(void)
{
+ if (TEST_FAIL())
+ return NULL;
+
mbedtls_mpi *bn = os_malloc(sizeof(*bn));
if (bn)
mbedtls_mpi_init(bn);
@@ -1429,6 +1487,9 @@ struct crypto_bignum *crypto_bignum_init
struct crypto_bignum *crypto_bignum_init_set(const u8 *buf, size_t len)
{
+ if (TEST_FAIL())
+ return NULL;
+
mbedtls_mpi *bn = os_malloc(sizeof(*bn));
if (bn) {
mbedtls_mpi_init(bn);
@@ -1442,6 +1503,9 @@ struct crypto_bignum *crypto_bignum_init
struct crypto_bignum *crypto_bignum_init_uint(unsigned int val)
{
+ if (TEST_FAIL())
+ return NULL;
+
#if 0 /*(hostap use of this interface passes int, not uint)*/
val = host_to_be32(val);
return crypto_bignum_init_set((const u8 *)&val, sizeof(val));
@@ -1467,6 +1531,9 @@ void crypto_bignum_deinit(struct crypto_
int crypto_bignum_to_bin(const struct crypto_bignum *a,
u8 *buf, size_t buflen, size_t padlen)
{
+ if (TEST_FAIL())
+ return -1;
+
size_t n = mbedtls_mpi_size((mbedtls_mpi *)a);
if (n < padlen)
n = padlen;
@@ -1477,6 +1544,9 @@ int crypto_bignum_to_bin(const struct cr
int crypto_bignum_rand(struct crypto_bignum *r, const struct crypto_bignum *m)
{
+ if (TEST_FAIL())
+ return -1;
+
/*assert(r != m);*//* r must not be same as m for mbedtls_mpi_random()*/
#if MBEDTLS_VERSION_NUMBER >= 0x021B0000 /* mbedtls 2.27.0 */
return mbedtls_mpi_random((mbedtls_mpi *)r, 0, (mbedtls_mpi *)m,
@@ -1513,6 +1583,9 @@ int crypto_bignum_exptmod(const struct c
const struct crypto_bignum *c,
struct crypto_bignum *d)
{
+ if (TEST_FAIL())
+ return -1;
+
/* (check if input params match d; d is the result) */
/* (a == d) is ok in current mbedtls implementation */
if (b == d || c == d) { /*(not ok; store result in intermediate)*/
@@ -1540,6 +1613,9 @@ int crypto_bignum_inverse(const struct c
const struct crypto_bignum *b,
struct crypto_bignum *c)
{
+ if (TEST_FAIL())
+ return -1;
+
return mbedtls_mpi_inv_mod((mbedtls_mpi *)c,
(const mbedtls_mpi *)a,
(const mbedtls_mpi *)b) ? -1 : 0;
@@ -1549,6 +1625,9 @@ int crypto_bignum_sub(const struct crypt
const struct crypto_bignum *b,
struct crypto_bignum *c)
{
+ if (TEST_FAIL())
+ return -1;
+
return mbedtls_mpi_sub_mpi((mbedtls_mpi *)c,
(const mbedtls_mpi *)a,
(const mbedtls_mpi *)b) ? -1 : 0;
@@ -1558,6 +1637,9 @@ int crypto_bignum_div(const struct crypt
const struct crypto_bignum *b,
struct crypto_bignum *c)
{
+ if (TEST_FAIL())
+ return -1;
+
/*(most current use of this crypto.h interface has a == c (result),
* so store result in an intermediate to avoid overwritten input)*/
mbedtls_mpi R;
@@ -1575,6 +1657,9 @@ int crypto_bignum_addmod(const struct cr
const struct crypto_bignum *c,
struct crypto_bignum *d)
{
+ if (TEST_FAIL())
+ return -1;
+
return mbedtls_mpi_add_mpi((mbedtls_mpi *)d,
(const mbedtls_mpi *)a,
(const mbedtls_mpi *)b)
@@ -1588,6 +1673,9 @@ int crypto_bignum_mulmod(const struct cr
const struct crypto_bignum *c,
struct crypto_bignum *d)
{
+ if (TEST_FAIL())
+ return -1;
+
return mbedtls_mpi_mul_mpi((mbedtls_mpi *)d,
(const mbedtls_mpi *)a,
(const mbedtls_mpi *)b)
@@ -1600,6 +1688,9 @@ int crypto_bignum_sqrmod(const struct cr
const struct crypto_bignum *b,
struct crypto_bignum *c)
{
+ if (TEST_FAIL())
+ return -1;
+
#if 1
return crypto_bignum_mulmod(a, a, b, c);
#else
@@ -1650,6 +1741,9 @@ int crypto_bignum_is_odd(const struct cr
int crypto_bignum_legendre(const struct crypto_bignum *a,
const struct crypto_bignum *p)
{
+ if (TEST_FAIL())
+ return -2;
+
/* Security Note:
* mbedtls_mpi_exp_mod() is not documented to run in constant time,
* though mbedtls/library/bignum.c uses constant_time_internal.h funcs.
@@ -1702,6 +1796,9 @@ int crypto_mod_exp(const u8 *base, size_
const u8 *modulus, size_t modulus_len,
u8 *result, size_t *result_len)
{
+ if (TEST_FAIL())
+ return -1;
+
mbedtls_mpi bn_base, bn_exp, bn_modulus, bn_result;
mbedtls_mpi_init(&bn_base);
mbedtls_mpi_init(&bn_exp);
@@ -1769,6 +1866,9 @@ static int crypto_mbedtls_dh_init_public
int crypto_dh_init(u8 generator, const u8 *prime, size_t prime_len, u8 *privkey,
u8 *pubkey)
{
+ if (TEST_FAIL())
+ return -1;
+
#if 0 /*(crypto_dh_init() duplicated (and identical) in crypto_*.c modules)*/
size_t pubkey_len, pad;
@@ -1810,6 +1910,9 @@ int crypto_dh_derive_secret(u8 generator
const u8 *pubkey, size_t pubkey_len,
u8 *secret, size_t *len)
{
+ if (TEST_FAIL())
+ return -1;
+
#if 0
if (pubkey_len > prime_len ||
(pubkey_len == prime_len &&
@@ -2512,6 +2615,9 @@ const struct crypto_ec_point * crypto_ec
struct crypto_ec_point *crypto_ec_point_init(struct crypto_ec *e)
{
+ if (TEST_FAIL())
+ return NULL;
+
mbedtls_ecp_point *p = os_malloc(sizeof(*p));
if (p != NULL)
mbedtls_ecp_point_init(p);
@@ -2536,6 +2642,9 @@ int crypto_ec_point_x(struct crypto_ec *
int crypto_ec_point_to_bin(struct crypto_ec *e,
const struct crypto_ec_point *point, u8 *x, u8 *y)
{
+ if (TEST_FAIL())
+ return -1;
+
/* crypto.h documents crypto_ec_point_to_bin() output is big-endian */
size_t len = CRYPTO_EC_plen(e);
if (x) {
@@ -2563,6 +2672,9 @@ int crypto_ec_point_to_bin(struct crypto
struct crypto_ec_point * crypto_ec_point_from_bin(struct crypto_ec *e,
const u8 *val)
{
+ if (TEST_FAIL())
+ return NULL;
+
size_t len = CRYPTO_EC_plen(e);
mbedtls_ecp_point *p = os_malloc(sizeof(*p));
u8 buf[1+MBEDTLS_MPI_MAX_SIZE*2];
@@ -2615,6 +2727,9 @@ int crypto_ec_point_add(struct crypto_ec
const struct crypto_ec_point *b,
struct crypto_ec_point *c)
{
+ if (TEST_FAIL())
+ return -1;
+
/* mbedtls does not provide an mbedtls_ecp_point add function */
mbedtls_mpi one;
mbedtls_mpi_init(&one);
@@ -2631,6 +2746,9 @@ int crypto_ec_point_mul(struct crypto_ec
const struct crypto_bignum *b,
struct crypto_ec_point *res)
{
+ if (TEST_FAIL())
+ return -1;
+
return mbedtls_ecp_mul(
(mbedtls_ecp_group *)e, (mbedtls_ecp_point *)res,
(const mbedtls_mpi *)b, (const mbedtls_ecp_point *)p,
@@ -2639,6 +2757,9 @@ int crypto_ec_point_mul(struct crypto_ec
int crypto_ec_point_invert(struct crypto_ec *e, struct crypto_ec_point *p)
{
+ if (TEST_FAIL())
+ return -1;
+
if (mbedtls_ecp_get_type((mbedtls_ecp_group *)e)
== MBEDTLS_ECP_TYPE_MONTGOMERY) {
/* e.g. MBEDTLS_ECP_DP_CURVE25519 and MBEDTLS_ECP_DP_CURVE448 */
@@ -2751,6 +2872,9 @@ struct crypto_bignum *
crypto_ec_point_compute_y_sqr(struct crypto_ec *e,
const struct crypto_bignum *x)
{
+ if (TEST_FAIL())
+ return NULL;
+
mbedtls_mpi *y2 = os_malloc(sizeof(*y2));
if (y2 == NULL)
return NULL;

View File

@ -0,0 +1,45 @@
From 33afce36c54b0cad38643629ded10ff5d727f077 Mon Sep 17 00:00:00 2001
From: Glenn Strauss <gstrauss@gluelogic.com>
Date: Fri, 12 Aug 2022 05:34:47 -0400
Subject: [PATCH 5/7] add NULL checks (encountered during tests/hwsim)
sae_derive_commit_element_ecc NULL pwe_ecc check
dpp_gen_keypair() NULL curve check
Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
---
src/common/dpp_crypto.c | 6 ++++++
src/common/sae.c | 7 +++++++
2 files changed, 13 insertions(+)
--- a/src/common/dpp_crypto.c
+++ b/src/common/dpp_crypto.c
@@ -269,6 +269,12 @@ int dpp_get_pubkey_hash(struct crypto_ec
struct crypto_ec_key * dpp_gen_keypair(const struct dpp_curve_params *curve)
{
+ if (curve == NULL) {
+ wpa_printf(MSG_DEBUG,
+ "DPP: %s curve must be initialized", __func__);
+ return NULL;
+ }
+
struct crypto_ec_key *key;
wpa_printf(MSG_DEBUG, "DPP: Generating a keypair");
--- a/src/common/sae.c
+++ b/src/common/sae.c
@@ -1278,6 +1278,13 @@ void sae_deinit_pt(struct sae_pt *pt)
static int sae_derive_commit_element_ecc(struct sae_data *sae,
struct crypto_bignum *mask)
{
+ if (sae->tmp->pwe_ecc == NULL) {
+ wpa_printf(MSG_DEBUG,
+ "SAE: %s sae->tmp->pwe_ecc must be initialized",
+ __func__);
+ return -1;
+ }
+
/* COMMIT-ELEMENT = inverse(scalar-op(mask, PWE)) */
if (!sae->tmp->own_commit_element_ecc) {
sae->tmp->own_commit_element_ecc =

View File

@ -0,0 +1,26 @@
From 54211caa2e0e5163aefef390daf88a971367a702 Mon Sep 17 00:00:00 2001
From: Glenn Strauss <gstrauss@gluelogic.com>
Date: Tue, 4 Oct 2022 17:09:24 -0400
Subject: [PATCH 6/7] dpp_pkex: EC point mul w/ value < prime
crypto_ec_point_mul() with mbedtls requires point
be multiplied by a multiplicand with value < prime
Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
---
src/common/dpp_crypto.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
--- a/src/common/dpp_crypto.c
+++ b/src/common/dpp_crypto.c
@@ -1588,7 +1588,9 @@ dpp_pkex_derive_Qr(const struct dpp_curv
Pr = crypto_ec_key_get_public_key(Pr_key);
Qr = crypto_ec_point_init(ec);
hash_bn = crypto_bignum_init_set(hash, curve->hash_len);
- if (!Pr || !Qr || !hash_bn || crypto_ec_point_mul(ec, Pr, hash_bn, Qr))
+ if (!Pr || !Qr || !hash_bn ||
+ crypto_bignum_mod(hash_bn, crypto_ec_get_prime(ec), hash_bn) ||
+ crypto_ec_point_mul(ec, Pr, hash_bn, Qr))
goto fail;
if (crypto_ec_point_is_at_infinity(ec, Qr)) {

View File

@ -1,22 +1,3 @@
From c3efbfb27f3797b84e861a01f3e4f0dadc21966d Mon Sep 17 00:00:00 2001
From: Patrick Walther <patrick.walther@netmodule.com>
Date: Fri, 24 Jul 2020 14:41:09 +0200
---
hostapd/Makefile | 26 ++++++++++++++++++++++----
hostapd/main.c | 7 +++++++
src/ap/drv_callbacks.c | 6 +++---
src/drivers/driver.h | 6 +++---
src/drivers/drivers.c | 4 ++++
wpa_supplicant/Makefile | 29 +++++++++++++++++++++++++++++
wpa_supplicant/eapol_test.c | 11 +++++++++++
wpa_supplicant/events.c | 6 +++---
wpa_supplicant/wpa_priv.c | 8 +++++---
wpa_supplicant/wpa_supplicant.c | 8 +++++++-
10 files changed, 94 insertions(+), 17 deletions(-)
diff --git a/hostapd/Makefile b/hostapd/Makefile
index 4e79daa73..6c34c5f88 100644
--- a/hostapd/Makefile --- a/hostapd/Makefile
+++ b/hostapd/Makefile +++ b/hostapd/Makefile
@@ -1,6 +1,7 @@ @@ -1,6 +1,7 @@
@ -55,7 +36,7 @@ index 4e79daa73..6c34c5f88 100644
LIBS += $(DRV_AP_LIBS) LIBS += $(DRV_AP_LIBS)
ifdef CONFIG_L2_PACKET ifdef CONFIG_L2_PACKET
@@ -1291,6 +1297,12 @@ install: $(addprefix $(DESTDIR)$(BINDIR)/,$(ALL)) @@ -1380,6 +1386,12 @@ install: $(addprefix $(DESTDIR)$(BINDIR)
_OBJS_VAR := OBJS _OBJS_VAR := OBJS
include ../src/objs.mk include ../src/objs.mk
@ -68,7 +49,7 @@ index 4e79daa73..6c34c5f88 100644
hostapd: $(OBJS) hostapd: $(OBJS)
$(Q)$(CC) $(LDFLAGS) -o hostapd $(OBJS) $(LIBS) $(Q)$(CC) $(LDFLAGS) -o hostapd $(OBJS) $(LIBS)
@$(E) " LD " $@ @$(E) " LD " $@
@@ -1365,6 +1377,12 @@ include ../src/objs.mk @@ -1460,6 +1472,12 @@ include ../src/objs.mk
_OBJS_VAR := SOBJS _OBJS_VAR := SOBJS
include ../src/objs.mk include ../src/objs.mk
@ -81,11 +62,229 @@ index 4e79daa73..6c34c5f88 100644
nt_password_hash: $(NOBJS) nt_password_hash: $(NOBJS)
$(Q)$(CC) $(LDFLAGS) -o nt_password_hash $(NOBJS) $(LIBS_n) $(Q)$(CC) $(LDFLAGS) -o nt_password_hash $(NOBJS) $(LIBS_n)
@$(E) " LD " $@ @$(E) " LD " $@
diff --git a/hostapd/main.c b/hostapd/main.c --- a/wpa_supplicant/Makefile
index 21932d1be..6a7b91bf2 100644 +++ b/wpa_supplicant/Makefile
@@ -10,6 +10,7 @@ ALL += dbus/fi.w1.wpa_supplicant1.servic
EXTRA_TARGETS=dynamic_eap_methods
CONFIG_FILE=.config
+-include $(if $(MULTICALL),../hostapd/.config)
include ../src/build.rules
ifdef CONFIG_BUILD_PASN_SO
@@ -382,7 +383,9 @@ endif
ifdef CONFIG_IBSS_RSN
NEED_RSN_AUTHENTICATOR=y
CFLAGS += -DCONFIG_IBSS_RSN
+ifndef MULTICALL
CFLAGS += -DCONFIG_NO_VLAN
+endif
OBJS += ibss_rsn.o
endif
@@ -924,6 +927,10 @@ ifdef CONFIG_DYNAMIC_EAP_METHODS
CFLAGS += -DCONFIG_DYNAMIC_EAP_METHODS
LIBS += -ldl -rdynamic
endif
+else
+ ifdef MULTICALL
+ OBJS += ../src/eap_common/eap_common.o
+ endif
endif
ifdef CONFIG_AP
@@ -931,9 +938,11 @@ NEED_EAP_COMMON=y
NEED_RSN_AUTHENTICATOR=y
CFLAGS += -DCONFIG_AP
OBJS += ap.o
+ifndef MULTICALL
CFLAGS += -DCONFIG_NO_RADIUS
CFLAGS += -DCONFIG_NO_ACCOUNTING
CFLAGS += -DCONFIG_NO_VLAN
+endif
OBJS += ../src/ap/hostapd.o
OBJS += ../src/ap/wpa_auth_glue.o
OBJS += ../src/ap/utils.o
@@ -1022,6 +1031,12 @@ endif
ifdef CONFIG_HS20
OBJS += ../src/ap/hs20.o
endif
+else
+ ifdef MULTICALL
+ OBJS += ../src/eap_server/eap_server.o
+ OBJS += ../src/eap_server/eap_server_identity.o
+ OBJS += ../src/eap_server/eap_server_methods.o
+ endif
endif
ifdef CONFIG_MBO
@@ -1030,7 +1045,9 @@ CFLAGS += -DCONFIG_MBO
endif
ifdef NEED_RSN_AUTHENTICATOR
+ifndef MULTICALL
CFLAGS += -DCONFIG_NO_RADIUS
+endif
NEED_AES_WRAP=y
OBJS += ../src/ap/wpa_auth.o
OBJS += ../src/ap/wpa_auth_ie.o
@@ -2010,6 +2027,12 @@ wpa_priv: $(BCHECK) $(OBJS_priv)
_OBJS_VAR := OBJS
include ../src/objs.mk
+wpa_supplicant_multi.a: .config $(BCHECK) $(OBJS) $(EXTRA_progs)
+ $(Q)$(CC) -c -o wpa_supplicant_multi.o -Dmain=wpa_supplicant_main $(CFLAGS) main.c
+ @$(E) " CC " $<
+ @rm -f $@
+ @$(AR) cr $@ wpa_supplicant_multi.o $(OBJS)
+
wpa_supplicant: $(BCHECK) $(OBJS) $(EXTRA_progs)
$(Q)$(LDO) $(LDFLAGS) -o wpa_supplicant $(OBJS) $(LIBS) $(EXTRALIBS)
@$(E) " LD " $@
@@ -2142,6 +2165,12 @@ eap_gpsk.so: $(SRC_EAP_GPSK)
$(Q)sed -e 's|\@BINDIR\@|$(BINDIR)|g' $< >$@
@$(E) " sed" $<
+dump_cflags:
+ @printf "%s " "$(CFLAGS)"
+
+dump_ldflags:
+ @printf "%s " "$(LDFLAGS) $(LIBS) $(EXTRALIBS)"
+
wpa_supplicant.exe: wpa_supplicant
mv -f $< $@
wpa_cli.exe: wpa_cli
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
@@ -6651,8 +6651,8 @@ union wpa_event_data {
* Driver wrapper code should call this function whenever an event is received
* from the driver.
*/
-void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
- union wpa_event_data *data);
+extern void (*wpa_supplicant_event)(void *ctx, enum wpa_event_type event,
+ union wpa_event_data *data);
/**
* wpa_supplicant_event_global - Report a driver event for wpa_supplicant
@@ -6664,7 +6664,7 @@ void wpa_supplicant_event(void *ctx, enu
* Same as wpa_supplicant_event(), but we search for the interface in
* wpa_global.
*/
-void wpa_supplicant_event_global(void *ctx, enum wpa_event_type event,
+extern void (*wpa_supplicant_event_global)(void *ctx, enum wpa_event_type event,
union wpa_event_data *data);
/*
--- a/src/ap/drv_callbacks.c
+++ b/src/ap/drv_callbacks.c
@@ -1994,8 +1994,8 @@ err:
#endif /* CONFIG_OWE */
-void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
- union wpa_event_data *data)
+void hostapd_wpa_event(void *ctx, enum wpa_event_type event,
+ union wpa_event_data *data)
{
struct hostapd_data *hapd = ctx;
#ifndef CONFIG_NO_STDOUT_DEBUG
@@ -2271,7 +2271,7 @@ void wpa_supplicant_event(void *ctx, enu
}
-void wpa_supplicant_event_global(void *ctx, enum wpa_event_type event,
+void hostapd_wpa_event_global(void *ctx, enum wpa_event_type event,
union wpa_event_data *data)
{
struct hapd_interfaces *interfaces = ctx;
--- a/wpa_supplicant/wpa_priv.c
+++ b/wpa_supplicant/wpa_priv.c
@@ -1039,8 +1039,8 @@ static void wpa_priv_send_ft_response(st
}
-void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
- union wpa_event_data *data)
+static void supplicant_event(void *ctx, enum wpa_event_type event,
+ union wpa_event_data *data)
{
struct wpa_priv_interface *iface = ctx;
@@ -1103,7 +1103,7 @@ void wpa_supplicant_event(void *ctx, enu
}
-void wpa_supplicant_event_global(void *ctx, enum wpa_event_type event,
+void supplicant_event_global(void *ctx, enum wpa_event_type event,
union wpa_event_data *data)
{
struct wpa_priv_global *global = ctx;
@@ -1217,6 +1217,8 @@ int main(int argc, char *argv[])
if (os_program_init())
return -1;
+ wpa_supplicant_event = supplicant_event;
+ wpa_supplicant_event_global = supplicant_event_global;
wpa_priv_fd_workaround();
os_memset(&global, 0, sizeof(global));
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -5345,8 +5345,8 @@ static void wpas_link_reconfig(struct wp
}
-void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
- union wpa_event_data *data)
+void supplicant_event(void *ctx, enum wpa_event_type event,
+ union wpa_event_data *data)
{
struct wpa_supplicant *wpa_s = ctx;
int resched;
@@ -6264,7 +6264,7 @@ void wpa_supplicant_event(void *ctx, enu
}
-void wpa_supplicant_event_global(void *ctx, enum wpa_event_type event,
+void supplicant_event_global(void *ctx, enum wpa_event_type event,
union wpa_event_data *data)
{
struct wpa_supplicant *wpa_s;
--- a/wpa_supplicant/wpa_supplicant.c
+++ b/wpa_supplicant/wpa_supplicant.c
@@ -7435,7 +7435,6 @@ struct wpa_interface * wpa_supplicant_ma
return NULL;
}
-
/**
* wpa_supplicant_match_existing - Match existing interfaces
* @global: Pointer to global data from wpa_supplicant_init()
@@ -7470,6 +7469,11 @@ static int wpa_supplicant_match_existing
#endif /* CONFIG_MATCH_IFACE */
+extern void supplicant_event(void *ctx, enum wpa_event_type event,
+ union wpa_event_data *data);
+
+extern void supplicant_event_global(void *ctx, enum wpa_event_type event,
+ union wpa_event_data *data);
/**
* wpa_supplicant_add_iface - Add a new network interface
@@ -7726,6 +7730,8 @@ struct wpa_global * wpa_supplicant_init(
#ifndef CONFIG_NO_WPA_MSG
wpa_msg_register_ifname_cb(wpa_supplicant_msg_ifname_cb);
#endif /* CONFIG_NO_WPA_MSG */
+ wpa_supplicant_event = supplicant_event;
+ wpa_supplicant_event_global = supplicant_event_global;
if (params->wpa_debug_file_path)
wpa_debug_open_file(params->wpa_debug_file_path);
--- a/hostapd/main.c --- a/hostapd/main.c
+++ b/hostapd/main.c +++ b/hostapd/main.c
@@ -591,6 +591,11 @@ fail: @@ -685,6 +685,11 @@ fail:
return -1; return -1;
} }
@ -97,7 +296,7 @@ index 21932d1be..6a7b91bf2 100644
#ifdef CONFIG_WPS #ifdef CONFIG_WPS
static int gen_uuid(const char *txt_addr) static int gen_uuid(const char *txt_addr)
@@ -684,6 +689,8 @@ int main(int argc, char *argv[]) @@ -778,6 +783,8 @@ int main(int argc, char *argv[])
return -1; return -1;
#endif /* CONFIG_DPP */ #endif /* CONFIG_DPP */
@ -106,56 +305,6 @@ index 21932d1be..6a7b91bf2 100644
for (;;) { for (;;) {
c = getopt(argc, argv, "b:Bde:f:hi:KP:sSTtu:vg:G:q"); c = getopt(argc, argv, "b:Bde:f:hi:KP:sSTtu:vg:G:q");
if (c < 0) if (c < 0)
diff --git a/src/ap/drv_callbacks.c b/src/ap/drv_callbacks.c
index fff8bb3e5..4d70939ef 100644
--- a/src/ap/drv_callbacks.c
+++ b/src/ap/drv_callbacks.c
@@ -1855,8 +1855,8 @@ err:
#endif /* CONFIG_OWE */
-void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
- union wpa_event_data *data)
+void hostapd_wpa_event(void *ctx, enum wpa_event_type event,
+ union wpa_event_data *data)
{
struct hostapd_data *hapd = ctx;
#ifndef CONFIG_NO_STDOUT_DEBUG
@@ -2128,7 +2128,7 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
}
-void wpa_supplicant_event_global(void *ctx, enum wpa_event_type event,
+void hostapd_wpa_event_global(void *ctx, enum wpa_event_type event,
union wpa_event_data *data)
{
struct hapd_interfaces *interfaces = ctx;
diff --git a/src/drivers/driver.h b/src/drivers/driver.h
index f069b74e1..f8f91c023 100644
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
@@ -6168,8 +6168,8 @@ union wpa_event_data {
* Driver wrapper code should call this function whenever an event is received
* from the driver.
*/
-void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
- union wpa_event_data *data);
+extern void (*wpa_supplicant_event)(void *ctx, enum wpa_event_type event,
+ union wpa_event_data *data);
/**
* wpa_supplicant_event_global - Report a driver event for wpa_supplicant
@@ -6181,7 +6181,7 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
* Same as wpa_supplicant_event(), but we search for the interface in
* wpa_global.
*/
-void wpa_supplicant_event_global(void *ctx, enum wpa_event_type event,
+extern void (*wpa_supplicant_event_global)(void *ctx, enum wpa_event_type event,
union wpa_event_data *data);
/*
diff --git a/src/drivers/drivers.c b/src/drivers/drivers.c
index e95df6ddb..9071da3cf 100644
--- a/src/drivers/drivers.c --- a/src/drivers/drivers.c
+++ b/src/drivers/drivers.c +++ b/src/drivers/drivers.c
@@ -10,6 +10,10 @@ @@ -10,6 +10,10 @@
@ -169,102 +318,6 @@ index e95df6ddb..9071da3cf 100644
const struct wpa_driver_ops *const wpa_drivers[] = const struct wpa_driver_ops *const wpa_drivers[] =
{ {
diff --git a/wpa_supplicant/Makefile b/wpa_supplicant/Makefile
index 707d6dc88..f7740e6f0 100644
--- a/wpa_supplicant/Makefile
+++ b/wpa_supplicant/Makefile
@@ -10,6 +10,7 @@ ALL += dbus/fi.w1.wpa_supplicant1.service
EXTRA_TARGETS=dynamic_eap_methods
CONFIG_FILE=.config
+-include $(if $(MULTICALL),../hostapd/.config)
include ../src/build.rules
ifdef CONFIG_BUILD_WPA_CLIENT_SO
@@ -371,7 +372,9 @@ endif
ifdef CONFIG_IBSS_RSN
NEED_RSN_AUTHENTICATOR=y
CFLAGS += -DCONFIG_IBSS_RSN
+ifndef MULTICALL
CFLAGS += -DCONFIG_NO_VLAN
+endif
OBJS += ibss_rsn.o
endif
@@ -912,6 +915,10 @@ ifdef CONFIG_DYNAMIC_EAP_METHODS
CFLAGS += -DCONFIG_DYNAMIC_EAP_METHODS
LIBS += -ldl -rdynamic
endif
+else
+ ifdef MULTICALL
+ OBJS += ../src/eap_common/eap_common.o
+ endif
endif
ifdef CONFIG_AP
@@ -919,9 +926,11 @@ NEED_EAP_COMMON=y
NEED_RSN_AUTHENTICATOR=y
CFLAGS += -DCONFIG_AP
OBJS += ap.o
+ifndef MULTICALL
CFLAGS += -DCONFIG_NO_RADIUS
CFLAGS += -DCONFIG_NO_ACCOUNTING
CFLAGS += -DCONFIG_NO_VLAN
+endif
OBJS += ../src/ap/hostapd.o
OBJS += ../src/ap/wpa_auth_glue.o
OBJS += ../src/ap/utils.o
@@ -1008,6 +1017,12 @@ endif
ifdef CONFIG_HS20
OBJS += ../src/ap/hs20.o
endif
+else
+ ifdef MULTICALL
+ OBJS += ../src/eap_server/eap_server.o
+ OBJS += ../src/eap_server/eap_server_identity.o
+ OBJS += ../src/eap_server/eap_server_methods.o
+ endif
endif
ifdef CONFIG_MBO
@@ -1016,7 +1031,9 @@ CFLAGS += -DCONFIG_MBO
endif
ifdef NEED_RSN_AUTHENTICATOR
+ifndef MULTICALL
CFLAGS += -DCONFIG_NO_RADIUS
+endif
NEED_AES_WRAP=y
OBJS += ../src/ap/wpa_auth.o
OBJS += ../src/ap/wpa_auth_ie.o
@@ -1920,6 +1937,12 @@ wpa_priv: $(BCHECK) $(OBJS_priv)
_OBJS_VAR := OBJS
include ../src/objs.mk
+wpa_supplicant_multi.a: .config $(BCHECK) $(OBJS) $(EXTRA_progs)
+ $(Q)$(CC) -c -o wpa_supplicant_multi.o -Dmain=wpa_supplicant_main $(CFLAGS) main.c
+ @$(E) " CC " $<
+ @rm -f $@
+ @$(AR) cr $@ wpa_supplicant_multi.o $(OBJS)
+
wpa_supplicant: $(BCHECK) $(OBJS) $(EXTRA_progs)
$(Q)$(LDO) $(LDFLAGS) -o wpa_supplicant $(OBJS) $(LIBS) $(EXTRALIBS)
@$(E) " LD " $@
@@ -2052,6 +2075,12 @@ eap_gpsk.so: $(SRC_EAP_GPSK)
$(Q)sed -e 's|\@BINDIR\@|$(BINDIR)|g' $< >$@
@$(E) " sed" $<
+dump_cflags:
+ @printf "%s " "$(CFLAGS)"
+
+dump_ldflags:
+ @printf "%s " "$(LDFLAGS) $(LIBS) $(EXTRALIBS)"
+
wpa_supplicant.exe: wpa_supplicant
mv -f $< $@
wpa_cli.exe: wpa_cli
diff --git a/wpa_supplicant/eapol_test.c b/wpa_supplicant/eapol_test.c
index efec31c65..ca6faacf2 100644
--- a/wpa_supplicant/eapol_test.c --- a/wpa_supplicant/eapol_test.c
+++ b/wpa_supplicant/eapol_test.c +++ b/wpa_supplicant/eapol_test.c
@@ -31,7 +31,12 @@ @@ -31,7 +31,12 @@
@ -300,93 +353,3 @@ index efec31c65..ca6faacf2 100644
hostapd_logger_register_cb(hostapd_logger_cb); hostapd_logger_register_cb(hostapd_logger_cb);
os_memset(&eapol_test, 0, sizeof(eapol_test)); os_memset(&eapol_test, 0, sizeof(eapol_test));
diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index ec56cfdc0..48aa792b3 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -4953,8 +4953,8 @@ static void wpas_event_unprot_beacon(struct wpa_supplicant *wpa_s,
}
-void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
- union wpa_event_data *data)
+void supplicant_event(void *ctx, enum wpa_event_type event,
+ union wpa_event_data *data)
{
struct wpa_supplicant *wpa_s = ctx;
int resched;
@@ -5813,7 +5813,7 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
}
-void wpa_supplicant_event_global(void *ctx, enum wpa_event_type event,
+void supplicant_event_global(void *ctx, enum wpa_event_type event,
union wpa_event_data *data)
{
struct wpa_supplicant *wpa_s;
diff --git a/wpa_supplicant/wpa_priv.c b/wpa_supplicant/wpa_priv.c
index ff1fb6702..731325929 100644
--- a/wpa_supplicant/wpa_priv.c
+++ b/wpa_supplicant/wpa_priv.c
@@ -1038,8 +1038,8 @@ static void wpa_priv_send_ft_response(struct wpa_priv_interface *iface,
}
-void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
- union wpa_event_data *data)
+static void supplicant_event(void *ctx, enum wpa_event_type event,
+ union wpa_event_data *data)
{
struct wpa_priv_interface *iface = ctx;
@@ -1102,7 +1102,7 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
}
-void wpa_supplicant_event_global(void *ctx, enum wpa_event_type event,
+void supplicant_event_global(void *ctx, enum wpa_event_type event,
union wpa_event_data *data)
{
struct wpa_priv_global *global = ctx;
@@ -1216,6 +1216,8 @@ int main(int argc, char *argv[])
if (os_program_init())
return -1;
+ wpa_supplicant_event = supplicant_event;
+ wpa_supplicant_event_global = supplicant_event_global;
wpa_priv_fd_workaround();
os_memset(&global, 0, sizeof(global));
diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
index fb47942c9..b00a24792 100644
--- a/wpa_supplicant/wpa_supplicant.c
+++ b/wpa_supplicant/wpa_supplicant.c
@@ -7073,7 +7073,6 @@ struct wpa_interface * wpa_supplicant_match_iface(struct wpa_global *global,
return NULL;
}
-
/**
* wpa_supplicant_match_existing - Match existing interfaces
* @global: Pointer to global data from wpa_supplicant_init()
@@ -7108,6 +7107,11 @@ static int wpa_supplicant_match_existing(struct wpa_global *global)
#endif /* CONFIG_MATCH_IFACE */
+extern void supplicant_event(void *ctx, enum wpa_event_type event,
+ union wpa_event_data *data);
+
+extern void supplicant_event_global(void *ctx, enum wpa_event_type event,
+ union wpa_event_data *data);
/**
* wpa_supplicant_add_iface - Add a new network interface
@@ -7364,6 +7368,8 @@ struct wpa_global * wpa_supplicant_init(struct wpa_params *params)
#ifndef CONFIG_NO_WPA_MSG
wpa_msg_register_ifname_cb(wpa_supplicant_msg_ifname_cb);
#endif /* CONFIG_NO_WPA_MSG */
+ wpa_supplicant_event = supplicant_event;
+ wpa_supplicant_event_global = supplicant_event_global;
if (params->wpa_debug_file_path)
wpa_debug_open_file(params->wpa_debug_file_path);

View File

@ -1,19 +1,6 @@
From 1a55572f699610d356997da020bcfb65da6d2dc5 Mon Sep 17 00:00:00 2001
From: Patrick Walther <patrick.walther@netmodule.com>
Date: Fri, 24 Jul 2020 14:41:09 +0200
---
hostapd/config_file.c | 4 ++++
src/ap/ap_config.h | 2 ++
src/ap/hw_features.c | 3 ++-
src/ap/ieee802_11_ht.c | 6 ++++++
4 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/hostapd/config_file.c b/hostapd/config_file.c
index 8a86ce08b..03b902076 100644
--- a/hostapd/config_file.c --- a/hostapd/config_file.c
+++ b/hostapd/config_file.c +++ b/hostapd/config_file.c
@@ -3435,6 +3435,10 @@ static int hostapd_config_fill(struct hostapd_config *conf, @@ -3446,6 +3446,10 @@ static int hostapd_config_fill(struct ho
if (bss->ocv && !bss->ieee80211w) if (bss->ocv && !bss->ieee80211w)
bss->ieee80211w = 1; bss->ieee80211w = 1;
#endif /* CONFIG_OCV */ #endif /* CONFIG_OCV */
@ -24,11 +11,9 @@ index 8a86ce08b..03b902076 100644
} else if (os_strcmp(buf, "ieee80211n") == 0) { } else if (os_strcmp(buf, "ieee80211n") == 0) {
conf->ieee80211n = atoi(pos); conf->ieee80211n = atoi(pos);
} else if (os_strcmp(buf, "ht_capab") == 0) { } else if (os_strcmp(buf, "ht_capab") == 0) {
diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h
index 805ea93df..58dd2cfed 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
@@ -1040,6 +1040,8 @@ struct hostapd_config { @@ -1072,6 +1072,8 @@ struct hostapd_config {
int ht_op_mode_fixed; int ht_op_mode_fixed;
u16 ht_capab; u16 ht_capab;
@ -37,11 +22,9 @@ index 805ea93df..58dd2cfed 100644
int ieee80211n; int ieee80211n;
int secondary_channel; int secondary_channel;
int no_pri_sec_switch; int no_pri_sec_switch;
diff --git a/src/ap/hw_features.c b/src/ap/hw_features.c
index 4b66b02f4..2b66ab563 100644
--- a/src/ap/hw_features.c --- a/src/ap/hw_features.c
+++ b/src/ap/hw_features.c +++ b/src/ap/hw_features.c
@@ -517,7 +517,8 @@ static int ieee80211n_check_40mhz(struct hostapd_iface *iface) @@ -517,7 +517,8 @@ static int ieee80211n_check_40mhz(struct
int ret; int ret;
/* Check that HT40 is used and PRI / SEC switch is allowed */ /* Check that HT40 is used and PRI / SEC switch is allowed */
@ -51,11 +34,9 @@ index 4b66b02f4..2b66ab563 100644
return 0; return 0;
hostapd_set_state(iface, HAPD_IFACE_HT_SCAN); hostapd_set_state(iface, HAPD_IFACE_HT_SCAN);
diff --git a/src/ap/ieee802_11_ht.c b/src/ap/ieee802_11_ht.c
index 59ecbdce7..ebe2e5acd 100644
--- a/src/ap/ieee802_11_ht.c --- a/src/ap/ieee802_11_ht.c
+++ b/src/ap/ieee802_11_ht.c +++ b/src/ap/ieee802_11_ht.c
@@ -230,6 +230,9 @@ void hostapd_2040_coex_action(struct hostapd_data *hapd, @@ -230,6 +230,9 @@ void hostapd_2040_coex_action(struct hos
return; return;
} }
@ -65,7 +46,7 @@ index 59ecbdce7..ebe2e5acd 100644
if (len < IEEE80211_HDRLEN + 2 + sizeof(*bc_ie)) { if (len < IEEE80211_HDRLEN + 2 + sizeof(*bc_ie)) {
wpa_printf(MSG_DEBUG, wpa_printf(MSG_DEBUG,
"Ignore too short 20/40 BSS Coexistence Management frame"); "Ignore too short 20/40 BSS Coexistence Management frame");
@@ -390,6 +393,9 @@ void ht40_intolerant_add(struct hostapd_iface *iface, struct sta_info *sta) @@ -390,6 +393,9 @@ void ht40_intolerant_add(struct hostapd_
if (iface->current_mode->mode != HOSTAPD_MODE_IEEE80211G) if (iface->current_mode->mode != HOSTAPD_MODE_IEEE80211G)
return; return;

View File

@ -1,20 +1,6 @@
From 0c333b13dfbf5a04e94cda26948e5dc48803e723 Mon Sep 17 00:00:00 2001
From: Patrick Walther <patrick.walther@netmodule.com>
Date: Fri, 24 Jul 2020 14:41:09 +0200
---
wpa_supplicant/config.c | 1 +
wpa_supplicant/config_file.c | 1 +
wpa_supplicant/config_ssid.h | 2 ++
wpa_supplicant/mesh.c | 2 ++
wpa_supplicant/wpa_supplicant.c | 6 +++---
5 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c
index bfbc46000..ec8301ab9 100644
--- a/wpa_supplicant/config.c --- a/wpa_supplicant/config.c
+++ b/wpa_supplicant/config.c +++ b/wpa_supplicant/config.c
@@ -2531,6 +2531,7 @@ static const struct parse_data ssid_fields[] = { @@ -2600,6 +2600,7 @@ static const struct parse_data ssid_fiel
#else /* CONFIG_MESH */ #else /* CONFIG_MESH */
{ INT_RANGE(mode, 0, 4) }, { INT_RANGE(mode, 0, 4) },
#endif /* CONFIG_MESH */ #endif /* CONFIG_MESH */
@ -22,11 +8,9 @@ index bfbc46000..ec8301ab9 100644
{ 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) },
diff --git a/wpa_supplicant/config_file.c b/wpa_supplicant/config_file.c
index c0763253f..93fc014e4 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
@@ -766,6 +766,7 @@ static void wpa_config_write_network(FILE *f, struct wpa_ssid *ssid) @@ -775,6 +775,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);
@ -34,24 +18,9 @@ index c0763253f..93fc014e4 100644
INT(mesh_fwding); INT(mesh_fwding);
INT(frequency); INT(frequency);
INT(enable_edmg); INT(enable_edmg);
diff --git a/wpa_supplicant/config_ssid.h b/wpa_supplicant/config_ssid.h
index 9b17c3b14..d5c90122a 100644
--- a/wpa_supplicant/config_ssid.h
+++ b/wpa_supplicant/config_ssid.h
@@ -981,6 +981,8 @@ struct wpa_ssid {
*/
int no_auto_peer;
+ int noscan;
+
/**
* mesh_rssi_threshold - Set mesh parameter mesh_rssi_threshold (dBm)
*
diff --git a/wpa_supplicant/mesh.c b/wpa_supplicant/mesh.c
index b67396d5a..ad067da67 100644
--- a/wpa_supplicant/mesh.c --- a/wpa_supplicant/mesh.c
+++ b/wpa_supplicant/mesh.c +++ b/wpa_supplicant/mesh.c
@@ -506,6 +506,8 @@ static int wpa_supplicant_mesh_init(struct wpa_supplicant *wpa_s, @@ -506,6 +506,8 @@ static int wpa_supplicant_mesh_init(stru
frequency); frequency);
goto out_free; goto out_free;
} }
@ -60,34 +29,43 @@ index b67396d5a..ad067da67 100644
if (ssid->mesh_basic_rates == NULL) { if (ssid->mesh_basic_rates == NULL) {
/* /*
diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
index b00a24792..bc2d4012d 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
@@ -2452,7 +2452,7 @@ void ibss_mesh_setup_freq(struct wpa_supplicant *wpa_s, @@ -2710,7 +2710,7 @@ static bool ibss_mesh_can_use_vht(struct
const struct wpa_ssid *ssid,
struct hostapd_hw_modes *mode)
{
- if (mode->mode != HOSTAPD_MODE_IEEE80211A)
+ if (mode->mode != HOSTAPD_MODE_IEEE80211A && !(ssid->noscan))
return false;
if (!drv_supports_vht(wpa_s, ssid))
@@ -2783,7 +2783,7 @@ static void ibss_mesh_select_40mhz(struc
int i, res;
unsigned int j;
static const int ht40plus[] = {
- 36, 44, 52, 60, 100, 108, 116, 124, 132, 149, 157, 165, 173,
+ 1, 2, 3, 4, 5, 6, 36, 44, 52, 60, 100, 108, 116, 124, 132, 149, 157, 165, 173,
184, 192
};
int ht40 = -1;
@@ -3033,7 +3033,7 @@ void ibss_mesh_setup_freq(struct wpa_sup
int ieee80211_mode = wpas_mode_to_ieee80211_mode(ssid->mode); int ieee80211_mode = wpas_mode_to_ieee80211_mode(ssid->mode);
enum hostapd_hw_mode hw_mode; enum hostapd_hw_mode hw_mode;
struct hostapd_hw_modes *mode = NULL; struct hostapd_hw_modes *mode = NULL;
- int ht40plus[] = { 36, 44, 52, 60, 100, 108, 116, 124, 132, 149, 157, - int i, obss_scan = 1;
+ int ht40plus[] = { 1, 2, 3, 4, 5, 6, 36, 44, 52, 60, 100, 108, 116, 124, 132, 149, 157, + int i, obss_scan = !(ssid->noscan);
184, 192 };
int bw80[] = { 5180, 5260, 5500, 5580, 5660, 5745, 5955,
6035, 6115, 6195, 6275, 6355, 6435, 6515,
@@ -2460,7 +2460,7 @@ void ibss_mesh_setup_freq(struct wpa_supplicant *wpa_s,
int bw160[] = { 5955, 6115, 6275, 6435, 6595, 6755, 6915 };
struct hostapd_channel_data *pri_chan = NULL, *sec_chan = NULL;
u8 channel; u8 channel;
- int i, chan_idx, ht40 = -1, res, obss_scan = 1; bool is_6ghz;
+ int i, chan_idx, ht40 = -1, res, obss_scan = !(ssid->noscan); bool dfs_enabled = wpa_s->conf->country[0] && (wpa_s->drv_flags & WPA_DRIVER_FLAGS_RADAR);
unsigned int j, k; --- a/wpa_supplicant/config_ssid.h
struct hostapd_freq_params vht_freq; +++ b/wpa_supplicant/config_ssid.h
int chwidth, seg0, seg1; @@ -1035,6 +1035,8 @@ struct wpa_ssid {
@@ -2551,7 +2551,7 @@ void ibss_mesh_setup_freq(struct wpa_supplicant *wpa_s, */
#endif /* CONFIG_HE_OVERRIDES */ int no_auto_peer;
/* Setup higher BW only for 5 GHz */ + int noscan;
- if (mode->mode != HOSTAPD_MODE_IEEE80211A) +
+ if (mode->mode != HOSTAPD_MODE_IEEE80211A && !(ssid->noscan)) /**
return; * mesh_rssi_threshold - Set mesh parameter mesh_rssi_threshold (dBm)
*
for (chan_idx = 0; chan_idx < mode->num_channels; chan_idx++) {

View File

@ -1,16 +1,6 @@
From f9584fa25cb679943e978926af83dcb17597a76c Mon Sep 17 00:00:00 2001
From: Patrick Walther <patrick.walther@netmodule.com>
Date: Fri, 24 Jul 2020 14:41:09 +0200
---
wpa_supplicant/wpa_supplicant.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
index bc2d4012d..c31421c3e 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
@@ -5405,7 +5405,7 @@ wpa_supplicant_alloc(struct wpa_supplicant *parent) @@ -5740,7 +5740,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;

View File

@ -1,14 +1,3 @@
From 20b84122399e878194d5757bbe637c4fed6d0f2e Mon Sep 17 00:00:00 2001
From: Patrick Walther <patrick.walther@netmodule.com>
Date: Fri, 24 Jul 2020 14:41:09 +0200
---
src/drivers/drivers.mak | 4 +---
src/drivers/rfkill.h | 16 ++++++++++++++++
2 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/src/drivers/drivers.mak b/src/drivers/drivers.mak
index a03d4a034..8da44d9f5 100644
--- a/src/drivers/drivers.mak --- a/src/drivers/drivers.mak
+++ b/src/drivers/drivers.mak +++ b/src/drivers/drivers.mak
@@ -54,7 +54,6 @@ NEED_SME=y @@ -54,7 +54,6 @@ NEED_SME=y
@ -43,8 +32,6 @@ index a03d4a034..8da44d9f5 100644
endif endif
ifdef NEED_RADIOTAP ifdef NEED_RADIOTAP
diff --git a/src/drivers/rfkill.h b/src/drivers/rfkill.h
index 0412ac330..e27565375 100644
--- a/src/drivers/rfkill.h --- a/src/drivers/rfkill.h
+++ b/src/drivers/rfkill.h +++ b/src/drivers/rfkill.h
@@ -18,8 +18,24 @@ struct rfkill_config { @@ -18,8 +18,24 @@ struct rfkill_config {

View File

@ -1,16 +1,6 @@
From 7fafab3b02af33cb9cbb4c1ea7de83cfc6161a4a Mon Sep 17 00:00:00 2001
From: Patrick Walther <patrick.walther@netmodule.com>
Date: Fri, 24 Jul 2020 14:41:09 +0200
---
src/drivers/driver_nl80211.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index de6a6c2f6..d2b30a0b8 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
@@ -5011,7 +5011,7 @@ static int nl80211_set_channel(struct i802_bss *bss, @@ -5407,7 +5407,7 @@ static int nl80211_set_channel(struct i8
freq->he_enabled, freq->eht_enabled, freq->bandwidth, freq->he_enabled, freq->eht_enabled, freq->bandwidth,
freq->center_freq1, freq->center_freq2); freq->center_freq1, freq->center_freq2);

View File

@ -1,16 +1,6 @@
From a8e0a04a432c75c828a5ed0a56de0de2a3ea558f Mon Sep 17 00:00:00 2001
From: Patrick Walther <patrick.walther@netmodule.com>
Date: Fri, 24 Jul 2020 14:41:09 +0200
---
src/ap/hostapd.c | 50 +++++++++++++++++++++++++++++++++---------------
1 file changed, 35 insertions(+), 15 deletions(-)
diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c
index 2b07a9283..f6c9c0e78 100644
--- a/src/ap/hostapd.c --- a/src/ap/hostapd.c
+++ b/src/ap/hostapd.c +++ b/src/ap/hostapd.c
@@ -119,6 +119,29 @@ static void hostapd_reload_bss(struct hostapd_data *hapd) @@ -143,6 +143,29 @@ static void hostapd_reload_bss(struct ho
#endif /* CONFIG_NO_RADIUS */ #endif /* CONFIG_NO_RADIUS */
ssid = &hapd->conf->ssid; ssid = &hapd->conf->ssid;
@ -40,7 +30,7 @@ index 2b07a9283..f6c9c0e78 100644
if (!ssid->wpa_psk_set && ssid->wpa_psk && !ssid->wpa_psk->next && if (!ssid->wpa_psk_set && ssid->wpa_psk && !ssid->wpa_psk->next &&
ssid->wpa_passphrase_set && ssid->wpa_passphrase) { ssid->wpa_passphrase_set && ssid->wpa_passphrase) {
/* /*
@@ -220,6 +243,7 @@ int hostapd_reload_config(struct hostapd_iface *iface) @@ -251,6 +274,7 @@ int hostapd_reload_config(struct hostapd
struct hostapd_data *hapd = iface->bss[0]; struct hostapd_data *hapd = iface->bss[0];
struct hostapd_config *newconf, *oldconf; struct hostapd_config *newconf, *oldconf;
size_t j; size_t j;
@ -48,7 +38,7 @@ index 2b07a9283..f6c9c0e78 100644
if (iface->config_fname == NULL) { if (iface->config_fname == NULL) {
/* Only in-memory config in use - assume it has been updated */ /* Only in-memory config in use - assume it has been updated */
@@ -270,24 +294,20 @@ int hostapd_reload_config(struct hostapd_iface *iface) @@ -301,6 +325,17 @@ int hostapd_reload_config(struct hostapd
} }
iface->conf = newconf; iface->conf = newconf;
@ -65,6 +55,10 @@ index 2b07a9283..f6c9c0e78 100644
+ +
for (j = 0; j < iface->num_bss; j++) { for (j = 0; j < iface->num_bss; j++) {
hapd = iface->bss[j]; hapd = iface->bss[j];
if (!hapd->conf->config_id || !newconf->bss[j]->config_id ||
@@ -308,21 +343,6 @@ int hostapd_reload_config(struct hostapd
newconf->bss[j]->config_id) != 0)
hostapd_clear_old_bss(hapd);
hapd->iconf = newconf; hapd->iconf = newconf;
- hapd->iconf->channel = oldconf->channel; - hapd->iconf->channel = oldconf->channel;
- hapd->iconf->acs = oldconf->acs; - hapd->iconf->acs = oldconf->acs;

View File

@ -1,16 +1,6 @@
From 2aeb1ad361356c6eca3101b00cd323490ad7d55a Mon Sep 17 00:00:00 2001
From: Patrick Walther <patrick.walther@netmodule.com>
Date: Fri, 24 Jul 2020 14:41:09 +0200
---
wpa_supplicant/ap.c | 22 +++++++++++++++++++++-
1 file changed, 21 insertions(+), 1 deletion(-)
diff --git a/wpa_supplicant/ap.c b/wpa_supplicant/ap.c
index 52b537e62..f21b8713f 100644
--- a/wpa_supplicant/ap.c --- a/wpa_supplicant/ap.c
+++ b/wpa_supplicant/ap.c +++ b/wpa_supplicant/ap.c
@@ -1803,15 +1803,35 @@ int ap_switch_channel(struct wpa_supplicant *wpa_s, @@ -1825,15 +1825,35 @@ int ap_switch_channel(struct wpa_supplic
#ifdef CONFIG_CTRL_IFACE #ifdef CONFIG_CTRL_IFACE

View File

@ -1,44 +1,35 @@
From e89b089b1b199a7332e704de84f261c437d9f510 Mon Sep 17 00:00:00 2001
From: Patrick Walther <patrick.walther@netmodule.com>
Date: Fri, 24 Jul 2020 14:41:09 +0200
---
src/drivers/driver_nl80211.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index d2b30a0b8..a9ae0fbe2 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
@@ -2932,11 +2932,11 @@ static int wpa_driver_nl80211_del_beacon(struct i802_bss *bss) @@ -3008,12 +3008,12 @@ static int wpa_driver_nl80211_del_beacon
struct wpa_driver_nl80211_data *drv = bss->drv; return 0;
wpa_printf(MSG_DEBUG, "nl80211: Remove beacon (ifindex=%d)", wpa_printf(MSG_DEBUG, "nl80211: Remove beacon (ifindex=%d)",
- drv->ifindex); - drv->ifindex);
+ bss->ifindex); + bss->ifindex);
bss->beacon_set = 0; link->beacon_set = 0;
bss->freq = 0; link->freq = 0;
nl80211_put_wiphy_data_ap(bss); nl80211_put_wiphy_data_ap(bss);
- msg = nl80211_drv_msg(drv, 0, NL80211_CMD_DEL_BEACON); - msg = nl80211_drv_msg(drv, 0, NL80211_CMD_DEL_BEACON);
+ msg = nl80211_bss_msg(drv, 0, NL80211_CMD_DEL_BEACON); + msg = nl80211_bss_msg(bss, 0, NL80211_CMD_DEL_BEACON);
return send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL); if (!msg)
} return -ENOBUFS;
@@ -5650,7 +5650,7 @@ static void nl80211_teardown_ap(struct i802_bss *bss) @@ -6100,7 +6100,7 @@ static void nl80211_teardown_ap(struct i
nl80211_mgmt_unsubscribe(bss, "AP teardown"); nl80211_mgmt_unsubscribe(bss, "AP teardown");
nl80211_put_wiphy_data_ap(bss); nl80211_put_wiphy_data_ap(bss);
- bss->beacon_set = 0; - bss->flink->beacon_set = 0;
+ wpa_driver_nl80211_del_beacon(bss); + wpa_driver_nl80211_del_beacon_all(bss);
} }
@@ -8104,8 +8104,6 @@ static int wpa_driver_nl80211_if_remove(struct i802_bss *bss, @@ -8859,8 +8859,6 @@ static int wpa_driver_nl80211_if_remove(
} else { } else {
wpa_printf(MSG_DEBUG, "nl80211: First BSS - reassign context"); wpa_printf(MSG_DEBUG, "nl80211: First BSS - reassign context");
nl80211_teardown_ap(bss); nl80211_teardown_ap(bss);
- if (!bss->added_if && !drv->first_bss->next) - if (!bss->added_if && !drv->first_bss->next)
- wpa_driver_nl80211_del_beacon(bss); - wpa_driver_nl80211_del_beacon_all(bss);
nl80211_destroy_bss(bss); nl80211_destroy_bss(bss);
if (!bss->added_if) if (!bss->added_if)
i802_set_iface_flags(bss, 0); i802_set_iface_flags(bss, 0);

View File

@ -1,17 +1,6 @@
From e949a35332f665fb789e2c4a07cfdacd635e67b8 Mon Sep 17 00:00:00 2001
From: Patrick Walther <patrick.walther@netmodule.com>
Date: Fri, 24 Jul 2020 14:41:09 +0200
---
hostapd/ctrl_iface.c | 59 ++++++++++++++++++++++++++++++++++++++++++
src/ap/ctrl_iface_ap.c | 8 +++++-
2 files changed, 66 insertions(+), 1 deletion(-)
diff --git a/hostapd/ctrl_iface.c b/hostapd/ctrl_iface.c
index 664c59df7..8baa4a4d4 100644
--- a/hostapd/ctrl_iface.c --- a/hostapd/ctrl_iface.c
+++ b/hostapd/ctrl_iface.c +++ b/hostapd/ctrl_iface.c
@@ -67,6 +67,7 @@ @@ -68,6 +68,7 @@
#include "fst/fst_ctrl_iface.h" #include "fst/fst_ctrl_iface.h"
#include "config_file.h" #include "config_file.h"
#include "ctrl_iface.h" #include "ctrl_iface.h"
@ -19,7 +8,7 @@ index 664c59df7..8baa4a4d4 100644
#define HOSTAPD_CLI_DUP_VALUE_MAX_LEN 256 #define HOSTAPD_CLI_DUP_VALUE_MAX_LEN 256
@@ -82,6 +83,7 @@ static void hostapd_ctrl_iface_send(struct hostapd_data *hapd, int level, @@ -83,6 +84,7 @@ static void hostapd_ctrl_iface_send(stru
enum wpa_msg_type type, enum wpa_msg_type type,
const char *buf, size_t len); const char *buf, size_t len);
@ -27,7 +16,7 @@ index 664c59df7..8baa4a4d4 100644
static int hostapd_ctrl_iface_attach(struct hostapd_data *hapd, static int hostapd_ctrl_iface_attach(struct hostapd_data *hapd,
struct sockaddr_storage *from, struct sockaddr_storage *from,
@@ -133,6 +135,61 @@ static int hostapd_ctrl_iface_new_sta(struct hostapd_data *hapd, @@ -134,6 +136,61 @@ static int hostapd_ctrl_iface_new_sta(st
return 0; return 0;
} }
@ -89,7 +78,7 @@ index 664c59df7..8baa4a4d4 100644
#ifdef NEED_AP_MLME #ifdef NEED_AP_MLME
static int hostapd_ctrl_iface_sa_query(struct hostapd_data *hapd, static int hostapd_ctrl_iface_sa_query(struct hostapd_data *hapd,
@@ -3434,6 +3491,8 @@ static int hostapd_ctrl_iface_receive_process(struct hostapd_data *hapd, @@ -3564,6 +3621,8 @@ static int hostapd_ctrl_iface_receive_pr
} else if (os_strncmp(buf, "VENDOR ", 7) == 0) { } else if (os_strncmp(buf, "VENDOR ", 7) == 0) {
reply_len = hostapd_ctrl_iface_vendor(hapd, buf + 7, reply, reply_len = hostapd_ctrl_iface_vendor(hapd, buf + 7, reply,
reply_size); reply_size);
@ -98,11 +87,9 @@ index 664c59df7..8baa4a4d4 100644
} else if (os_strcmp(buf, "ERP_FLUSH") == 0) { } else if (os_strcmp(buf, "ERP_FLUSH") == 0) {
ieee802_1x_erp_flush(hapd); ieee802_1x_erp_flush(hapd);
#ifdef RADIUS_SERVER #ifdef RADIUS_SERVER
diff --git a/src/ap/ctrl_iface_ap.c b/src/ap/ctrl_iface_ap.c
index 29b41f5bc..5150d9bbf 100644
--- a/src/ap/ctrl_iface_ap.c --- a/src/ap/ctrl_iface_ap.c
+++ b/src/ap/ctrl_iface_ap.c +++ b/src/ap/ctrl_iface_ap.c
@@ -945,7 +945,13 @@ int hostapd_parse_csa_settings(const char *pos, @@ -1023,7 +1023,13 @@ int hostapd_parse_csa_settings(const cha
int hostapd_ctrl_iface_stop_ap(struct hostapd_data *hapd) int hostapd_ctrl_iface_stop_ap(struct hostapd_data *hapd)
{ {

View File

@ -1,117 +1,6 @@
From d1928a9eedc0ce358521d6681c7f61d2e0da1316 Mon Sep 17 00:00:00 2001
From: Patrick Walther <patrick.walther@netmodule.com>
Date: Fri, 24 Jul 2020 14:41:09 +0200
---
hostapd/ctrl_iface.c | 6 +++
src/ap/beacon.c | 5 ---
src/drivers/driver.h | 2 +
src/drivers/driver_nl80211_event.c | 6 ++-
wpa_supplicant/Makefile | 2 +
wpa_supplicant/bss.c | 14 ++++++
wpa_supplicant/bss.h | 4 ++
wpa_supplicant/events.c | 58 ++++++++++++++++++++++++-
wpa_supplicant/main.c | 8 +++-
wpa_supplicant/wpa_supplicant.c | 69 ++++++++++++++++++++++++++++++
wpa_supplicant/wpa_supplicant_i.h | 7 +++
11 files changed, 172 insertions(+), 9 deletions(-)
diff --git a/hostapd/ctrl_iface.c b/hostapd/ctrl_iface.c
index 8baa4a4d4..193df6e11 100644
--- a/hostapd/ctrl_iface.c
+++ b/hostapd/ctrl_iface.c
@@ -2626,6 +2626,12 @@ static int hostapd_ctrl_iface_chan_switch(struct hostapd_iface *iface,
return 0;
}
+ if (os_strstr(pos, " auto-ht")) {
+ settings.freq_params.ht_enabled = iface->conf->ieee80211n;
+ settings.freq_params.vht_enabled = iface->conf->ieee80211ac;
+ settings.freq_params.he_enabled = iface->conf->ieee80211ax;
+ }
+
for (i = 0; i < iface->num_bss; i++) {
/* Save CHAN_SWITCH VHT, HE, and EHT config */
diff --git a/src/ap/beacon.c b/src/ap/beacon.c
index 58872bfda..c8a0e51d3 100644
--- a/src/ap/beacon.c
+++ b/src/ap/beacon.c
@@ -1901,11 +1901,6 @@ static int __ieee802_11_set_beacon(struct hostapd_data *hapd)
return -1;
}
- if (hapd->csa_in_progress) {
- wpa_printf(MSG_ERROR, "Cannot set beacons during CSA period");
- return -1;
- }
-
hapd->beacon_set_done = 1;
if (ieee802_11_build_ap_params(hapd, &params) < 0)
diff --git a/src/drivers/driver.h b/src/drivers/driver.h
index f8f91c023..f7dfcc165 100644
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
@@ -5965,6 +5965,7 @@ union wpa_event_data {
/**
* struct ch_switch
+ * @count: Count until channel switch activates
* @freq: Frequency of new channel in MHz
* @ht_enabled: Whether this is an HT channel
* @ch_offset: Secondary channel offset
@@ -5973,6 +5974,7 @@ union wpa_event_data {
* @cf2: Center frequency 2
*/
struct ch_switch {
+ int count;
int freq;
int ht_enabled;
int ch_offset;
diff --git a/src/drivers/driver_nl80211_event.c b/src/drivers/driver_nl80211_event.c
index 00f8b0cbb..a67b4818a 100644
--- a/src/drivers/driver_nl80211_event.c
+++ b/src/drivers/driver_nl80211_event.c
@@ -691,7 +691,7 @@ static void mlme_event_ch_switch(struct wpa_driver_nl80211_data *drv,
struct nlattr *ifindex, struct nlattr *freq,
struct nlattr *type, struct nlattr *bw,
struct nlattr *cf1, struct nlattr *cf2,
- int finished)
+ struct nlattr *count, int finished)
{
struct i802_bss *bss;
union wpa_event_data data;
@@ -752,6 +752,8 @@ static void mlme_event_ch_switch(struct wpa_driver_nl80211_data *drv,
data.ch_switch.cf1 = nla_get_u32(cf1);
if (cf2)
data.ch_switch.cf2 = nla_get_u32(cf2);
+ if (count)
+ data.ch_switch.count = nla_get_u32(count);
if (finished)
bss->freq = data.ch_switch.freq;
@@ -3115,6 +3117,7 @@ static void do_process_drv_event(struct i802_bss *bss, int cmd,
tb[NL80211_ATTR_CHANNEL_WIDTH],
tb[NL80211_ATTR_CENTER_FREQ1],
tb[NL80211_ATTR_CENTER_FREQ2],
+ tb[NL80211_ATTR_CH_SWITCH_COUNT],
0);
break;
case NL80211_CMD_CH_SWITCH_NOTIFY:
@@ -3125,6 +3128,7 @@ static void do_process_drv_event(struct i802_bss *bss, int cmd,
tb[NL80211_ATTR_CHANNEL_WIDTH],
tb[NL80211_ATTR_CENTER_FREQ1],
tb[NL80211_ATTR_CENTER_FREQ2],
+ NULL,
1);
break;
case NL80211_CMD_DISCONNECT:
diff --git a/wpa_supplicant/Makefile b/wpa_supplicant/Makefile
index f7740e6f0..969dc713f 100644
--- a/wpa_supplicant/Makefile --- a/wpa_supplicant/Makefile
+++ b/wpa_supplicant/Makefile +++ b/wpa_supplicant/Makefile
@@ -115,6 +115,8 @@ OBJS_c += ../src/utils/common.o @@ -126,6 +126,8 @@ OBJS_c += ../src/utils/common.o
OBJS_c += ../src/common/cli.o OBJS_c += ../src/common/cli.o
OBJS += wmm_ac.o OBJS += wmm_ac.o
@ -120,8 +9,6 @@ index f7740e6f0..969dc713f 100644
ifndef CONFIG_OS ifndef CONFIG_OS
ifdef CONFIG_NATIVE_WINDOWS ifdef CONFIG_NATIVE_WINDOWS
CONFIG_OS=win32 CONFIG_OS=win32
diff --git a/wpa_supplicant/bss.c b/wpa_supplicant/bss.c
index eb97a618d..01ddb13ec 100644
--- a/wpa_supplicant/bss.c --- a/wpa_supplicant/bss.c
+++ b/wpa_supplicant/bss.c +++ b/wpa_supplicant/bss.c
@@ -11,6 +11,7 @@ @@ -11,6 +11,7 @@
@ -132,7 +19,7 @@ index eb97a618d..01ddb13ec 100644
#include "drivers/driver.h" #include "drivers/driver.h"
#include "eap_peer/eap.h" #include "eap_peer/eap.h"
#include "wpa_supplicant_i.h" #include "wpa_supplicant_i.h"
@@ -282,6 +283,10 @@ void calculate_update_time(const struct os_reltime *fetch_time, @@ -283,6 +284,10 @@ void calculate_update_time(const struct
static void wpa_bss_copy_res(struct wpa_bss *dst, struct wpa_scan_res *src, static void wpa_bss_copy_res(struct wpa_bss *dst, struct wpa_scan_res *src,
struct os_reltime *fetch_time) struct os_reltime *fetch_time)
{ {
@ -143,7 +30,7 @@ index eb97a618d..01ddb13ec 100644
dst->flags = src->flags; dst->flags = src->flags;
os_memcpy(dst->bssid, src->bssid, ETH_ALEN); os_memcpy(dst->bssid, src->bssid, ETH_ALEN);
dst->freq = src->freq; dst->freq = src->freq;
@@ -295,6 +300,15 @@ static void wpa_bss_copy_res(struct wpa_bss *dst, struct wpa_scan_res *src, @@ -296,6 +301,15 @@ static void wpa_bss_copy_res(struct wpa_
dst->est_throughput = src->est_throughput; dst->est_throughput = src->est_throughput;
dst->snr = src->snr; dst->snr = src->snr;
@ -159,8 +46,6 @@ index eb97a618d..01ddb13ec 100644
calculate_update_time(fetch_time, src->age, &dst->last_update); calculate_update_time(fetch_time, src->age, &dst->last_update);
} }
diff --git a/wpa_supplicant/bss.h b/wpa_supplicant/bss.h
index 146aaee7f..2f37e8d1c 100644
--- a/wpa_supplicant/bss.h --- a/wpa_supplicant/bss.h
+++ b/wpa_supplicant/bss.h +++ b/wpa_supplicant/bss.h
@@ -94,6 +94,10 @@ struct wpa_bss { @@ -94,6 +94,10 @@ struct wpa_bss {
@ -174,11 +59,212 @@ index 146aaee7f..2f37e8d1c 100644
/** Frequency of the channel in MHz (e.g., 2412 = channel 1) */ /** Frequency of the channel in MHz (e.g., 2412 = channel 1) */
int freq; int freq;
/** Beacon interval in TUs (host byte order) */ /** Beacon interval in TUs (host byte order) */
diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c --- a/wpa_supplicant/main.c
index 48aa792b3..86a0dc7fa 100644 +++ b/wpa_supplicant/main.c
@@ -35,7 +35,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
@@ -75,6 +75,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"
@@ -202,7 +203,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) {
@@ -249,6 +250,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
+++ b/wpa_supplicant/wpa_supplicant.c
@@ -131,6 +131,54 @@ static void wpas_update_fils_connect_par
static void wpas_update_owe_connect_params(struct wpa_supplicant *wpa_s);
#endif /* CONFIG_OWE */
+static int hostapd_stop(struct wpa_supplicant *wpa_s)
+{
+ const char *cmd = "STOP_AP";
+ char buf[256];
+ size_t len = sizeof(buf);
+
+ if (wpa_ctrl_request(wpa_s->hostapd, cmd, os_strlen(cmd), buf, &len, NULL) < 0) {
+ wpa_printf(MSG_ERROR, "\nFailed to stop hostapd AP interfaces\n");
+ return -1;
+ }
+ return 0;
+}
+
+static int hostapd_reload(struct wpa_supplicant *wpa_s, struct wpa_bss *bss)
+{
+ char *cmd = NULL;
+ char buf[256];
+ size_t len = sizeof(buf);
+ enum hostapd_hw_mode hw_mode;
+ u8 channel;
+ int sec_chan = 0;
+ int ret;
+
+ if (!bss)
+ return -1;
+
+ if (bss->ht_param & HT_INFO_HT_PARAM_STA_CHNL_WIDTH) {
+ int sec = bss->ht_param & HT_INFO_HT_PARAM_SECONDARY_CHNL_OFF_MASK;
+ if (sec == HT_INFO_HT_PARAM_SECONDARY_CHNL_ABOVE)
+ sec_chan = 1;
+ else if (sec == HT_INFO_HT_PARAM_SECONDARY_CHNL_BELOW)
+ sec_chan = -1;
+ }
+
+ hw_mode = ieee80211_freq_to_chan(bss->freq, &channel);
+ if (asprintf(&cmd, "UPDATE channel=%d sec_chan=%d hw_mode=%d",
+ channel, sec_chan, hw_mode) < 0)
+ return -1;
+
+ ret = wpa_ctrl_request(wpa_s->hostapd, cmd, os_strlen(cmd), buf, &len, NULL);
+ free(cmd);
+
+ if (ret < 0) {
+ wpa_printf(MSG_ERROR, "\nFailed to reload hostapd AP interfaces\n");
+ return -1;
+ }
+ return 0;
+}
#ifdef CONFIG_WEP
/* Configure default/group WEP keys for static WEP */
@@ -1026,6 +1074,8 @@ void wpa_supplicant_set_state(struct wpa
sme_sched_obss_scan(wpa_s, 1);
+ if (wpa_s->hostapd)
+ hostapd_reload(wpa_s, wpa_s->current_bss);
#if defined(CONFIG_FILS) && defined(IEEE8021X_EAPOL)
if (!fils_hlp_sent && ssid && ssid->eap.erp)
update_fils_connect_params = true;
@@ -1036,6 +1086,8 @@ void wpa_supplicant_set_state(struct wpa
#endif /* CONFIG_OWE */
} else if (state == WPA_DISCONNECTED || state == WPA_ASSOCIATING ||
state == WPA_ASSOCIATED) {
+ if (wpa_s->hostapd)
+ hostapd_stop(wpa_s);
wpa_s->new_connection = 1;
wpa_drv_set_operstate(wpa_s, 0);
#ifndef IEEE8021X_EAPOL
@@ -2537,6 +2589,8 @@ void wpa_supplicant_associate(struct wpa
return;
}
wpa_s->current_bss = bss;
+ 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");
@@ -7037,6 +7091,16 @@ static int wpa_supplicant_init_iface(str
sizeof(wpa_s->bridge_ifname));
}
+ if (iface->hostapd_ctrl) {
+ wpa_s->hostapd = wpa_ctrl_open(iface->hostapd_ctrl);
+ if (!wpa_s->hostapd) {
+ wpa_printf(MSG_ERROR, "\nFailed to connect to hostapd\n");
+ return -1;
+ }
+ if (hostapd_stop(wpa_s) < 0)
+ return -1;
+ }
+
/* RSNA Supplicant Key Management - INITIALIZE */
eapol_sm_notify_portEnabled(wpa_s->eapol, false);
eapol_sm_notify_portValid(wpa_s->eapol, false);
@@ -7379,6 +7443,11 @@ static void wpa_supplicant_deinit_iface(
if (terminate)
wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_TERMINATING);
+ if (wpa_s->hostapd) {
+ wpa_ctrl_close(wpa_s->hostapd);
+ wpa_s->hostapd = NULL;
+ }
+
wpa_supplicant_ctrl_iface_deinit(wpa_s, wpa_s->ctrl_iface);
wpa_s->ctrl_iface = NULL;
--- a/wpa_supplicant/wpa_supplicant_i.h
+++ b/wpa_supplicant/wpa_supplicant_i.h
@@ -106,6 +106,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
@@ -665,6 +670,8 @@ struct wpa_supplicant {
#endif /* CONFIG_CTRL_IFACE_BINDER */
char bridge_ifname[16];
+ struct wpa_ctrl *hostapd;
+
char *confname;
char *confanother;
--- a/hostapd/ctrl_iface.c
+++ b/hostapd/ctrl_iface.c
@@ -2751,6 +2751,12 @@ static int hostapd_ctrl_iface_chan_switc
return 0;
}
+ if (os_strstr(pos, " auto-ht")) {
+ settings.freq_params.ht_enabled = iface->conf->ieee80211n;
+ settings.freq_params.vht_enabled = iface->conf->ieee80211ac;
+ settings.freq_params.he_enabled = iface->conf->ieee80211ax;
+ }
+
for (i = 0; i < iface->num_bss; i++) {
/* Save CHAN_SWITCH VHT, HE, and EHT config */
--- a/src/ap/beacon.c
+++ b/src/ap/beacon.c
@@ -2108,11 +2108,6 @@ static int __ieee802_11_set_beacon(struc
return -1;
}
- if (hapd->csa_in_progress) {
- wpa_printf(MSG_ERROR, "Cannot set beacons during CSA period");
- return -1;
- }
-
hapd->beacon_set_done = 1;
if (ieee802_11_build_ap_params(hapd, &params) < 0)
--- a/wpa_supplicant/events.c --- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c +++ b/wpa_supplicant/events.c
@@ -4953,6 +4953,60 @@ static void wpas_event_unprot_beacon(struct wpa_supplicant *wpa_s, @@ -5345,6 +5345,60 @@ static void wpas_link_reconfig(struct wp
} }
@ -239,7 +325,7 @@ index 48aa792b3..86a0dc7fa 100644
void supplicant_event(void *ctx, enum wpa_event_type event, void supplicant_event(void *ctx, enum wpa_event_type event,
union wpa_event_data *data) union wpa_event_data *data)
{ {
@@ -5268,8 +5322,10 @@ void supplicant_event(void *ctx, enum wpa_event_type event, @@ -5697,8 +5751,10 @@ void supplicant_event(void *ctx, enum wp
channel_width_to_string(data->ch_switch.ch_width), channel_width_to_string(data->ch_switch.ch_width),
data->ch_switch.cf1, data->ch_switch.cf1,
data->ch_switch.cf2); data->ch_switch.cf2);
@ -251,183 +337,56 @@ index 48aa792b3..86a0dc7fa 100644
wpa_s->assoc_freq = data->ch_switch.freq; wpa_s->assoc_freq = data->ch_switch.freq;
wpa_s->current_ssid->frequency = data->ch_switch.freq; wpa_s->current_ssid->frequency = data->ch_switch.freq;
diff --git a/wpa_supplicant/main.c b/wpa_supplicant/main.c --- a/src/drivers/driver.h
index 9229eb51f..535923ecd 100644 +++ b/src/drivers/driver.h
--- a/wpa_supplicant/main.c @@ -6421,6 +6421,7 @@ union wpa_event_data {
+++ b/wpa_supplicant/main.c
@@ -35,7 +35,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
@@ -75,6 +75,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"
@@ -202,7 +203,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) {
@@ -249,6 +250,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;
diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
index c31421c3e..c18723384 100644
--- a/wpa_supplicant/wpa_supplicant.c
+++ b/wpa_supplicant/wpa_supplicant.c
@@ -131,6 +131,54 @@ static void wpas_update_fils_connect_params(struct wpa_supplicant *wpa_s);
static void wpas_update_owe_connect_params(struct wpa_supplicant *wpa_s);
#endif /* CONFIG_OWE */
+static int hostapd_stop(struct wpa_supplicant *wpa_s)
+{
+ const char *cmd = "STOP_AP";
+ char buf[256];
+ size_t len = sizeof(buf);
+
+ if (wpa_ctrl_request(wpa_s->hostapd, cmd, os_strlen(cmd), buf, &len, NULL) < 0) {
+ wpa_printf(MSG_ERROR, "\nFailed to stop hostapd AP interfaces\n");
+ return -1;
+ }
+ return 0;
+}
+
+static int hostapd_reload(struct wpa_supplicant *wpa_s, struct wpa_bss *bss)
+{
+ char *cmd = NULL;
+ char buf[256];
+ size_t len = sizeof(buf);
+ enum hostapd_hw_mode hw_mode;
+ u8 channel;
+ int sec_chan = 0;
+ int ret;
+
+ if (!bss)
+ return -1;
+
+ if (bss->ht_param & HT_INFO_HT_PARAM_STA_CHNL_WIDTH) {
+ int sec = bss->ht_param & HT_INFO_HT_PARAM_SECONDARY_CHNL_OFF_MASK;
+ if (sec == HT_INFO_HT_PARAM_SECONDARY_CHNL_ABOVE)
+ sec_chan = 1;
+ else if (sec == HT_INFO_HT_PARAM_SECONDARY_CHNL_BELOW)
+ sec_chan = -1;
+ }
+
+ hw_mode = ieee80211_freq_to_chan(bss->freq, &channel);
+ if (asprintf(&cmd, "UPDATE channel=%d sec_chan=%d hw_mode=%d",
+ channel, sec_chan, hw_mode) < 0)
+ return -1;
+
+ ret = wpa_ctrl_request(wpa_s->hostapd, cmd, os_strlen(cmd), buf, &len, NULL);
+ free(cmd);
+
+ if (ret < 0) {
+ wpa_printf(MSG_ERROR, "\nFailed to reload hostapd AP interfaces\n");
+ return -1;
+ }
+ return 0;
+}
#ifdef CONFIG_WEP
/* Configure default/group WEP keys for static WEP */
@@ -1016,6 +1064,8 @@ void wpa_supplicant_set_state(struct wpa_supplicant *wpa_s,
sme_sched_obss_scan(wpa_s, 1);
+ if (wpa_s->hostapd)
+ hostapd_reload(wpa_s, wpa_s->current_bss);
#if defined(CONFIG_FILS) && defined(IEEE8021X_EAPOL)
if (!fils_hlp_sent && ssid && ssid->eap.erp)
update_fils_connect_params = true;
@@ -1026,6 +1076,8 @@ void wpa_supplicant_set_state(struct wpa_supplicant *wpa_s,
#endif /* CONFIG_OWE */
} else if (state == WPA_DISCONNECTED || state == WPA_ASSOCIATING ||
state == WPA_ASSOCIATED) {
+ if (wpa_s->hostapd)
+ hostapd_stop(wpa_s);
wpa_s->new_connection = 1;
wpa_drv_set_operstate(wpa_s, 0);
#ifndef IEEE8021X_EAPOL
@@ -2324,6 +2376,8 @@ void wpa_supplicant_associate(struct wpa_supplicant *wpa_s,
return;
}
wpa_s->current_bss = bss;
+ 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");
@@ -6679,6 +6733,16 @@ static int wpa_supplicant_init_iface(struct wpa_supplicant *wpa_s,
sizeof(wpa_s->bridge_ifname));
}
+ if (iface->hostapd_ctrl) {
+ wpa_s->hostapd = wpa_ctrl_open(iface->hostapd_ctrl);
+ if (!wpa_s->hostapd) {
+ wpa_printf(MSG_ERROR, "\nFailed to connect to hostapd\n");
+ return -1;
+ }
+ if (hostapd_stop(wpa_s) < 0)
+ return -1;
+ }
+
/* RSNA Supplicant Key Management - INITIALIZE */
eapol_sm_notify_portEnabled(wpa_s->eapol, false);
eapol_sm_notify_portValid(wpa_s->eapol, false);
@@ -7017,6 +7081,11 @@ static void wpa_supplicant_deinit_iface(struct wpa_supplicant *wpa_s,
if (terminate)
wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_TERMINATING);
+ if (wpa_s->hostapd) {
+ wpa_ctrl_close(wpa_s->hostapd);
+ wpa_s->hostapd = NULL;
+ }
+
wpa_supplicant_ctrl_iface_deinit(wpa_s, wpa_s->ctrl_iface);
wpa_s->ctrl_iface = NULL;
diff --git a/wpa_supplicant/wpa_supplicant_i.h b/wpa_supplicant/wpa_supplicant_i.h
index 301d5d56a..2f121462a 100644
--- a/wpa_supplicant/wpa_supplicant_i.h
+++ b/wpa_supplicant/wpa_supplicant_i.h
@@ -104,6 +104,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 * struct ch_switch
* + * @count: Count until channel switch activates
@@ -719,6 +724,8 @@ struct wpa_supplicant { * @freq: Frequency of new channel in MHz
#endif /* CONFIG_CTRL_IFACE_BINDER */ * @ht_enabled: Whether this is an HT channel
char bridge_ifname[16]; * @ch_offset: Secondary channel offset
@@ -6431,6 +6432,7 @@ union wpa_event_data {
+ struct wpa_ctrl *hostapd; * @punct_bitmap: Puncturing bitmap
+ */
char *confname; struct ch_switch {
char *confanother; + int count;
int freq;
int ht_enabled;
int ch_offset;
--- a/src/drivers/driver_nl80211_event.c
+++ b/src/drivers/driver_nl80211_event.c
@@ -1202,6 +1202,7 @@ static void mlme_event_ch_switch(struct
struct nlattr *bw, struct nlattr *cf1,
struct nlattr *cf2,
struct nlattr *punct_bitmap,
+ struct nlattr *count,
int finished)
{
struct i802_bss *bss;
@@ -1265,6 +1266,8 @@ static void mlme_event_ch_switch(struct
data.ch_switch.cf1 = nla_get_u32(cf1);
if (cf2)
data.ch_switch.cf2 = nla_get_u32(cf2);
+ if (count)
+ data.ch_switch.count = nla_get_u32(count);
if (finished)
bss->flink->freq = data.ch_switch.freq;
@@ -3848,6 +3851,7 @@ static void do_process_drv_event(struct
tb[NL80211_ATTR_CENTER_FREQ1],
tb[NL80211_ATTR_CENTER_FREQ2],
tb[NL80211_ATTR_PUNCT_BITMAP],
+ tb[NL80211_ATTR_CH_SWITCH_COUNT],
0);
break;
case NL80211_CMD_CH_SWITCH_NOTIFY:
@@ -3860,6 +3864,7 @@ static void do_process_drv_event(struct
tb[NL80211_ATTR_CENTER_FREQ1],
tb[NL80211_ATTR_CENTER_FREQ2],
tb[NL80211_ATTR_PUNCT_BITMAP],
+ NULL,
1);
break;
case NL80211_CMD_DISCONNECT:

View File

@ -1,21 +1,3 @@
From e54c0492fd8d13ce2e4dd9f7f6301bbeb2afd155 Mon Sep 17 00:00:00 2001
From: Patrick Walther <patrick.walther@netmodule.com>
Date: Fri, 24 Jul 2020 14:41:09 +0200
---
hostapd/Makefile | 3 +++
hostapd/ctrl_iface.c | 2 ++
src/ap/ctrl_iface_ap.c | 6 ++++--
src/ap/ieee802_1x.c | 2 ++
src/ap/wpa_auth.c | 3 ++-
src/rsn_supp/wpa.c | 3 +++
wpa_supplicant/Makefile | 3 +++
wpa_supplicant/ap.c | 2 +-
wpa_supplicant/ctrl_iface.c | 8 +++++++-
9 files changed, 27 insertions(+), 5 deletions(-)
diff --git a/hostapd/Makefile b/hostapd/Makefile
index 6c34c5f88..6a125ed80 100644
--- a/hostapd/Makefile --- a/hostapd/Makefile
+++ b/hostapd/Makefile +++ b/hostapd/Makefile
@@ -221,6 +221,9 @@ endif @@ -221,6 +221,9 @@ endif
@ -28,11 +10,9 @@ index 6c34c5f88..6a125ed80 100644
ifeq ($(CONFIG_CTRL_IFACE), udp) ifeq ($(CONFIG_CTRL_IFACE), udp)
CFLAGS += -DCONFIG_CTRL_IFACE_UDP CFLAGS += -DCONFIG_CTRL_IFACE_UDP
else else
diff --git a/hostapd/ctrl_iface.c b/hostapd/ctrl_iface.c
index 193df6e11..9215ab739 100644
--- a/hostapd/ctrl_iface.c --- a/hostapd/ctrl_iface.c
+++ b/hostapd/ctrl_iface.c +++ b/hostapd/ctrl_iface.c
@@ -3250,6 +3250,7 @@ static int hostapd_ctrl_iface_receive_process(struct hostapd_data *hapd, @@ -3377,6 +3377,7 @@ static int hostapd_ctrl_iface_receive_pr
reply_size); reply_size);
} else if (os_strcmp(buf, "STATUS-DRIVER") == 0) { } else if (os_strcmp(buf, "STATUS-DRIVER") == 0) {
reply_len = hostapd_drv_status(hapd, reply, reply_size); reply_len = hostapd_drv_status(hapd, reply, reply_size);
@ -40,7 +20,7 @@ index 193df6e11..9215ab739 100644
} else if (os_strcmp(buf, "MIB") == 0) { } else if (os_strcmp(buf, "MIB") == 0) {
reply_len = ieee802_11_get_mib(hapd, reply, reply_size); reply_len = ieee802_11_get_mib(hapd, reply, reply_size);
if (reply_len >= 0) { if (reply_len >= 0) {
@@ -3291,6 +3292,7 @@ static int hostapd_ctrl_iface_receive_process(struct hostapd_data *hapd, @@ -3418,6 +3419,7 @@ static int hostapd_ctrl_iface_receive_pr
} else if (os_strncmp(buf, "STA-NEXT ", 9) == 0) { } else if (os_strncmp(buf, "STA-NEXT ", 9) == 0) {
reply_len = hostapd_ctrl_iface_sta_next(hapd, buf + 9, reply, reply_len = hostapd_ctrl_iface_sta_next(hapd, buf + 9, reply,
reply_size); reply_size);
@ -48,108 +28,9 @@ index 193df6e11..9215ab739 100644
} else if (os_strcmp(buf, "ATTACH") == 0) { } else if (os_strcmp(buf, "ATTACH") == 0) {
if (hostapd_ctrl_iface_attach(hapd, from, fromlen, NULL)) if (hostapd_ctrl_iface_attach(hapd, from, fromlen, NULL))
reply_len = -1; reply_len = -1;
diff --git a/src/ap/ctrl_iface_ap.c b/src/ap/ctrl_iface_ap.c
index 5150d9bbf..c496e4f4a 100644
--- a/src/ap/ctrl_iface_ap.c
+++ b/src/ap/ctrl_iface_ap.c
@@ -26,6 +26,7 @@
#include "taxonomy.h"
#include "wnm_ap.h"
+#ifdef CONFIG_CTRL_IFACE_MIB
static size_t hostapd_write_ht_mcs_bitmask(char *buf, size_t buflen,
size_t curr_len, const u8 *mcs_set)
@@ -460,6 +461,7 @@ int hostapd_ctrl_iface_sta_next(struct hostapd_data *hapd, const char *txtaddr,
return hostapd_ctrl_iface_sta_mib(hapd, sta->next, buf, buflen);
}
+#endif
#ifdef CONFIG_P2P_MANAGER
static int p2p_manager_disconnect(struct hostapd_data *hapd, u16 stype,
@@ -832,12 +834,12 @@ int hostapd_ctrl_iface_status(struct hostapd_data *hapd, char *buf,
return len;
len += ret;
}
-
+#ifdef CONFIG_CTRL_IFACE_MIB
if (iface->conf->ieee80211n && !hapd->conf->disable_11n && mode) {
len = hostapd_write_ht_mcs_bitmask(buf, buflen, len,
mode->mcs_set);
}
-
+#endif /* CONFIG_CTRL_IFACE_MIB */
if (iface->current_rates && iface->num_rates) {
ret = os_snprintf(buf + len, buflen - len, "supported_rates=");
if (os_snprintf_error(buflen - len, ret))
diff --git a/src/ap/ieee802_1x.c b/src/ap/ieee802_1x.c
index d90792c78..7854de1a2 100644
--- a/src/ap/ieee802_1x.c
+++ b/src/ap/ieee802_1x.c
@@ -2740,6 +2740,7 @@ static const char * bool_txt(bool val)
return val ? "TRUE" : "FALSE";
}
+#ifdef CONFIG_CTRL_IFACE_MIB
int ieee802_1x_get_mib(struct hostapd_data *hapd, char *buf, size_t buflen)
{
@@ -2926,6 +2927,7 @@ int ieee802_1x_get_mib_sta(struct hostapd_data *hapd, struct sta_info *sta,
return len;
}
+#endif
#ifdef CONFIG_HS20
static void ieee802_1x_wnm_notif_send(void *eloop_ctx, void *timeout_ctx)
diff --git a/src/ap/wpa_auth.c b/src/ap/wpa_auth.c
index 705517b16..6fb23947b 100644
--- a/src/ap/wpa_auth.c
+++ b/src/ap/wpa_auth.c
@@ -4559,6 +4559,7 @@ static const char * wpa_bool_txt(int val)
return val ? "TRUE" : "FALSE";
}
+#ifdef CONFIG_CTRL_IFACE_MIB
#define RSN_SUITE "%02x-%02x-%02x-%d"
#define RSN_SUITE_ARG(s) \
@@ -4709,7 +4710,7 @@ int wpa_get_mib_sta(struct wpa_state_machine *sm, char *buf, size_t buflen)
return len;
}
-
+#endif
void wpa_auth_countermeasures_start(struct wpa_authenticator *wpa_auth)
{
diff --git a/src/rsn_supp/wpa.c b/src/rsn_supp/wpa.c
index 577717611..27bb644be 100644
--- a/src/rsn_supp/wpa.c
+++ b/src/rsn_supp/wpa.c
@@ -2801,6 +2801,8 @@ static u32 wpa_key_mgmt_suite(struct wpa_sm *sm)
}
+#ifdef CONFIG_CTRL_IFACE_MIB
+
#define RSN_SUITE "%02x-%02x-%02x-%d"
#define RSN_SUITE_ARG(s) \
((s) >> 24) & 0xff, ((s) >> 16) & 0xff, ((s) >> 8) & 0xff, (s) & 0xff
@@ -2882,6 +2884,7 @@ int wpa_sm_get_mib(struct wpa_sm *sm, char *buf, size_t buflen)
return (int) len;
}
+#endif
#endif /* CONFIG_CTRL_IFACE */
diff --git a/wpa_supplicant/Makefile b/wpa_supplicant/Makefile
index 969dc713f..57a89edcb 100644
--- a/wpa_supplicant/Makefile --- a/wpa_supplicant/Makefile
+++ b/wpa_supplicant/Makefile +++ b/wpa_supplicant/Makefile
@@ -973,6 +973,9 @@ ifdef CONFIG_FILS @@ -985,6 +985,9 @@ ifdef CONFIG_FILS
OBJS += ../src/ap/fils_hlp.o OBJS += ../src/ap/fils_hlp.o
endif endif
ifdef CONFIG_CTRL_IFACE ifdef CONFIG_CTRL_IFACE
@ -159,24 +40,9 @@ index 969dc713f..57a89edcb 100644
OBJS += ../src/ap/ctrl_iface_ap.o OBJS += ../src/ap/ctrl_iface_ap.o
endif endif
diff --git a/wpa_supplicant/ap.c b/wpa_supplicant/ap.c
index f21b8713f..992c0a056 100644
--- a/wpa_supplicant/ap.c
+++ b/wpa_supplicant/ap.c
@@ -1477,7 +1477,7 @@ int wpas_ap_wps_nfc_report_handover(struct wpa_supplicant *wpa_s,
#endif /* CONFIG_WPS */
-#ifdef CONFIG_CTRL_IFACE
+#if defined(CONFIG_CTRL_IFACE) && defined(CONFIG_CTRL_IFACE_MIB)
int ap_ctrl_iface_sta_first(struct wpa_supplicant *wpa_s,
char *buf, size_t buflen)
diff --git a/wpa_supplicant/ctrl_iface.c b/wpa_supplicant/ctrl_iface.c
index 499e6d3dd..0b931a7d5 100644
--- a/wpa_supplicant/ctrl_iface.c --- a/wpa_supplicant/ctrl_iface.c
+++ b/wpa_supplicant/ctrl_iface.c +++ b/wpa_supplicant/ctrl_iface.c
@@ -2325,7 +2325,7 @@ static int wpa_supplicant_ctrl_iface_status(struct wpa_supplicant *wpa_s, @@ -2326,7 +2326,7 @@ static int wpa_supplicant_ctrl_iface_sta
pos += ret; pos += ret;
} }
@ -185,7 +51,7 @@ index 499e6d3dd..0b931a7d5 100644
if (wpa_s->ap_iface) { if (wpa_s->ap_iface) {
pos += ap_ctrl_iface_wpa_get_status(wpa_s, pos, pos += ap_ctrl_iface_wpa_get_status(wpa_s, pos,
end - pos, end - pos,
@@ -11521,6 +11521,7 @@ char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s, @@ -11964,6 +11964,7 @@ char * wpa_supplicant_ctrl_iface_process
reply_len = -1; reply_len = -1;
} else if (os_strncmp(buf, "NOTE ", 5) == 0) { } else if (os_strncmp(buf, "NOTE ", 5) == 0) {
wpa_printf(MSG_INFO, "NOTE: %s", buf + 5); wpa_printf(MSG_INFO, "NOTE: %s", buf + 5);
@ -193,7 +59,7 @@ index 499e6d3dd..0b931a7d5 100644
} else if (os_strcmp(buf, "MIB") == 0) { } else if (os_strcmp(buf, "MIB") == 0) {
reply_len = wpa_sm_get_mib(wpa_s->wpa, reply, reply_size); reply_len = wpa_sm_get_mib(wpa_s->wpa, reply, reply_size);
if (reply_len >= 0) { if (reply_len >= 0) {
@@ -11533,6 +11534,7 @@ char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s, @@ -11976,6 +11977,7 @@ char * wpa_supplicant_ctrl_iface_process
reply_size - reply_len); reply_size - reply_len);
#endif /* CONFIG_MACSEC */ #endif /* CONFIG_MACSEC */
} }
@ -201,7 +67,7 @@ index 499e6d3dd..0b931a7d5 100644
} else if (os_strncmp(buf, "STATUS", 6) == 0) { } else if (os_strncmp(buf, "STATUS", 6) == 0) {
reply_len = wpa_supplicant_ctrl_iface_status( reply_len = wpa_supplicant_ctrl_iface_status(
wpa_s, buf + 6, reply, reply_size); wpa_s, buf + 6, reply, reply_size);
@@ -12021,6 +12023,7 @@ char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s, @@ -12464,6 +12466,7 @@ char * wpa_supplicant_ctrl_iface_process
reply_len = wpa_supplicant_ctrl_iface_bss( reply_len = wpa_supplicant_ctrl_iface_bss(
wpa_s, buf + 4, reply, reply_size); wpa_s, buf + 4, reply, reply_size);
#ifdef CONFIG_AP #ifdef CONFIG_AP
@ -209,7 +75,7 @@ index 499e6d3dd..0b931a7d5 100644
} else if (os_strcmp(buf, "STA-FIRST") == 0) { } else if (os_strcmp(buf, "STA-FIRST") == 0) {
reply_len = ap_ctrl_iface_sta_first(wpa_s, reply, reply_size); reply_len = ap_ctrl_iface_sta_first(wpa_s, reply, reply_size);
} else if (os_strncmp(buf, "STA ", 4) == 0) { } else if (os_strncmp(buf, "STA ", 4) == 0) {
@@ -12029,12 +12032,15 @@ char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s, @@ -12472,12 +12475,15 @@ char * wpa_supplicant_ctrl_iface_process
} else if (os_strncmp(buf, "STA-NEXT ", 9) == 0) { } else if (os_strncmp(buf, "STA-NEXT ", 9) == 0) {
reply_len = ap_ctrl_iface_sta_next(wpa_s, buf + 9, reply, reply_len = ap_ctrl_iface_sta_next(wpa_s, buf + 9, reply,
reply_size); reply_size);
@ -225,3 +91,167 @@ index 499e6d3dd..0b931a7d5 100644
} else if (os_strncmp(buf, "CHAN_SWITCH ", 12) == 0) { } else if (os_strncmp(buf, "CHAN_SWITCH ", 12) == 0) {
if (ap_ctrl_iface_chanswitch(wpa_s, buf + 12)) if (ap_ctrl_iface_chanswitch(wpa_s, buf + 12))
reply_len = -1; reply_len = -1;
--- a/src/ap/ctrl_iface_ap.c
+++ b/src/ap/ctrl_iface_ap.c
@@ -26,6 +26,26 @@
#include "taxonomy.h"
#include "wnm_ap.h"
+static const char * hw_mode_str(enum hostapd_hw_mode mode)
+{
+ switch (mode) {
+ case HOSTAPD_MODE_IEEE80211B:
+ return "b";
+ case HOSTAPD_MODE_IEEE80211G:
+ return "g";
+ case HOSTAPD_MODE_IEEE80211A:
+ return "a";
+ case HOSTAPD_MODE_IEEE80211AD:
+ return "ad";
+ case HOSTAPD_MODE_IEEE80211ANY:
+ return "any";
+ case NUM_HOSTAPD_MODES:
+ return "invalid";
+ }
+ return "unknown";
+}
+
+#ifdef CONFIG_CTRL_IFACE_MIB
static size_t hostapd_write_ht_mcs_bitmask(char *buf, size_t buflen,
size_t curr_len, const u8 *mcs_set)
@@ -212,26 +232,6 @@ static const char * timeout_next_str(int
}
-static const char * hw_mode_str(enum hostapd_hw_mode mode)
-{
- switch (mode) {
- case HOSTAPD_MODE_IEEE80211B:
- return "b";
- case HOSTAPD_MODE_IEEE80211G:
- return "g";
- case HOSTAPD_MODE_IEEE80211A:
- return "a";
- case HOSTAPD_MODE_IEEE80211AD:
- return "ad";
- case HOSTAPD_MODE_IEEE80211ANY:
- return "any";
- case NUM_HOSTAPD_MODES:
- return "invalid";
- }
- return "unknown";
-}
-
-
static int hostapd_ctrl_iface_sta_mib(struct hostapd_data *hapd,
struct sta_info *sta,
char *buf, size_t buflen)
@@ -493,6 +493,7 @@ int hostapd_ctrl_iface_sta_next(struct h
return hostapd_ctrl_iface_sta_mib(hapd, sta->next, buf, buflen);
}
+#endif
#ifdef CONFIG_P2P_MANAGER
static int p2p_manager_disconnect(struct hostapd_data *hapd, u16 stype,
@@ -884,12 +885,12 @@ int hostapd_ctrl_iface_status(struct hos
return len;
len += ret;
}
-
+#ifdef CONFIG_CTRL_IFACE_MIB
if (iface->conf->ieee80211n && !hapd->conf->disable_11n && mode) {
len = hostapd_write_ht_mcs_bitmask(buf, buflen, len,
mode->mcs_set);
}
-
+#endif /* CONFIG_CTRL_IFACE_MIB */
if (iface->current_rates && iface->num_rates) {
ret = os_snprintf(buf + len, buflen - len, "supported_rates=");
if (os_snprintf_error(buflen - len, ret))
--- a/src/ap/ieee802_1x.c
+++ b/src/ap/ieee802_1x.c
@@ -2834,6 +2834,7 @@ static const char * bool_txt(bool val)
return val ? "TRUE" : "FALSE";
}
+#ifdef CONFIG_CTRL_IFACE_MIB
int ieee802_1x_get_mib(struct hostapd_data *hapd, char *buf, size_t buflen)
{
@@ -3020,6 +3021,7 @@ int ieee802_1x_get_mib_sta(struct hostap
return len;
}
+#endif
#ifdef CONFIG_HS20
static void ieee802_1x_wnm_notif_send(void *eloop_ctx, void *timeout_ctx)
--- a/src/ap/wpa_auth.c
+++ b/src/ap/wpa_auth.c
@@ -5328,6 +5328,7 @@ static const char * wpa_bool_txt(int val
return val ? "TRUE" : "FALSE";
}
+#ifdef CONFIG_CTRL_IFACE_MIB
#define RSN_SUITE "%02x-%02x-%02x-%d"
#define RSN_SUITE_ARG(s) \
@@ -5480,7 +5481,7 @@ int wpa_get_mib_sta(struct wpa_state_mac
return len;
}
-
+#endif
void wpa_auth_countermeasures_start(struct wpa_authenticator *wpa_auth)
{
--- a/src/rsn_supp/wpa.c
+++ b/src/rsn_supp/wpa.c
@@ -3834,6 +3834,8 @@ static u32 wpa_key_mgmt_suite(struct wpa
}
+#ifdef CONFIG_CTRL_IFACE_MIB
+
#define RSN_SUITE "%02x-%02x-%02x-%d"
#define RSN_SUITE_ARG(s) \
((s) >> 24) & 0xff, ((s) >> 16) & 0xff, ((s) >> 8) & 0xff, (s) & 0xff
@@ -3915,6 +3917,7 @@ int wpa_sm_get_mib(struct wpa_sm *sm, ch
return (int) len;
}
+#endif
#endif /* CONFIG_CTRL_IFACE */
--- a/wpa_supplicant/ap.c
+++ b/wpa_supplicant/ap.c
@@ -1499,7 +1499,7 @@ int wpas_ap_wps_nfc_report_handover(stru
#endif /* CONFIG_WPS */
-#ifdef CONFIG_CTRL_IFACE
+#if defined(CONFIG_CTRL_IFACE) && defined(CONFIG_CTRL_IFACE_MIB)
int ap_ctrl_iface_sta_first(struct wpa_supplicant *wpa_s,
char *buf, size_t buflen)
--- a/wpa_supplicant/ctrl_iface.c
+++ b/wpa_supplicant/ctrl_iface.c
@@ -12493,6 +12493,7 @@ char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s,
} else if (os_strcmp(buf, "UPDATE_BEACON") == 0) {
if (wpas_ap_update_beacon(wpa_s))
reply_len = -1;
+#ifdef CONFIG_CTRL_IFACE_MIB
} else if (os_strncmp(buf, "ACCEPT_ACL ", 11) == 0) {
if (os_strncmp(buf + 11, "ADD_MAC ", 8) == 0) {
if (ap_ctrl_iface_acl_add_mac(wpa_s,
@@ -12545,6 +12546,7 @@ char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s,
} else {
reply_len = -1;
}
+#endif
#endif /* CONFIG_AP */
} else if (os_strcmp(buf, "SUSPEND") == 0) {
wpas_notify_suspend(wpa_s->global);

View File

@ -1,16 +1,6 @@
From 0111fae9ca0184e10b60494c4ecdc27f2636bc17 Mon Sep 17 00:00:00 2001
From: Patrick Walther <patrick.walther@netmodule.com>
Date: Fri, 24 Jul 2020 14:41:09 +0200
---
hostapd/hostapd_cli.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hostapd/hostapd_cli.c b/hostapd/hostapd_cli.c
index 60396f3da..ad39aeb3b 100644
--- a/hostapd/hostapd_cli.c --- a/hostapd/hostapd_cli.c
+++ b/hostapd/hostapd_cli.c +++ b/hostapd/hostapd_cli.c
@@ -744,7 +744,7 @@ static int wpa_ctrl_command_sta(struct wpa_ctrl *ctrl, const char *cmd, @@ -757,7 +757,7 @@ static int wpa_ctrl_command_sta(struct w
} }
buf[len] = '\0'; buf[len] = '\0';

View File

@ -1,16 +1,6 @@
From 09a00a07a0db13618bad412c058c9d4786f2264b Mon Sep 17 00:00:00 2001
From: Patrick Walther <patrick.walther@netmodule.com>
Date: Fri, 24 Jul 2020 14:41:09 +0200
---
src/common/wpa_common.c | 40 ++++++++++++++++++++++++++++++++++++++--
1 file changed, 38 insertions(+), 2 deletions(-)
diff --git a/src/common/wpa_common.c b/src/common/wpa_common.c
index 587cd88b2..2b2b09fb9 100644
--- a/src/common/wpa_common.c --- a/src/common/wpa_common.c
+++ b/src/common/wpa_common.c +++ b/src/common/wpa_common.c
@@ -2451,6 +2451,31 @@ u32 wpa_akm_to_suite(int akm) @@ -2719,6 +2719,31 @@ u32 wpa_akm_to_suite(int akm)
} }
@ -42,7 +32,7 @@ index 587cd88b2..2b2b09fb9 100644
int wpa_compare_rsn_ie(int ft_initial_assoc, int wpa_compare_rsn_ie(int ft_initial_assoc,
const u8 *ie1, size_t ie1len, const u8 *ie1, size_t ie1len,
const u8 *ie2, size_t ie2len) const u8 *ie2, size_t ie2len)
@@ -2458,8 +2483,19 @@ int wpa_compare_rsn_ie(int ft_initial_assoc, @@ -2726,8 +2751,19 @@ int wpa_compare_rsn_ie(int ft_initial_as
if (ie1 == NULL || ie2 == NULL) if (ie1 == NULL || ie2 == NULL)
return -1; return -1;

View File

@ -1,16 +1,6 @@
From 1c7809b15fab60dd8781248bd53ee4760d3c3ace Mon Sep 17 00:00:00 2001
From: Patrick Walther <patrick.walther@netmodule.com>
Date: Fri, 24 Jul 2020 14:41:09 +0200
---
src/ap/wps_hostapd.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/src/ap/wps_hostapd.c b/src/ap/wps_hostapd.c
index aacfa3372..0c351af5f 100644
--- a/src/ap/wps_hostapd.c --- a/src/ap/wps_hostapd.c
+++ b/src/ap/wps_hostapd.c +++ b/src/ap/wps_hostapd.c
@@ -394,9 +394,8 @@ static int hapd_wps_reconfig_in_memory(struct hostapd_data *hapd, @@ -394,9 +394,8 @@ static int hapd_wps_reconfig_in_memory(s
bss->wpa_pairwise |= WPA_CIPHER_GCMP; bss->wpa_pairwise |= WPA_CIPHER_GCMP;
else else
bss->wpa_pairwise |= WPA_CIPHER_CCMP; bss->wpa_pairwise |= WPA_CIPHER_CCMP;
@ -21,7 +11,7 @@ index aacfa3372..0c351af5f 100644
bss->wpa_pairwise |= WPA_CIPHER_TKIP; bss->wpa_pairwise |= WPA_CIPHER_TKIP;
#endif /* CONFIG_NO_TKIP */ #endif /* CONFIG_NO_TKIP */
bss->rsn_pairwise = bss->wpa_pairwise; bss->rsn_pairwise = bss->wpa_pairwise;
@@ -1181,8 +1180,7 @@ int hostapd_init_wps(struct hostapd_data *hapd, @@ -1181,8 +1180,7 @@ int hostapd_init_wps(struct hostapd_data
WPA_CIPHER_GCMP_256)) { WPA_CIPHER_GCMP_256)) {
wps->encr_types |= WPS_ENCR_AES; wps->encr_types |= WPS_ENCR_AES;
wps->encr_types_rsn |= WPS_ENCR_AES; wps->encr_types_rsn |= WPS_ENCR_AES;

View File

@ -1,14 +1,3 @@
From 833a09ecb52559b9dcef824ff29620d12a88f085 Mon Sep 17 00:00:00 2001
From: Patrick Walther <patrick.walther@netmodule.com>
Date: Fri, 24 Jul 2020 14:41:09 +0200
---
src/utils/wpa_debug.c | 36 ++++------------------
src/utils/wpa_debug.h | 69 +++++++++++++++++++++++++++++++++++++------
2 files changed, 65 insertions(+), 40 deletions(-)
diff --git a/src/utils/wpa_debug.c b/src/utils/wpa_debug.c
index a338a2039..a887d60b3 100644
--- a/src/utils/wpa_debug.c --- a/src/utils/wpa_debug.c
+++ b/src/utils/wpa_debug.c +++ b/src/utils/wpa_debug.c
@@ -206,7 +206,7 @@ void wpa_debug_close_linux_tracing(void) @@ -206,7 +206,7 @@ void wpa_debug_close_linux_tracing(void)
@ -20,7 +9,7 @@ index a338a2039..a887d60b3 100644
{ {
va_list ap; va_list ap;
@@ -255,7 +255,7 @@ void wpa_printf(int level, const char *fmt, ...) @@ -255,7 +255,7 @@ void wpa_printf(int level, const char *f
} }
@ -29,7 +18,7 @@ index a338a2039..a887d60b3 100644
size_t len, int show, int only_syslog) size_t len, int show, int only_syslog)
{ {
size_t i; size_t i;
@@ -382,19 +382,7 @@ static void _wpa_hexdump(int level, const char *title, const u8 *buf, @@ -382,19 +382,7 @@ static void _wpa_hexdump(int level, cons
#endif /* CONFIG_ANDROID_LOG */ #endif /* CONFIG_ANDROID_LOG */
} }
@ -71,7 +60,7 @@ index a338a2039..a887d60b3 100644
#ifdef CONFIG_DEBUG_FILE #ifdef CONFIG_DEBUG_FILE
static char *last_path = NULL; static char *last_path = NULL;
#endif /* CONFIG_DEBUG_FILE */ #endif /* CONFIG_DEBUG_FILE */
@@ -636,7 +610,7 @@ void wpa_msg_register_ifname_cb(wpa_msg_get_ifname_func func) @@ -644,7 +618,7 @@ void wpa_msg_register_ifname_cb(wpa_msg_
} }
@ -80,7 +69,7 @@ index a338a2039..a887d60b3 100644
{ {
va_list ap; va_list ap;
char *buf; char *buf;
@@ -674,7 +648,7 @@ void wpa_msg(void *ctx, int level, const char *fmt, ...) @@ -682,7 +656,7 @@ void wpa_msg(void *ctx, int level, const
} }
@ -89,13 +78,11 @@ index a338a2039..a887d60b3 100644
{ {
va_list ap; va_list ap;
char *buf; char *buf;
diff --git a/src/utils/wpa_debug.h b/src/utils/wpa_debug.h
index c6d5cc647..824538b41 100644
--- a/src/utils/wpa_debug.h --- a/src/utils/wpa_debug.h
+++ b/src/utils/wpa_debug.h +++ b/src/utils/wpa_debug.h
@@ -50,6 +50,17 @@ int wpa_debug_reopen_file(void); @@ -51,6 +51,17 @@ void wpa_debug_close_file(void);
void wpa_debug_close_file(void);
void wpa_debug_setup_stdout(void); void wpa_debug_setup_stdout(void);
void wpa_debug_stop_log(void);
+/* internal */ +/* internal */
+void _wpa_hexdump(int level, const char *title, const u8 *buf, +void _wpa_hexdump(int level, const char *title, const u8 *buf,
@ -111,7 +98,7 @@ index c6d5cc647..824538b41 100644
/** /**
* wpa_debug_printf_timestamp - Print timestamp for debug output * wpa_debug_printf_timestamp - Print timestamp for debug output
* *
@@ -70,9 +81,15 @@ void wpa_debug_print_timestamp(void); @@ -71,9 +82,15 @@ void wpa_debug_print_timestamp(void);
* *
* Note: New line '\n' is added to the end of the text when printing to stdout. * Note: New line '\n' is added to the end of the text when printing to stdout.
*/ */
@ -128,7 +115,7 @@ index c6d5cc647..824538b41 100644
/** /**
* wpa_hexdump - conditional hex dump * wpa_hexdump - conditional hex dump
* @level: priority level (MSG_*) of the message * @level: priority level (MSG_*) of the message
@@ -84,7 +101,13 @@ PRINTF_FORMAT(2, 3); @@ -85,7 +102,13 @@ PRINTF_FORMAT(2, 3);
* output may be directed to stdout, stderr, and/or syslog based on * output may be directed to stdout, stderr, and/or syslog based on
* configuration. The contents of buf is printed out has hex dump. * configuration. The contents of buf is printed out has hex dump.
*/ */
@ -143,7 +130,7 @@ index c6d5cc647..824538b41 100644
static inline void wpa_hexdump_buf(int level, const char *title, static inline void wpa_hexdump_buf(int level, const char *title,
const struct wpabuf *buf) const struct wpabuf *buf)
@@ -106,7 +129,13 @@ static inline void wpa_hexdump_buf(int level, const char *title, @@ -107,7 +130,13 @@ static inline void wpa_hexdump_buf(int l
* like wpa_hexdump(), but by default, does not include secret keys (passwords, * like wpa_hexdump(), but by default, does not include secret keys (passwords,
* etc.) in debug output. * etc.) in debug output.
*/ */
@ -158,7 +145,7 @@ index c6d5cc647..824538b41 100644
static inline void wpa_hexdump_buf_key(int level, const char *title, static inline void wpa_hexdump_buf_key(int level, const char *title,
const struct wpabuf *buf) const struct wpabuf *buf)
@@ -128,8 +157,14 @@ static inline void wpa_hexdump_buf_key(int level, const char *title, @@ -129,8 +158,14 @@ static inline void wpa_hexdump_buf_key(i
* the hex numbers and ASCII characters (for printable range) are shown. 16 * the hex numbers and ASCII characters (for printable range) are shown. 16
* bytes per line will be shown. * bytes per line will be shown.
*/ */
@ -175,7 +162,7 @@ index c6d5cc647..824538b41 100644
/** /**
* wpa_hexdump_ascii_key - conditional hex dump, hide keys * wpa_hexdump_ascii_key - conditional hex dump, hide keys
@@ -145,8 +180,14 @@ void wpa_hexdump_ascii(int level, const char *title, const void *buf, @@ -146,8 +181,14 @@ void wpa_hexdump_ascii(int level, const
* bytes per line will be shown. This works like wpa_hexdump_ascii(), but by * bytes per line will be shown. This works like wpa_hexdump_ascii(), but by
* default, does not include secret keys (passwords, etc.) in debug output. * default, does not include secret keys (passwords, etc.) in debug output.
*/ */
@ -192,7 +179,7 @@ index c6d5cc647..824538b41 100644
/* /*
* wpa_dbg() behaves like wpa_msg(), but it can be removed from build to reduce * wpa_dbg() behaves like wpa_msg(), but it can be removed from build to reduce
@@ -183,7 +224,12 @@ void wpa_hexdump_ascii_key(int level, const char *title, const void *buf, @@ -184,7 +225,12 @@ void wpa_hexdump_ascii_key(int level, co
* *
* Note: New line '\n' is added to the end of the text when printing to stdout. * Note: New line '\n' is added to the end of the text when printing to stdout.
*/ */
@ -206,7 +193,7 @@ index c6d5cc647..824538b41 100644
/** /**
* wpa_msg_ctrl - Conditional printf for ctrl_iface monitors * wpa_msg_ctrl - Conditional printf for ctrl_iface monitors
@@ -197,8 +243,13 @@ void wpa_msg(void *ctx, int level, const char *fmt, ...) PRINTF_FORMAT(3, 4); @@ -198,8 +244,13 @@ void wpa_msg(void *ctx, int level, const
* attached ctrl_iface monitors. In other words, it can be used for frequent * attached ctrl_iface monitors. In other words, it can be used for frequent
* events that do not need to be sent to syslog. * events that do not need to be sent to syslog.
*/ */

View File

@ -1,14 +1,3 @@
From 86099ab5f18972ae8fb503c2f3eead226486cb2d Mon Sep 17 00:00:00 2001
From: Patrick Walther <patrick.walther@netmodule.com>
Date: Fri, 24 Jul 2020 14:41:09 +0200
---
hostapd/main.c | 6 ++++--
wpa_supplicant/main.c | 11 ++++++++---
2 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/hostapd/main.c b/hostapd/main.c
index 6a7b91bf2..0c972bba9 100644
--- a/hostapd/main.c --- a/hostapd/main.c
+++ b/hostapd/main.c +++ b/hostapd/main.c
@@ -31,7 +31,7 @@ @@ -31,7 +31,7 @@
@ -20,7 +9,7 @@ index 6a7b91bf2..0c972bba9 100644
struct hapd_global { struct hapd_global {
void **drv_priv; void **drv_priv;
@@ -692,7 +692,7 @@ int main(int argc, char *argv[]) @@ -786,7 +786,7 @@ int main(int argc, char *argv[])
wpa_supplicant_event = hostapd_wpa_event; wpa_supplicant_event = hostapd_wpa_event;
wpa_supplicant_event_global = hostapd_wpa_event_global; wpa_supplicant_event_global = hostapd_wpa_event_global;
for (;;) { for (;;) {
@ -29,7 +18,7 @@ index 6a7b91bf2..0c972bba9 100644
if (c < 0) if (c < 0)
break; break;
switch (c) { switch (c) {
@@ -729,6 +729,8 @@ int main(int argc, char *argv[]) @@ -823,6 +823,8 @@ int main(int argc, char *argv[])
break; break;
#endif /* CONFIG_DEBUG_LINUX_TRACING */ #endif /* CONFIG_DEBUG_LINUX_TRACING */
case 'v': case 'v':
@ -38,8 +27,6 @@ index 6a7b91bf2..0c972bba9 100644
show_version(); show_version();
exit(1); exit(1);
case 'g': case 'g':
diff --git a/wpa_supplicant/main.c b/wpa_supplicant/main.c
index 535923ecd..5ebda5a67 100644
--- a/wpa_supplicant/main.c --- a/wpa_supplicant/main.c
+++ b/wpa_supplicant/main.c +++ b/wpa_supplicant/main.c
@@ -12,6 +12,7 @@ @@ -12,6 +12,7 @@

View File

@ -1,16 +1,6 @@
From cbf654d789340c578f1cd6648670f7c242c8dcfa Mon Sep 17 00:00:00 2001
From: Patrick Walther <patrick.walther@netmodule.com>
Date: Fri, 24 Jul 2020 14:41:09 +0200
---
hostapd/hostapd_cli.c | 8 --------
1 file changed, 8 deletions(-)
diff --git a/hostapd/hostapd_cli.c b/hostapd/hostapd_cli.c
index ad39aeb3b..6b5387869 100644
--- a/hostapd/hostapd_cli.c --- a/hostapd/hostapd_cli.c
+++ b/hostapd/hostapd_cli.c +++ b/hostapd/hostapd_cli.c
@@ -388,7 +388,6 @@ static int hostapd_cli_cmd_disassociate(struct wpa_ctrl *ctrl, int argc, @@ -401,7 +401,6 @@ static int hostapd_cli_cmd_disassociate(
} }
@ -18,7 +8,7 @@ index ad39aeb3b..6b5387869 100644
static int hostapd_cli_cmd_signature(struct wpa_ctrl *ctrl, int argc, static int hostapd_cli_cmd_signature(struct wpa_ctrl *ctrl, int argc,
char *argv[]) char *argv[])
{ {
@@ -401,7 +400,6 @@ static int hostapd_cli_cmd_signature(struct wpa_ctrl *ctrl, int argc, @@ -414,7 +413,6 @@ static int hostapd_cli_cmd_signature(str
os_snprintf(buf, sizeof(buf), "SIGNATURE %s", argv[0]); os_snprintf(buf, sizeof(buf), "SIGNATURE %s", argv[0]);
return wpa_ctrl_command(ctrl, buf); return wpa_ctrl_command(ctrl, buf);
} }
@ -26,7 +16,7 @@ index ad39aeb3b..6b5387869 100644
static int hostapd_cli_cmd_sa_query(struct wpa_ctrl *ctrl, int argc, static int hostapd_cli_cmd_sa_query(struct wpa_ctrl *ctrl, int argc,
@@ -418,7 +416,6 @@ static int hostapd_cli_cmd_sa_query(struct wpa_ctrl *ctrl, int argc, @@ -431,7 +429,6 @@ static int hostapd_cli_cmd_sa_query(stru
} }
@ -34,7 +24,7 @@ index ad39aeb3b..6b5387869 100644
static int hostapd_cli_cmd_wps_pin(struct wpa_ctrl *ctrl, int argc, static int hostapd_cli_cmd_wps_pin(struct wpa_ctrl *ctrl, int argc,
char *argv[]) char *argv[])
{ {
@@ -644,7 +641,6 @@ static int hostapd_cli_cmd_wps_config(struct wpa_ctrl *ctrl, int argc, @@ -657,7 +654,6 @@ static int hostapd_cli_cmd_wps_config(st
ssid_hex, argv[1]); ssid_hex, argv[1]);
return wpa_ctrl_command(ctrl, buf); return wpa_ctrl_command(ctrl, buf);
} }
@ -42,7 +32,7 @@ index ad39aeb3b..6b5387869 100644
static int hostapd_cli_cmd_disassoc_imminent(struct wpa_ctrl *ctrl, int argc, static int hostapd_cli_cmd_disassoc_imminent(struct wpa_ctrl *ctrl, int argc,
@@ -1579,13 +1575,10 @@ static const struct hostapd_cli_cmd hostapd_cli_commands[] = { @@ -1610,13 +1606,10 @@ static const struct hostapd_cli_cmd host
{ "disassociate", hostapd_cli_cmd_disassociate, { "disassociate", hostapd_cli_cmd_disassociate,
hostapd_complete_stations, hostapd_complete_stations,
"<addr> = disassociate a station" }, "<addr> = disassociate a station" },
@ -56,7 +46,7 @@ index ad39aeb3b..6b5387869 100644
{ "wps_pin", hostapd_cli_cmd_wps_pin, NULL, { "wps_pin", hostapd_cli_cmd_wps_pin, NULL,
"<uuid> <pin> [timeout] [addr] = add WPS Enrollee PIN" }, "<uuid> <pin> [timeout] [addr] = add WPS Enrollee PIN" },
{ "wps_check_pin", hostapd_cli_cmd_wps_check_pin, NULL, { "wps_check_pin", hostapd_cli_cmd_wps_check_pin, NULL,
@@ -1610,7 +1603,6 @@ static const struct hostapd_cli_cmd hostapd_cli_commands[] = { @@ -1641,7 +1634,6 @@ static const struct hostapd_cli_cmd host
"<SSID> <auth> <encr> <key> = configure AP" }, "<SSID> <auth> <encr> <key> = configure AP" },
{ "wps_get_status", hostapd_cli_cmd_wps_get_status, NULL, { "wps_get_status", hostapd_cli_cmd_wps_get_status, NULL,
"= show current WPS status" }, "= show current WPS status" },

View File

@ -1,13 +1,3 @@
From ee90e69b78884550b098dff70cd9df02834d6a21 Mon Sep 17 00:00:00 2001
From: Patrick Walther <patrick.walther@netmodule.com>
Date: Fri, 24 Jul 2020 14:41:09 +0200
---
wpa_supplicant/wpa_cli.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/wpa_supplicant/wpa_cli.c b/wpa_supplicant/wpa_cli.c
index 0e2315d25..91e07427f 100644
--- a/wpa_supplicant/wpa_cli.c --- a/wpa_supplicant/wpa_cli.c
+++ b/wpa_supplicant/wpa_cli.c +++ b/wpa_supplicant/wpa_cli.c
@@ -26,6 +26,15 @@ @@ -26,6 +26,15 @@

View File

@ -1,20 +0,0 @@
From 5c6d5f192b60fc0dd14085af9e4e530dbc7f359d Mon Sep 17 00:00:00 2001
From: Patrick Walther <patrick.walther@netmodule.com>
Date: Fri, 24 Jul 2020 14:41:09 +0200
---
src/drivers/linux_wext.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/drivers/linux_wext.h b/src/drivers/linux_wext.h
index e7c7001e1..1cb890974 100644
--- a/src/drivers/linux_wext.h
+++ b/src/drivers/linux_wext.h
@@ -26,6 +26,7 @@ typedef int32_t __s32;
typedef uint16_t __u16;
typedef int16_t __s16;
typedef uint8_t __u8;
+typedef int8_t __s8;
#ifndef __user
#define __user
#endif /* __user */

View File

@ -1,13 +1,3 @@
From 45669a452a963ac83bb788d66879f58e6feb894e Mon Sep 17 00:00:00 2001
From: Patrick Walther <patrick.walther@netmodule.com>
Date: Fri, 24 Jul 2020 14:41:09 +0200
---
hostapd/main.c | 29 +++++++++++++----------------
1 file changed, 13 insertions(+), 16 deletions(-)
diff --git a/hostapd/main.c b/hostapd/main.c
index 0c972bba9..859ff3046 100644
--- a/hostapd/main.c --- a/hostapd/main.c
+++ b/hostapd/main.c +++ b/hostapd/main.c
@@ -39,6 +39,8 @@ struct hapd_global { @@ -39,6 +39,8 @@ struct hapd_global {
@ -19,7 +9,7 @@ index 0c972bba9..859ff3046 100644
#ifndef CONFIG_NO_HOSTAPD_LOGGER #ifndef CONFIG_NO_HOSTAPD_LOGGER
@@ -146,6 +148,14 @@ static void hostapd_logger_cb(void *ctx, const u8 *addr, unsigned int module, @@ -146,6 +148,14 @@ static void hostapd_logger_cb(void *ctx,
} }
#endif /* CONFIG_NO_HOSTAPD_LOGGER */ #endif /* CONFIG_NO_HOSTAPD_LOGGER */
@ -34,16 +24,16 @@ index 0c972bba9..859ff3046 100644
/** /**
* hostapd_driver_init - Preparate driver interface * hostapd_driver_init - Preparate driver interface
@@ -164,6 +174,8 @@ static int hostapd_driver_init(struct hostapd_iface *iface) @@ -217,6 +227,8 @@ static int hostapd_driver_init(struct ho
return -1;
} }
#endif /* CONFIG_IEEE80211BE */
+ hapd->setup_complete_cb = hostapd_setup_complete_cb; + hapd->setup_complete_cb = hostapd_setup_complete_cb;
+ +
/* Initialize the driver interface */ /* Initialize the driver interface */
if (!(b[0] | b[1] | b[2] | b[3] | b[4] | b[5])) if (!(b[0] | b[1] | b[2] | b[3] | b[4] | b[5]))
b = NULL; b = NULL;
@@ -404,8 +416,6 @@ static void hostapd_global_deinit(const char *pid_file, int eloop_initialized) @@ -497,8 +509,6 @@ static void hostapd_global_deinit(const
#endif /* CONFIG_NATIVE_WINDOWS */ #endif /* CONFIG_NATIVE_WINDOWS */
eap_server_unregister_methods(); eap_server_unregister_methods();
@ -52,7 +42,7 @@ index 0c972bba9..859ff3046 100644
} }
@@ -431,18 +441,6 @@ static int hostapd_global_run(struct hapd_interfaces *ifaces, int daemonize, @@ -524,18 +534,6 @@ static int hostapd_global_run(struct hap
} }
#endif /* EAP_SERVER_TNC */ #endif /* EAP_SERVER_TNC */
@ -71,7 +61,7 @@ index 0c972bba9..859ff3046 100644
eloop_run(); eloop_run();
return 0; return 0;
@@ -645,8 +643,7 @@ int main(int argc, char *argv[]) @@ -739,8 +737,7 @@ int main(int argc, char *argv[])
struct hapd_interfaces interfaces; struct hapd_interfaces interfaces;
int ret = 1; int ret = 1;
size_t i, j; size_t i, j;

View File

@ -1,20 +1,17 @@
From a25ddcc5458fce3ca367d3d24d2a6ba8e7291689 Mon Sep 17 00:00:00 2001 From 4bb69d15477e0f2b00e166845341dc933de47c58 Mon Sep 17 00:00:00 2001
From: Antonio Quartulli <ordex@autistici.org> From: Antonio Quartulli <ordex@autistici.org>
Date: Sun, 3 Jun 2012 18:22:56 +0200 Date: Sun, 3 Jun 2012 18:22:56 +0200
Subject: [PATCH] wpa_supplicant: add new config params to be used with the Subject: [PATCHv2 601/602] wpa_supplicant: add new config params to be used
ibss join command with the ibss join command
Signed-hostap: Antonio Quartulli <ordex@autistici.org> Signed-hostap: Antonio Quartulli <ordex@autistici.org>
--- ---
src/drivers/driver.h | 4 ++ src/drivers/driver.h | 6 +++
wpa_supplicant/config.c | 94 +++++++++++++++++++++++++++++++++ wpa_supplicant/config.c | 96 +++++++++++++++++++++++++++++++++++++++
wpa_supplicant/config_ssid.h | 5 ++ wpa_supplicant/config_ssid.h | 6 +++
wpa_supplicant/wpa_supplicant.c | 6 +++ wpa_supplicant/wpa_supplicant.c | 23 +++++++---
4 files changed, 109 insertions(+) 4 files changed, 124 insertions(+), 7 deletions(-)
diff --git a/src/drivers/driver.h b/src/drivers/driver.h
index f7dfcc165..3c2a25ce8 100644
--- a/src/drivers/driver.h --- a/src/drivers/driver.h
+++ b/src/drivers/driver.h +++ b/src/drivers/driver.h
@@ -19,6 +19,7 @@ @@ -19,6 +19,7 @@
@ -25,7 +22,7 @@ index f7dfcc165..3c2a25ce8 100644
#include "common/defs.h" #include "common/defs.h"
#include "common/ieee802_11_defs.h" #include "common/ieee802_11_defs.h"
#include "common/wpa_common.h" #include "common/wpa_common.h"
@@ -893,6 +894,9 @@ struct wpa_driver_associate_params { @@ -953,6 +954,9 @@ struct wpa_driver_associate_params {
* responsible for selecting with which BSS to associate. */ * responsible for selecting with which BSS to associate. */
const u8 *bssid; const u8 *bssid;
@ -35,8 +32,6 @@ index f7dfcc165..3c2a25ce8 100644
/** /**
* bssid_hint - BSSID of a proposed AP * bssid_hint - BSSID of a proposed AP
* *
diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c
index ec8301ab9..57a8dd4fb 100644
--- a/wpa_supplicant/config.c --- a/wpa_supplicant/config.c
+++ b/wpa_supplicant/config.c +++ b/wpa_supplicant/config.c
@@ -18,6 +18,7 @@ @@ -18,6 +18,7 @@
@ -47,7 +42,7 @@ index ec8301ab9..57a8dd4fb 100644
#include "config.h" #include "config.h"
@@ -2321,6 +2322,97 @@ static char * wpa_config_write_peerkey(const struct parse_data *data, @@ -2389,6 +2390,97 @@ static char * wpa_config_write_mac_value
#endif /* NO_CONFIG_WRITE */ #endif /* NO_CONFIG_WRITE */
@ -145,7 +140,7 @@ index ec8301ab9..57a8dd4fb 100644
/* Helper macros for network block parser */ /* Helper macros for network block parser */
#ifdef OFFSET #ifdef OFFSET
@@ -2605,6 +2697,8 @@ static const struct parse_data ssid_fields[] = { @@ -2674,6 +2766,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) },
@ -154,8 +149,6 @@ index ec8301ab9..57a8dd4fb 100644
#ifdef CONFIG_MACSEC #ifdef CONFIG_MACSEC
{ INT_RANGE(macsec_policy, 0, 1) }, { INT_RANGE(macsec_policy, 0, 1) },
{ INT_RANGE(macsec_integ_only, 0, 1) }, { INT_RANGE(macsec_integ_only, 0, 1) },
diff --git a/wpa_supplicant/config_ssid.h b/wpa_supplicant/config_ssid.h
index d5c90122a..de664371c 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
@@ -10,8 +10,10 @@ @@ -10,8 +10,10 @@
@ -169,7 +162,7 @@ index d5c90122a..de664371c 100644
#define DEFAULT_EAP_WORKAROUND ((unsigned int) -1) #define DEFAULT_EAP_WORKAROUND ((unsigned int) -1)
@@ -846,6 +848,9 @@ struct wpa_ssid { @@ -879,6 +881,9 @@ struct wpa_ssid {
*/ */
void *parent_cred; void *parent_cred;
@ -179,11 +172,9 @@ index d5c90122a..de664371c 100644
#ifdef CONFIG_MACSEC #ifdef CONFIG_MACSEC
/** /**
* macsec_policy - Determines the policy for MACsec secure session * macsec_policy - Determines the policy for MACsec secure session
diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
index c18723384..605b81179 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
@@ -3883,6 +3883,12 @@ static void wpas_start_assoc_cb(struct wpa_radio_work *work, int deinit) @@ -4203,6 +4203,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;

View File

@ -1,62 +0,0 @@
From 62c9667d1f53d9e7612352b497b67224063049bb Mon Sep 17 00:00:00 2001
From: Antonio Quartulli <ordex@autistici.org>
Date: Sun, 3 Jun 2012 18:42:25 +0200
Subject: [PATCH] driver_nl80211: use new parameters during ibss join
Signed-hostap: Antonio Quartulli <ordex@autistici.org>
---
src/drivers/driver_nl80211.c | 33 ++++++++++++++++++++++++++++++++-
1 file changed, 32 insertions(+), 1 deletion(-)
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index a9ae0fbe2..17875670d 100644
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -5994,7 +5994,7 @@ static int wpa_driver_nl80211_ibss(struct wpa_driver_nl80211_data *drv,
struct wpa_driver_associate_params *params)
{
struct nl_msg *msg;
- int ret = -1;
+ int ret = -1, i;
int count = 0;
wpa_printf(MSG_DEBUG, "nl80211: Join IBSS (ifindex=%d)", drv->ifindex);
@@ -6021,6 +6021,37 @@ retry:
nl80211_put_beacon_int(msg, params->beacon_int))
goto fail;
+ if (params->fixed_freq) {
+ wpa_printf(MSG_DEBUG, " * fixed_freq");
+ nla_put_flag(msg, NL80211_ATTR_FREQ_FIXED);
+ }
+
+ if (params->beacon_int > 0) {
+ wpa_printf(MSG_DEBUG, " * beacon_int=%d",
+ params->beacon_int);
+ nla_put_u32(msg, NL80211_ATTR_BEACON_INTERVAL,
+ params->beacon_int);
+ }
+
+ if (params->rates[0] > 0) {
+ wpa_printf(MSG_DEBUG, " * basic_rates:");
+ i = 0;
+ while (i < NL80211_MAX_SUPP_RATES &&
+ params->rates[i] > 0) {
+ wpa_printf(MSG_DEBUG, " %.1f",
+ (double)params->rates[i] / 2);
+ i++;
+ }
+ nla_put(msg, NL80211_ATTR_BSS_BASIC_RATES, i,
+ params->rates);
+ }
+
+ if (params->mcast_rate > 0) {
+ wpa_printf(MSG_DEBUG, " * mcast_rate=%.1f",
+ (double)params->mcast_rate / 10);
+ nla_put_u32(msg, NL80211_ATTR_MCAST_RATE, params->mcast_rate);
+ }
+
ret = nl80211_set_conn_keys(params, msg);
if (ret)
goto fail;

View File

@ -1,4 +1,3 @@
From e46daac3ce5e3d0d9c43f21fd895ecbab247d00e Mon Sep 17 00:00:00 2001
From: Sven Eckelmann <sven.eckelmann@openmesh.com> From: Sven Eckelmann <sven.eckelmann@openmesh.com>
Date: Thu, 11 May 2017 08:21:45 +0200 Date: Thu, 11 May 2017 08:21:45 +0200
Subject: [PATCH] set mcast_rate in mesh mode Subject: [PATCH] set mcast_rate in mesh mode
@ -18,17 +17,9 @@ because newer drivers seem to support 802.11s but not IBSS anymore.
Signed-off-by: Sven Eckelmann <sven.eckelmann@openmesh.com> Signed-off-by: Sven Eckelmann <sven.eckelmann@openmesh.com>
Tested-by: Simon Wunderlich <simon.wunderlich@openmesh.com> Tested-by: Simon Wunderlich <simon.wunderlich@openmesh.com>
---
src/drivers/driver.h | 1 +
src/drivers/driver_nl80211.c | 13 +++++++++++++
wpa_supplicant/mesh.c | 1 +
3 files changed, 15 insertions(+)
diff --git a/src/drivers/driver.h b/src/drivers/driver.h
index 3c2a25ce8..836c16b91 100644
--- a/src/drivers/driver.h --- a/src/drivers/driver.h
+++ b/src/drivers/driver.h +++ b/src/drivers/driver.h
@@ -1660,6 +1660,7 @@ struct wpa_driver_mesh_join_params { @@ -1827,6 +1827,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;
bool handle_dfs; bool handle_dfs;
@ -36,11 +27,9 @@ index 3c2a25ce8..836c16b91 100644
}; };
struct wpa_driver_set_key_params { struct wpa_driver_set_key_params {
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index 17875670d..69afdabbc 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
@@ -10611,6 +10611,18 @@ static int nl80211_put_mesh_id(struct nl_msg *msg, const u8 *mesh_id, @@ -11626,6 +11626,18 @@ static int nl80211_put_mesh_id(struct nl
} }
@ -59,7 +48,7 @@ index 17875670d..69afdabbc 100644
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)
{ {
@@ -10672,6 +10684,7 @@ static int nl80211_join_mesh(struct i802_bss *bss, @@ -11687,6 +11699,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) ||
@ -67,11 +56,9 @@ index 17875670d..69afdabbc 100644
nl80211_put_dtim_period(msg, params->dtim_period)) nl80211_put_dtim_period(msg, params->dtim_period))
goto fail; goto fail;
diff --git a/wpa_supplicant/mesh.c b/wpa_supplicant/mesh.c
index ad067da67..2cbe8e366 100644
--- a/wpa_supplicant/mesh.c --- a/wpa_supplicant/mesh.c
+++ b/wpa_supplicant/mesh.c +++ b/wpa_supplicant/mesh.c
@@ -632,6 +632,7 @@ int wpa_supplicant_join_mesh(struct wpa_supplicant *wpa_s, @@ -632,6 +632,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;

View File

@ -1,29 +1,13 @@
From a6e07dbd4c1958c76cb12211a8787c709a2b0f74 Mon Sep 17 00:00:00 2001
From: Patrick Walther <patrick.walther@netmodule.com>
Date: Fri, 24 Jul 2020 14:41:09 +0200
---
wpa_supplicant/wpa_supplicant.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
index 605b81179..4519cad0e 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
@@ -2528,11 +2528,13 @@ void ibss_mesh_setup_freq(struct wpa_supplicant *wpa_s, @@ -3094,6 +3094,10 @@ void ibss_mesh_setup_freq(struct wpa_sup
for (j = 0; j < wpa_s->last_scan_res_used; j++) {
struct wpa_bss *bss = wpa_s->last_scan_res[j];
- if (ssid->mode != WPAS_MODE_IBSS) freq->freq = ssid->frequency;
+ /* Don't adjust control freq in case of fixed_freq */
+ if (ssid->fixed_freq) {
+ obss_scan = 0;
break;
+ }
- /* Don't adjust control freq in case of fixed_freq */ + if (ssid->fixed_freq) {
- if (ssid->fixed_freq) + obss_scan = 0;
+ if (ssid->mode != WPAS_MODE_IBSS) + }
break; +
if (ssid->mode == WPAS_MODE_IBSS && !ssid->fixed_freq) {
struct wpa_bss *bss = ibss_find_existing_bss(wpa_s, ssid);
if (!bss_is_ibss(bss))

View File

@ -1,4 +1,4 @@
From 73289165d2871182af4ca7f95a099b53bef8e459 Mon Sep 17 00:00:00 2001 From c9304d3303d563ad6d2619f4e07864ed12f96889 Mon Sep 17 00:00:00 2001
From: David Bauer <mail@david-bauer.net> From: David Bauer <mail@david-bauer.net>
Date: Sat, 14 May 2022 21:41:03 +0200 Date: Sat, 14 May 2022 21:41:03 +0200
Subject: [PATCH] hostapd: config: support random BSS color Subject: [PATCH] hostapd: config: support random BSS color
@ -7,16 +7,13 @@ Configure the HE BSS color to a random value in case the config defines
a BSS color which exceeds the max BSS color (63). a BSS color which exceeds the max BSS color (63).
Signed-off-by: David Bauer <mail@david-bauer.net> Signed-off-by: David Bauer <mail@david-bauer.net>
--- ---
hostapd/config_file.c | 2 ++ hostapd/config_file.c | 2 ++
1 file changed, 2 insertions(+) 1 file changed, 2 insertions(+)
diff --git a/hostapd/config_file.c b/hostapd/config_file.c
index 03b902076..bc988d0dd 100644
--- a/hostapd/config_file.c --- a/hostapd/config_file.c
+++ b/hostapd/config_file.c +++ b/hostapd/config_file.c
@@ -3485,6 +3485,8 @@ static int hostapd_config_fill(struct hostapd_config *conf, @@ -3498,6 +3498,8 @@ static int hostapd_config_fill(struct ho
} else if (os_strcmp(buf, "he_bss_color") == 0) { } else if (os_strcmp(buf, "he_bss_color") == 0) {
conf->he_op.he_bss_color = atoi(pos) & 0x3f; conf->he_op.he_bss_color = atoi(pos) & 0x3f;
conf->he_op.he_bss_color_disabled = 0; conf->he_op.he_bss_color_disabled = 0;

View File

@ -1,34 +1,29 @@
From 78ec7a84dd829e4dbc0bfd2d9c82d7c1a06467ef Mon Sep 17 00:00:00 2001
From: Patrick Walther <patrick.walther@netmodule.com>
Date: Fri, 24 Jul 2020 14:41:09 +0200
---
src/ap/acs.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/src/ap/acs.c b/src/ap/acs.c
index faaedbfdb..a24e5410c 100644
--- a/src/ap/acs.c --- a/src/ap/acs.c
+++ b/src/ap/acs.c +++ b/src/ap/acs.c
@@ -420,20 +420,19 @@ static int acs_usable_bw160_chan(const struct hostapd_channel_data *chan) @@ -455,17 +455,17 @@ static int acs_get_bw_center_chan(int fr
static int acs_survey_is_sufficient(struct freq_survey *survey) static int acs_survey_is_sufficient(struct freq_survey *survey)
{ {
if (!(survey->filled & SURVEY_HAS_NF)) { if (!(survey->filled & SURVEY_HAS_NF)) {
+ survey->nf = -95; + survey->nf = -95;
wpa_printf(MSG_INFO, "ACS: Survey is missing noise floor"); wpa_printf(MSG_INFO,
"ACS: Survey for freq %d is missing noise floor",
survey->freq);
- return 0; - return 0;
} }
if (!(survey->filled & SURVEY_HAS_CHAN_TIME)) { if (!(survey->filled & SURVEY_HAS_CHAN_TIME)) {
+ survey->channel_time = 0; + survey->channel_time = 0;
wpa_printf(MSG_INFO, "ACS: Survey is missing channel time"); wpa_printf(MSG_INFO,
"ACS: Survey for freq %d is missing channel time",
survey->freq);
- return 0; - return 0;
} }
if (!(survey->filled & SURVEY_HAS_CHAN_TIME_BUSY) && if (!(survey->filled & SURVEY_HAS_CHAN_TIME_BUSY) &&
!(survey->filled & SURVEY_HAS_CHAN_TIME_RX)) { @@ -473,7 +473,6 @@ static int acs_survey_is_sufficient(stru
wpa_printf(MSG_INFO, wpa_printf(MSG_INFO,
"ACS: Survey is missing RX and busy time (at least one is required)"); "ACS: Survey for freq %d is missing RX and busy time (at least one is required)",
survey->freq);
- return 0; - return 0;
} }

View File

@ -1,17 +1,6 @@
From 7220bb0ffbb1b6ed518f7b258e454bbd5b6fb75a Mon Sep 17 00:00:00 2001
From: Patrick Walther <patrick.walther@netmodule.com>
Date: Fri, 24 Jul 2020 14:41:09 +0200
---
hostapd/Makefile | 4 ++--
wpa_supplicant/Makefile | 10 +++++-----
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/hostapd/Makefile b/hostapd/Makefile
index 6a125ed80..19a88e0fd 100644
--- a/hostapd/Makefile --- a/hostapd/Makefile
+++ b/hostapd/Makefile +++ b/hostapd/Makefile
@@ -1307,7 +1307,7 @@ hostapd_multi.a: $(BCHECK) $(OBJS) @@ -1396,7 +1396,7 @@ hostapd_multi.a: $(BCHECK) $(OBJS)
@$(AR) cr $@ hostapd_multi.o $(OBJS) @$(AR) cr $@ hostapd_multi.o $(OBJS)
hostapd: $(OBJS) hostapd: $(OBJS)
@ -20,7 +9,7 @@ index 6a125ed80..19a88e0fd 100644
@$(E) " LD " $@ @$(E) " LD " $@
ifdef CONFIG_WPA_TRACE ifdef CONFIG_WPA_TRACE
@@ -1318,7 +1318,7 @@ _OBJS_VAR := OBJS_c @@ -1407,7 +1407,7 @@ _OBJS_VAR := OBJS_c
include ../src/objs.mk include ../src/objs.mk
hostapd_cli: $(OBJS_c) hostapd_cli: $(OBJS_c)
@ -29,11 +18,9 @@ index 6a125ed80..19a88e0fd 100644
@$(E) " LD " $@ @$(E) " LD " $@
NOBJS = nt_password_hash.o ../src/crypto/ms_funcs.o $(SHA1OBJS) NOBJS = nt_password_hash.o ../src/crypto/ms_funcs.o $(SHA1OBJS)
diff --git a/wpa_supplicant/Makefile b/wpa_supplicant/Makefile
index 57a89edcb..10f6da71c 100644
--- a/wpa_supplicant/Makefile --- a/wpa_supplicant/Makefile
+++ b/wpa_supplicant/Makefile +++ b/wpa_supplicant/Makefile
@@ -1949,31 +1949,31 @@ wpa_supplicant_multi.a: .config $(BCHECK) $(OBJS) $(EXTRA_progs) @@ -2039,31 +2039,31 @@ wpa_supplicant_multi.a: .config $(BCHECK
@$(AR) cr $@ wpa_supplicant_multi.o $(OBJS) @$(AR) cr $@ wpa_supplicant_multi.o $(OBJS)
wpa_supplicant: $(BCHECK) $(OBJS) $(EXTRA_progs) wpa_supplicant: $(BCHECK) $(OBJS) $(EXTRA_progs)

View File

@ -1,22 +1,9 @@
From 4725c6a64dee96e3d3b7d906dfc9679d3f4a3190 Mon Sep 17 00:00:00 2001
From: OpenEmbedded <oe.patch@oe>
Date: Thu, 15 Sep 2022 12:35:28 +0000
---
src/ap/hostapd.h | 18 ++++++++++++++++++
src/ap/rrm.c | 2 ++
src/ap/wnm_ap.c | 6 ++++++
3 files changed, 26 insertions(+)
diff --git a/src/ap/hostapd.h b/src/ap/hostapd.h
index cbe03a060..5d867f086 100644
--- a/src/ap/hostapd.h --- a/src/ap/hostapd.h
+++ b/src/ap/hostapd.h +++ b/src/ap/hostapd.h
@@ -150,6 +150,21 @@ struct hostapd_sae_commit_queue { @@ -163,6 +163,21 @@ struct hostapd_sae_commit_queue {
u8 msg[];
}; };
+/** /**
+ * struct hostapd_openwrt_stats - OpenWrt custom STA/AP statistics + * struct hostapd_openwrt_stats - OpenWrt custom STA/AP statistics
+ */ + */
+struct hostapd_openwrt_stats { +struct hostapd_openwrt_stats {
@ -31,12 +18,13 @@ index cbe03a060..5d867f086 100644
+ } wnm; + } wnm;
+}; +};
+ +
/** +/**
* struct hostapd_data - hostapd per-BSS data structure * struct hostapd_data - hostapd per-BSS data structure
*/ */
@@ -164,6 +179,9 @@ struct hostapd_data { struct hostapd_data {
@@ -182,6 +197,9 @@ struct hostapd_data {
u8 own_addr[ETH_ALEN]; struct hostapd_data *mld_first_bss;
+ /* OpenWrt specific statistics */ + /* OpenWrt specific statistics */
+ struct hostapd_openwrt_stats openwrt_stats; + struct hostapd_openwrt_stats openwrt_stats;
@ -44,24 +32,9 @@ index cbe03a060..5d867f086 100644
int num_sta; /* number of entries in sta_list */ int num_sta; /* number of entries in sta_list */
struct sta_info *sta_list; /* STA info list head */ struct sta_info *sta_list; /* STA info list head */
#define STA_HASH_SIZE 256 #define STA_HASH_SIZE 256
diff --git a/src/ap/rrm.c b/src/ap/rrm.c
index f2d5cd16e..1aa9aa89f 100644
--- a/src/ap/rrm.c
+++ b/src/ap/rrm.c
@@ -269,6 +269,8 @@ static void hostapd_send_nei_report_resp(struct hostapd_data *hapd,
}
}
+ hapd->openwrt_stats.rrm.neighbor_report_tx++;
+
hostapd_drv_send_action(hapd, hapd->iface->freq, 0, addr,
wpabuf_head(buf), wpabuf_len(buf));
wpabuf_free(buf);
diff --git a/src/ap/wnm_ap.c b/src/ap/wnm_ap.c
index 23a352c9b..fde743acc 100644
--- a/src/ap/wnm_ap.c --- a/src/ap/wnm_ap.c
+++ b/src/ap/wnm_ap.c +++ b/src/ap/wnm_ap.c
@@ -386,6 +386,7 @@ static int ieee802_11_send_bss_trans_mgmt_request(struct hostapd_data *hapd, @@ -386,6 +386,7 @@ static int ieee802_11_send_bss_trans_mgm
mgmt->u.action.u.bss_tm_req.validity_interval = 1; mgmt->u.action.u.bss_tm_req.validity_interval = 1;
pos = mgmt->u.action.u.bss_tm_req.variable; pos = mgmt->u.action.u.bss_tm_req.variable;
@ -69,9 +42,9 @@ index 23a352c9b..fde743acc 100644
wpa_printf(MSG_DEBUG, "WNM: Send BSS Transition Management Request to " wpa_printf(MSG_DEBUG, "WNM: Send BSS Transition Management Request to "
MACSTR " dialog_token=%u req_mode=0x%x disassoc_timer=%u " MACSTR " dialog_token=%u req_mode=0x%x disassoc_timer=%u "
"validity_interval=%u", "validity_interval=%u",
@@ -659,10 +660,12 @@ int ieee802_11_rx_wnm_action_ap(struct hostapd_data *hapd, @@ -790,10 +791,12 @@ int ieee802_11_rx_wnm_action_ap(struct h
plen);
switch (action) { return 0;
case WNM_BSS_TRANS_MGMT_QUERY: case WNM_BSS_TRANS_MGMT_QUERY:
+ hapd->openwrt_stats.wnm.bss_transition_query_rx++; + hapd->openwrt_stats.wnm.bss_transition_query_rx++;
ieee802_11_rx_bss_trans_mgmt_query(hapd, mgmt->sa, payload, ieee802_11_rx_bss_trans_mgmt_query(hapd, mgmt->sa, payload,
@ -82,7 +55,7 @@ index 23a352c9b..fde743acc 100644
ieee802_11_rx_bss_trans_mgmt_resp(hapd, mgmt->sa, payload, ieee802_11_rx_bss_trans_mgmt_resp(hapd, mgmt->sa, payload,
plen); plen);
return 0; return 0;
@@ -709,6 +712,7 @@ int wnm_send_disassoc_imminent(struct hostapd_data *hapd, @@ -840,6 +843,7 @@ int wnm_send_disassoc_imminent(struct ho
pos = mgmt->u.action.u.bss_tm_req.variable; pos = mgmt->u.action.u.bss_tm_req.variable;
@ -90,7 +63,7 @@ index 23a352c9b..fde743acc 100644
wpa_printf(MSG_DEBUG, "WNM: Send BSS Transition Management Request frame to indicate imminent disassociation (disassoc_timer=%d) to " wpa_printf(MSG_DEBUG, "WNM: Send BSS Transition Management Request frame to indicate imminent disassociation (disassoc_timer=%d) to "
MACSTR, disassoc_timer, MAC2STR(sta->addr)); MACSTR, disassoc_timer, MAC2STR(sta->addr));
if (hostapd_drv_send_mlme(hapd, buf, pos - buf, 0, NULL, 0, 0) < 0) { if (hostapd_drv_send_mlme(hapd, buf, pos - buf, 0, NULL, 0, 0) < 0) {
@@ -790,6 +794,7 @@ int wnm_send_ess_disassoc_imminent(struct hostapd_data *hapd, @@ -921,6 +925,7 @@ int wnm_send_ess_disassoc_imminent(struc
return -1; return -1;
} }
@ -98,7 +71,7 @@ index 23a352c9b..fde743acc 100644
if (disassoc_timer) { if (disassoc_timer) {
/* send disassociation frame after time-out */ /* send disassociation frame after time-out */
set_disassoc_timer(hapd, sta, disassoc_timer); set_disassoc_timer(hapd, sta, disassoc_timer);
@@ -870,6 +875,7 @@ int wnm_send_bss_tm_req(struct hostapd_data *hapd, struct sta_info *sta, @@ -1001,6 +1006,7 @@ int wnm_send_bss_tm_req(struct hostapd_d
} }
os_free(buf); os_free(buf);
@ -106,3 +79,14 @@ index 23a352c9b..fde743acc 100644
if (disassoc_timer) { if (disassoc_timer) {
/* send disassociation frame after time-out */ /* send disassociation frame after time-out */
set_disassoc_timer(hapd, sta, disassoc_timer); set_disassoc_timer(hapd, sta, disassoc_timer);
--- a/src/ap/rrm.c
+++ b/src/ap/rrm.c
@@ -269,6 +269,8 @@ static void hostapd_send_nei_report_resp
}
}
+ hapd->openwrt_stats.rrm.neighbor_report_tx++;
+
hostapd_drv_send_action(hapd, hapd->iface->freq, 0, addr,
wpabuf_head(buf), wpabuf_len(buf));
wpabuf_free(buf);

View File

@ -1,13 +1,3 @@
From 8b94367a604589d061f40f7e22b38bf59e702c9c Mon Sep 17 00:00:00 2001
From: Patrick Walther <patrick.walther@netmodule.com>
Date: Fri, 24 Jul 2020 14:41:09 +0200
---
wpa_supplicant/wps_supplicant.h | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/wpa_supplicant/wps_supplicant.h b/wpa_supplicant/wps_supplicant.h
index c55936cee..52fb13bc1 100644
--- a/wpa_supplicant/wps_supplicant.h --- a/wpa_supplicant/wps_supplicant.h
+++ b/wpa_supplicant/wps_supplicant.h +++ b/wpa_supplicant/wps_supplicant.h
@@ -9,6 +9,7 @@ @@ -9,6 +9,7 @@

View File

@ -1,13 +1,3 @@
From a1d6be648f6aa12d34bc4cfe8fb1c40ce4d1d427 Mon Sep 17 00:00:00 2001
From: OpenEmbedded <oe.patch@oe>
Date: Thu, 15 Sep 2022 12:35:28 +0000
---
src/common/wpa_ctrl.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/src/common/wpa_ctrl.c b/src/common/wpa_ctrl.c
index 7e197f094..791fdbf93 100644
--- a/src/common/wpa_ctrl.c --- a/src/common/wpa_ctrl.c
+++ b/src/common/wpa_ctrl.c +++ b/src/common/wpa_ctrl.c
@@ -135,7 +135,7 @@ try_again: @@ -135,7 +135,7 @@ try_again:

View File

@ -1,8 +1,8 @@
diff --git a/hostapd/config_file.c b/hostapd/config_file.c diff --git a/hostapd/config_file.c b/hostapd/config_file.c
index bc988d0dd..67b385ded 100644 index e0589d540..ec7955179 100644
--- a/hostapd/config_file.c --- a/hostapd/config_file.c
+++ b/hostapd/config_file.c +++ b/hostapd/config_file.c
@@ -2412,6 +2412,8 @@ static int hostapd_config_fill(struct hostapd_config *conf, @@ -2418,6 +2418,8 @@ static int hostapd_config_fill(struct hostapd_config *conf,
bss->isolate = atoi(pos); bss->isolate = atoi(pos);
} else if (os_strcmp(buf, "ap_max_inactivity") == 0) { } else if (os_strcmp(buf, "ap_max_inactivity") == 0) {
bss->ap_max_inactivity = atoi(pos); bss->ap_max_inactivity = atoi(pos);
@ -10,21 +10,12 @@ index bc988d0dd..67b385ded 100644
+ bss->config_id = os_strdup(pos); + bss->config_id = os_strdup(pos);
} else if (os_strcmp(buf, "skip_inactivity_poll") == 0) { } else if (os_strcmp(buf, "skip_inactivity_poll") == 0) {
bss->skip_inactivity_poll = atoi(pos); bss->skip_inactivity_poll = atoi(pos);
} else if (os_strcmp(buf, "country_code") == 0) { } else if (os_strcmp(buf, "config_id") == 0) {
@@ -3117,6 +3119,8 @@ static int hostapd_config_fill(struct hostapd_config *conf,
}
} else if (os_strcmp(buf, "acs_exclude_dfs") == 0) {
conf->acs_exclude_dfs = atoi(pos);
+ } else if (os_strcmp(buf, "radio_config_id") == 0) {
+ conf->config_id = os_strdup(pos);
} else if (os_strcmp(buf, "op_class") == 0) {
conf->op_class = atoi(pos);
} else if (os_strcmp(buf, "channel") == 0) {
diff --git a/hostapd/ctrl_iface.c b/hostapd/ctrl_iface.c diff --git a/hostapd/ctrl_iface.c b/hostapd/ctrl_iface.c
index 9215ab739..47183687f 100644 index 0b4de6999..92b5f90db 100644
--- a/hostapd/ctrl_iface.c --- a/hostapd/ctrl_iface.c
+++ b/hostapd/ctrl_iface.c +++ b/hostapd/ctrl_iface.c
@@ -186,7 +186,7 @@ static int hostapd_ctrl_iface_update(struct hostapd_data *hapd, char *txt) @@ -187,7 +187,7 @@ static int hostapd_ctrl_iface_update(struct hostapd_data *hapd, char *txt)
iface->interfaces->config_read_cb = hostapd_ctrl_iface_config_read; iface->interfaces->config_read_cb = hostapd_ctrl_iface_config_read;
reload_opts = txt; reload_opts = txt;
@ -34,31 +25,23 @@ index 9215ab739..47183687f 100644
iface->interfaces->config_read_cb = config_read_cb; iface->interfaces->config_read_cb = config_read_cb;
} }
diff --git a/hostapd/main.c b/hostapd/main.c diff --git a/hostapd/main.c b/hostapd/main.c
index 859ff3046..0d0e92e9e 100644 index 1b1575e04..b4ef3485f 100644
--- a/hostapd/main.c --- a/hostapd/main.c
+++ b/hostapd/main.c +++ b/hostapd/main.c
@@ -317,7 +317,7 @@ static void handle_term(int sig, void *signal_ctx) @@ -410,7 +410,7 @@ static void handle_term(int sig, void *signal_ctx)
static int handle_reload_iface(struct hostapd_iface *iface, void *ctx) static int handle_reload_iface(struct hostapd_iface *iface, void *ctx)
{ {
- if (hostapd_reload_config(iface) < 0) { - if (hostapd_reload_config(iface) < 0) {
+ if (hostapd_reload_config(iface, 0) < 0) { + if (hostapd_reload_config(iface,0 ) < 0) {
wpa_printf(MSG_WARNING, "Failed to read new configuration " wpa_printf(MSG_WARNING, "Failed to read new configuration "
"file - continuing with old."); "file - continuing with old.");
} }
diff --git a/src/ap/ap_config.c b/src/ap/ap_config.c diff --git a/src/ap/ap_config.c b/src/ap/ap_config.c
index 1c229c6c7..23b67e139 100644 index 298216a47..41c70708d 100644
--- a/src/ap/ap_config.c --- a/src/ap/ap_config.c
+++ b/src/ap/ap_config.c +++ b/src/ap/ap_config.c
@@ -795,6 +795,7 @@ void hostapd_config_free_bss(struct hostapd_bss_config *conf) @@ -998,6 +998,7 @@ void hostapd_config_free(struct hostapd_config *conf)
os_free(conf->radius_req_attr_sqlite);
os_free(conf->rsn_preauth_interfaces);
os_free(conf->ctrl_interface);
+ os_free(conf->config_id);
os_free(conf->ca_cert);
os_free(conf->server_cert);
os_free(conf->server_cert2);
@@ -992,6 +993,7 @@ void hostapd_config_free(struct hostapd_config *conf)
for (i = 0; i < conf->num_bss; i++) for (i = 0; i < conf->num_bss; i++)
hostapd_config_free_bss(conf->bss[i]); hostapd_config_free_bss(conf->bss[i]);
@ -67,19 +50,10 @@ index 1c229c6c7..23b67e139 100644
os_free(conf->supported_rates); os_free(conf->supported_rates);
os_free(conf->basic_rates); os_free(conf->basic_rates);
diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h
index 58dd2cfed..e4340952e 100644 index 76f20c3c1..5628da1d0 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
@@ -285,6 +285,8 @@ struct hostapd_bss_config { @@ -998,6 +998,7 @@ struct eht_phy_capabilities_info {
char vlan_bridge[IFNAMSIZ + 1];
char wds_bridge[IFNAMSIZ + 1];
+ char *config_id;
+
enum hostapd_logger_level logger_syslog_level, logger_stdout_level;
unsigned int logger_syslog; /* module bitfield */
@@ -966,6 +968,7 @@ struct eht_phy_capabilities_info {
struct hostapd_config { struct hostapd_config {
struct hostapd_bss_config **bss, *last_bss; struct hostapd_bss_config **bss, *last_bss;
size_t num_bss; size_t num_bss;
@ -88,21 +62,21 @@ index 58dd2cfed..e4340952e 100644
u16 beacon_int; u16 beacon_int;
int rts_threshold; int rts_threshold;
diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c
index f6c9c0e78..5d3a6de42 100644 index 7a1d24459..986c64a1e 100644
--- a/src/ap/hostapd.c --- a/src/ap/hostapd.c
+++ b/src/ap/hostapd.c +++ b/src/ap/hostapd.c
@@ -224,6 +224,10 @@ static int hostapd_iface_conf_changed(struct hostapd_config *newconf, @@ -255,6 +255,10 @@ static int hostapd_iface_conf_changed(struct hostapd_config *newconf,
{ {
size_t i; size_t i;
+ if (newconf->config_id != oldconf->config_id) + if (newconf->config_id != oldconf->config_id)
+ if (strcmp(newconf->config_id, oldconf->config_id)) + if (strcmp(newconf->config_id, oldconf->config_id))
+ return 1; + return 1;
+ +
if (newconf->num_bss != oldconf->num_bss) if (newconf->num_bss != oldconf->num_bss)
return 1; return 1;
@@ -237,7 +241,7 @@ static int hostapd_iface_conf_changed(struct hostapd_config *newconf, @@ -268,7 +272,7 @@ static int hostapd_iface_conf_changed(struct hostapd_config *newconf,
} }
@ -111,25 +85,17 @@ index f6c9c0e78..5d3a6de42 100644
{ {
struct hapd_interfaces *interfaces = iface->interfaces; struct hapd_interfaces *interfaces = iface->interfaces;
struct hostapd_data *hapd = iface->bss[0]; struct hostapd_data *hapd = iface->bss[0];
@@ -260,13 +264,15 @@ int hostapd_reload_config(struct hostapd_iface *iface) @@ -296,6 +300,9 @@ int hostapd_reload_config(struct hostapd_iface *iface)
if (newconf == NULL)
return -1;
- hostapd_clear_old(iface);
-
oldconf = hapd->iconf;
if (hostapd_iface_conf_changed(newconf, oldconf)) {
char *fname; char *fname;
int res; int res;
+ if (reconf) + if (reconf)
+ return -1; + return -1;
+ hostapd_clear_old(iface);
+ +
hostapd_clear_old(iface);
wpa_printf(MSG_DEBUG, wpa_printf(MSG_DEBUG,
"Configuration changes include interface/BSS modification - force full disable+enable sequence"); @@ -322,7 +329,26 @@ int hostapd_reload_config(struct hostapd_iface *iface)
fname = os_strdup(iface->config_fname);
@@ -291,6 +297,24 @@ int hostapd_reload_config(struct hostapd_iface *iface)
wpa_printf(MSG_ERROR, wpa_printf(MSG_ERROR,
"Failed to enable interface on config reload"); "Failed to enable interface on config reload");
return res; return res;
@ -138,23 +104,25 @@ index f6c9c0e78..5d3a6de42 100644
+ hapd = iface->bss[j]; + hapd = iface->bss[j];
+ if (!hapd->config_id || strcmp(hapd->config_id, newconf->bss[j]->config_id)) { + if (!hapd->config_id || strcmp(hapd->config_id, newconf->bss[j]->config_id)) {
+ hostapd_flush_old_stations(iface->bss[j], + hostapd_flush_old_stations(iface->bss[j],
+ WLAN_REASON_PREV_AUTH_NOT_VALID); + + WLAN_REASON_PREV_AUTH_NOT_VALID);
+#ifdef CONFIG_WEP +#ifdef CONFIG_WEP
+ hostapd_broadcast_wep_clear(iface->bss[j]); + hostapd_broadcast_wep_clear(iface->bss[j]);
+#endif +#endif
+ +
+#ifndef CONFIG_NO_RADIUS +#ifndef CONFIG_NO_RADIUS
+ /* TODO: update dynamic data based on changed configuration + /* TODO: update dynamic data based on changed configuration
+ * items (e.g., open/close sockets, etc.) */ + * items (e.g., open/close sockets, etc.) */
+ radius_client_flush(iface->bss[j]->radius, 0); + radius_client_flush(iface->bss[j]->radius, 0);
+#endif /* CONFIG_NO_RADIUS */ +#endif /* CONFIG_NO_RADIUS */
+ wpa_printf(MSG_INFO, "bss %zu changed", j); + wpa_printf(MSG_INFO, "bss %zu changed", j);
+ } + }
+ } + }
} }
+
iface->conf = newconf; iface->conf = newconf;
@@ -307,6 +331,12 @@ int hostapd_reload_config(struct hostapd_iface *iface) for (i = 0; i < iface->num_hw_features; i++) {
@@ -338,6 +364,12 @@ int hostapd_reload_config(struct hostapd_iface *iface)
for (j = 0; j < iface->num_bss; j++) { for (j = 0; j < iface->num_bss; j++) {
hapd = iface->bss[j]; hapd = iface->bss[j];
@ -164,10 +132,10 @@ index f6c9c0e78..5d3a6de42 100644
+ } + }
+ if (newconf->bss[j]->config_id) + if (newconf->bss[j]->config_id)
+ hapd->config_id = strdup(newconf->bss[j]->config_id); + hapd->config_id = strdup(newconf->bss[j]->config_id);
hapd->iconf = newconf; if (!hapd->conf->config_id || !newconf->bss[j]->config_id ||
hapd->conf = newconf->bss[j]; os_strcmp(hapd->conf->config_id,
hostapd_reload_bss(hapd); newconf->bss[j]->config_id) != 0)
@@ -2415,6 +2445,10 @@ hostapd_alloc_bss_data(struct hostapd_iface *hapd_iface, @@ -2718,6 +2750,10 @@ hostapd_alloc_bss_data(struct hostapd_iface *hapd_iface,
hapd->iconf = conf; hapd->iconf = conf;
hapd->conf = bss; hapd->conf = bss;
hapd->iface = hapd_iface; hapd->iface = hapd_iface;
@ -179,7 +147,7 @@ index f6c9c0e78..5d3a6de42 100644
hapd->driver = conf->driver; hapd->driver = conf->driver;
hapd->ctrl_sock = -1; hapd->ctrl_sock = -1;
diff --git a/src/ap/hostapd.h b/src/ap/hostapd.h diff --git a/src/ap/hostapd.h b/src/ap/hostapd.h
index 5d867f086..ae8d305aa 100644 index e9075e9f0..e122805ea 100644
--- a/src/ap/hostapd.h --- a/src/ap/hostapd.h
+++ b/src/ap/hostapd.h +++ b/src/ap/hostapd.h
@@ -46,7 +46,7 @@ struct mesh_conf; @@ -46,7 +46,7 @@ struct mesh_conf;
@ -191,7 +159,7 @@ index 5d867f086..ae8d305aa 100644
struct hostapd_config * (*config_read_cb)(const char *config_fname); struct hostapd_config * (*config_read_cb)(const char *config_fname);
int (*ctrl_iface_init)(struct hostapd_data *hapd); int (*ctrl_iface_init)(struct hostapd_data *hapd);
void (*ctrl_iface_deinit)(struct hostapd_data *hapd); void (*ctrl_iface_deinit)(struct hostapd_data *hapd);
@@ -172,6 +172,7 @@ struct hostapd_data { @@ -184,6 +184,7 @@ struct hostapd_data {
struct hostapd_iface *iface; struct hostapd_iface *iface;
struct hostapd_config *iconf; struct hostapd_config *iconf;
struct hostapd_bss_config *conf; struct hostapd_bss_config *conf;
@ -199,7 +167,7 @@ index 5d867f086..ae8d305aa 100644
int interface_added; /* virtual interface added for this BSS */ int interface_added; /* virtual interface added for this BSS */
unsigned int started:1; unsigned int started:1;
unsigned int disabled:1; unsigned int disabled:1;
@@ -652,7 +653,7 @@ struct hostapd_iface { @@ -687,7 +688,7 @@ struct hostapd_iface {
int hostapd_for_each_interface(struct hapd_interfaces *interfaces, int hostapd_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);
@ -222,16 +190,16 @@ index 0c351af5f..e4f303bdc 100644
"configuration"); "configuration");
} }
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index 69afdabbc..a0019c3e3 100644 index 99870a60d..70d98e7d4 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
@@ -4844,6 +4844,9 @@ static int wpa_driver_nl80211_set_ap(void *priv, @@ -5322,6 +5322,9 @@ static int wpa_driver_nl80211_set_ap(void *priv,
if (ret) { if (ret) {
wpa_printf(MSG_DEBUG, "nl80211: Beacon set failed: %d (%s)", wpa_printf(MSG_DEBUG, "nl80211: Beacon set failed: %d (%s)",
ret, strerror(-ret)); ret, strerror(-ret));
+ if (!bss->beacon_set) + if (!bss->flink->beacon_set)
+ ret = 0; + ret = 0;
+ bss->beacon_set = 0; + bss->flink->beacon_set = 0;
} else { } else {
bss->beacon_set = 1; link->beacon_set = 1;
nl80211_set_bss(bss, params->cts_protect, params->preamble, nl80211_set_bss(bss, params->cts_protect, params->preamble,

View File

@ -1,28 +1,3 @@
From d8aa8cfd9e47a553bd8f20b8fa20eed153d76704 Mon Sep 17 00:00:00 2001
From: OpenEmbedded <oe.patch@oe>
Date: Thu, 15 Sep 2022 12:35:28 +0000
---
hostapd/config_file.c | 2 ++
src/ap/ap_config.h | 1 +
src/ap/vlan_full.c | 4 ++++
3 files changed, 7 insertions(+)
diff --git a/hostapd/config_file.c b/hostapd/config_file.c
index 67b385ded..7fcbb0be3 100644
--- a/hostapd/config_file.c
+++ b/hostapd/config_file.c
@@ -3342,6 +3342,8 @@ static int hostapd_config_fill(struct hostapd_config *conf,
#ifndef CONFIG_NO_VLAN
} else if (os_strcmp(buf, "dynamic_vlan") == 0) {
bss->ssid.dynamic_vlan = atoi(pos);
+ } else if (os_strcmp(buf, "vlan_no_bridge") == 0) {
+ bss->ssid.vlan_no_bridge = atoi(pos);
} else if (os_strcmp(buf, "per_sta_vif") == 0) {
bss->ssid.per_sta_vif = atoi(pos);
} else if (os_strcmp(buf, "vlan_file") == 0) {
diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h
index e4340952e..6884d30be 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
@@ -121,6 +121,7 @@ struct hostapd_ssid { @@ -121,6 +121,7 @@ struct hostapd_ssid {
@ -33,11 +8,9 @@ index e4340952e..6884d30be 100644
#define DYNAMIC_VLAN_NAMING_WITHOUT_DEVICE 0 #define DYNAMIC_VLAN_NAMING_WITHOUT_DEVICE 0
#define DYNAMIC_VLAN_NAMING_WITH_DEVICE 1 #define DYNAMIC_VLAN_NAMING_WITH_DEVICE 1
#define DYNAMIC_VLAN_NAMING_END 2 #define DYNAMIC_VLAN_NAMING_END 2
diff --git a/src/ap/vlan_full.c b/src/ap/vlan_full.c
index 19aa3c649..053d6338e 100644
--- a/src/ap/vlan_full.c --- a/src/ap/vlan_full.c
+++ b/src/ap/vlan_full.c +++ b/src/ap/vlan_full.c
@@ -475,6 +475,9 @@ void vlan_newlink(const char *ifname, struct hostapd_data *hapd) @@ -475,6 +475,9 @@ void vlan_newlink(const char *ifname, st
if (!vlan) if (!vlan)
return; return;
@ -47,7 +20,7 @@ index 19aa3c649..053d6338e 100644
vlan->configured = 1; vlan->configured = 1;
notempty = vlan->vlan_desc.notempty; notempty = vlan->vlan_desc.notempty;
@@ -506,6 +509,7 @@ void vlan_newlink(const char *ifname, struct hostapd_data *hapd) @@ -506,6 +509,7 @@ void vlan_newlink(const char *ifname, st
ifname, br_name, tagged[i], hapd); ifname, br_name, tagged[i], hapd);
} }
@ -55,3 +28,14 @@ index 19aa3c649..053d6338e 100644
ifconfig_up(ifname); ifconfig_up(ifname);
} }
--- a/hostapd/config_file.c
+++ b/hostapd/config_file.c
@@ -3353,6 +3353,8 @@ static int hostapd_config_fill(struct ho
#ifndef CONFIG_NO_VLAN
} else if (os_strcmp(buf, "dynamic_vlan") == 0) {
bss->ssid.dynamic_vlan = atoi(pos);
+ } else if (os_strcmp(buf, "vlan_no_bridge") == 0) {
+ bss->ssid.vlan_no_bridge = atoi(pos);
} else if (os_strcmp(buf, "per_sta_vif") == 0) {
bss->ssid.per_sta_vif = atoi(pos);
} else if (os_strcmp(buf, "vlan_file") == 0) {

View File

@ -1,30 +1,17 @@
From 5a171ddcfab8d1a51e17e73e322d194c99d12092 Mon Sep 17 00:00:00 2001
From: OpenEmbedded <oe.patch@oe>
Date: Thu, 15 Sep 2022 12:35:29 +0000
---
hostapd/config_file.c | 2 ++
src/ap/ap_drv_ops.c | 2 --
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/hostapd/config_file.c b/hostapd/config_file.c
index 7fcbb0be3..24f044ae2 100644
--- a/hostapd/config_file.c --- a/hostapd/config_file.c
+++ b/hostapd/config_file.c +++ b/hostapd/config_file.c
@@ -2312,6 +2312,8 @@ static int hostapd_config_fill(struct hostapd_config *conf, @@ -2316,6 +2316,8 @@ static int hostapd_config_fill(struct ho
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));
+ if (!bss->wds_bridge[0]) + if (!bss->wds_bridge[0])
+ os_strlcpy(bss->wds_bridge, pos, sizeof(bss->wds_bridge)); + os_strlcpy(bss->wds_bridge, pos, sizeof(bss->wds_bridge));
} else if (os_strcmp(buf, "bridge_hairpin") == 0) {
bss->bridge_hairpin = atoi(pos);
} else if (os_strcmp(buf, "vlan_bridge") == 0) { } else if (os_strcmp(buf, "vlan_bridge") == 0) {
os_strlcpy(bss->vlan_bridge, pos, sizeof(bss->vlan_bridge));
} else if (os_strcmp(buf, "wds_bridge") == 0) {
diff --git a/src/ap/ap_drv_ops.c b/src/ap/ap_drv_ops.c
index 8af7a0e25..192b30ce1 100644
--- 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
@@ -340,8 +340,6 @@ int hostapd_set_wds_sta(struct hostapd_data *hapd, char *ifname_wds, @@ -348,8 +348,6 @@ int hostapd_set_wds_sta(struct hostapd_d
return -1; return -1;
if (hapd->conf->wds_bridge[0]) if (hapd->conf->wds_bridge[0])
bridge = hapd->conf->wds_bridge; bridge = hapd->conf->wds_bridge;

View File

@ -1,20 +1,6 @@
From 0682b469685046b6f963c97edf0c72df4e3728b6 Mon Sep 17 00:00:00 2001
From: OpenEmbedded <oe.patch@oe>
Date: Thu, 15 Sep 2022 12:35:29 +0000
---
hostapd/config_file.c | 8 ++++++++
src/ap/ap_config.h | 2 ++
src/ap/beacon.c | 2 +-
src/ap/hostapd.c | 24 ++++++++++++++++++++++++
src/ap/hostapd.h | 1 +
5 files changed, 36 insertions(+), 1 deletion(-)
diff --git a/hostapd/config_file.c b/hostapd/config_file.c
index 24f044ae2..a7b7b91ae 100644
--- a/hostapd/config_file.c --- a/hostapd/config_file.c
+++ b/hostapd/config_file.c +++ b/hostapd/config_file.c
@@ -2837,6 +2837,14 @@ static int hostapd_config_fill(struct hostapd_config *conf, @@ -2848,6 +2848,14 @@ static int hostapd_config_fill(struct ho
line, bss->max_num_sta, MAX_STA_COUNT); line, bss->max_num_sta, MAX_STA_COUNT);
return 1; return 1;
} }
@ -29,37 +15,19 @@ index 24f044ae2..a7b7b91ae 100644
} else if (os_strcmp(buf, "wpa") == 0) { } else if (os_strcmp(buf, "wpa") == 0) {
bss->wpa = atoi(pos); bss->wpa = atoi(pos);
} else if (os_strcmp(buf, "extended_key_id") == 0) { } else if (os_strcmp(buf, "extended_key_id") == 0) {
diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h --- a/src/ap/hostapd.h
index 6884d30be..5c466d529 100644 +++ b/src/ap/hostapd.h
--- a/src/ap/ap_config.h @@ -734,6 +734,7 @@ void hostapd_cleanup_cs_params(struct ho
+++ b/src/ap/ap_config.h void hostapd_periodic_iface(struct hostapd_iface *iface);
@@ -1007,6 +1007,8 @@ struct hostapd_config { int hostapd_owe_trans_get_info(struct hostapd_data *hapd);
unsigned int track_sta_max_num; void hostapd_ocv_check_csa_sa_query(void *eloop_ctx, void *timeout_ctx);
unsigned int track_sta_max_age; +int hostapd_check_max_sta(struct hostapd_data *hapd);
+ int max_num_sta; void hostapd_switch_color(struct hostapd_data *hapd, u64 bitmap);
+ void hostapd_cleanup_cca_params(struct hostapd_data *hapd);
char country[3]; /* first two octets: country code as described in
* ISO/IEC 3166-1. Third octet:
* ' ' (ascii 32): all environments
diff --git a/src/ap/beacon.c b/src/ap/beacon.c
index 7c9b589e0..4e02739e5 100644
--- a/src/ap/beacon.c
+++ b/src/ap/beacon.c
@@ -1135,7 +1135,7 @@ void handle_probe_req(struct hostapd_data *hapd,
if (hapd->conf->no_probe_resp_if_max_sta &&
is_multicast_ether_addr(mgmt->da) &&
is_multicast_ether_addr(mgmt->bssid) &&
- hapd->num_sta >= hapd->conf->max_num_sta &&
+ hostapd_check_max_sta(hapd) &&
!ap_get_sta(hapd, mgmt->sa)) {
wpa_printf(MSG_MSGDUMP, "%s: Ignore Probe Request from " MACSTR
" since no room for additional STA",
diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c
index 72ab76e93..377436263 100644
--- a/src/ap/hostapd.c --- a/src/ap/hostapd.c
+++ b/src/ap/hostapd.c +++ b/src/ap/hostapd.c
@@ -241,6 +241,30 @@ static int hostapd_iface_conf_changed(struct hostapd_config *newconf, @@ -272,6 +272,30 @@ static int hostapd_iface_conf_changed(st
} }
@ -90,15 +58,25 @@ index 72ab76e93..377436263 100644
int hostapd_reload_config(struct hostapd_iface *iface, int reconf) int hostapd_reload_config(struct hostapd_iface *iface, int reconf)
{ {
struct hapd_interfaces *interfaces = iface->interfaces; struct hapd_interfaces *interfaces = iface->interfaces;
diff --git a/src/ap/hostapd.h b/src/ap/hostapd.h --- a/src/ap/beacon.c
index 0c1bca809..0e588ce91 100644 +++ b/src/ap/beacon.c
--- a/src/ap/hostapd.h @@ -1252,7 +1252,7 @@ void handle_probe_req(struct hostapd_dat
+++ b/src/ap/hostapd.h if (hapd->conf->no_probe_resp_if_max_sta &&
@@ -698,6 +698,7 @@ void hostapd_cleanup_cs_params(struct hostapd_data *hapd); is_multicast_ether_addr(mgmt->da) &&
void hostapd_periodic_iface(struct hostapd_iface *iface); is_multicast_ether_addr(mgmt->bssid) &&
int hostapd_owe_trans_get_info(struct hostapd_data *hapd); - hapd->num_sta >= hapd->conf->max_num_sta &&
void hostapd_ocv_check_csa_sa_query(void *eloop_ctx, void *timeout_ctx); + hostapd_check_max_sta(hapd) &&
+int hostapd_check_max_sta(struct hostapd_data *hapd); !ap_get_sta(hapd, mgmt->sa)) {
wpa_printf(MSG_MSGDUMP, "%s: Ignore Probe Request from " MACSTR
" since no room for additional STA",
--- a/src/ap/ap_config.h
+++ b/src/ap/ap_config.h
@@ -1037,6 +1037,8 @@ struct hostapd_config {
unsigned int track_sta_max_num;
unsigned int track_sta_max_age;
void hostapd_switch_color(struct hostapd_data *hapd, u64 bitmap); + int max_num_sta;
void hostapd_cleanup_cca_params(struct hostapd_data *hapd); +
char country[3]; /* first two octets: country code as described in
* ISO/IEC 3166-1. Third octet:
* ' ' (ascii 32): all environments

View File

@ -1,18 +1,6 @@
From 5326cc72099d17c8b4746e2d5c04f70805d42ccd Mon Sep 17 00:00:00 2001
From: OpenEmbedded <oe.patch@oe>
Date: Thu, 15 Sep 2022 12:35:29 +0000
---
hostapd/config_file.c | 2 ++
src/ap/ap_config.h | 1 +
src/ap/wpa_auth_glue.c | 8 ++++++--
3 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/hostapd/config_file.c b/hostapd/config_file.c
index a7b7b91ae..62eaab122 100644
--- a/hostapd/config_file.c --- a/hostapd/config_file.c
+++ b/hostapd/config_file.c +++ b/hostapd/config_file.c
@@ -2996,6 +2996,8 @@ static int hostapd_config_fill(struct hostapd_config *conf, @@ -3007,6 +3007,8 @@ static int hostapd_config_fill(struct ho
wpa_printf(MSG_INFO, wpa_printf(MSG_INFO,
"Line %d: Obsolete peerkey parameter ignored", line); "Line %d: Obsolete peerkey parameter ignored", line);
#ifdef CONFIG_IEEE80211R_AP #ifdef CONFIG_IEEE80211R_AP
@ -21,8 +9,6 @@ index a7b7b91ae..62eaab122 100644
} else if (os_strcmp(buf, "mobility_domain") == 0) { } else if (os_strcmp(buf, "mobility_domain") == 0) {
if (os_strlen(pos) != 2 * MOBILITY_DOMAIN_ID_LEN || if (os_strlen(pos) != 2 * MOBILITY_DOMAIN_ID_LEN ||
hexstr2bin(pos, bss->mobility_domain, hexstr2bin(pos, bss->mobility_domain,
diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h
index 5c466d529..f0ec2fe6a 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
@@ -283,6 +283,7 @@ struct airtime_sta_weight { @@ -283,6 +283,7 @@ struct airtime_sta_weight {
@ -32,12 +18,10 @@ index 5c466d529..f0ec2fe6a 100644
+ char ft_iface[IFNAMSIZ + 1]; + char ft_iface[IFNAMSIZ + 1];
char vlan_bridge[IFNAMSIZ + 1]; char vlan_bridge[IFNAMSIZ + 1];
char wds_bridge[IFNAMSIZ + 1]; char wds_bridge[IFNAMSIZ + 1];
int bridge_hairpin; /* hairpin_mode on bridge members */
diff --git a/src/ap/wpa_auth_glue.c b/src/ap/wpa_auth_glue.c
index 5c7075891..e5a9a7b35 100644
--- a/src/ap/wpa_auth_glue.c --- a/src/ap/wpa_auth_glue.c
+++ b/src/ap/wpa_auth_glue.c +++ b/src/ap/wpa_auth_glue.c
@@ -1593,8 +1593,12 @@ int hostapd_setup_wpa(struct hostapd_data *hapd) @@ -1727,8 +1727,12 @@ int hostapd_setup_wpa(struct hostapd_dat
wpa_key_mgmt_ft(hapd->conf->wpa_key_mgmt)) { wpa_key_mgmt_ft(hapd->conf->wpa_key_mgmt)) {
const char *ft_iface; const char *ft_iface;

View File

@ -1,28 +1,3 @@
From 86704eeb96106bf9a2d5fdd09b044dca92f719f7 Mon Sep 17 00:00:00 2001
From: OpenEmbedded <oe.patch@oe>
Date: Thu, 15 Sep 2022 12:35:29 +0000
---
hostapd/config_file.c | 2 ++
src/ap/ap_config.h | 1 +
src/ap/x_snoop.c | 15 +++++++++++----
3 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/hostapd/config_file.c b/hostapd/config_file.c
index 62eaab122..7af9f7a72 100644
--- a/hostapd/config_file.c
+++ b/hostapd/config_file.c
@@ -2314,6 +2314,8 @@ static int hostapd_config_fill(struct hostapd_config *conf,
os_strlcpy(bss->bridge, pos, sizeof(bss->bridge));
if (!bss->wds_bridge[0])
os_strlcpy(bss->wds_bridge, pos, sizeof(bss->wds_bridge));
+ } else if (os_strcmp(buf, "snoop_iface") == 0) {
+ os_strlcpy(bss->snoop_iface, pos, sizeof(bss->snoop_iface));
} else if (os_strcmp(buf, "vlan_bridge") == 0) {
os_strlcpy(bss->vlan_bridge, pos, sizeof(bss->vlan_bridge));
} else if (os_strcmp(buf, "wds_bridge") == 0) {
diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h
index f0ec2fe6a..f795ee919 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
@@ -284,6 +284,7 @@ struct hostapd_bss_config { @@ -284,6 +284,7 @@ struct hostapd_bss_config {
@ -32,12 +7,10 @@ index f0ec2fe6a..f795ee919 100644
+ char snoop_iface[IFNAMSIZ + 1]; + char snoop_iface[IFNAMSIZ + 1];
char vlan_bridge[IFNAMSIZ + 1]; char vlan_bridge[IFNAMSIZ + 1];
char wds_bridge[IFNAMSIZ + 1]; char wds_bridge[IFNAMSIZ + 1];
int bridge_hairpin; /* hairpin_mode on bridge members */
diff --git a/src/ap/x_snoop.c b/src/ap/x_snoop.c
index 029f4de23..30c990fd2 100644
--- a/src/ap/x_snoop.c --- a/src/ap/x_snoop.c
+++ b/src/ap/x_snoop.c +++ b/src/ap/x_snoop.c
@@ -33,14 +33,16 @@ int x_snoop_init(struct hostapd_data *hapd) @@ -33,14 +33,16 @@ int x_snoop_init(struct hostapd_data *ha
hapd->x_snoop_initialized = true; hapd->x_snoop_initialized = true;
@ -56,7 +29,7 @@ index 029f4de23..30c990fd2 100644
wpa_printf(MSG_DEBUG, wpa_printf(MSG_DEBUG,
"x_snoop: Failed to enable proxyarp on the bridge port"); "x_snoop: Failed to enable proxyarp on the bridge port");
return -1; return -1;
@@ -54,7 +56,8 @@ int x_snoop_init(struct hostapd_data *hapd) @@ -54,7 +56,8 @@ int x_snoop_init(struct hostapd_data *ha
} }
#ifdef CONFIG_IPV6 #ifdef CONFIG_IPV6
@ -66,7 +39,7 @@ index 029f4de23..30c990fd2 100644
wpa_printf(MSG_DEBUG, wpa_printf(MSG_DEBUG,
"x_snoop: Failed to enable multicast snooping on the bridge"); "x_snoop: Failed to enable multicast snooping on the bridge");
return -1; return -1;
@@ -73,8 +76,12 @@ x_snoop_get_l2_packet(struct hostapd_data *hapd, @@ -73,8 +76,12 @@ x_snoop_get_l2_packet(struct hostapd_dat
{ {
struct hostapd_bss_config *conf = hapd->conf; struct hostapd_bss_config *conf = hapd->conf;
struct l2_packet_data *l2; struct l2_packet_data *l2;
@ -80,3 +53,14 @@ index 029f4de23..30c990fd2 100644
if (l2 == NULL) { if (l2 == NULL) {
wpa_printf(MSG_DEBUG, wpa_printf(MSG_DEBUG,
"x_snoop: Failed to initialize L2 packet processing %s", "x_snoop: Failed to initialize L2 packet processing %s",
--- a/hostapd/config_file.c
+++ b/hostapd/config_file.c
@@ -2320,6 +2320,8 @@ static int hostapd_config_fill(struct ho
os_strlcpy(bss->wds_bridge, pos, sizeof(bss->wds_bridge));
} else if (os_strcmp(buf, "bridge_hairpin") == 0) {
bss->bridge_hairpin = atoi(pos);
+ } else if (os_strcmp(buf, "snoop_iface") == 0) {
+ os_strlcpy(bss->snoop_iface, pos, sizeof(bss->snoop_iface));
} else if (os_strcmp(buf, "vlan_bridge") == 0) {
os_strlcpy(bss->vlan_bridge, pos, sizeof(bss->vlan_bridge));
} else if (os_strcmp(buf, "wds_bridge") == 0) {

View File

@ -1,19 +1,6 @@
From 9279da2d91d4c8c4a33449e0a6fe0f03e91a40e5 Mon Sep 17 00:00:00 2001
From: OpenEmbedded <oe.patch@oe>
Date: Thu, 15 Sep 2022 12:35:29 +0000
---
hostapd/config_file.c | 6 +++---
src/ap/hostapd.c | 2 +-
src/ap/ieee802_11_shared.c | 2 --
wpa_supplicant/events.c | 6 ------
4 files changed, 4 insertions(+), 12 deletions(-)
diff --git a/hostapd/config_file.c b/hostapd/config_file.c
index 7af9f7a72..e57c78b70 100644
--- a/hostapd/config_file.c --- a/hostapd/config_file.c
+++ b/hostapd/config_file.c +++ b/hostapd/config_file.c
@@ -1598,6 +1598,8 @@ static int parse_anqp_elem(struct hostapd_bss_config *bss, char *buf, int line) @@ -1602,6 +1602,8 @@ static int parse_anqp_elem(struct hostap
return 0; return 0;
} }
@ -22,7 +9,7 @@ index 7af9f7a72..e57c78b70 100644
static int parse_qos_map_set(struct hostapd_bss_config *bss, static int parse_qos_map_set(struct hostapd_bss_config *bss,
char *buf, int line) char *buf, int line)
@@ -1639,8 +1641,6 @@ static int parse_qos_map_set(struct hostapd_bss_config *bss, @@ -1643,8 +1645,6 @@ static int parse_qos_map_set(struct host
return 0; return 0;
} }
@ -31,7 +18,7 @@ index 7af9f7a72..e57c78b70 100644
#ifdef CONFIG_HS20 #ifdef CONFIG_HS20
static int hs20_parse_conn_capab(struct hostapd_bss_config *bss, char *buf, static int hs20_parse_conn_capab(struct hostapd_bss_config *bss, char *buf,
@@ -4042,10 +4042,10 @@ static int hostapd_config_fill(struct hostapd_config *conf, @@ -4064,10 +4064,10 @@ static int hostapd_config_fill(struct ho
bss->gas_frag_limit = val; bss->gas_frag_limit = val;
} else if (os_strcmp(buf, "gas_comeback_delay") == 0) { } else if (os_strcmp(buf, "gas_comeback_delay") == 0) {
bss->gas_comeback_delay = atoi(pos); bss->gas_comeback_delay = atoi(pos);
@ -43,11 +30,9 @@ index 7af9f7a72..e57c78b70 100644
#ifdef CONFIG_RADIUS_TEST #ifdef CONFIG_RADIUS_TEST
} else if (os_strcmp(buf, "dump_msk_file") == 0) { } else if (os_strcmp(buf, "dump_msk_file") == 0) {
os_free(bss->dump_msk_file); os_free(bss->dump_msk_file);
diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c
index 377436263..e61ac39b8 100644
--- a/src/ap/hostapd.c --- a/src/ap/hostapd.c
+++ b/src/ap/hostapd.c +++ b/src/ap/hostapd.c
@@ -1424,6 +1424,7 @@ static int hostapd_setup_bss(struct hostapd_data *hapd, int first) @@ -1534,6 +1534,7 @@ static int hostapd_setup_bss(struct host
wpa_printf(MSG_ERROR, "GAS server initialization failed"); wpa_printf(MSG_ERROR, "GAS server initialization failed");
return -1; return -1;
} }
@ -55,7 +40,7 @@ index 377436263..e61ac39b8 100644
if (conf->qos_map_set_len && if (conf->qos_map_set_len &&
hostapd_drv_set_qos_map(hapd, conf->qos_map_set, hostapd_drv_set_qos_map(hapd, conf->qos_map_set,
@@ -1431,7 +1432,6 @@ static int hostapd_setup_bss(struct hostapd_data *hapd, int first) @@ -1541,7 +1542,6 @@ static int hostapd_setup_bss(struct host
wpa_printf(MSG_ERROR, "Failed to initialize QoS Map"); wpa_printf(MSG_ERROR, "Failed to initialize QoS Map");
return -1; return -1;
} }
@ -63,11 +48,40 @@ index 377436263..e61ac39b8 100644
if (conf->bss_load_update_period && bss_load_update_init(hapd)) { if (conf->bss_load_update_period && bss_load_update_init(hapd)) {
wpa_printf(MSG_ERROR, "BSS Load initialization failed"); wpa_printf(MSG_ERROR, "BSS Load initialization failed");
diff --git a/src/ap/ieee802_11_shared.c b/src/ap/ieee802_11_shared.c --- a/wpa_supplicant/events.c
index 615489511..691b1394a 100644 +++ b/wpa_supplicant/events.c
@@ -2683,8 +2683,6 @@ void wnm_bss_keep_alive_deinit(struct wp
}
-#ifdef CONFIG_INTERWORKING
-
static int wpas_qos_map_set(struct wpa_supplicant *wpa_s, const u8 *qos_map,
size_t len)
{
@@ -2717,8 +2715,6 @@ static void interworking_process_assoc_r
}
}
-#endif /* CONFIG_INTERWORKING */
-
static void wpa_supplicant_set_4addr_mode(struct wpa_supplicant *wpa_s)
{
@@ -3098,10 +3094,8 @@ static int wpa_supplicant_event_associnf
wnm_process_assoc_resp(wpa_s, data->assoc_info.resp_ies,
data->assoc_info.resp_ies_len);
#endif /* CONFIG_WNM */
-#ifdef CONFIG_INTERWORKING
interworking_process_assoc_resp(wpa_s, data->assoc_info.resp_ies,
data->assoc_info.resp_ies_len);
-#endif /* CONFIG_INTERWORKING */
if (wpa_s->hw_capab == CAPAB_VHT &&
get_ie(data->assoc_info.resp_ies,
data->assoc_info.resp_ies_len, WLAN_EID_VHT_CAP))
--- a/src/ap/ieee802_11_shared.c --- a/src/ap/ieee802_11_shared.c
+++ b/src/ap/ieee802_11_shared.c +++ b/src/ap/ieee802_11_shared.c
@@ -1098,13 +1098,11 @@ u8 * hostapd_eid_rsnxe(struct hostapd_data *hapd, u8 *eid, size_t len) @@ -1116,13 +1116,11 @@ u8 * hostapd_eid_rsnxe(struct hostapd_da
u16 check_ext_capab(struct hostapd_data *hapd, struct sta_info *sta, u16 check_ext_capab(struct hostapd_data *hapd, struct sta_info *sta,
const u8 *ext_capab_ie, size_t ext_capab_ie_len) const u8 *ext_capab_ie, size_t ext_capab_ie_len)
{ {
@ -81,36 +95,3 @@ index 615489511..691b1394a 100644
if (ext_capab_ie_len > 0) { if (ext_capab_ie_len > 0) {
sta->ecsa_supported = !!(ext_capab_ie[0] & BIT(2)); sta->ecsa_supported = !!(ext_capab_ie[0] & BIT(2));
diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index 86a0dc7fa..0bac5f2c2 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -2586,8 +2586,6 @@ void wnm_bss_keep_alive_deinit(struct wpa_supplicant *wpa_s)
}
-#ifdef CONFIG_INTERWORKING
-
static int wpas_qos_map_set(struct wpa_supplicant *wpa_s, const u8 *qos_map,
size_t len)
{
@@ -2620,8 +2618,6 @@ static void interworking_process_assoc_resp(struct wpa_supplicant *wpa_s,
}
}
-#endif /* CONFIG_INTERWORKING */
-
static void multi_ap_process_assoc_resp(struct wpa_supplicant *wpa_s,
const u8 *ies, size_t ies_len)
@@ -2954,10 +2950,8 @@ static int wpa_supplicant_event_associnfo(struct wpa_supplicant *wpa_s,
wnm_process_assoc_resp(wpa_s, data->assoc_info.resp_ies,
data->assoc_info.resp_ies_len);
#endif /* CONFIG_WNM */
-#ifdef CONFIG_INTERWORKING
interworking_process_assoc_resp(wpa_s, data->assoc_info.resp_ies,
data->assoc_info.resp_ies_len);
-#endif /* CONFIG_INTERWORKING */
if (wpa_s->hw_capab == CAPAB_VHT &&
get_ie(data->assoc_info.resp_ies,
data->assoc_info.resp_ies_len, WLAN_EID_VHT_CAP))

View File

@ -1,16 +1,6 @@
From 898a6cd8ef1eefa3c214d0b558959a4f52084706 Mon Sep 17 00:00:00 2001
From: OpenEmbedded <oe.patch@oe>
Date: Thu, 15 Sep 2022 12:35:29 +0000
---
src/ap/ap_drv_ops.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/ap/ap_drv_ops.c b/src/ap/ap_drv_ops.c
index 192b30ce1..f7ad3edc7 100644
--- 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
@@ -864,7 +864,8 @@ int hostapd_start_dfs_cac(struct hostapd_iface *iface, @@ -927,7 +927,8 @@ int hostapd_start_dfs_cac(struct hostapd
int hostapd_drv_set_qos_map(struct hostapd_data *hapd, int hostapd_drv_set_qos_map(struct hostapd_data *hapd,
const u8 *qos_map_set, u8 qos_map_set_len) const u8 *qos_map_set, u8 qos_map_set_len)
{ {

View File

@ -0,0 +1,109 @@
--- a/src/ap/ap_config.h
+++ b/src/ap/ap_config.h
@@ -310,6 +310,7 @@ struct hostapd_bss_config {
unsigned int eap_sim_db_timeout;
int eap_server_erp; /* Whether ERP is enabled on internal EAP server */
struct hostapd_ip_addr own_ip_addr;
+ int dynamic_own_ip_addr;
char *nas_identifier;
struct hostapd_radius_servers *radius;
int acct_interim_interval;
--- a/src/radius/radius_client.c
+++ b/src/radius/radius_client.c
@@ -163,6 +163,8 @@ struct radius_client_data {
*/
void *ctx;
+ struct hostapd_ip_addr local_ip;
+
/**
* conf - RADIUS client configuration (list of RADIUS servers to use)
*/
@@ -720,6 +722,30 @@ static void radius_client_list_add(struc
/**
+ * radius_client_send - Get local address for the RADIUS auth socket
+ * @radius: RADIUS client context from radius_client_init()
+ * @addr: pointer to store the address
+ *
+ * This function returns the local address for the connection to the RADIUS
+ * auth server. It also opens the socket if it's not available yet.
+ */
+int radius_client_get_local_addr(struct radius_client_data *radius,
+ struct hostapd_ip_addr *addr)
+{
+ struct hostapd_radius_servers *conf = radius->conf;
+
+ if (conf->auth_server && radius->auth_sock < 0)
+ radius_client_init_auth(radius);
+
+ if (radius->auth_sock < 0)
+ return -1;
+
+ memcpy(addr, &radius->local_ip, sizeof(*addr));
+
+ return 0;
+}
+
+/**
* radius_client_send - Send a RADIUS request
* @radius: RADIUS client context from radius_client_init()
* @msg: RADIUS message to be sent
@@ -1238,6 +1264,10 @@ radius_change_server(struct radius_clien
wpa_printf(MSG_DEBUG, "RADIUS local address: %s:%u",
inet_ntoa(claddr.sin_addr),
ntohs(claddr.sin_port));
+ if (auth) {
+ radius->local_ip.af = AF_INET;
+ radius->local_ip.u.v4 = claddr.sin_addr;
+ }
}
break;
#ifdef CONFIG_IPV6
@@ -1249,6 +1279,10 @@ radius_change_server(struct radius_clien
inet_ntop(AF_INET6, &claddr6.sin6_addr,
abuf, sizeof(abuf)),
ntohs(claddr6.sin6_port));
+ if (auth) {
+ radius->local_ip.af = AF_INET6;
+ radius->local_ip.u.v6 = claddr6.sin6_addr;
+ }
}
break;
}
--- a/src/radius/radius_client.h
+++ b/src/radius/radius_client.h
@@ -249,6 +249,8 @@ int radius_client_register(struct radius
void radius_client_set_interim_error_cb(struct radius_client_data *radius,
void (*cb)(const u8 *addr, void *ctx),
void *ctx);
+int radius_client_get_local_addr(struct radius_client_data *radius,
+ struct hostapd_ip_addr * addr);
int radius_client_send(struct radius_client_data *radius,
struct radius_msg *msg,
RadiusType msg_type, const u8 *addr);
--- a/src/ap/ieee802_1x.c
+++ b/src/ap/ieee802_1x.c
@@ -598,6 +598,10 @@ int add_common_radius_attr(struct hostap
struct hostapd_radius_attr *attr;
int len;
+ if (hapd->conf->dynamic_own_ip_addr)
+ radius_client_get_local_addr(hapd->radius,
+ &hapd->conf->own_ip_addr);
+
if (!hostapd_config_get_radius_attr(req_attr,
RADIUS_ATTR_NAS_IP_ADDRESS) &&
hapd->conf->own_ip_addr.af == AF_INET &&
--- a/hostapd/config_file.c
+++ b/hostapd/config_file.c
@@ -2688,6 +2688,8 @@ static int hostapd_config_fill(struct ho
} else if (os_strcmp(buf, "iapp_interface") == 0) {
wpa_printf(MSG_INFO, "DEPRECATED: iapp_interface not used");
#endif /* CONFIG_IAPP */
+ } else if (os_strcmp(buf, "dynamic_own_ip_addr") == 0) {
+ bss->dynamic_own_ip_addr = atoi(pos);
} else if (os_strcmp(buf, "own_ip_addr") == 0) {
if (hostapd_parse_ip_addr(pos, &bss->own_ip_addr)) {
wpa_printf(MSG_ERROR,

View File

@ -0,0 +1,298 @@
--- a/src/radius/radius_das.h
+++ b/src/radius/radius_das.h
@@ -44,6 +44,7 @@ struct radius_das_attrs {
struct radius_das_conf {
int port;
const u8 *shared_secret;
+ const u8 *nas_identifier;
size_t shared_secret_len;
const struct hostapd_ip_addr *client_addr;
unsigned int time_window;
--- a/src/ap/hostapd.c
+++ b/src/ap/hostapd.c
@@ -1471,6 +1471,7 @@ static int hostapd_setup_bss(struct host
os_memset(&das_conf, 0, sizeof(das_conf));
das_conf.port = conf->radius_das_port;
+ das_conf.nas_identifier = conf->nas_identifier;
das_conf.shared_secret = conf->radius_das_shared_secret;
das_conf.shared_secret_len =
conf->radius_das_shared_secret_len;
--- a/src/radius/radius_das.c
+++ b/src/radius/radius_das.c
@@ -12,13 +12,26 @@
#include "utils/common.h"
#include "utils/eloop.h"
#include "utils/ip_addr.h"
+#include "utils/list.h"
#include "radius.h"
#include "radius_das.h"
-struct radius_das_data {
+static struct dl_list das_ports = DL_LIST_HEAD_INIT(das_ports);
+
+struct radius_das_port {
+ struct dl_list list;
+ struct dl_list das_data;
+
+ int port;
int sock;
+};
+
+struct radius_das_data {
+ struct dl_list list;
+ struct radius_das_port *port;
u8 *shared_secret;
+ u8 *nas_identifier;
size_t shared_secret_len;
struct hostapd_ip_addr client_addr;
unsigned int time_window;
@@ -378,56 +391,17 @@ fail:
}
-static void radius_das_receive(int sock, void *eloop_ctx, void *sock_ctx)
+static void
+radius_das_receive_msg(struct radius_das_data *das, struct radius_msg *msg,
+ struct sockaddr *from, socklen_t fromlen,
+ char *abuf, int from_port)
{
- struct radius_das_data *das = eloop_ctx;
- u8 buf[1500];
- union {
- struct sockaddr_storage ss;
- struct sockaddr_in sin;
-#ifdef CONFIG_IPV6
- struct sockaddr_in6 sin6;
-#endif /* CONFIG_IPV6 */
- } from;
- char abuf[50];
- int from_port = 0;
- socklen_t fromlen;
- int len;
- struct radius_msg *msg, *reply = NULL;
+ struct radius_msg *reply = NULL;
struct radius_hdr *hdr;
struct wpabuf *rbuf;
+ struct os_time now;
u32 val;
int res;
- struct os_time now;
-
- fromlen = sizeof(from);
- len = recvfrom(sock, buf, sizeof(buf), 0,
- (struct sockaddr *) &from.ss, &fromlen);
- if (len < 0) {
- wpa_printf(MSG_ERROR, "DAS: recvfrom: %s", strerror(errno));
- return;
- }
-
- os_strlcpy(abuf, inet_ntoa(from.sin.sin_addr), sizeof(abuf));
- from_port = ntohs(from.sin.sin_port);
-
- wpa_printf(MSG_DEBUG, "DAS: Received %d bytes from %s:%d",
- len, abuf, from_port);
- if (das->client_addr.u.v4.s_addr &&
- das->client_addr.u.v4.s_addr != from.sin.sin_addr.s_addr) {
- wpa_printf(MSG_DEBUG, "DAS: Drop message from unknown client");
- return;
- }
-
- msg = radius_msg_parse(buf, len);
- if (msg == NULL) {
- wpa_printf(MSG_DEBUG, "DAS: Parsing incoming RADIUS packet "
- "from %s:%d failed", abuf, from_port);
- return;
- }
-
- if (wpa_debug_level <= MSG_MSGDUMP)
- radius_msg_dump(msg);
if (radius_msg_verify_das_req(msg, das->shared_secret,
das->shared_secret_len,
@@ -494,9 +468,8 @@ static void radius_das_receive(int sock,
radius_msg_dump(reply);
rbuf = radius_msg_get_buf(reply);
- res = sendto(das->sock, wpabuf_head(rbuf),
- wpabuf_len(rbuf), 0,
- (struct sockaddr *) &from.ss, fromlen);
+ res = sendto(das->port->sock, wpabuf_head(rbuf),
+ wpabuf_len(rbuf), 0, from, fromlen);
if (res < 0) {
wpa_printf(MSG_ERROR, "DAS: sendto(to %s:%d): %s",
abuf, from_port, strerror(errno));
@@ -508,6 +481,72 @@ fail:
radius_msg_free(reply);
}
+static void radius_das_receive(int sock, void *eloop_ctx, void *sock_ctx)
+{
+ struct radius_das_port *p = eloop_ctx;
+ struct radius_das_data *das;
+ u8 buf[1500];
+ union {
+ struct sockaddr_storage ss;
+ struct sockaddr_in sin;
+#ifdef CONFIG_IPV6
+ struct sockaddr_in6 sin6;
+#endif /* CONFIG_IPV6 */
+ } from;
+ struct radius_msg *msg;
+ size_t nasid_len = 0;
+ u8 *nasid_buf = NULL;
+ char abuf[50];
+ int from_port = 0;
+ socklen_t fromlen;
+ int found = 0;
+ int len;
+
+ fromlen = sizeof(from);
+ len = recvfrom(sock, buf, sizeof(buf), 0,
+ (struct sockaddr *) &from.ss, &fromlen);
+ if (len < 0) {
+ wpa_printf(MSG_ERROR, "DAS: recvfrom: %s", strerror(errno));
+ return;
+ }
+
+ os_strlcpy(abuf, inet_ntoa(from.sin.sin_addr), sizeof(abuf));
+ from_port = ntohs(from.sin.sin_port);
+
+ msg = radius_msg_parse(buf, len);
+ if (msg == NULL) {
+ wpa_printf(MSG_DEBUG, "DAS: Parsing incoming RADIUS packet "
+ "from %s:%d failed", abuf, from_port);
+ return;
+ }
+
+ wpa_printf(MSG_DEBUG, "DAS: Received %d bytes from %s:%d",
+ len, abuf, from_port);
+
+ if (wpa_debug_level <= MSG_MSGDUMP)
+ radius_msg_dump(msg);
+
+ radius_msg_get_attr_ptr(msg, RADIUS_ATTR_NAS_IDENTIFIER,
+ &nasid_buf, &nasid_len, NULL);
+ dl_list_for_each(das, &p->das_data, struct radius_das_data, list) {
+ if (das->client_addr.u.v4.s_addr &&
+ das->client_addr.u.v4.s_addr != from.sin.sin_addr.s_addr)
+ continue;
+
+ if (das->nas_identifier && nasid_buf &&
+ (nasid_len != os_strlen(das->nas_identifier) ||
+ os_memcmp(das->nas_identifier, nasid_buf, nasid_len) != 0))
+ continue;
+
+ found = 1;
+ radius_das_receive_msg(das, msg, (struct sockaddr *)&from.ss,
+ fromlen, abuf, from_port);
+ }
+
+ if (!found)
+ wpa_printf(MSG_DEBUG, "DAS: Drop message from unknown client");
+}
+
static int radius_das_open_socket(int port)
{
@@ -533,6 +572,49 @@ static int radius_das_open_socket(int po
}
+static struct radius_das_port *
+radius_das_open_port(int port)
+{
+ struct radius_das_port *p;
+
+ dl_list_for_each(p, &das_ports, struct radius_das_port, list) {
+ if (p->port == port)
+ return p;
+ }
+
+ p = os_zalloc(sizeof(*p));
+ if (p == NULL)
+ return NULL;
+
+ dl_list_init(&p->das_data);
+ p->port = port;
+ p->sock = radius_das_open_socket(port);
+ if (p->sock < 0)
+ goto free_port;
+
+ if (eloop_register_read_sock(p->sock, radius_das_receive, p, NULL))
+ goto close_port;
+
+ dl_list_add(&das_ports, &p->list);
+
+ return p;
+
+close_port:
+ close(p->sock);
+free_port:
+ os_free(p);
+
+ return NULL;
+}
+
+static void radius_das_close_port(struct radius_das_port *p)
+{
+ dl_list_del(&p->list);
+ eloop_unregister_read_sock(p->sock);
+ close(p->sock);
+ free(p);
+}
+
struct radius_das_data *
radius_das_init(struct radius_das_conf *conf)
{
@@ -553,6 +635,8 @@ radius_das_init(struct radius_das_conf *
das->ctx = conf->ctx;
das->disconnect = conf->disconnect;
das->coa = conf->coa;
+ if (conf->nas_identifier)
+ das->nas_identifier = os_strdup(conf->nas_identifier);
os_memcpy(&das->client_addr, conf->client_addr,
sizeof(das->client_addr));
@@ -565,19 +649,15 @@ radius_das_init(struct radius_das_conf *
}
das->shared_secret_len = conf->shared_secret_len;
- das->sock = radius_das_open_socket(conf->port);
- if (das->sock < 0) {
+ das->port = radius_das_open_port(conf->port);
+ if (!das->port) {
wpa_printf(MSG_ERROR, "Failed to open UDP socket for RADIUS "
"DAS");
radius_das_deinit(das);
return NULL;
}
- if (eloop_register_read_sock(das->sock, radius_das_receive, das, NULL))
- {
- radius_das_deinit(das);
- return NULL;
- }
+ dl_list_add(&das->port->das_data, &das->list);
return das;
}
@@ -588,11 +668,14 @@ void radius_das_deinit(struct radius_das
if (das == NULL)
return;
- if (das->sock >= 0) {
- eloop_unregister_read_sock(das->sock);
- close(das->sock);
+ if (das->port) {
+ dl_list_del(&das->list);
+
+ if (dl_list_empty(&das->port->das_data))
+ radius_das_close_port(das->port);
}
+ os_free(das->nas_identifier);
os_free(das->shared_secret);
os_free(das);
}

View File

@ -1,42 +0,0 @@
diff --git a/wpa_supplicant/ap.c b/wpa_supplicant/ap.c
index 992c0a056..d0cc641e5 100644
--- a/wpa_supplicant/ap.c
+++ b/wpa_supplicant/ap.c
@@ -1613,7 +1613,7 @@ int ap_ctrl_iface_bss_tm_req(struct wpa_supplicant *wpa_s, const char *buf)
#endif /* CONFIG_WNM_AP */
-
+#ifdef CONFIG_CTRL_IFACE_ACL
int ap_ctrl_iface_acl_add_mac(struct wpa_supplicant *wpa_s,
enum macaddr_acl acl_type,
const char *buf)
@@ -1748,7 +1748,7 @@ int ap_ctrl_iface_set_acl(struct wpa_supplicant *wpa_s)
return hostapd_set_acl(hapd);
}
-
+#endif /* CONFIG_CTRL_IFACE_ACL */
#endif /* CONFIG_CTRL_IFACE */
diff --git a/wpa_supplicant/ctrl_iface.c b/wpa_supplicant/ctrl_iface.c
index bb6b1f9ac..6016e843e 100644
--- a/wpa_supplicant/ctrl_iface.c
+++ b/wpa_supplicant/ctrl_iface.c
@@ -12050,6 +12050,7 @@ char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s,
} else if (os_strcmp(buf, "UPDATE_BEACON") == 0) {
if (wpas_ap_update_beacon(wpa_s))
reply_len = -1;
+#ifdef CONFIG_CTRL_IFACE_ACL
} else if (os_strncmp(buf, "ACCEPT_ACL ", 11) == 0) {
if (os_strncmp(buf + 11, "ADD_MAC ", 8) == 0) {
if (ap_ctrl_iface_acl_add_mac(wpa_s,
@@ -12102,6 +12103,7 @@ char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s,
} else {
reply_len = -1;
}
+#endif
#endif /* CONFIG_AP */
} else if (os_strcmp(buf, "SUSPEND") == 0) {
wpas_notify_suspend(wpa_s->global);

View File

@ -1,5 +1,5 @@
diff --git a/hostapd/Android.mk b/hostapd/Android.mk diff --git a/hostapd/Android.mk b/hostapd/Android.mk
index 2f8e8862e..21708132c 100644 index 3a243d13b..790d229c7 100644
--- a/hostapd/Android.mk --- a/hostapd/Android.mk
+++ b/hostapd/Android.mk +++ b/hostapd/Android.mk
@@ -210,6 +210,11 @@ endif @@ -210,6 +210,11 @@ endif
@ -15,7 +15,7 @@ index 2f8e8862e..21708132c 100644
L_CFLAGS += -DCONFIG_RSN_PREAUTH L_CFLAGS += -DCONFIG_RSN_PREAUTH
CONFIG_L2_PACKET=y CONFIG_L2_PACKET=y
diff --git a/hostapd/Makefile b/hostapd/Makefile diff --git a/hostapd/Makefile b/hostapd/Makefile
index 19a88e0fd..64c29ef33 100644 index deb813d56..c20110a6b 100644
--- a/hostapd/Makefile --- a/hostapd/Makefile
+++ b/hostapd/Makefile +++ b/hostapd/Makefile
@@ -254,6 +254,11 @@ ifndef CONFIG_NO_CTRL_IFACE @@ -254,6 +254,11 @@ ifndef CONFIG_NO_CTRL_IFACE
@ -45,10 +45,10 @@ index c8b3afabe..095f930da 100644
#CONFIG_RSN_PREAUTH=y #CONFIG_RSN_PREAUTH=y
diff --git a/hostapd/config_file.c b/hostapd/config_file.c diff --git a/hostapd/config_file.c b/hostapd/config_file.c
index e57c78b70..a388703fb 100644 index 42896f348..dfd3af262 100644
--- a/hostapd/config_file.c --- a/hostapd/config_file.c
+++ b/hostapd/config_file.c +++ b/hostapd/config_file.c
@@ -2675,7 +2675,8 @@ static int hostapd_config_fill(struct hostapd_config *conf, @@ -2686,7 +2686,8 @@ static int hostapd_config_fill(struct hostapd_config *conf,
bss->eapol_key_index_workaround = atoi(pos); bss->eapol_key_index_workaround = atoi(pos);
#ifdef CONFIG_IAPP #ifdef CONFIG_IAPP
} else if (os_strcmp(buf, "iapp_interface") == 0) { } else if (os_strcmp(buf, "iapp_interface") == 0) {
@ -56,13 +56,13 @@ index e57c78b70..a388703fb 100644
+ bss->ieee802_11f = 1; + bss->ieee802_11f = 1;
+ os_strlcpy(bss->iapp_iface, pos, sizeof(bss->iapp_iface)); + os_strlcpy(bss->iapp_iface, pos, sizeof(bss->iapp_iface));
#endif /* CONFIG_IAPP */ #endif /* CONFIG_IAPP */
} else if (os_strcmp(buf, "own_ip_addr") == 0) { } else if (os_strcmp(buf, "dynamic_own_ip_addr") == 0) {
if (hostapd_parse_ip_addr(pos, &bss->own_ip_addr)) { bss->dynamic_own_ip_addr = atoi(pos);
diff --git a/hostapd/defconfig b/hostapd/defconfig diff --git a/hostapd/defconfig b/hostapd/defconfig
index a9eab4d9c..7da1da555 100644 index bf185c5b4..6f7bc6ca4 100644
--- a/hostapd/defconfig --- a/hostapd/defconfig
+++ b/hostapd/defconfig +++ b/hostapd/defconfig
@@ -44,6 +44,9 @@ CONFIG_LIBNL32=y @@ -56,6 +56,9 @@ CONFIG_LIBNL32=y
# Driver interface for no driver (e.g., RADIUS server only) # Driver interface for no driver (e.g., RADIUS server only)
#CONFIG_DRIVER_NONE=y #CONFIG_DRIVER_NONE=y
@ -73,7 +73,7 @@ index a9eab4d9c..7da1da555 100644
CONFIG_RSN_PREAUTH=y CONFIG_RSN_PREAUTH=y
diff --git a/hostapd/hostapd.conf b/hostapd/hostapd.conf diff --git a/hostapd/hostapd.conf b/hostapd/hostapd.conf
index f37d5634b..594eb0d17 100644 index 30fb06d1c..ce970a8a5 100644
--- a/hostapd/hostapd.conf --- a/hostapd/hostapd.conf
+++ b/hostapd/hostapd.conf +++ b/hostapd/hostapd.conf
@@ -41,6 +41,7 @@ interface=wlan0 @@ -41,6 +41,7 @@ interface=wlan0
@ -84,7 +84,7 @@ index f37d5634b..594eb0d17 100644
# bit 6 (64) = MLME # bit 6 (64) = MLME
# #
# Levels (minimum value for logged events): # Levels (minimum value for logged events):
@@ -1438,6 +1439,11 @@ eap_server=0 @@ -1476,6 +1477,11 @@ eap_server=0
# Whether to enable ERP on the EAP server. # Whether to enable ERP on the EAP server.
#eap_server_erp=1 #eap_server_erp=1
@ -97,7 +97,7 @@ index f37d5634b..594eb0d17 100644
##### RADIUS client configuration ############################################# ##### RADIUS client configuration #############################################
# for IEEE 802.1X with external Authentication Server, IEEE 802.11 # for IEEE 802.1X with external Authentication Server, IEEE 802.11
diff --git a/hostapd/main.c b/hostapd/main.c diff --git a/hostapd/main.c b/hostapd/main.c
index 0d0e92e9e..8de88e513 100644 index b4ef3485f..21b57bd9d 100644
--- a/hostapd/main.c --- a/hostapd/main.c
+++ b/hostapd/main.c +++ b/hostapd/main.c
@@ -84,6 +84,9 @@ static void hostapd_logger_cb(void *ctx, const u8 *addr, unsigned int module, @@ -84,6 +84,9 @@ static void hostapd_logger_cb(void *ctx, const u8 *addr, unsigned int module,
@ -131,7 +131,7 @@ index a1e9b7c44..27a63dac0 100644
ieee802_11.o \ ieee802_11.o \
ieee802_11_ht.o \ ieee802_11_ht.o \
diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h
index f795ee919..529ad0b12 100644 index 02fd4940c..639e99256 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
@@ -346,6 +346,10 @@ struct hostapd_bss_config { @@ -346,6 +346,10 @@ struct hostapd_bss_config {
@ -146,7 +146,7 @@ index f795ee919..529ad0b12 100644
struct mac_acl_entry *accept_mac; struct mac_acl_entry *accept_mac;
int num_accept_mac; int num_accept_mac;
diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c
index 1bd525fe9..a4bf68e6f 100644 index c8f100b09..c7d8f20f2 100644
--- a/src/ap/hostapd.c --- a/src/ap/hostapd.c
+++ b/src/ap/hostapd.c +++ b/src/ap/hostapd.c
@@ -29,6 +29,7 @@ @@ -29,6 +29,7 @@
@ -157,7 +157,7 @@ index 1bd525fe9..a4bf68e6f 100644
#include "ieee802_1x.h" #include "ieee802_1x.h"
#include "ieee802_11_auth.h" #include "ieee802_11_auth.h"
#include "vlan_init.h" #include "vlan_init.h"
@@ -455,6 +456,8 @@ void hostapd_free_hapd_data(struct hostapd_data *hapd) @@ -511,6 +512,8 @@ void hostapd_free_hapd_data(struct hostapd_data *hapd)
hapd->beacon_set_done = 0; hapd->beacon_set_done = 0;
wpa_printf(MSG_DEBUG, "%s(%s)", __func__, hapd->conf->iface); wpa_printf(MSG_DEBUG, "%s(%s)", __func__, hapd->conf->iface);
@ -166,7 +166,7 @@ index 1bd525fe9..a4bf68e6f 100644
accounting_deinit(hapd); accounting_deinit(hapd);
hostapd_deinit_wpa(hapd); hostapd_deinit_wpa(hapd);
vlan_deinit(hapd); vlan_deinit(hapd);
@@ -1417,6 +1420,13 @@ static int hostapd_setup_bss(struct hostapd_data *hapd, int first) @@ -1528,6 +1531,13 @@ static int hostapd_setup_bss(struct hostapd_data *hapd, int first,
return -1; return -1;
} }
@ -180,7 +180,7 @@ index 1bd525fe9..a4bf68e6f 100644
#ifdef CONFIG_INTERWORKING #ifdef CONFIG_INTERWORKING
if (gas_serv_init(hapd)) { if (gas_serv_init(hapd)) {
wpa_printf(MSG_ERROR, "GAS server initialization failed"); wpa_printf(MSG_ERROR, "GAS server initialization failed");
@@ -3313,6 +3323,10 @@ void hostapd_new_assoc_sta(struct hostapd_data *hapd, struct sta_info *sta, @@ -3625,6 +3635,10 @@ void hostapd_new_assoc_sta(struct hostapd_data *hapd, struct sta_info *sta,
ap_sta_clear_disconnect_timeouts(hapd, sta); ap_sta_clear_disconnect_timeouts(hapd, sta);
sta->post_csa_sa_query = 0; sta->post_csa_sa_query = 0;
@ -192,10 +192,10 @@ index 1bd525fe9..a4bf68e6f 100644
if (sta->p2p_ie == NULL && !sta->no_p2p_set) { if (sta->p2p_ie == NULL && !sta->no_p2p_set) {
sta->no_p2p_set = 1; sta->no_p2p_set = 1;
diff --git a/src/ap/hostapd.h b/src/ap/hostapd.h diff --git a/src/ap/hostapd.h b/src/ap/hostapd.h
index aba04a925..ae4f0b26f 100644 index 19dc5accc..747da82c4 100644
--- a/src/ap/hostapd.h --- a/src/ap/hostapd.h
+++ b/src/ap/hostapd.h +++ b/src/ap/hostapd.h
@@ -210,6 +210,8 @@ struct hostapd_data { @@ -228,6 +228,8 @@ struct hostapd_data {
u64 acct_session_id; u64 acct_session_id;
struct radius_das_data *radius_das; struct radius_das_data *radius_das;
@ -798,10 +798,10 @@ index 000000000..c22118342
+ +
+#endif /* IAPP_H */ +#endif /* IAPP_H */
diff --git a/src/utils/wpa_debug.h b/src/utils/wpa_debug.h diff --git a/src/utils/wpa_debug.h b/src/utils/wpa_debug.h
index 824538b41..498b35291 100644 index a57f1d507..5b6e5c25d 100644
--- a/src/utils/wpa_debug.h --- a/src/utils/wpa_debug.h
+++ b/src/utils/wpa_debug.h +++ b/src/utils/wpa_debug.h
@@ -354,6 +354,7 @@ void hostapd_logger_register_cb(hostapd_logger_cb_func func); @@ -355,6 +355,7 @@ void hostapd_logger_register_cb(hostapd_logger_cb_func func);
#define HOSTAPD_MODULE_RADIUS 0x00000004 #define HOSTAPD_MODULE_RADIUS 0x00000004
#define HOSTAPD_MODULE_WPA 0x00000008 #define HOSTAPD_MODULE_WPA 0x00000008
#define HOSTAPD_MODULE_DRIVER 0x00000010 #define HOSTAPD_MODULE_DRIVER 0x00000010
@ -822,10 +822,10 @@ index 421977eed..0fc1c2511 100644
#CONFIG_FILS=y #CONFIG_FILS=y
#CONFIG_FILS_SK_PFS=y #CONFIG_FILS_SK_PFS=y
diff --git a/tests/hwsim/example-hostapd.config b/tests/hwsim/example-hostapd.config diff --git a/tests/hwsim/example-hostapd.config b/tests/hwsim/example-hostapd.config
index 5b7130fdc..451414e01 100644 index c227625aa..65b218500 100644
--- a/tests/hwsim/example-hostapd.config --- a/tests/hwsim/example-hostapd.config
+++ b/tests/hwsim/example-hostapd.config +++ b/tests/hwsim/example-hostapd.config
@@ -108,6 +108,7 @@ CONFIG_SUITEB=y @@ -105,6 +105,7 @@ CONFIG_SUITEB192=$(if $(filter openssl mbedtls,$(CONFIG_TLS)),y,)
#LIBS_c += -fsanitize=undefined #LIBS_c += -fsanitize=undefined
CONFIG_MBO=y CONFIG_MBO=y

View File

@ -11,11 +11,9 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
wpa_supplicant/ctrl_iface.c | 4 ++-- wpa_supplicant/ctrl_iface.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-) 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/wpa_supplicant/ctrl_iface.c b/wpa_supplicant/ctrl_iface.c
index ac337e0f5..6e23114e6 100644
--- a/wpa_supplicant/ctrl_iface.c --- a/wpa_supplicant/ctrl_iface.c
+++ b/wpa_supplicant/ctrl_iface.c +++ b/wpa_supplicant/ctrl_iface.c
@@ -12185,7 +12185,7 @@ char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s, @@ -12640,7 +12640,7 @@ char * wpa_supplicant_ctrl_iface_process
if (wpas_ctrl_iface_coloc_intf_report(wpa_s, buf + 18)) if (wpas_ctrl_iface_coloc_intf_report(wpa_s, buf + 18))
reply_len = -1; reply_len = -1;
#endif /* CONFIG_WNM */ #endif /* CONFIG_WNM */
@ -24,7 +22,7 @@ index ac337e0f5..6e23114e6 100644
} else if (os_strncmp(buf, "DISASSOC_IMMINENT ", 18) == 0) { } else if (os_strncmp(buf, "DISASSOC_IMMINENT ", 18) == 0) {
if (ap_ctrl_iface_disassoc_imminent(wpa_s, buf + 18)) if (ap_ctrl_iface_disassoc_imminent(wpa_s, buf + 18))
reply_len = -1; reply_len = -1;
@@ -12195,7 +12195,7 @@ char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s, @@ -12650,7 +12650,7 @@ char * wpa_supplicant_ctrl_iface_process
} else if (os_strncmp(buf, "BSS_TM_REQ ", 11) == 0) { } else if (os_strncmp(buf, "BSS_TM_REQ ", 11) == 0) {
if (ap_ctrl_iface_bss_tm_req(wpa_s, buf + 11)) if (ap_ctrl_iface_bss_tm_req(wpa_s, buf + 11))
reply_len = -1; reply_len = -1;
@ -33,6 +31,3 @@ index ac337e0f5..6e23114e6 100644
} else if (os_strcmp(buf, "FLUSH") == 0) { } else if (os_strcmp(buf, "FLUSH") == 0) {
wpa_supplicant_ctrl_iface_flush(wpa_s); wpa_supplicant_ctrl_iface_flush(wpa_s);
} else if (os_strncmp(buf, "RADIO_WORK ", 11) == 0) { } else if (os_strncmp(buf, "RADIO_WORK ", 11) == 0) {
--
2.35.1

View File

@ -1,19 +0,0 @@
--- a/wpa_supplicant/wpa_supplicant.c
+++ b/wpa_supplicant/wpa_supplicant.c
@@ -8104,6 +8104,7 @@ int wpas_network_disabled(struct wpa_sup
!ssid->mem_only_psk)
return 1;
+#ifdef CONFIG_IEEE8021X_EAPOL
#ifdef CRYPTO_RSA_OAEP_SHA256
if (ssid->eap.imsi_privacy_cert) {
struct crypto_rsa_key *key;
@@ -8121,7 +8122,7 @@ int wpas_network_disabled(struct wpa_sup
}
}
#endif /* CRYPTO_RSA_OAEP_SHA256 */
-
+#endif /* CONFIG_IEEE8021X_EAPOL */
return 0;
}

View File

@ -1,32 +0,0 @@
From f374d52079111a4340acb6df835f45ac6b5f3f60 Mon Sep 17 00:00:00 2001
From: Andre Heider <a.heider@gmail.com>
Date: Wed, 22 Jun 2022 14:13:55 +0200
Subject: OpenSSL: Include rsa.h for all OpenSSL versions
This fixes the build with OpenSSL 1.1.1:
../src/crypto/crypto_openssl.c: In function 'crypto_rsa_oaep_sha256_decrypt':
../src/crypto/crypto_openssl.c:4404:49: error: 'RSA_PKCS1_OAEP_PADDING' undeclared (first use in this function)
Signed-off-by: Andre Heider <a.heider@gmail.com>
---
src/crypto/crypto_openssl.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/src/crypto/crypto_openssl.c
+++ b/src/crypto/crypto_openssl.c
@@ -16,6 +16,7 @@
#include <openssl/dh.h>
#include <openssl/hmac.h>
#include <openssl/rand.h>
+#include <openssl/rsa.h>
#include <openssl/pem.h>
#ifdef CONFIG_ECC
#include <openssl/ec.h>
@@ -25,7 +26,6 @@
#include <openssl/provider.h>
#include <openssl/core_names.h>
#include <openssl/param_build.h>
-#include <openssl/rsa.h>
#include <openssl/encoder.h>
#include <openssl/decoder.h>
#else /* OpenSSL version >= 3.0 */

View File

@ -30,6 +30,12 @@ SRC_URI = "git://w1.fi/hostap.git;protocol=http;branch=main \
file://040-mesh-allow-processing-authentication-frames-in-block.patch \ file://040-mesh-allow-processing-authentication-frames-in-block.patch \
file://050-build_fix.patch \ file://050-build_fix.patch \
file://100-daemonize_fix.patch \ file://100-daemonize_fix.patch \
file://110-mbedtls-TLS-crypto-option-initial-port.patch \
file://120-mbedtls-fips186_2_prf.patch \
file://130-mbedtls-annotate-with-TEST_FAIL-for-hwsim-tests.patch \
file://140-tests-Makefile-make-run-tests-with-CONFIG_TLS.patch \
file://150-add-NULL-checks-encountered-during-tests-hwsim.patch \
file://160-dpp_pkex-EC-point-mul-w-value-prime.patch \
file://200-multicall.patch \ file://200-multicall.patch \
file://300-noscan.patch \ file://300-noscan.patch \
file://301-mesh-noscan.patch \ file://301-mesh-noscan.patch \
@ -49,15 +55,12 @@ SRC_URI = "git://w1.fi/hostap.git;protocol=http;branch=main \
file://420-indicate-features.patch \ file://420-indicate-features.patch \
file://430-hostapd_cli_ifdef.patch \ file://430-hostapd_cli_ifdef.patch \
file://431-wpa_cli_ifdef.patch \ file://431-wpa_cli_ifdef.patch \
file://432-missing-typedef.patch \
file://450-scan_wait.patch \ file://450-scan_wait.patch \
file://460-wpa_supplicant-add-new-config-params-to-be-used-with.patch \ file://460-wpa_supplicant-add-new-config-params-to-be-used-with.patch \
file://461-driver_nl80211-use-new-parameters-during-ibss-join.patch \
file://463-add-mcast_rate-to-11s.patch \ file://463-add-mcast_rate-to-11s.patch \
file://464-fix-mesh-obss-check.patch \ file://464-fix-mesh-obss-check.patch \
file://465-hostapd-config-support-random-BSS-color.patch \ file://465-hostapd-config-support-random-BSS-color.patch \
file://470-survey_data_fallback.patch \ file://470-survey_data_fallback.patch \
file://500-lto-jobserver-support.patch \
file://590-rrm-wnm-statistics.patch \ file://590-rrm-wnm-statistics.patch \
file://599-wpa_supplicant-fix-warnings.patch \ file://599-wpa_supplicant-fix-warnings.patch \
file://610-hostapd_cli_ujail_permission.patch \ file://610-hostapd_cli_ujail_permission.patch \
@ -69,19 +72,20 @@ SRC_URI = "git://w1.fi/hostap.git;protocol=http;branch=main \
file://740-snoop_iface.patch \ file://740-snoop_iface.patch \
file://750-qos_map_set_without_interworking.patch \ file://750-qos_map_set_without_interworking.patch \
file://751-qos_map_ignore_when_unsupported.patch \ file://751-qos_map_ignore_when_unsupported.patch \
file://910-wpa_supplicant_remove_acl.patch \ file://760-dynamic_own_ip.patch \
file://912-iapp-integration.patch \ file://761-shared_das_port.patch \
file://913-iapp-improvements.patch \
file://914-wlan-acs-srd-channels.patch \ file://914-wlan-acs-srd-channels.patch \
file://990-ctrl-make-WNM_AP-functions-dependant-on-CONFIG_AP.patch \ file://990-ctrl-make-WNM_AP-functions-dependant-on-CONFIG_AP.patch \
file://991-fix-compile.patch \
file://992-openssl-include-rsa.patch \
file://0001-fix-create-a-versioned-shared-library-libwlan_client.patch \ file://0001-fix-create-a-versioned-shared-library-libwlan_client.patch \
file://0001-use-nas-port-type-ethernet-for-wired-802.1X.patch \ file://0001-use-nas-port-type-ethernet-for-wired-802.1X.patch \
" file://912-iapp-integration.patch \
file://913-iapp-improvements.patch \
"
SRCREV = "4383528e01955d995d3b3db201e4c0f9840e8236" # file://500-lto-jobserver-support.patch
SRC_URI[sha256sum] = "a1330574a241200188ff1478df25b58630012d7db91dfe092b8e0a3c50805ef0"
SRCREV = "599d00be9de2846c6ea18c1487d8329522ade22b"
SRC_URI[sha256sum] = "828810c558ea181e45ed0c8b940f5c41e55775e2979a15aed8cf0ab17dd7723c"
CVE_PRODUCT = "${TARGET_NAME}" CVE_PRODUCT = "${TARGET_NAME}"
CONFFILES_${TARGET_NAME} += "${sysconfdir}/${TARGET_NAME}-full.config" CONFFILES_${TARGET_NAME} += "${sysconfdir}/${TARGET_NAME}-full.config"