mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-10-30 10:02:53 +00:00
229 lines
7.1 KiB
Diff
229 lines
7.1 KiB
Diff
--- a/hostapd/config_file.c
|
|
+++ b/hostapd/config_file.c
|
|
@@ -4594,6 +4594,15 @@ static int hostapd_config_fill(struct ho
|
|
bss->disable_11ac = !!atoi(pos);
|
|
} else if (os_strcmp(buf, "disable_11ax") == 0) {
|
|
bss->disable_11ax = !!atoi(pos);
|
|
+ } else if (os_strcmp(buf, "beacon_tx_mode") == 0) {
|
|
+ int val = atoi(pos);
|
|
+
|
|
+ if (val < 0 || val > 2) {
|
|
+ wpa_printf(MSG_ERROR, "Line %d: invalid beacon_tx_mode %d",
|
|
+ line, val);
|
|
+ return 1;
|
|
+ }
|
|
+ bss->beacon_tx_mode = val;
|
|
#ifdef CONFIG_PASN
|
|
#ifdef CONFIG_TESTING_OPTIONS
|
|
} else if (os_strcmp(buf, "force_kdk_derivation") == 0) {
|
|
--- a/src/ap/ap_config.h
|
|
+++ b/src/ap/ap_config.h
|
|
@@ -895,6 +895,7 @@ struct hostapd_bss_config {
|
|
|
|
unsigned int unsol_bcast_probe_resp_interval;
|
|
u8 rnr_beacon;
|
|
+ int beacon_tx_mode;
|
|
};
|
|
|
|
/**
|
|
--- a/src/ap/beacon.c
|
|
+++ b/src/ap/beacon.c
|
|
@@ -1863,6 +1863,8 @@ int ieee802_11_build_ap_params(struct ho
|
|
params->dtim_period = hapd->conf->dtim_period;
|
|
}
|
|
|
|
+ params->beacon_tx_mode = hapd->conf->beacon_tx_mode;
|
|
+
|
|
return 0;
|
|
}
|
|
|
|
--- a/src/drivers/driver.h
|
|
+++ b/src/drivers/driver.h
|
|
@@ -1206,6 +1206,12 @@ struct wpa_driver_associate_params {
|
|
* Disable HE40MHz coexistence scan
|
|
*/
|
|
int disable_40mhz_scan;
|
|
+ /**
|
|
+ * Beacon Tx mode - To configure STAGGERED or BURST mode
|
|
+ * 1 = STAGGERED beacon tx mode
|
|
+ * 2 = BURST beacon tx mode
|
|
+ */
|
|
+ int beacon_tx_mode;
|
|
};
|
|
|
|
enum hide_ssid {
|
|
@@ -1650,6 +1656,13 @@ struct wpa_driver_ap_params {
|
|
* rnr_ie_count - Number of offsets in rnr_ie_offsets
|
|
*/
|
|
int rnr_ie_count;
|
|
+
|
|
+ /**
|
|
+ * Beacon Tx mode - To configure STAGGERED or BURST mode
|
|
+ * 1 = STAGGERED beacon tx mode
|
|
+ * 2 = BURST beacon tx mode
|
|
+ */
|
|
+ int beacon_tx_mode;
|
|
};
|
|
|
|
struct wpa_driver_mesh_bss_params {
|
|
@@ -1689,6 +1702,7 @@ struct wpa_driver_mesh_join_params {
|
|
unsigned int flags;
|
|
bool handle_dfs;
|
|
int mcast_rate;
|
|
+ int beacon_tx_mode;
|
|
};
|
|
|
|
struct wpa_driver_set_key_params {
|
|
--- a/src/drivers/driver_nl80211.c
|
|
+++ b/src/drivers/driver_nl80211.c
|
|
@@ -4543,6 +4543,7 @@ static int wpa_driver_nl80211_set_ap(voi
|
|
wpa_printf(MSG_DEBUG, "nl80211: beacon_rate=%u", params->beacon_rate);
|
|
wpa_printf(MSG_DEBUG, "nl80211: rate_type=%d", params->rate_type);
|
|
wpa_printf(MSG_DEBUG, "nl80211: dtim_period=%d", params->dtim_period);
|
|
+ wpa_printf(MSG_DEBUG, "nl80211: beacon_tx_mode=%d", params->beacon_tx_mode);
|
|
wpa_printf(MSG_DEBUG, "nl80211: ssid=%s",
|
|
wpa_ssid_txt(params->ssid, params->ssid_len));
|
|
if (!(msg = nl80211_bss_msg(bss, 0, cmd)) ||
|
|
@@ -4554,7 +4555,9 @@ static int wpa_driver_nl80211_set_ap(voi
|
|
nl80211_put_beacon_rate(msg, drv->capa.flags, drv->capa.flags2,
|
|
params) ||
|
|
nl80211_put_dtim_period(msg, params->dtim_period) ||
|
|
- nla_put(msg, NL80211_ATTR_SSID, params->ssid_len, params->ssid))
|
|
+ nla_put(msg, NL80211_ATTR_SSID, params->ssid_len, params->ssid) ||
|
|
+ (params->beacon_tx_mode &&
|
|
+ nla_put_u32(msg, NL80211_ATTR_BEACON_TX_MODE, params->beacon_tx_mode)))
|
|
goto fail;
|
|
if (params->proberesp && params->proberesp_len) {
|
|
wpa_hexdump(MSG_DEBUG, "nl80211: proberesp (offload)",
|
|
@@ -10671,7 +10674,9 @@ static int nl80211_join_mesh(struct i802
|
|
nl80211_put_mesh_id(msg, params->meshid, params->meshid_len) ||
|
|
nl80211_put_beacon_int(msg, params->beacon_int) ||
|
|
nl80211_put_mcast_rate(msg, params->mcast_rate) ||
|
|
- nl80211_put_dtim_period(msg, params->dtim_period))
|
|
+ nl80211_put_dtim_period(msg, params->dtim_period) ||
|
|
+ (params->beacon_tx_mode &&
|
|
+ nla_put_u32(msg, NL80211_ATTR_BEACON_TX_MODE, params->beacon_tx_mode)))
|
|
goto fail;
|
|
|
|
wpa_printf(MSG_DEBUG, " * flags=%08X", params->flags);
|
|
--- a/src/drivers/nl80211_copy.h
|
|
+++ b/src/drivers/nl80211_copy.h
|
|
@@ -2608,6 +2608,10 @@ enum nl80211_commands {
|
|
* for co-located APs and neighbor APs in ESS to be added in all
|
|
* EMA beacons.
|
|
*
|
|
+ * @NL80211_ATTR_BEACON_TX_MODE: used to configure the beacon tx mode as
|
|
+ * staggered mode or burst mode in %NL80211_CMD_START_AP from
|
|
+ * user-space.
|
|
+ *
|
|
* @NUM_NL80211_ATTR: total number of nl80211_attrs available
|
|
* @NL80211_ATTR_MAX: highest attribute number currently defined
|
|
* @__NL80211_ATTR_AFTER_LAST: internal use
|
|
@@ -3121,6 +3125,8 @@ enum nl80211_attrs {
|
|
|
|
NL80211_ATTR_RNR_OFFSETS,
|
|
|
|
+ NL80211_ATTR_BEACON_TX_MODE,
|
|
+
|
|
/* add attributes here, update the policy in nl80211.c */
|
|
|
|
__NL80211_ATTR_AFTER_LAST,
|
|
@@ -7371,4 +7377,13 @@ enum nl80211_rnr_ies_attributes {
|
|
__NL80211_RNR_IES_ATTR_LAST,
|
|
NL80211_RNR_IES_ATTR_MAX = __NL80211_RNR_IES_ATTR_LAST - 1
|
|
};
|
|
+
|
|
+/**
|
|
+ * enum nl80211_beacon_tx_mode - Beacon Tx Mode enum.
|
|
+ * Used to configure beacon staggered mode or beacon burst mode.
|
|
+ */
|
|
+enum nl80211_beacon_tx_mode {
|
|
+ NL80211_BEACON_STAGGERED_MODE = 1,
|
|
+ NL80211_BEACON_BURST_MODE = 2,
|
|
+};
|
|
#endif /* __LINUX_NL80211_H */
|
|
--- a/hostapd/hostapd.conf
|
|
+++ b/hostapd/hostapd.conf
|
|
@@ -250,6 +250,9 @@ rts_threshold=-1
|
|
# it.
|
|
fragm_threshold=-1
|
|
|
|
+# Beacon Tx mode; 1 = STAGGERED beacon tx mode; 2 = BURST beacon tx mode.
|
|
+beacon_tx_mode=1
|
|
+
|
|
# Rate configuration
|
|
# Default is to enable all rates supported by the hardware. This configuration
|
|
# item allows this list be filtered so that only the listed rates will be left
|
|
--- a/wpa_supplicant/config.c
|
|
+++ b/wpa_supplicant/config.c
|
|
@@ -2740,6 +2740,7 @@ static const struct parse_data ssid_fiel
|
|
{ INT_RANGE(transition_disable, 0, 255) },
|
|
{ INT_RANGE(sae_pk, 0, 2) },
|
|
{ INT_RANGE(disable_40mhz_scan, 0, 1)},
|
|
+ { INT_RANGE(beacon_tx_mode, 1, 2)},
|
|
};
|
|
|
|
#undef OFFSET
|
|
@@ -3249,6 +3250,7 @@ void wpa_config_set_network_defaults(str
|
|
#endif /* CONFIG_MACSEC */
|
|
ssid->mac_addr = -1;
|
|
ssid->max_oper_chwidth = DEFAULT_MAX_OPER_CHWIDTH;
|
|
+ ssid->beacon_tx_mode = DEFAULT_BEACON_TX_MODE;
|
|
}
|
|
|
|
|
|
--- a/wpa_supplicant/config_file.c
|
|
+++ b/wpa_supplicant/config_file.c
|
|
@@ -893,6 +893,7 @@ static void wpa_config_write_network(FIL
|
|
INT(disable_he);
|
|
#endif /* CONFIG_HE_OVERRIDES */
|
|
INT(disable_40mhz_scan);
|
|
+ INT(beacon_tx_mode);
|
|
#undef STR
|
|
#undef INT
|
|
#undef INT_DEF
|
|
--- a/wpa_supplicant/config_ssid.h
|
|
+++ b/wpa_supplicant/config_ssid.h
|
|
@@ -47,6 +47,7 @@
|
|
#define DEFAULT_AMPDU_DENSITY -1 /* no change */
|
|
#define DEFAULT_USER_SELECTED_SIM 1
|
|
#define DEFAULT_MAX_OPER_CHWIDTH -1
|
|
+#define DEFAULT_BEACON_TX_MODE 0
|
|
|
|
struct psk_list_entry {
|
|
struct dl_list list;
|
|
@@ -1177,6 +1178,13 @@ struct wpa_ssid {
|
|
* disable_40mhz_scan - Disable 40MHz coex scan
|
|
*/
|
|
int disable_40mhz_scan;
|
|
+
|
|
+ /**
|
|
+ * beacon_tx_mode - Beacon Tx mode
|
|
+ * 1 = STAGGERED MODE
|
|
+ * 2 = BURST MODE
|
|
+ */
|
|
+ int beacon_tx_mode;
|
|
};
|
|
|
|
#endif /* CONFIG_SSID_H */
|
|
--- a/wpa_supplicant/mesh.c
|
|
+++ b/wpa_supplicant/mesh.c
|
|
@@ -668,6 +668,7 @@ int wpa_supplicant_join_mesh(struct wpa_
|
|
params->dtim_period = ssid->dtim_period;
|
|
else if (wpa_s->conf->dtim_period > 0)
|
|
params->dtim_period = wpa_s->conf->dtim_period;
|
|
+ params->beacon_tx_mode = ssid->beacon_tx_mode;
|
|
params->conf.max_peer_links = wpa_s->conf->max_peer_links;
|
|
if (ssid->mesh_rssi_threshold < DEFAULT_MESH_RSSI_THRESHOLD) {
|
|
params->conf.rssi_threshold = ssid->mesh_rssi_threshold;
|
|
--- a/wpa_supplicant/wpa_cli.c
|
|
+++ b/wpa_supplicant/wpa_cli.c
|
|
@@ -1489,6 +1489,7 @@ static const char *network_fields[] = {
|
|
#endif /* CONFIG_HS20 */
|
|
"mac_addr", "pbss", "wps_disabled",
|
|
"disable_40mhz_scan",
|
|
+ "beacon_tx_mode",
|
|
};
|
|
|
|
|