public inbox for ipfire-scm@lists.ipfire.org
 help / color / mirror / Atom feed
* [git.ipfire.org] IPFire 2.x development tree branch, next, updated. ed6a1a9504669c7cccab3fd81d600efd4905a317
@ 2025-09-22 11:54 Michael Tremer
  0 siblings, 0 replies; only message in thread
From: Michael Tremer @ 2025-09-22 11:54 UTC (permalink / raw)
  To: ipfire-scm

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 82604 bytes --]

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "IPFire 2.x development tree".

The branch, next has been updated
       via  ed6a1a9504669c7cccab3fd81d600efd4905a317 (commit)
       via  f643e32b2b63ccc1955da740d44dd0b2f420cbb8 (commit)
       via  74e4ce6ce7156d6d6c63eab22cfa349d65532dae (commit)
       via  483f519f96e8f86f1f53ac6eea3c44fc605eddbc (commit)
       via  31518fbf7e4cea880ce1cd9f11d8aa5c72cb0d82 (commit)
       via  73c021ad48aeedf7204cb6c9b75dad8f6652eeed (commit)
       via  f78583594da17ca223caf46166af6db8dee39203 (commit)
       via  2de6eb5aab705116aa4092ff91d13152e1f8508e (commit)
       via  822139a667bd19d4a32e8a713261959cf27da726 (commit)
       via  549e5423b3549aff85c30434e6b920bb5a0a2db6 (commit)
       via  d93581ea048ea7bc7bff7e3dc70a30a18ab96414 (commit)
       via  b60363da83f115ba5272a60a45bedfd44894bdef (commit)
       via  11fdad6801f2eedcc80d7cf68d54ee085c5d2ef3 (commit)
       via  fa7b2322e3f123658907b424d5f40933d7312a1e (commit)
       via  2cfca735b564ce9df91a80ce0d1e400e378bfe1b (commit)
       via  cfabcb4cc2f0162f7e2301642e0e9b843e51225f (commit)
       via  0332bbc78e8d5c53628c2f0fb6f3c6535b695ff5 (commit)
       via  cc6c4a0c66eff8c32f14c0e3cfa0255e5dba3bd1 (commit)
       via  cf5ae592155a34fc7b91fa885ba644bdff7e10a8 (commit)
       via  6125bba5cde2381b463ce641bec7c35811b449fd (commit)
       via  db9262fdabfef244b5da09623e1e79754b7935ad (commit)
       via  61f0cb9cfb5f37a3b762d835586cd66d8884bbc5 (commit)
       via  82ce043f4ccc80e91dfab1b6a3d21f0a178c306f (commit)
       via  e3a3208441fbdcbf66ca70780441750c499c9ca0 (commit)
       via  674adcac6d949b9defcbc9d5abb39179fc11fcd4 (commit)
       via  90e4117f1b31c54fbe144a2fb0582284aca2ea89 (commit)
       via  72c39a53a817138fef7e0f576c1c7416f77fe186 (commit)
       via  b53cf1f1c6c232758b35a09b4ca7ed75ed671577 (commit)
       via  dc20ebf1f823232558dfc9e3b27941238f268949 (commit)
       via  4002ecb3a3b11e400ae9f73f3cd73b9116dae182 (commit)
       via  7873f421fae64141b2af804e4c14e3571cfc384b (commit)
       via  0cbc3ada4fc5057cbf97f40f5a75ced8429f93ae (commit)
      from  c2eba600d753df95a81707f7da0ab172ed864ab0 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit ed6a1a9504669c7cccab3fd81d600efd4905a317
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Mon Sep 22 11:53:26 2025 +0000

    hostapd: Update to version f747ae0
    
    This is an unreleased version checked out from Git.
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit f643e32b2b63ccc1955da740d44dd0b2f420cbb8
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Mon Sep 22 13:25:59 2025 +0200

    hostapd: Convert multicast packets to unicast
    
    This will save some airtime especially when there are legacy clients on
    the network.
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 74e4ce6ce7156d6d6c63eab22cfa349d65532dae
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Mon Sep 22 13:12:15 2025 +0200

    wlanap.cgi: Add options to select the new WiFi modes
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 483f519f96e8f86f1f53ac6eea3c44fc605eddbc
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Mon Sep 22 12:53:01 2025 +0200

    wlanap.cgi: Validate and store BAND & MODE
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 31518fbf7e4cea880ce1cd9f11d8aa5c72cb0d82
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Mon Sep 22 12:44:02 2025 +0200

    wlanap.cgi: Migrate to the new BAND setting
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 73c021ad48aeedf7204cb6c9b75dad8f6652eeed
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Mon Sep 22 12:42:26 2025 +0200

    wlanap.cgi: Migrate to the new MODE parameter
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit f78583594da17ca223caf46166af6db8dee39203
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Mon Sep 22 12:34:14 2025 +0200

    hostapd: Fix incorrect variable when detecting the band
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 2de6eb5aab705116aa4092ff91d13152e1f8508e
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Mon Sep 22 11:29:04 2025 +0100

    hostapd: Fix VHT capability IDs
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 822139a667bd19d4a32e8a713261959cf27da726
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Fri Jul 25 12:58:56 2025 +0200

    hostapd: Fix number of beamforming antennas
    
    The bitmap is off by one.
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 549e5423b3549aff85c30434e6b920bb5a0a2db6
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Fri Jul 25 12:44:06 2025 +0200

    hostapd: Remove CONFIG_IEEE80211W
    
    This option was removed and 802.11w is now always compiled in.
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit d93581ea048ea7bc7bff7e3dc70a30a18ab96414
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Wed Jul 23 20:46:39 2025 +0200

    hostapd: ath11k also does not support Greenfield and Delayed Block ACK
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit b60363da83f115ba5272a60a45bedfd44894bdef
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Wed Jul 23 18:00:29 2025 +0200

    hostapd: Allow to adjust the debug level
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 11fdad6801f2eedcc80d7cf68d54ee085c5d2ef3
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Wed Jul 23 17:47:57 2025 +0200

    hostapd: Perform radar detection in the background
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit fa7b2322e3f123658907b424d5f40933d7312a1e
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Wed Jul 23 17:42:14 2025 +0200

    hostapd: Optionally select which antennas to use
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 2cfca735b564ce9df91a80ce0d1e400e378bfe1b
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Wed Jul 23 17:34:00 2025 +0200

    hostapd: Add support for 802.11be
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit cfabcb4cc2f0162f7e2301642e0e9b843e51225f
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Wed Jul 23 16:59:56 2025 +0200

    hostapd: Introduce new WiFi modes to accomodate all different modes
    
    Using just 802.11ac does not entirely cover how the hardware could be
    configured. Some devices support 20, 40, 80 or even 160 MHz channels
    which is now being implemented here.
    
    The channel offsets are computed manually or will be automatically
    selected by hostapd if we are using ACS.
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 0332bbc78e8d5c53628c2f0fb6f3c6535b695ff5
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Wed Jul 23 16:12:18 2025 +0200

    hostapd: Fix a shell syntax error
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit cc6c4a0c66eff8c32f14c0e3cfa0255e5dba3bd1
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Wed Jul 23 16:10:17 2025 +0200

    wlanap.cgi: Remove the option to manually configure HT/VHT caps
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit cf5ae592155a34fc7b91fa885ba644bdff7e10a8
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Wed Jul 23 16:09:01 2025 +0200

    hostapd: Automatically configure VHT capabilities
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 6125bba5cde2381b463ce641bec7c35811b449fd
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Wed Jul 23 16:08:41 2025 +0200

    hostapd: Add experimental support for 802.11ax
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit db9262fdabfef244b5da09623e1e79754b7935ad
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Wed Jul 23 15:51:10 2025 +0200

    hostapd: Allow to enable debugging
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 61f0cb9cfb5f37a3b762d835586cd66d8884bbc5
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Wed Jul 23 15:46:09 2025 +0200

    hostapd: Filter out some unsupported VHT caps by driver
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 82ce043f4ccc80e91dfab1b6a3d21f0a178c306f
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Wed Jul 23 15:45:12 2025 +0200

    hostapd: ath12k does not support Greenfield either
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit e3a3208441fbdcbf66ca70780441750c499c9ca0
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Wed Jul 23 12:48:12 2025 +0200

    hostapd: Fix shell syntax error
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 674adcac6d949b9defcbc9d5abb39179fc11fcd4
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Wed Jul 23 12:31:26 2025 +0200

    hostapd: ath12k does not support Delayed Block ACK either
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 90e4117f1b31c54fbe144a2fb0582284aca2ea89
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Tue Jul 22 17:47:03 2025 +0200

    hostapd: Automatically determine supported capabilities
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 72c39a53a817138fef7e0f576c1c7416f77fe186
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Mon Jul 21 19:06:32 2025 +0200

    hostapd: Enable SHA256 for WPA2/1 PSK authentication
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit b53cf1f1c6c232758b35a09b4ca7ed75ed671577
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Mon Jul 21 19:04:09 2025 +0200

    hostapd: Enable various options to improve security and interoperability
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit dc20ebf1f823232558dfc9e3b27941238f268949
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Thu Jul 17 18:07:10 2025 +0000

    hostapd: Rebase the configuration on the upstream default config
    
    Most options are added, but not enabled. There are however the following
    changes:
    
      * Enable Operating Channel Validation
      * Enable Fast BSS Transition (802.11r)
      * Support for 802.11ax and 802.11be
      * Disable the internal randomness pool
      * Enable Interworking (802.11u)
      * Enable Fast Session Transfer (FST)
      * Enable Multiband Operation support
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 4002ecb3a3b11e400ae9f73f3cd73b9116dae182
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Thu May 8 17:57:07 2025 +0200

    hostapd: Generate the configuration in the initscript
    
    This will give us some more flexibility in the future.
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 7873f421fae64141b2af804e4c14e3571cfc384b
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Thu May 8 17:37:09 2025 +0200

    hostapd: Remove any unused variables from initscript
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 0cbc3ada4fc5057cbf97f40f5a75ced8429f93ae
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Mon Sep 22 10:26:35 2025 +0000

    suricata-reporter: Fix path to database
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

-----------------------------------------------------------------------

Summary of changes:
 config/hostapd/config            |  50 ++-
 doc/language_issues.en           |  24 ++
 doc/language_issues.es           |  24 ++
 doc/language_issues.fr           |  24 ++
 doc/language_issues.it           |  24 ++
 doc/language_issues.nl           |  24 ++
 doc/language_issues.pl           |  24 ++
 doc/language_issues.ru           |  24 ++
 doc/language_issues.tr           |  24 ++
 doc/language_issues.tw           |  24 ++
 doc/language_issues.zh           |  24 ++
 doc/language_missings            | 216 +++++++++++++
 html/cgi-bin/wlanap.cgi          | 294 ++++++-----------
 langs/de/cgi-bin/de.pl           |  24 ++
 langs/en/cgi-bin/en.pl           |  24 ++
 lfs/hostapd                      |   8 +-
 lfs/suricata-reporter            |   3 +-
 src/initscripts/packages/hostapd | 663 ++++++++++++++++++++++++++++++++++++++-
 18 files changed, 1307 insertions(+), 215 deletions(-)

Difference in files:
diff --git a/config/hostapd/config b/config/hostapd/config
index b590309004..8bf19375b3 100644
--- a/config/hostapd/config
+++ b/config/hostapd/config
@@ -48,7 +48,7 @@ CONFIG_LIBNL32=y
 CONFIG_RSN_PREAUTH=y
 
 # Support Operating Channel Validation
-#CONFIG_OCV=y
+CONFIG_OCV=y
 
 # Integrated EAP server
 #CONFIG_EAP=y
@@ -141,8 +141,11 @@ CONFIG_RSN_PREAUTH=y
 # Build IPv6 support for RADIUS operations
 #CONFIG_IPV6=y
 
+# Include support fo RADIUS/TLS into the RADIUS client
+#CONFIG_RADIUS_TLS=y
+
 # IEEE Std 802.11r-2008 (Fast BSS Transition)
-#CONFIG_IEEE80211R=y
+CONFIG_IEEE80211R=y
 
 # Use the hostapd's IEEE 802.11 authentication (ACL), but without
 # the IEEE 802.11 Management capability (e.g., FreeBSD/net80211)
@@ -156,10 +159,20 @@ CONFIG_RSN_PREAUTH=y
 CONFIG_IEEE80211AC=y
 
 # IEEE 802.11ax HE support
+CONFIG_IEEE80211AX=y
+
+# IEEE 802.11be EHT support
+# CONFIG_IEEE80211AX is mandatory for setting CONFIG_IEEE80211BE.
 # Note: This is experimental and work in progress. The definitions are still
 # subject to change and this should not be expected to interoperate with the
-# final IEEE 802.11ax version.
-CONFIG_IEEE80211AX=y
+# final IEEE 802.11be version.
+CONFIG_IEEE80211BE=y
+
+# Simultaneous Authentication of Equals (SAE), WPA3-Personal
+CONFIG_SAE=y
+
+# SAE Public Key, WPA3-Personal
+CONFIG_SAE_PK=y
 
 # Remove debugging code that is printing out debug messages to stdout.
 # This can be used to reduce the size of the hostapd considerably if debugging
@@ -248,7 +261,7 @@ CONFIG_NO_VLAN=y
 # This will save some in binary size and CPU use. However, this should only be
 # considered for builds that are known to be used on devices that meet the
 # requirements described above.
-#CONFIG_NO_RANDOM_POOL=y
+CONFIG_NO_RANDOM_POOL=y
 
 # Should we attempt to use the getrandom(2) call that provides more reliable
 # yet secure randomness source than /dev/random on Linux 3.17 and newer.
@@ -304,7 +317,7 @@ CONFIG_TLS=openssl
 # Interworking (IEEE 802.11u)
 # This can be used to enable functionality to improve interworking with
 # external networks.
-#CONFIG_INTERWORKING=y
+CONFIG_INTERWORKING=y
 
 # Hotspot 2.0
 #CONFIG_HS20=y
@@ -313,7 +326,7 @@ CONFIG_TLS=openssl
 #CONFIG_SQLITE=y
 
 # Enable Fast Session Transfer (FST)
-#CONFIG_FST=y
+CONFIG_FST=y
 
 # Enable CLI commands for FST testing
 #CONFIG_FST_TEST=y
@@ -346,14 +359,14 @@ CONFIG_TLS=openssl
 # * ath10k
 #
 # For more details refer to:
-# http://wireless.kernel.org/en/users/Documentation/acs
+# https://wireless.wiki.kernel.org/en/users/documentation/acs
 #
 CONFIG_ACS=y
 
 # Multiband Operation support
 # These extensions facilitate efficient use of multiple frequency bands
 # available to the AP and the devices that may associate with it.
-#CONFIG_MBO=y
+CONFIG_MBO=y
 
 # Client Taxonomy
 # Has the AP retain the Probe Request and (Re)Association Request frames from
@@ -396,6 +409,19 @@ CONFIG_AIRTIME_POLICY=y
 # that functionality is subject to be removed in the future.
 #CONFIG_NO_TKIP=y
 
-# Manually added options
-CONFIG_SAE=y
-CONFIG_IEEE80211W=y
+# Pre-Association Security Negotiation (PASN)
+# Experimental implementation based on IEEE P802.11z/D2.6 and the protocol
+# design is still subject to change. As such, this should not yet be enabled in
+# production use.
+#CONFIG_PASN=y
+
+# Device Provisioning Protocol (DPP) (also known as Wi-Fi Easy Connect)
+CONFIG_DPP=y
+# DPP version 2 support
+CONFIG_DPP2=y
+# DPP version 3 support (experimental and still changing; do not enable for
+# production use)
+#CONFIG_DPP3=y
+
+# Wi-Fi Aware unsynchronized service discovery (NAN USD)
+#CONFIG_NAN_USD=y
diff --git a/doc/language_issues.en b/doc/language_issues.en
index 6dfada328b..6df0cf38cb 100644
--- a/doc/language_issues.en
+++ b/doc/language_issues.en
@@ -2393,10 +2393,32 @@ WARNING: untranslated string: wlan client wpa mode ccmp ccmp = CCMP-CCMP
 WARNING: untranslated string: wlan client wpa mode ccmp tkip = CCMP-TKIP
 WARNING: untranslated string: wlan client wpa mode tkip tkip = TKIP-TKIP
 WARNING: untranslated string: wlanap = Wireless Access Point
+WARNING: untranslated string: wlanap 802.11ac = IEEE 802.11ac
+WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz
+WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz
+WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz
+WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn
+WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz
+WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ax = IEEE 802.11ax
+WARNING: untranslated string: wlanap 802.11ax 160mhz = IEEE 802.11ax @ 160 MHz
+WARNING: untranslated string: wlanap 802.11ax 20mhz = IEEE 802.11ax @ 20 MHz
+WARNING: untranslated string: wlanap 802.11ax 40mhz = IEEE 802.11ax @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ax 80mhz = IEEE 802.11ax @ 80 MHz
+WARNING: untranslated string: wlanap 802.11be = IEEE 802.11be
+WARNING: untranslated string: wlanap 802.11be 160mhz = IEEE 802.11be @ 160 MHz
+WARNING: untranslated string: wlanap 802.11be 20mhz = IEEE 802.11be @ 20 MHz
+WARNING: untranslated string: wlanap 802.11be 320mhz = IEEE 802.11be @ 320 MHz
+WARNING: untranslated string: wlanap 802.11be 40mhz = IEEE 802.11be @ 40 MHz
+WARNING: untranslated string: wlanap 802.11be 80mhz = IEEE 802.11be @ 80 MHz
 WARNING: untranslated string: wlanap 802.11w disabled = Disabled
 WARNING: untranslated string: wlanap 802.11w enforced = Enforced
 WARNING: untranslated string: wlanap 802.11w optional = Optional
 WARNING: untranslated string: wlanap auto = Automatic Channel Selection
+WARNING: untranslated string: wlanap band = Band
+WARNING: untranslated string: wlanap band 2.4ghz = 2.4 GHz
+WARNING: untranslated string: wlanap band 5ghz = 5 GHz
 WARNING: untranslated string: wlanap channel = Channel
 WARNING: untranslated string: wlanap client isolation = Client Isolation
 WARNING: untranslated string: wlanap clients = unknown string
@@ -2405,6 +2427,8 @@ WARNING: untranslated string: wlanap country = Country Code
 WARNING: untranslated string: wlanap encryption = Encryption
 WARNING: untranslated string: wlanap hide ssid = Hide SSID
 WARNING: untranslated string: wlanap interface = Select Interface
+WARNING: untranslated string: wlanap invalid band = Invalid band
+WARNING: untranslated string: wlanap invalid mode = Invalid mode
 WARNING: untranslated string: wlanap invalid wpa = Invalid length in WPA passphrase. Must be between 8 and 63 characters.
 WARNING: untranslated string: wlanap management frame protection = Management Frame Protection (802.11w)
 WARNING: untranslated string: wlanap neighbor scan = Neighborhood Scan
diff --git a/doc/language_issues.es b/doc/language_issues.es
index cadfaf5d66..5df314a6f6 100644
--- a/doc/language_issues.es
+++ b/doc/language_issues.es
@@ -1234,4 +1234,28 @@ WARNING: untranslated string: wio_wan_up = unknown string
 WARNING: untranslated string: wio_wanname = unknown string
 WARNING: untranslated string: wio_webinterface = unknown string
 WARNING: untranslated string: wio_webinterface_link = unknown string
+WARNING: untranslated string: wlanap 802.11ac = IEEE 802.11ac
+WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz
+WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz
+WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz
+WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn
+WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz
+WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ax = IEEE 802.11ax
+WARNING: untranslated string: wlanap 802.11ax 160mhz = IEEE 802.11ax @ 160 MHz
+WARNING: untranslated string: wlanap 802.11ax 20mhz = IEEE 802.11ax @ 20 MHz
+WARNING: untranslated string: wlanap 802.11ax 40mhz = IEEE 802.11ax @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ax 80mhz = IEEE 802.11ax @ 80 MHz
+WARNING: untranslated string: wlanap 802.11be = IEEE 802.11be
+WARNING: untranslated string: wlanap 802.11be 160mhz = IEEE 802.11be @ 160 MHz
+WARNING: untranslated string: wlanap 802.11be 20mhz = IEEE 802.11be @ 20 MHz
+WARNING: untranslated string: wlanap 802.11be 320mhz = IEEE 802.11be @ 320 MHz
+WARNING: untranslated string: wlanap 802.11be 40mhz = IEEE 802.11be @ 40 MHz
+WARNING: untranslated string: wlanap 802.11be 80mhz = IEEE 802.11be @ 80 MHz
+WARNING: untranslated string: wlanap band = Band
+WARNING: untranslated string: wlanap band 2.4ghz = 2.4 GHz
+WARNING: untranslated string: wlanap band 5ghz = 5 GHz
 WARNING: untranslated string: wlanap clients = unknown string
+WARNING: untranslated string: wlanap invalid band = Invalid band
+WARNING: untranslated string: wlanap invalid mode = Invalid mode
diff --git a/doc/language_issues.fr b/doc/language_issues.fr
index a03241bcea..7234558ba9 100644
--- a/doc/language_issues.fr
+++ b/doc/language_issues.fr
@@ -1285,7 +1285,31 @@ WARNING: untranslated string: wio_wanname = unknown string
 WARNING: untranslated string: wio_webinterface = unknown string
 WARNING: untranslated string: wio_webinterface_link = unknown string
 WARNING: untranslated string: wireguard = WireGuard
+WARNING: untranslated string: wlanap 802.11ac = IEEE 802.11ac
+WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz
+WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz
+WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz
+WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn
+WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz
+WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ax = IEEE 802.11ax
+WARNING: untranslated string: wlanap 802.11ax 160mhz = IEEE 802.11ax @ 160 MHz
+WARNING: untranslated string: wlanap 802.11ax 20mhz = IEEE 802.11ax @ 20 MHz
+WARNING: untranslated string: wlanap 802.11ax 40mhz = IEEE 802.11ax @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ax 80mhz = IEEE 802.11ax @ 80 MHz
+WARNING: untranslated string: wlanap 802.11be = IEEE 802.11be
+WARNING: untranslated string: wlanap 802.11be 160mhz = IEEE 802.11be @ 160 MHz
+WARNING: untranslated string: wlanap 802.11be 20mhz = IEEE 802.11be @ 20 MHz
+WARNING: untranslated string: wlanap 802.11be 320mhz = IEEE 802.11be @ 320 MHz
+WARNING: untranslated string: wlanap 802.11be 40mhz = IEEE 802.11be @ 40 MHz
+WARNING: untranslated string: wlanap 802.11be 80mhz = IEEE 802.11be @ 80 MHz
+WARNING: untranslated string: wlanap band = Band
+WARNING: untranslated string: wlanap band 2.4ghz = 2.4 GHz
+WARNING: untranslated string: wlanap band 5ghz = 5 GHz
 WARNING: untranslated string: wlanap clients = unknown string
 WARNING: untranslated string: wlanap hide ssid = Hide SSID
+WARNING: untranslated string: wlanap invalid band = Invalid band
+WARNING: untranslated string: wlanap invalid mode = Invalid mode
 WARNING: untranslated string: wlanap psk = Pre-Shared Key
 WARNING: untranslated string: wlanap wireless mode = Wireless Mode
diff --git a/doc/language_issues.it b/doc/language_issues.it
index d5fdcd55e0..39e3c678d1 100644
--- a/doc/language_issues.it
+++ b/doc/language_issues.it
@@ -1637,14 +1637,38 @@ WARNING: untranslated string: wlan client password = Password
 WARNING: untranslated string: wlan client tls cipher = TLS Cipher
 WARNING: untranslated string: wlan client tls version = TLS Version
 WARNING: untranslated string: wlanap = Wireless Access Point
+WARNING: untranslated string: wlanap 802.11ac = IEEE 802.11ac
+WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz
+WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz
+WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz
+WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn
+WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz
+WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ax = IEEE 802.11ax
+WARNING: untranslated string: wlanap 802.11ax 160mhz = IEEE 802.11ax @ 160 MHz
+WARNING: untranslated string: wlanap 802.11ax 20mhz = IEEE 802.11ax @ 20 MHz
+WARNING: untranslated string: wlanap 802.11ax 40mhz = IEEE 802.11ax @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ax 80mhz = IEEE 802.11ax @ 80 MHz
+WARNING: untranslated string: wlanap 802.11be = IEEE 802.11be
+WARNING: untranslated string: wlanap 802.11be 160mhz = IEEE 802.11be @ 160 MHz
+WARNING: untranslated string: wlanap 802.11be 20mhz = IEEE 802.11be @ 20 MHz
+WARNING: untranslated string: wlanap 802.11be 320mhz = IEEE 802.11be @ 320 MHz
+WARNING: untranslated string: wlanap 802.11be 40mhz = IEEE 802.11be @ 40 MHz
+WARNING: untranslated string: wlanap 802.11be 80mhz = IEEE 802.11be @ 80 MHz
 WARNING: untranslated string: wlanap 802.11w disabled = Disabled
 WARNING: untranslated string: wlanap 802.11w enforced = Enforced
 WARNING: untranslated string: wlanap 802.11w optional = Optional
 WARNING: untranslated string: wlanap auto = Automatic Channel Selection
+WARNING: untranslated string: wlanap band = Band
+WARNING: untranslated string: wlanap band 2.4ghz = 2.4 GHz
+WARNING: untranslated string: wlanap band 5ghz = 5 GHz
 WARNING: untranslated string: wlanap client isolation = Client Isolation
 WARNING: untranslated string: wlanap clients = unknown string
 WARNING: untranslated string: wlanap configuration = Wireless Access Point Configuration
 WARNING: untranslated string: wlanap hide ssid = Hide SSID
+WARNING: untranslated string: wlanap invalid band = Invalid band
+WARNING: untranslated string: wlanap invalid mode = Invalid mode
 WARNING: untranslated string: wlanap management frame protection = Management Frame Protection (802.11w)
 WARNING: untranslated string: wlanap neighbor scan = Neighborhood Scan
 WARNING: untranslated string: wlanap neighbor scan warning = Warning: Disabling may violate regulatory rules
diff --git a/doc/language_issues.nl b/doc/language_issues.nl
index 72af4fba50..54ea867579 100644
--- a/doc/language_issues.nl
+++ b/doc/language_issues.nl
@@ -1658,14 +1658,38 @@ WARNING: untranslated string: wlan client password = Password
 WARNING: untranslated string: wlan client tls cipher = TLS Cipher
 WARNING: untranslated string: wlan client tls version = TLS Version
 WARNING: untranslated string: wlanap = Wireless Access Point
+WARNING: untranslated string: wlanap 802.11ac = IEEE 802.11ac
+WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz
+WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz
+WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz
+WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn
+WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz
+WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ax = IEEE 802.11ax
+WARNING: untranslated string: wlanap 802.11ax 160mhz = IEEE 802.11ax @ 160 MHz
+WARNING: untranslated string: wlanap 802.11ax 20mhz = IEEE 802.11ax @ 20 MHz
+WARNING: untranslated string: wlanap 802.11ax 40mhz = IEEE 802.11ax @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ax 80mhz = IEEE 802.11ax @ 80 MHz
+WARNING: untranslated string: wlanap 802.11be = IEEE 802.11be
+WARNING: untranslated string: wlanap 802.11be 160mhz = IEEE 802.11be @ 160 MHz
+WARNING: untranslated string: wlanap 802.11be 20mhz = IEEE 802.11be @ 20 MHz
+WARNING: untranslated string: wlanap 802.11be 320mhz = IEEE 802.11be @ 320 MHz
+WARNING: untranslated string: wlanap 802.11be 40mhz = IEEE 802.11be @ 40 MHz
+WARNING: untranslated string: wlanap 802.11be 80mhz = IEEE 802.11be @ 80 MHz
 WARNING: untranslated string: wlanap 802.11w disabled = Disabled
 WARNING: untranslated string: wlanap 802.11w enforced = Enforced
 WARNING: untranslated string: wlanap 802.11w optional = Optional
 WARNING: untranslated string: wlanap auto = Automatic Channel Selection
+WARNING: untranslated string: wlanap band = Band
+WARNING: untranslated string: wlanap band 2.4ghz = 2.4 GHz
+WARNING: untranslated string: wlanap band 5ghz = 5 GHz
 WARNING: untranslated string: wlanap client isolation = Client Isolation
 WARNING: untranslated string: wlanap clients = unknown string
 WARNING: untranslated string: wlanap configuration = Wireless Access Point Configuration
 WARNING: untranslated string: wlanap hide ssid = Hide SSID
+WARNING: untranslated string: wlanap invalid band = Invalid band
+WARNING: untranslated string: wlanap invalid mode = Invalid mode
 WARNING: untranslated string: wlanap management frame protection = Management Frame Protection (802.11w)
 WARNING: untranslated string: wlanap neighbor scan = Neighborhood Scan
 WARNING: untranslated string: wlanap neighbor scan warning = Warning: Disabling may violate regulatory rules
diff --git a/doc/language_issues.pl b/doc/language_issues.pl
index c89dd9966a..e4cf7b8eda 100644
--- a/doc/language_issues.pl
+++ b/doc/language_issues.pl
@@ -1905,15 +1905,39 @@ WARNING: untranslated string: wlan client wpa mode ccmp ccmp = CCMP-CCMP
 WARNING: untranslated string: wlan client wpa mode ccmp tkip = CCMP-TKIP
 WARNING: untranslated string: wlan client wpa mode tkip tkip = TKIP-TKIP
 WARNING: untranslated string: wlanap = Wireless Access Point
+WARNING: untranslated string: wlanap 802.11ac = IEEE 802.11ac
+WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz
+WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz
+WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz
+WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn
+WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz
+WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ax = IEEE 802.11ax
+WARNING: untranslated string: wlanap 802.11ax 160mhz = IEEE 802.11ax @ 160 MHz
+WARNING: untranslated string: wlanap 802.11ax 20mhz = IEEE 802.11ax @ 20 MHz
+WARNING: untranslated string: wlanap 802.11ax 40mhz = IEEE 802.11ax @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ax 80mhz = IEEE 802.11ax @ 80 MHz
+WARNING: untranslated string: wlanap 802.11be = IEEE 802.11be
+WARNING: untranslated string: wlanap 802.11be 160mhz = IEEE 802.11be @ 160 MHz
+WARNING: untranslated string: wlanap 802.11be 20mhz = IEEE 802.11be @ 20 MHz
+WARNING: untranslated string: wlanap 802.11be 320mhz = IEEE 802.11be @ 320 MHz
+WARNING: untranslated string: wlanap 802.11be 40mhz = IEEE 802.11be @ 40 MHz
+WARNING: untranslated string: wlanap 802.11be 80mhz = IEEE 802.11be @ 80 MHz
 WARNING: untranslated string: wlanap 802.11w disabled = Disabled
 WARNING: untranslated string: wlanap 802.11w enforced = Enforced
 WARNING: untranslated string: wlanap 802.11w optional = Optional
 WARNING: untranslated string: wlanap auto = Automatic Channel Selection
+WARNING: untranslated string: wlanap band = Band
+WARNING: untranslated string: wlanap band 2.4ghz = 2.4 GHz
+WARNING: untranslated string: wlanap band 5ghz = 5 GHz
 WARNING: untranslated string: wlanap client isolation = Client Isolation
 WARNING: untranslated string: wlanap clients = unknown string
 WARNING: untranslated string: wlanap configuration = Wireless Access Point Configuration
 WARNING: untranslated string: wlanap country = Country Code
 WARNING: untranslated string: wlanap hide ssid = Hide SSID
+WARNING: untranslated string: wlanap invalid band = Invalid band
+WARNING: untranslated string: wlanap invalid mode = Invalid mode
 WARNING: untranslated string: wlanap management frame protection = Management Frame Protection (802.11w)
 WARNING: untranslated string: wlanap neighbor scan = Neighborhood Scan
 WARNING: untranslated string: wlanap neighbor scan warning = Warning: Disabling may violate regulatory rules
diff --git a/doc/language_issues.ru b/doc/language_issues.ru
index 2377115ab3..3354887f94 100644
--- a/doc/language_issues.ru
+++ b/doc/language_issues.ru
@@ -1904,15 +1904,39 @@ WARNING: untranslated string: wlan client wpa mode ccmp ccmp = CCMP-CCMP
 WARNING: untranslated string: wlan client wpa mode ccmp tkip = CCMP-TKIP
 WARNING: untranslated string: wlan client wpa mode tkip tkip = TKIP-TKIP
 WARNING: untranslated string: wlanap = Wireless Access Point
+WARNING: untranslated string: wlanap 802.11ac = IEEE 802.11ac
+WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz
+WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz
+WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz
+WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn
+WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz
+WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ax = IEEE 802.11ax
+WARNING: untranslated string: wlanap 802.11ax 160mhz = IEEE 802.11ax @ 160 MHz
+WARNING: untranslated string: wlanap 802.11ax 20mhz = IEEE 802.11ax @ 20 MHz
+WARNING: untranslated string: wlanap 802.11ax 40mhz = IEEE 802.11ax @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ax 80mhz = IEEE 802.11ax @ 80 MHz
+WARNING: untranslated string: wlanap 802.11be = IEEE 802.11be
+WARNING: untranslated string: wlanap 802.11be 160mhz = IEEE 802.11be @ 160 MHz
+WARNING: untranslated string: wlanap 802.11be 20mhz = IEEE 802.11be @ 20 MHz
+WARNING: untranslated string: wlanap 802.11be 320mhz = IEEE 802.11be @ 320 MHz
+WARNING: untranslated string: wlanap 802.11be 40mhz = IEEE 802.11be @ 40 MHz
+WARNING: untranslated string: wlanap 802.11be 80mhz = IEEE 802.11be @ 80 MHz
 WARNING: untranslated string: wlanap 802.11w disabled = Disabled
 WARNING: untranslated string: wlanap 802.11w enforced = Enforced
 WARNING: untranslated string: wlanap 802.11w optional = Optional
 WARNING: untranslated string: wlanap auto = Automatic Channel Selection
+WARNING: untranslated string: wlanap band = Band
+WARNING: untranslated string: wlanap band 2.4ghz = 2.4 GHz
+WARNING: untranslated string: wlanap band 5ghz = 5 GHz
 WARNING: untranslated string: wlanap client isolation = Client Isolation
 WARNING: untranslated string: wlanap clients = unknown string
 WARNING: untranslated string: wlanap configuration = Wireless Access Point Configuration
 WARNING: untranslated string: wlanap country = Country Code
 WARNING: untranslated string: wlanap hide ssid = Hide SSID
+WARNING: untranslated string: wlanap invalid band = Invalid band
+WARNING: untranslated string: wlanap invalid mode = Invalid mode
 WARNING: untranslated string: wlanap management frame protection = Management Frame Protection (802.11w)
 WARNING: untranslated string: wlanap neighbor scan = Neighborhood Scan
 WARNING: untranslated string: wlanap neighbor scan warning = Warning: Disabling may violate regulatory rules
diff --git a/doc/language_issues.tr b/doc/language_issues.tr
index dfabd029eb..6d1587579b 100644
--- a/doc/language_issues.tr
+++ b/doc/language_issues.tr
@@ -1508,13 +1508,37 @@ WARNING: untranslated string: wio_webinterface_link = unknown string
 WARNING: untranslated string: wireguard = WireGuard
 WARNING: untranslated string: wlan client encryption wpa3 = WPA3
 WARNING: untranslated string: wlan client management frame protection = Management Frame Protection
+WARNING: untranslated string: wlanap 802.11ac = IEEE 802.11ac
+WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz
+WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz
+WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz
+WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn
+WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz
+WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ax = IEEE 802.11ax
+WARNING: untranslated string: wlanap 802.11ax 160mhz = IEEE 802.11ax @ 160 MHz
+WARNING: untranslated string: wlanap 802.11ax 20mhz = IEEE 802.11ax @ 20 MHz
+WARNING: untranslated string: wlanap 802.11ax 40mhz = IEEE 802.11ax @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ax 80mhz = IEEE 802.11ax @ 80 MHz
+WARNING: untranslated string: wlanap 802.11be = IEEE 802.11be
+WARNING: untranslated string: wlanap 802.11be 160mhz = IEEE 802.11be @ 160 MHz
+WARNING: untranslated string: wlanap 802.11be 20mhz = IEEE 802.11be @ 20 MHz
+WARNING: untranslated string: wlanap 802.11be 320mhz = IEEE 802.11be @ 320 MHz
+WARNING: untranslated string: wlanap 802.11be 40mhz = IEEE 802.11be @ 40 MHz
+WARNING: untranslated string: wlanap 802.11be 80mhz = IEEE 802.11be @ 80 MHz
 WARNING: untranslated string: wlanap 802.11w disabled = Disabled
 WARNING: untranslated string: wlanap 802.11w enforced = Enforced
 WARNING: untranslated string: wlanap 802.11w optional = Optional
 WARNING: untranslated string: wlanap auto = Automatic Channel Selection
+WARNING: untranslated string: wlanap band = Band
+WARNING: untranslated string: wlanap band 2.4ghz = 2.4 GHz
+WARNING: untranslated string: wlanap band 5ghz = 5 GHz
 WARNING: untranslated string: wlanap client isolation = Client Isolation
 WARNING: untranslated string: wlanap clients = unknown string
 WARNING: untranslated string: wlanap hide ssid = Hide SSID
+WARNING: untranslated string: wlanap invalid band = Invalid band
+WARNING: untranslated string: wlanap invalid mode = Invalid mode
 WARNING: untranslated string: wlanap management frame protection = Management Frame Protection (802.11w)
 WARNING: untranslated string: wlanap neighbor scan = Neighborhood Scan
 WARNING: untranslated string: wlanap neighbor scan warning = Warning: Disabling may violate regulatory rules
diff --git a/doc/language_issues.tw b/doc/language_issues.tw
index 2745a25baf..6901aec902 100644
--- a/doc/language_issues.tw
+++ b/doc/language_issues.tw
@@ -1252,4 +1252,28 @@ WARNING: untranslated string: wio_wan_up = unknown string
 WARNING: untranslated string: wio_wanname = unknown string
 WARNING: untranslated string: wio_webinterface = unknown string
 WARNING: untranslated string: wio_webinterface_link = unknown string
+WARNING: untranslated string: wlanap 802.11ac = IEEE 802.11ac
+WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz
+WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz
+WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz
+WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn
+WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz
+WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ax = IEEE 802.11ax
+WARNING: untranslated string: wlanap 802.11ax 160mhz = IEEE 802.11ax @ 160 MHz
+WARNING: untranslated string: wlanap 802.11ax 20mhz = IEEE 802.11ax @ 20 MHz
+WARNING: untranslated string: wlanap 802.11ax 40mhz = IEEE 802.11ax @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ax 80mhz = IEEE 802.11ax @ 80 MHz
+WARNING: untranslated string: wlanap 802.11be = IEEE 802.11be
+WARNING: untranslated string: wlanap 802.11be 160mhz = IEEE 802.11be @ 160 MHz
+WARNING: untranslated string: wlanap 802.11be 20mhz = IEEE 802.11be @ 20 MHz
+WARNING: untranslated string: wlanap 802.11be 320mhz = IEEE 802.11be @ 320 MHz
+WARNING: untranslated string: wlanap 802.11be 40mhz = IEEE 802.11be @ 40 MHz
+WARNING: untranslated string: wlanap 802.11be 80mhz = IEEE 802.11be @ 80 MHz
+WARNING: untranslated string: wlanap band = Band
+WARNING: untranslated string: wlanap band 2.4ghz = 2.4 GHz
+WARNING: untranslated string: wlanap band 5ghz = 5 GHz
 WARNING: untranslated string: wlanap clients = unknown string
+WARNING: untranslated string: wlanap invalid band = Invalid band
+WARNING: untranslated string: wlanap invalid mode = Invalid mode
diff --git a/doc/language_issues.zh b/doc/language_issues.zh
index 2745a25baf..6901aec902 100644
--- a/doc/language_issues.zh
+++ b/doc/language_issues.zh
@@ -1252,4 +1252,28 @@ WARNING: untranslated string: wio_wan_up = unknown string
 WARNING: untranslated string: wio_wanname = unknown string
 WARNING: untranslated string: wio_webinterface = unknown string
 WARNING: untranslated string: wio_webinterface_link = unknown string
+WARNING: untranslated string: wlanap 802.11ac = IEEE 802.11ac
+WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz
+WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz
+WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz
+WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn
+WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz
+WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ax = IEEE 802.11ax
+WARNING: untranslated string: wlanap 802.11ax 160mhz = IEEE 802.11ax @ 160 MHz
+WARNING: untranslated string: wlanap 802.11ax 20mhz = IEEE 802.11ax @ 20 MHz
+WARNING: untranslated string: wlanap 802.11ax 40mhz = IEEE 802.11ax @ 40 MHz
+WARNING: untranslated string: wlanap 802.11ax 80mhz = IEEE 802.11ax @ 80 MHz
+WARNING: untranslated string: wlanap 802.11be = IEEE 802.11be
+WARNING: untranslated string: wlanap 802.11be 160mhz = IEEE 802.11be @ 160 MHz
+WARNING: untranslated string: wlanap 802.11be 20mhz = IEEE 802.11be @ 20 MHz
+WARNING: untranslated string: wlanap 802.11be 320mhz = IEEE 802.11be @ 320 MHz
+WARNING: untranslated string: wlanap 802.11be 40mhz = IEEE 802.11be @ 40 MHz
+WARNING: untranslated string: wlanap 802.11be 80mhz = IEEE 802.11be @ 80 MHz
+WARNING: untranslated string: wlanap band = Band
+WARNING: untranslated string: wlanap band 2.4ghz = 2.4 GHz
+WARNING: untranslated string: wlanap band 5ghz = 5 GHz
 WARNING: untranslated string: wlanap clients = unknown string
+WARNING: untranslated string: wlanap invalid band = Invalid band
+WARNING: untranslated string: wlanap invalid mode = Invalid mode
diff --git a/doc/language_missings b/doc/language_missings
index 03c286f5a2..5d7d0f5857 100644
--- a/doc/language_missings
+++ b/doc/language_missings
@@ -196,6 +196,30 @@
 < rss
 < rss long
 < transient sheduler attacks
+< wlanap 802.11ac
+< wlanap 802.11ac 160mhz
+< wlanap 802.11ac 20mhz
+< wlanap 802.11ac 40mhz
+< wlanap 802.11ac 80mhz
+< wlanap 802.11agn
+< wlanap 802.11agn 20mhz
+< wlanap 802.11agn 40mhz
+< wlanap 802.11ax
+< wlanap 802.11ax 160mhz
+< wlanap 802.11ax 20mhz
+< wlanap 802.11ax 40mhz
+< wlanap 802.11ax 80mhz
+< wlanap 802.11be
+< wlanap 802.11be 160mhz
+< wlanap 802.11be 20mhz
+< wlanap 802.11be 320mhz
+< wlanap 802.11be 40mhz
+< wlanap 802.11be 80mhz
+< wlanap band
+< wlanap band 2.4ghz
+< wlanap band 5ghz
+< wlanap invalid band
+< wlanap invalid mode
 ############################################################################
 # Checking cgi-bin translations for language: fr                           #
 ############################################################################
@@ -339,7 +363,31 @@
 < wg warning configuration only shown once
 < whitelisted
 < wireguard
+< wlanap 802.11ac
+< wlanap 802.11ac 160mhz
+< wlanap 802.11ac 20mhz
+< wlanap 802.11ac 40mhz
+< wlanap 802.11ac 80mhz
+< wlanap 802.11agn
+< wlanap 802.11agn 20mhz
+< wlanap 802.11agn 40mhz
+< wlanap 802.11ax
+< wlanap 802.11ax 160mhz
+< wlanap 802.11ax 20mhz
+< wlanap 802.11ax 40mhz
+< wlanap 802.11ax 80mhz
+< wlanap 802.11be
+< wlanap 802.11be 160mhz
+< wlanap 802.11be 20mhz
+< wlanap 802.11be 320mhz
+< wlanap 802.11be 40mhz
+< wlanap 802.11be 80mhz
+< wlanap band
+< wlanap band 2.4ghz
+< wlanap band 5ghz
 < wlanap hide ssid
+< wlanap invalid band
+< wlanap invalid mode
 < wlanap psk
 < wlanap wireless mode
 < wlanap wlan clients
@@ -945,13 +993,37 @@
 < wireguard
 < wireless network
 < wlanap
+< wlanap 802.11ac
+< wlanap 802.11ac 160mhz
+< wlanap 802.11ac 20mhz
+< wlanap 802.11ac 40mhz
+< wlanap 802.11ac 80mhz
+< wlanap 802.11agn
+< wlanap 802.11agn 20mhz
+< wlanap 802.11agn 40mhz
+< wlanap 802.11ax
+< wlanap 802.11ax 160mhz
+< wlanap 802.11ax 20mhz
+< wlanap 802.11ax 40mhz
+< wlanap 802.11ax 80mhz
+< wlanap 802.11be
+< wlanap 802.11be 160mhz
+< wlanap 802.11be 20mhz
+< wlanap 802.11be 320mhz
+< wlanap 802.11be 40mhz
+< wlanap 802.11be 80mhz
 < wlanap 802.11w disabled
 < wlanap 802.11w enforced
 < wlanap 802.11w optional
 < wlanap auto
+< wlanap band
+< wlanap band 2.4ghz
+< wlanap band 5ghz
 < wlanap client isolation
 < wlanap configuration
 < wlanap hide ssid
+< wlanap invalid band
+< wlanap invalid mode
 < wlanap management frame protection
 < wlanap neighbor scan
 < wlanap neighbor scan warning
@@ -1623,13 +1695,37 @@
 < wireguard
 < wireless network
 < wlanap
+< wlanap 802.11ac
+< wlanap 802.11ac 160mhz
+< wlanap 802.11ac 20mhz
+< wlanap 802.11ac 40mhz
+< wlanap 802.11ac 80mhz
+< wlanap 802.11agn
+< wlanap 802.11agn 20mhz
+< wlanap 802.11agn 40mhz
+< wlanap 802.11ax
+< wlanap 802.11ax 160mhz
+< wlanap 802.11ax 20mhz
+< wlanap 802.11ax 40mhz
+< wlanap 802.11ax 80mhz
+< wlanap 802.11be
+< wlanap 802.11be 160mhz
+< wlanap 802.11be 20mhz
+< wlanap 802.11be 320mhz
+< wlanap 802.11be 40mhz
+< wlanap 802.11be 80mhz
 < wlanap 802.11w disabled
 < wlanap 802.11w enforced
 < wlanap 802.11w optional
 < wlanap auto
+< wlanap band
+< wlanap band 2.4ghz
+< wlanap band 5ghz
 < wlanap client isolation
 < wlanap configuration
 < wlanap hide ssid
+< wlanap invalid band
+< wlanap invalid mode
 < wlanap management frame protection
 < wlanap neighbor scan
 < wlanap neighbor scan warning
@@ -2715,14 +2811,38 @@
 < wireguard
 < wireless network
 < wlanap
+< wlanap 802.11ac
+< wlanap 802.11ac 160mhz
+< wlanap 802.11ac 20mhz
+< wlanap 802.11ac 40mhz
+< wlanap 802.11ac 80mhz
+< wlanap 802.11agn
+< wlanap 802.11agn 20mhz
+< wlanap 802.11agn 40mhz
+< wlanap 802.11ax
+< wlanap 802.11ax 160mhz
+< wlanap 802.11ax 20mhz
+< wlanap 802.11ax 40mhz
+< wlanap 802.11ax 80mhz
+< wlanap 802.11be
+< wlanap 802.11be 160mhz
+< wlanap 802.11be 20mhz
+< wlanap 802.11be 320mhz
+< wlanap 802.11be 40mhz
+< wlanap 802.11be 80mhz
 < wlanap 802.11w disabled
 < wlanap 802.11w enforced
 < wlanap 802.11w optional
 < wlanap auto
+< wlanap band
+< wlanap band 2.4ghz
+< wlanap band 5ghz
 < wlanap client isolation
 < wlanap configuration
 < wlanap country
 < wlanap hide ssid
+< wlanap invalid band
+< wlanap invalid mode
 < wlanap management frame protection
 < wlanap neighbor scan
 < wlanap neighbor scan warning
@@ -3845,14 +3965,38 @@
 < wireguard
 < wireless network
 < wlanap
+< wlanap 802.11ac
+< wlanap 802.11ac 160mhz
+< wlanap 802.11ac 20mhz
+< wlanap 802.11ac 40mhz
+< wlanap 802.11ac 80mhz
+< wlanap 802.11agn
+< wlanap 802.11agn 20mhz
+< wlanap 802.11agn 40mhz
+< wlanap 802.11ax
+< wlanap 802.11ax 160mhz
+< wlanap 802.11ax 20mhz
+< wlanap 802.11ax 40mhz
+< wlanap 802.11ax 80mhz
+< wlanap 802.11be
+< wlanap 802.11be 160mhz
+< wlanap 802.11be 20mhz
+< wlanap 802.11be 320mhz
+< wlanap 802.11be 40mhz
+< wlanap 802.11be 80mhz
 < wlanap 802.11w disabled
 < wlanap 802.11w enforced
 < wlanap 802.11w optional
 < wlanap auto
+< wlanap band
+< wlanap band 2.4ghz
+< wlanap band 5ghz
 < wlanap client isolation
 < wlanap configuration
 < wlanap country
 < wlanap hide ssid
+< wlanap invalid band
+< wlanap invalid mode
 < wlanap management frame protection
 < wlanap neighbor scan
 < wlanap neighbor scan warning
@@ -4352,12 +4496,36 @@
 < whois results from
 < winbind daemon
 < wireguard
+< wlanap 802.11ac
+< wlanap 802.11ac 160mhz
+< wlanap 802.11ac 20mhz
+< wlanap 802.11ac 40mhz
+< wlanap 802.11ac 80mhz
+< wlanap 802.11agn
+< wlanap 802.11agn 20mhz
+< wlanap 802.11agn 40mhz
+< wlanap 802.11ax
+< wlanap 802.11ax 160mhz
+< wlanap 802.11ax 20mhz
+< wlanap 802.11ax 40mhz
+< wlanap 802.11ax 80mhz
+< wlanap 802.11be
+< wlanap 802.11be 160mhz
+< wlanap 802.11be 20mhz
+< wlanap 802.11be 320mhz
+< wlanap 802.11be 40mhz
+< wlanap 802.11be 80mhz
 < wlanap 802.11w disabled
 < wlanap 802.11w enforced
 < wlanap 802.11w optional
 < wlanap auto
+< wlanap band
+< wlanap band 2.4ghz
+< wlanap band 5ghz
 < wlanap client isolation
 < wlanap hide ssid
+< wlanap invalid band
+< wlanap invalid mode
 < wlanap management frame protection
 < wlanap neighbor scan
 < wlanap neighbor scan warning
@@ -4450,6 +4618,30 @@
 < rss
 < rss long
 < transient sheduler attacks
+< wlanap 802.11ac
+< wlanap 802.11ac 160mhz
+< wlanap 802.11ac 20mhz
+< wlanap 802.11ac 40mhz
+< wlanap 802.11ac 80mhz
+< wlanap 802.11agn
+< wlanap 802.11agn 20mhz
+< wlanap 802.11agn 40mhz
+< wlanap 802.11ax
+< wlanap 802.11ax 160mhz
+< wlanap 802.11ax 20mhz
+< wlanap 802.11ax 40mhz
+< wlanap 802.11ax 80mhz
+< wlanap 802.11be
+< wlanap 802.11be 160mhz
+< wlanap 802.11be 20mhz
+< wlanap 802.11be 320mhz
+< wlanap 802.11be 40mhz
+< wlanap 802.11be 80mhz
+< wlanap band
+< wlanap band 2.4ghz
+< wlanap band 5ghz
+< wlanap invalid band
+< wlanap invalid mode
 ############################################################################
 # Checking cgi-bin translations for language: zh                           #
 ############################################################################
@@ -4513,3 +4705,27 @@
 < rss
 < rss long
 < transient sheduler attacks
+< wlanap 802.11ac
+< wlanap 802.11ac 160mhz
+< wlanap 802.11ac 20mhz
+< wlanap 802.11ac 40mhz
+< wlanap 802.11ac 80mhz
+< wlanap 802.11agn
+< wlanap 802.11agn 20mhz
+< wlanap 802.11agn 40mhz
+< wlanap 802.11ax
+< wlanap 802.11ax 160mhz
+< wlanap 802.11ax 20mhz
+< wlanap 802.11ax 40mhz
+< wlanap 802.11ax 80mhz
+< wlanap 802.11be
+< wlanap 802.11be 160mhz
+< wlanap 802.11be 20mhz
+< wlanap 802.11be 320mhz
+< wlanap 802.11be 40mhz
+< wlanap 802.11be 80mhz
+< wlanap band
+< wlanap band 2.4ghz
+< wlanap band 5ghz
+< wlanap invalid band
+< wlanap invalid mode
diff --git a/html/cgi-bin/wlanap.cgi b/html/cgi-bin/wlanap.cgi
index 1123992839..600ddc4898 100644
--- a/html/cgi-bin/wlanap.cgi
+++ b/html/cgi-bin/wlanap.cgi
@@ -37,6 +37,20 @@ my %wlanapsettings=();
 # Read the configuration file
 &General::readhash("/var/ipfire/wlanap/settings", \%wlanapsettings);
 
+# Set MODE from HW_MODE
+unless (defined $wlanapsettings{'MODE'}) {
+	if ($wlanapsettings{'HW_MODE'} eq "ac") {
+		$wlanapsettings{'BAND'} = '5g';
+		$wlanapsettings{'MODE'} = "VHT20";
+	} elsif ($wlanapsettings{'HW_MODE'} eq "an" || $wlanapsettings{'HW_MODE'} eq "gn") {
+		$wlanapsettings{'BAND'} = '2g';
+		$wlanapsettings{'MODE'} = "HT20";
+	}
+
+	# Remove the old value
+	undef $wlanapsettings{'HW_MODE'};
+}
+
 # Set defaults
 &General::set_defaults(\%wlanapsettings, {
 	"APMODE" => "on",
@@ -46,10 +60,9 @@ my %wlanapsettings=();
 	"TXPOWER" => "auto",
 	"CHANNEL" => "0",
 	"COUNTRY" => "00",
-	"HW_MODE" => "g",
+	"BAND" => "5g",
+	"MODE" => "HT20",
 	"PWD" => "",
-	"HTCAPS" => "",
-	"VHTCAPS" => "",
 	"NOSCAN" => "on",
 	"CLIENTISOLATION" => "off",
 	"IEEE80211W" => "off",
@@ -83,25 +96,33 @@ if ($cgiparams{'ACTION'} eq "$Lang::tr{'save'}") {
 		}
 	}
 
+	# Validate BAND
+	unless ($cgiparams{'BAND'} =~ m/^[25]g$/) {
+		$errormessage .= "$Lang::tr{'wlanap invalid band'}<br />";
+	}
+
+	# Validate MODE
+	unless ($cgiparams{'MODE'} =~ m/^(HT|HE|VHT|EHT)(20|40|80|160|320)$/) {
+		$errormessage .= "$Lang::tr{'wlanap invalid mode'}<br />";
+	}
+
 	# XXX This needs validation
 	$wlanapsettings{'INTERFACE'} = $cgiparams{'INTERFACE'};
 	$wlanapsettings{'SSID'} = $cgiparams{'SSID'};
 	$wlanapsettings{'HIDESSID'} = ($cgiparams{'HIDESSID'} eq 'on') ? 'on' : 'off';
 	$wlanapsettings{'CLIENTISOLATION'} = ($cgiparams{'CLIENTISOLATION'} eq 'on') ? 'on' : 'off';
 	$wlanapsettings{'COUNTRY'} = $cgiparams{'COUNTRY'};
-	$wlanapsettings{'HW_MODE'} = $cgiparams{'HW_MODE'};
+	$wlanapsettings{'MODE'} = $cgiparams{'MODE'};
+	$wlanapsettings{'BAND'} = $cgiparams{'BAND'};
 	$wlanapsettings{'CHANNEL'} = $cgiparams{'CHANNEL'};
 	$wlanapsettings{'NOSCAN'} = ($cgiparams{'NOSCAN'} eq 'on') ? 'on' : 'off';
 	$wlanapsettings{'ENC'} = $cgiparams{'ENC'};
 	$wlanapsettings{'PWD'} = $cgiparams{'PWD'};
 	$wlanapsettings{'IEEE80211W'} = ($cgiparams{'IEEE80211W'} eq 'on') ? 'on' : 'off';
-	$wlanapsettings{'HTCAPS'} = $cgiparams{'HTCAPS'};
-	$wlanapsettings{'VHTCAPS'} = $cgiparams{'VHTCAPS'};
 	$wlanapsettings{'TX_POWER'} = $cgiparams{'TX_POWER'};
 
 	if ($errormessage eq '') {
 		&General::writehash("/var/ipfire/wlanap/settings", \%wlanapsettings);
-		&WriteConfig_hostapd();
 
 		&General::system("/usr/local/bin/wlanapctrl", "restart");
 	}
@@ -159,7 +180,9 @@ $selected{'ENC'}{$wlanapsettings{'ENC'}} = "selected='selected'";
 $selected{'CHANNEL'}{$wlanapsettings{'CHANNEL'}} = "selected='selected'";
 $selected{'COUNTRY'}{$wlanapsettings{'COUNTRY'}} = "selected='selected'";
 $selected{'TXPOWER'}{$wlanapsettings{'TXPOWER'}} = "selected='selected'";
-$selected{'HW_MODE'}{$wlanapsettings{'HW_MODE'}} = "selected='selected'";
+
+$selected{'MODE'}{$wlanapsettings{'MODE'}} = "selected";
+$selected{'BAND'}{$wlanapsettings{'BAND'}} = "selected";
 
 # Fetch all available channels
 my @channellist = &get_channellist($INTF);
@@ -263,13 +286,77 @@ print <<END;
 			<tr>
 				<td>$Lang::tr{'wlanap wireless mode'}</td>
 				<td>
-					<select name='HW_MODE'>
-						<option value='a' $selected{'HW_MODE'}{'a'}>802.11a</option>
-						<option value='b' $selected{'HW_MODE'}{'b'}>802.11b</option>
-						<option value='g' $selected{'HW_MODE'}{'g'}>802.11g</option>
-						<option value='an' $selected{'HW_MODE'}{'an'}>802.11an</option>
-						<option value='gn' $selected{'HW_MODE'}{'gn'}>802.11gn</option>
-						<option value='ac' $selected{'HW_MODE'}{'ac'}>802.11ac</option>
+					<select name='MODE'>
+						<optgroup label="$Lang::tr{'wlanap 802.11be'}">
+							<option value="EHT320" $selected{'MODE'}{'EHT320'}>
+								$Lang::tr{'wlanap 802.11be 320mhz'}
+							</option>
+							<option value="EHT160" $selected{'MODE'}{'EHT160'}>
+								$Lang::tr{'wlanap 802.11be 160mhz'}
+							</option>
+							<option value="EHT80" $selected{'MODE'}{'EHT80'}>
+								$Lang::tr{'wlanap 802.11be 80mhz'}
+							</option>
+							<option value="EHT40" $selected{'MODE'}{'EHT40'}>
+								$Lang::tr{'wlanap 802.11be 40mhz'}
+							</option>
+							<option value="EHT20" $selected{'MODE'}{'EHT20'}>
+								$Lang::tr{'wlanap 802.11be 20mhz'}
+							</option>
+						</optgroup>
+
+						<optgroup label="$Lang::tr{'wlanap 802.11ax'}">
+							<option value="HE160" $selected{'MODE'}{'HE160'}>
+								$Lang::tr{'wlanap 802.11ax 160mhz'}
+							</option>
+							<option value="HE80" $selected{'MODE'}{'HE80'}>
+								$Lang::tr{'wlanap 802.11ax 80mhz'}
+							</option>
+							<option value="HE40" $selected{'MODE'}{'HE40'}>
+								$Lang::tr{'wlanap 802.11ax 40mhz'}
+							</option>
+							<option value="HE20" $selected{'MODE'}{'HE20'}>
+								$Lang::tr{'wlanap 802.11ax 20mhz'}
+							</option>
+						</optgroup>
+
+						<optgroup label="$Lang::tr{'wlanap 802.11ac'}">
+							<option value="VHT160" $selected{'MODE'}{'VHT160'}>
+								$Lang::tr{'wlanap 802.11ac 160mhz'}
+							</option>
+							<option value="VHT80" $selected{'MODE'}{'VHT80'}>
+								$Lang::tr{'wlanap 802.11ac 80mhz'}
+							</option>
+							<option value="VHT40" $selected{'MODE'}{'VHT40'}>
+								$Lang::tr{'wlanap 802.11ac 40mhz'}
+							</option>
+							<option value="VHT20" $selected{'MODE'}{'VHT20'}>
+								$Lang::tr{'wlanap 802.11ac 20mhz'}
+							</option>
+						</optgroup>
+
+						<optgroup label="$Lang::tr{'wlanap 802.11agn'}">
+							<option value="HT40" $selected{'MODE'}{'HT40'}>
+								$Lang::tr{'wlanap 802.11agn 40mhz'}
+							</option>
+							<option value="HT20" $selected{'MODE'}{'HT20'}>
+								$Lang::tr{'wlanap 802.11agn 20mhz'}
+							</option>
+						</optgroup>
+					</select>
+				</td>
+			</tr>
+
+			<tr>
+				<td>$Lang::tr{'wlanap band'}</td>
+				<td>
+					<select name='BAND'>
+						<option value="5g" $selected{'BAND'}{'5g'}>
+							$Lang::tr{'wlanap band 5ghz'}
+						</option>
+						<option value="2g" $selected{'BAND'}{'2g'}>
+							$Lang::tr{'wlanap band 2.4ghz'}
+						</option>
 					</select>
 				</td>
 			</tr>
@@ -342,20 +429,6 @@ print <<END;
 				</td>
 			</tr>
 
-			<tr>
-				<td>HT Caps</td>
-				<td>
-					<input type='text' name='HTCAPS' value='$wlanapsettings{'HTCAPS'}' />
-				</td>
-			</tr>
-
-			<tr>
-				<td>VHT Caps</td>
-				<td>
-					<input type='text' name='VHTCAPS' value='$wlanapsettings{'VHTCAPS'}' />
-				</td>
-			</tr>
-
 			<tr>
 				<td>Tx Power</td>
 				<td>
@@ -404,169 +477,6 @@ END
 &Header::closebigbox();
 &Header::closepage();
 
-sub WriteConfig_hostapd{
-	open (CONFIGFILE, ">/var/ipfire/wlanap/hostapd.conf");
-	print CONFIGFILE <<END
-driver=nl80211
-######################### basic hostapd configuration ##########################
-#
-country_code=$wlanapsettings{'COUNTRY'}
-country3=0x49 # indoor
-ieee80211d=1
-ieee80211h=1
-channel=$wlanapsettings{'CHANNEL'}
-
-# Always advertise TPC
-local_pwr_constraint=3
-spectrum_mgmt_required=1
-END
-;
- if ( $wlanapsettings{'HW_MODE'} eq 'an' ){
-	print CONFIGFILE <<END
-hw_mode=a
-ieee80211n=1
-wmm_enabled=1
-ht_capab=$wlanapsettings{'HTCAPS'}
-END
-;
-
- }elsif ( $wlanapsettings{'HW_MODE'} eq 'gn' ){
-	print CONFIGFILE <<END
-hw_mode=g
-ieee80211n=1
-wmm_enabled=1
-ht_capab=$wlanapsettings{'HTCAPS'}
-END
-;
-
- }elsif ( $wlanapsettings{'HW_MODE'} eq 'ac' ){
-	print CONFIGFILE <<END
-hw_mode=a
-ieee80211ac=1
-ieee80211n=1
-wmm_enabled=1
-ht_capab=$wlanapsettings{'HTCAPS'}
-vht_capab=$wlanapsettings{'VHTCAPS'}
-vht_oper_chwidth=1
-END
-;
-
- }else{
- 	print CONFIGFILE <<END
-hw_mode=$wlanapsettings{'HW_MODE'}
-END
-;
-
- }
-
-print CONFIGFILE <<END;
-# Enable logging
-logger_syslog=-1
-logger_syslog_level=4
-auth_algs=1
-ctrl_interface=/var/run/hostapd
-ctrl_interface_group=0
-disassoc_low_ack=1
-
-# SSID
-ssid2=\"$wlanapsettings{'SSID'}\"
-utf8_ssid=1
-
-END
-
-if ( $wlanapsettings{'HIDESSID'} eq 'on' ){
-	print CONFIGFILE <<END
-ignore_broadcast_ssid=2
-END
-;
- }
-
- # https://forum.ipfire.org/viewtopic.php?f=22&t=12274&p=79070#p79070
- if ( $wlanapsettings{'CLIENTISOLATION'} eq 'on' ){
-	print CONFIGFILE <<END
-ap_isolate=1
-END
-;
- }
-
- if ( $wlanapsettings{'NOSCAN'} eq 'on' ){
-	print CONFIGFILE <<END
-noscan=1
-END
-;
-
- }else{
- 	print CONFIGFILE <<END
-noscan=0
-END
-;
-
- }
-
- # Management Frame Protection (802.11w)
- if ($wlanapsettings{'IEEE80211W'} eq "on") {
-	print CONFIGFILE "ieee80211w=2\n";
- } elsif ($wlanapsettings{'IEEE80211W'} eq "optional") {
-	print CONFIGFILE "ieee80211w=1\n";
- } else {
-	print CONFIGFILE "ieee80211w=0\n";
- }
-
- if ( $wlanapsettings{'ENC'} eq 'wpa1'){
-	print CONFIGFILE <<END
-######################### wpa hostapd configuration ############################
-#
-wpa=1
-wpa_passphrase=$wlanapsettings{'PWD'}
-wpa_key_mgmt=WPA-PSK
-wpa_pairwise=TKIP
-END
-;
- }elsif ( $wlanapsettings{'ENC'} eq 'wpa2'){
-	print CONFIGFILE <<END
-######################### wpa hostapd configuration ############################
-#
-wpa=2
-wpa_passphrase=$wlanapsettings{'PWD'}
-wpa_key_mgmt=WPA-PSK
-rsn_pairwise=CCMP
-END
-;
- }elsif ( $wlanapsettings{'ENC'} eq 'wpa3'){
-	print CONFIGFILE <<END
-######################### wpa hostapd configuration ############################
-#
-wpa=2
-wpa_passphrase=$wlanapsettings{'PWD'}
-wpa_key_mgmt=SAE
-rsn_pairwise=CCMP
-END
-;
- } elsif ( $wlanapsettings{'ENC'} eq 'wpa1+2'){
-	print CONFIGFILE <<END
-######################### wpa hostapd configuration ############################
-#
-wpa=3
-wpa_passphrase=$wlanapsettings{'PWD'}
-wpa_key_mgmt=WPA-PSK
-wpa_pairwise=TKIP
-rsn_pairwise=CCMP
-END
-;
- }elsif ( $wlanapsettings{'ENC'} eq 'wpa2+3'){
-	print CONFIGFILE <<END
-######################### wpa hostapd configuration ############################
-#
-wpa=2
-wpa_passphrase=$wlanapsettings{'PWD'}
-wpa_key_mgmt=WPA-PSK SAE
-rsn_pairwise=CCMP
-END
-;
- }
-	close CONFIGFILE;
-}
-
 sub get_phy($) {
 	my $intf = shift;
 	my $phy;
diff --git a/langs/de/cgi-bin/de.pl b/langs/de/cgi-bin/de.pl
index b997ff9a73..ac5e9e26ac 100644
--- a/langs/de/cgi-bin/de.pl
+++ b/langs/de/cgi-bin/de.pl
@@ -3067,7 +3067,29 @@
 'wlan client wpa mode tkip tkip' => 'TKIP-TKIP',
 'wlan clients' => 'WLAN-Clients',
 'wlanap' => 'Access Point',
+'wlanap 802.11ac' => 'IEEE 802.11ac',
+'wlanap 802.11ac 160mhz' => 'IEEE 802.11ac @ 160 MHz',
+'wlanap 802.11ac 20mhz' => 'IEEE 802.11ac @ 20 MHz',
+'wlanap 802.11ac 40mhz' => 'IEEE 802.11ac @ 40 MHz',
+'wlanap 802.11ac 80mhz' => 'IEEE 802.11ac @ 80 MHz',
+'wlanap 802.11agn' => 'IEEE 802.11an/gn',
+'wlanap 802.11agn 20mhz' => 'IEEE 802.11an/gn @ 20 MHz',
+'wlanap 802.11agn 40mhz' => 'IEEE 802.11an/gn @ 40 MHz',
+'wlanap 802.11ax' => 'IEEE 802.11ax',
+'wlanap 802.11ax 160mhz' => 'IEEE 802.11ax @ 160 MHz',
+'wlanap 802.11ax 20mhz' => 'IEEE 802.11ax @ 20 MHz',
+'wlanap 802.11ax 40mhz' => 'IEEE 802.11ax @ 40 MHz',
+'wlanap 802.11ax 80mhz' => 'IEEE 802.11ax @ 80 MHz',
+'wlanap 802.11be' => 'IEEE 802.11be',
+'wlanap 802.11be 160mhz' => 'IEEE 802.11be @ 160 MHz',
+'wlanap 802.11be 20mhz' => 'IEEE 802.11be @ 20 MHz',
+'wlanap 802.11be 320mhz' => 'IEEE 802.11be @ 320 MHz',
+'wlanap 802.11be 40mhz' => 'IEEE 802.11be @ 40 MHz',
+'wlanap 802.11be 80mhz' => 'IEEE 802.11be @ 80 MHz',
 'wlanap auto' => 'Automatic Channel Selection',
+'wlanap band' => 'Band',
+'wlanap band 2.4ghz' => '2.4 GHz',
+'wlanap band 5ghz' => '5 GHz',
 'wlanap channel' => 'Kanal',
 'wlanap client isolation' => 'Client-Isolierung',
 'wlanap configuration' => 'Access Point Konfiguration',
@@ -3078,6 +3100,8 @@
 'wlanap hide ssid' => 'SSID verbergen',
 'wlanap informations' => 'Informationen',
 'wlanap interface' => 'Interface übernehmen',
+'wlanap invalid band' => 'Ungültiges Band',
+'wlanap invalid mode' => 'Ungültiger Modus',
 'wlanap invalid wpa' => 'Ungültige Länge in WPA-Passphrase. Muss zwischen 8 und 63 Zeichen lang sein.',
 'wlanap link dhcp' => 'Wireless Lan DHCP-Einstellungen',
 'wlanap link wireless' => 'Wireless Lan Clients freischalten',
diff --git a/langs/en/cgi-bin/en.pl b/langs/en/cgi-bin/en.pl
index 35e9da184c..c732b167c5 100644
--- a/langs/en/cgi-bin/en.pl
+++ b/langs/en/cgi-bin/en.pl
@@ -3185,10 +3185,32 @@
 'wlan client wpa mode tkip tkip' => 'TKIP-TKIP',
 'wlan clients' => 'Wireless clients',
 'wlanap' => 'Wireless Access Point',
+'wlanap 802.11ac' => 'IEEE 802.11ac',
+'wlanap 802.11ac 160mhz' => 'IEEE 802.11ac @ 160 MHz',
+'wlanap 802.11ac 20mhz' => 'IEEE 802.11ac @ 20 MHz',
+'wlanap 802.11ac 40mhz' => 'IEEE 802.11ac @ 40 MHz',
+'wlanap 802.11ac 80mhz' => 'IEEE 802.11ac @ 80 MHz',
+'wlanap 802.11agn' => 'IEEE 802.11an/gn',
+'wlanap 802.11agn 20mhz' => 'IEEE 802.11an/gn @ 20 MHz',
+'wlanap 802.11agn 40mhz' => 'IEEE 802.11an/gn @ 40 MHz',
+'wlanap 802.11ax' => 'IEEE 802.11ax',
+'wlanap 802.11ax 160mhz' => 'IEEE 802.11ax @ 160 MHz',
+'wlanap 802.11ax 20mhz' => 'IEEE 802.11ax @ 20 MHz',
+'wlanap 802.11ax 40mhz' => 'IEEE 802.11ax @ 40 MHz',
+'wlanap 802.11ax 80mhz' => 'IEEE 802.11ax @ 80 MHz',
+'wlanap 802.11be' => 'IEEE 802.11be',
+'wlanap 802.11be 160mhz' => 'IEEE 802.11be @ 160 MHz',
+'wlanap 802.11be 20mhz' => 'IEEE 802.11be @ 20 MHz',
+'wlanap 802.11be 320mhz' => 'IEEE 802.11be @ 320 MHz',
+'wlanap 802.11be 40mhz' => 'IEEE 802.11be @ 40 MHz',
+'wlanap 802.11be 80mhz' => 'IEEE 802.11be @ 80 MHz',
 'wlanap 802.11w disabled' => 'Disabled',
 'wlanap 802.11w enforced' => 'Enforced',
 'wlanap 802.11w optional' => 'Optional',
 'wlanap auto' => 'Automatic Channel Selection',
+'wlanap band' => 'Band',
+'wlanap band 2.4ghz' => '2.4 GHz',
+'wlanap band 5ghz' => '5 GHz',
 'wlanap channel' => 'Channel',
 'wlanap client isolation' => 'Client Isolation',
 'wlanap configuration' => 'Wireless Access Point Configuration',
@@ -3199,6 +3221,8 @@
 'wlanap hide ssid' => 'Hide SSID',
 'wlanap informations' => 'Information',
 'wlanap interface' => 'Select Interface',
+'wlanap invalid band' => 'Invalid band',
+'wlanap invalid mode' => 'Invalid mode',
 'wlanap invalid wpa' => 'Invalid length in WPA passphrase. Must be between 8 and 63 characters.',
 'wlanap link dhcp' => 'Wireless LAN DHCP configuration',
 'wlanap link wireless' => 'Activate wireless lan clients',
diff --git a/lfs/hostapd b/lfs/hostapd
index c63884c04b..00cd17084b 100644
--- a/lfs/hostapd
+++ b/lfs/hostapd
@@ -25,15 +25,15 @@
 include Config
 
 SUMMARY    = Daemon for running a WPA capable Access Point
-VER        = 64d60bb4
+VER        = f747ae0
 
 THISAPP    = hostap-$(VER)
-DL_FILE    = $(THISAPP).tar.xz
+DL_FILE    = $(THISAPP).tar.gz
 DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG       = hostapd
-PAK_VER    = 68
+PAK_VER    = 69
 
 DEPS       =
 
@@ -47,7 +47,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_BLAKE2 = a377efb1f173a8622ca7ba2073161a64ea3a041c2c662ef35615e74b61e29da2d1f7dccba68a8f2ae1a80c7d3fbde08cd9d72a0babf85324efa9b3b11b1cb3ac
+$(DL_FILE)_BLAKE2 = baec51beb4ed2e9ba9699a7f53b4cc7a9eee5d00716a9033bf434139f66c79a56e33270ef221f94fb0ecc1819b7e107b6bd4c8875434dcbcfd465e6cbac33293
 
 install : $(TARGET)
 
diff --git a/lfs/suricata-reporter b/lfs/suricata-reporter
index e4e013e9e0..37593699c6 100644
--- a/lfs/suricata-reporter
+++ b/lfs/suricata-reporter
@@ -73,7 +73,8 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	cd $(DIR_APP) && \
 		./configure \
 			--prefix=/usr \
-			--sysconfdir=/etc
+			--sysconfdir=/etc \
+			--localstatedir=/var
 	cd $(DIR_APP) && make $(MAKETUNING)
 	cd $(DIR_APP) && make install
 
diff --git a/src/initscripts/packages/hostapd b/src/initscripts/packages/hostapd
index b0a20e7c0c..8362883fe6 100644
--- a/src/initscripts/packages/hostapd
+++ b/src/initscripts/packages/hostapd
@@ -22,6 +22,100 @@
 . /etc/sysconfig/rc
 . ${rc_functions}
 
+declare -A HT_CAPS=(
+	# LDPC Coding Capability
+	[0x0001]="[LDPC]"
+	# 40 MHz Channel Width
+	[0x0002]="[HT40+][HT40-]"
+	# SM Power Save
+	# [0x0004] - not supported by hostapd
+	# Greenfield
+	[0x0008]="[GF]"
+	# Short Guard Interval (SGI) for 20 MHz
+	[0x0010]="[SHORT-GI-20]"
+	# Short Guard Interval (SGI) for 40 MHz
+	[0x0020]="[SHORT-GI-40]"
+	# TX STBC support
+	[0x0040]="[TX-STBC]"
+	# RX STBC support (1 stream)
+	[0x0080]="[RX-STBC1]"
+	# HT-delayed Block Ack
+	[0x0100]="[DELAYED-BA]"
+	# Max A-MSDU length (7935 vs. 3839 bytes)
+	[0x0200]="[MAX-AMSDU-7935]"
+	# DSSS/CCK Mode in 40 MHz
+	[0x0400]="[DSSS_CCK-40]"
+	# PSMP support
+	# [0x0800] - not supported by hostapd
+	# 40 MHz Intolerant
+	[0x1000]="[40-INTOLERANT]"
+	# L-SIG TXOP protection support
+	[0x2000]="[LSIG-TXOP-PROT]"
+)
+
+declare -A HT_CAPS_DRIVER_FILTERS=(
+	# ath1[012]k does not support Greenfield or Delayed Block Ack
+	[ath10k_pci]="$(( 0xffff & ~0x0008 & ~0x0100 ))"
+	[ath11k_pci]="$(( 0xffff & ~0x0008 & ~0x0100 ))"
+	[ath12k_pci]="$(( 0xffff & ~0x0008 & ~0x0100 ))"
+)
+
+declare -A VHT_CAPS=(
+	# RX LDPC
+	[0x00000010]="[RXLDPC]"
+	# Short GI for 80 MHz
+	[0x00000020]="[SHORT-GI-80]"
+	# Short GI for 160/80+80 MHz
+	[0x00000040]="[SHORT-GI-160]"
+	# TX STBC
+	[0x00000080]="[TX-STBC-2BY1]"
+	# SU Beamformer capable
+	[0x00000800]="[SU-BEAMFORMER]"
+	# SU Beamformee capable
+	[0x00001000]="[SU-BEAMFORMEE]"
+	# MU Beamformer capable
+	[0x00080000]="[MU-BEAMFORMER]"
+	# MU Beamformee capable
+	[0x00100000]="[MU-BEAMFORMEE]"
+	# VHT TXOP Power Save
+	[0x00200000]="[VHT-TXOP-PS]"
+	# +HTC-VHT
+	[0x00400000]="[HTC-VHT]"
+	# RX antenna pattern consistency
+	[0x10000000]="[RX-ANTENNA-PATTERN]"
+	# TX antenna pattern consistency
+	[0x20000000]="[TX-ANTENNA-PATTERN]"
+)
+
+declare -A VHT_CAPS_DRIVER_FILTERS=(
+	# ath12k does not support Short GI for 160 MHz
+	[ath12k_pci]="$(( 0xffffffff & ~0x00000020 ))"
+)
+
+declare -A HE_MAC_CAPS=(
+	# Nothing, yet
+)
+
+declare -A HE_PHY_CAPS=(
+	# SU Beamformer
+	[0x08000000000]="he_su_beamformer=1"
+	# SU Beamformee
+	[0x10000000000]="he_su_beamformee=1"
+	# MU Beamformer
+	[0x20000000000]="he_mu_beamformer=1"
+)
+
+declare -A EHT_MAC_CAPS=(
+	# Nothing, yet
+)
+
+declare -A EHT_PHY_CAPS=(
+	# SU Beamformer
+	[0x0000000000000010]="eht_su_beamformer=1"
+	# SU Beamformee
+	[0x0000000000000020]="eht_su_beamformee=1"
+)
+
 find_interface() {
 	local address="${1}"
 
@@ -36,11 +130,534 @@ find_interface() {
 	return 1;
 }
 
-CHANNEL="6"
-COUNTRY="00"
-TXPOWER="auto"
-INTERFACE="blue0"
-MACMODE="0"
+write_config() {
+	local interface="${1}"
+
+	# Fetch the PHY
+	local phy="$(</sys/class/net/${interface}/phy80211/name)"
+
+	# Fetch the driver
+	local driver="$(readlink /sys/class/net/${interface}/device/driver)"
+	driver="${driver##*/}"
+
+	local flag
+	local ht_flags=0
+	local vht_flags=0
+	local he_mac_flags=0
+	local he_phy_flags=0
+	local eht_mac_flags=0
+	local eht_phy_flags=0
+
+	local ht_caps=()
+	local vht_caps=()
+	local he_caps=()
+	local eht_caps=()
+
+	# Fetch PHY information
+	local line
+	while read -r line; do
+		case "${line}" in
+			"EHT MAC Capabilities"*)
+				eht_mac_flags="${line:22:6}"
+				;;
+			"EHT PHY Capabilities"*)
+				eht_phy_flags="${line:23:18}"
+				;;
+			"HE MAC Capabilities"*)
+				he_mac_flags="${line:21:14}"
+				;;
+			"HE PHY Capabilities"*)
+				he_phy_flags="${line:22:24}"
+				;;
+			"VHT Capabilities"*)
+				vht_flags="${line:18:10}"
+				;;
+			"Capabilities: "*)
+				ht_flags="${line:14}"
+				;;
+		esac
+	done <<<"$(iw phy "${phy}" info)"
+
+	# Fix the HT caps because some drivers don't support everything
+	# that the actual hardware supports (or have it turned off because of bugs).
+	if [ -n "${HT_CAPS_DRIVER_FILTERS[${driver}]}" ]; then
+		ht_flags="$(( ${ht_flags} & ${HT_CAPS_DRIVER_FILTERS[${driver}]} ))"
+	fi
+
+	# Fix the VHT caps because some drivers don't support everything
+	# that the actual hardware supports (or have it turned off because of bugs).
+	if [ -n "${VHT_CAPS_DRIVER_FILTERS[${driver}]}" ]; then
+		vht_flags="$(( ${vht_flags} & ${VHT_CAPS_DRIVER_FILTERS[${driver}]} ))"
+	fi
+
+	# HT Capabilities
+	for flag in ${!HT_CAPS[@]}; do
+		if (( ${ht_flags} & ${flag} )); then
+			ht_caps+=( "${HT_CAPS[${flag}]}" )
+		fi
+	done
+
+	# VHT Capabilities
+	for flag in ${!VHT_CAPS[@]}; do
+		if (( ${vht_flags} & ${flag} )); then
+			vht_caps+=( "${VHT_CAPS[${flag}]}" )
+		fi
+	done
+
+	# Supported channel width
+	case "$(( (${vht_flags} >> 2) & 0x03 ))" in
+		0)
+			# Neither 160, nor 80+80 MHz
+			;;
+		1)
+			vht_caps+=( "[VHT160]" )
+			;;
+		2)
+			vht_caps+=( "[VHT160-80PLUS80]" )
+			;;
+	esac
+
+	# VHT Max MPDU Length
+	case "$(( ${vht_flags} & 0x03 ))" in
+		0)
+			# Default, 3895
+			;;
+		1)
+			vht_caps+=( "[MAX-MPDU-7991]" )
+			;;
+		2)
+			vht_caps+=( "[MAX-MPDU-11454]" )
+			;;
+	esac
+
+	# RX Spacial Streams
+	case "$(( (${vht_flags} >> 8) & 0x03 ))" in
+		1)
+			vht_caps+=( "[RX-STBC-1]" )
+			;;
+		2)
+			vht_caps+=( "[RX-STBC-12]" )
+			;;
+		3)
+			vht_caps+=( "[RX-STBC-123]" )
+			;;
+		4)
+			vht_caps+=( "[RX-STBC-1234]" )
+			;;
+	esac
+
+	# Compressed Steering
+	case "$(( ((${vht_flags} >> 13) & 0x03) + 1 ))" in
+		2)
+			vht_caps+=( "[BF-ANTENNA-2]" )
+			;;
+		3)
+			vht_caps+=( "[BF-ANTENNA-3]" )
+			;;
+		4)
+			vht_caps+=( "[BF-ANTENNA-4]" )
+			;;
+	esac
+
+	# Sounding Dimension
+	case "$(( ((${vht_flags} >> 16) & 0x03) + 1 ))" in
+		2)
+			vht_caps+=( "[SOUNDING-DIMENSION-2]" )
+			;;
+		3)
+			vht_caps+=( "[SOUNDING-DIMENSION-3]" )
+			;;
+		4)
+			vht_caps+=( "[SOUNDING-DIMENSION-4]" )
+			;;
+	esac
+
+	local exponent="$(( (${vht_flags} >> 23) & 0x03 ))"
+	if [ "${exponent}" -ge 0 ] && [ "${exponent}" -le 7 ]; then
+		vht_caps+=( "[MAX-A-MPDU-LEN-EXP${exponent}]" )
+	fi
+
+	# VHT Link Adaptation
+	case "$(( (${vht_flags} >> 26) & 0x03 ))" in
+		2)
+			vht_caps+=( "[VHT-LINK-ADAPT2]" )
+			;;
+		3)
+			vht_caps+=( "[VHT-LINK-ADAPT3]" )
+			;;
+	esac
+
+	# HE PHY Capabilities
+	for flag in ${!HE_PHY_CAPS[@]}; do
+		if (( ${he_phy_flags} & ${flag} )); then
+			he_caps+=( "${HE_PHY_CAPS[${flag}]}" )
+		fi
+	done
+
+	# EHT PHY Capabilities
+	for flag in ${!EHT_PHY_CAPS[@]}; do
+		if (( ${eht_phy_flags} & ${flag} )); then
+			eht_caps+=( "${EHT_PHY_CAPS[${flag}]}" )
+		fi
+	done
+
+	# Set the channel to zero if not set
+	if [ -z "${CHANNEL}" ]; then
+		CHANNEL=0
+	fi
+
+	# Translate the old HW_MODE to the newer MODE setting
+	if [ -z "${MODE}" ]; then
+		case "${HW_MODE}" in
+			ac)
+				MODE="VHT20"
+				;;
+			an|gn)
+				MODE="HT20";
+				;;
+		esac
+	fi
+
+	# Set some default BAND if none is set
+	if [ -z "${BAND}" ]; then
+		# Use 2.4 GHz for 802.11g/n and assume 5 GHz for anything else
+		case "${HW_MODE}" in
+			gn)
+				BAND="2g"
+				;;
+			*)
+				BAND="5g"
+				;;
+		esac
+	fi
+
+	# Header
+	echo "# Automatically generated configuration"
+	echo "# DO NOT EDIT"
+
+	# Enable logging
+	echo "logger_syslog=-1"
+	echo "logger_syslog_level=4"
+
+	# Use Netlink
+	echo "driver=nl80211"
+
+	# Set the country code
+	echo "country_code=${COUNTRY}"
+	echo "country3=0x49"
+
+	# Enable 802.11d and 802.11h
+	echo "ieee80211d=1"
+	echo "ieee80211h=1"
+
+	# Set the channel (if chosen)
+	if [ -n "${CHANNEL}" ]; then
+		echo "channel=${CHANNEL}"
+	fi
+
+	# Always advertise TPC
+	echo "local_pwr_constraint=3"
+	echo "spectrum_mgmt_required=1"
+
+	# Try to perform radar detetection in the background (if supported by the driver)
+	echo "enable_background_radar=1"
+
+	# Always enable WMM
+	echo "wmm_enabled=1"
+
+	# 802.11ac
+	local enable_ac=0
+	local vht_oper_chwidth=0
+	local vht_oper_centr_freq_seg0_idx=""
+
+	case "${MODE}" in
+		VHT20|HE20|EHT20)
+			enable_ac=1
+			;;
+
+		# 40 MHz Channel Width
+		VHT40|HE40|EHT40)
+			enable_ac=1
+
+			# Compute the channel segment index
+			if [ "${CHANNEL}" -gt 0 ]; then
+				case "$(( (${CHANNEL} / 4) % 2 ))" in
+					0)
+						vht_oper_centr_freq_seg0_idx="$(( ${CHANNEL} - 2 ))"
+						;;
+					1)
+						vht_oper_centr_freq_seg0_idx="$(( ${CHANNEL} + 2 ))"
+						;;
+				esac
+			fi
+			;;
+
+		# 80 MHz Channel Width
+		VHT80|HE80|EHT80)
+			enable_ac=1
+			vht_oper_chwidth=1
+
+			# Compute the channel segment index
+			if [ "${CHANNEL}" -gt 0 ]; then
+				case "$(( (${CHANNEL} / 4) % 4 ))" in
+					0)
+						vht_oper_centr_freq_seg0_idx="$(( ${CHANNEL} - 6 ))"
+						;;
+					1)
+						vht_oper_centr_freq_seg0_idx="$(( ${CHANNEL} + 6 ))"
+						;;
+					2)
+						vht_oper_centr_freq_seg0_idx="$(( ${CHANNEL} + 2 ))"
+						;;
+					3)
+						vht_oper_centr_freq_seg0_idx="$(( ${CHANNEL} - 2 ))"
+						;;
+				esac
+			fi
+			;;
+
+		# 160/320 MHz Channel Width
+		VHT160|HE160|EHT160|EHT320)
+			enable_ac=1
+			vht_oper_chwidth=2
+
+			# Compute the channel segment index
+			if [ "${CHANNEL}" -gt 0 ]; then
+				case "${CHANNEL}" in
+					36|40|44|48|52|56|60|64)
+						vht_oper_centr_freq_seg0_idx=50
+						;;
+					100|104|108|112|116|120|124|128)
+						vht_oper_centr_freq_seg0_idx=114
+						;;
+					149|153|157|161|165|169|173|177)
+						vht_oper_centr_freq_seg0_idx=163
+						;;
+				esac
+			fi
+			;;
+	esac
+
+	# 802.11ax
+	local enable_ax=0
+	local he_oper_chwidth="${vht_oper_chwidth}"
+	local he_oper_centr_freq_seg0_idx="${vht_oper_centr_freq_seg0_idx}"
+
+	case "${MODE}" in
+		HE*|EHT*)
+			enable_ax=1
+			;;
+	esac
+
+	# 802.11be
+	local enable_be=0
+	local eht_oper_chwidth="${he_oper_chwidth}"
+	local eht_oper_centr_freq_seg0_idx="${he_oper_centr_freq_seg0_idx}"
+
+	case "${MODE}" in
+		EHT*)
+			enable_be=1
+			;;
+	esac
+
+	# Set hardware mode
+	case "${BAND}" in
+		5g)
+			echo "hw_mode=a"
+			;;
+		2g)
+			echo "hw_mode=g"
+			;;
+	esac
+
+	# Enable 802.11be?
+	if [ "${enable_be}" -eq 1 ]; then
+		echo "ieee80211be=1"
+
+		# Configure wider channels
+		echo "eht_oper_chwidth=${eht_oper_chwidth}"
+		echo "eht_oper_centr_freq_seg0_idx=${eht_oper_centr_freq_seg0_idx}"
+
+		# Set EHT capabilities
+		if [ ${#eht_caps[@]} -gt 0 ]; then
+			printf "%s\n" "${eht_caps[@]}"
+		fi
+	fi
+
+	# Enable 802.11ax?
+	if [ "${enable_ax}" -eq 1 ]; then
+		echo "ieee80211ax=1"
+
+		# Configure wider channels
+		echo "he_oper_chwidth=${he_oper_chwidth}"
+		echo "he_oper_centr_freq_seg0_idx=${he_oper_centr_freq_seg0_idx}"
+
+		# Set HE capabilities
+		if [ ${#he_caps[@]} -gt 0 ]; then
+			printf "%s\n" "${he_caps[@]}"
+		fi
+	fi
+
+	# Enable 802.11ac?
+	if [ "${enable_ac}" -eq 1 ]; then
+		echo "ieee80211ac=1"
+
+		# Configure wider channels
+		echo "vht_oper_chwidth=${vht_oper_chwidth}"
+		echo "vht_oper_centr_freq_seg0_idx=${vht_oper_centr_freq_seg0_idx}"
+
+		# Set VHT capabilities
+		if [ ${#vht_caps[@]} -gt 0 ]; then
+			echo "vht_capab=${vht_caps[@]}"
+		fi
+	fi
+
+	# Always enable 802.11n
+	echo "ieee80211n=1"
+
+	# Set HT capabilities
+	if [ ${#ht_caps[@]} -gt 0 ]; then
+		echo "ht_capab=${ht_caps[@]}"
+	fi
+
+	# Configure antennas
+	if [ -z "${RX_ANTENNAS}" ]; then
+		RX_ANTENNAS="0xffffffff"
+	fi
+	if [ -z "${TX_ANTENNAS}" ]; then
+		TX_ANTENNAS="0xffffffff"
+	fi
+
+	# Set the antennas to use
+	iw phy "${phy}" set antenna "${TX_ANTENNAS}" "${RX_ANTENNAS}" &>/dev/null
+
+	# Enable authentication
+	echo "auth_algs=1"
+
+	# Enable the control interface
+	echo "ctrl_interface=/var/run/hostapd"
+	echo "ctrl_interface_group=0"
+
+	# Disconnect clients that are too far away
+	echo "disassoc_low_ack=1"
+
+	# SSID
+	echo "ssid2=\"${SSID}\""
+	echo "utf8_ssid=1"
+
+	# Hide the SSID?
+	if [ "${HIDESSID}" = "on" ]; then
+		echo "ignore_broadcast_ssid=2"
+	fi
+
+	# Isolate clients?
+	if [ "${CLIENTISOLATION}" = "on" ]; then
+		echo "ap_isolate=1"
+	fi
+
+	# Disable neighbour scan?
+	if [ "${NOSCAN}" = "on" ]; then
+		echo "noscan=1"
+	else
+		echo "noscan=0"
+	fi
+
+	# Management Frame Protection (802.11w)
+	case "${IEEE80211W}" in
+		on)
+			echo "ieee80211w=2"
+
+			# Enable beacon protection
+			echo "beacon_prot=1"
+
+			# Enable Operating Channel Validation
+			echo "ocv=1"
+			;;
+
+		optional)
+			echo "ieee80211w=1"
+
+			# Enable beacon protection
+			echo "beacon_prot=1"
+
+			# Enable OCV in compatibility mode for broken stations
+			echo "ocv=2"
+			;;
+		*)
+			echo "ieee80211w=0"
+			;;
+	esac
+
+	# Encryption
+	case "${ENC}" in
+		wpa3)
+			echo "wpa=2"
+			echo "wpa_passphrase=${PWD}"
+			echo "wpa_key_mgmt=SAE"
+			echo "rsn_pairwise=CCMP"
+			;;
+		wpa2+3)
+			echo "wpa=2"
+			echo "wpa_passphrase=${PWD}"
+			echo "wpa_key_mgmt=WPA-PSK WPA-PSK-SHA256 SAE"
+			echo "rsn_pairwise=CCMP"
+			;;
+		wpa2)
+			echo "wpa=2"
+			echo "wpa_passphrase=${PWD}"
+			echo "wpa_key_mgmt=WPA-PSK WPA-PSK-SHA256"
+			echo "rsn_pairwise=CCMP"
+			;;
+		wpa1+2)
+			echo "wpa=3"
+			echo "wpa_passphrase=${PWD}"
+			echo "wpa_key_mgmt=WPA-PSK WPA-PSK-SHA256"
+			echo "wpa_pairwise=TKIP"
+			echo "rsn_pairwise=CCMP"
+			;;
+		wpa1)
+			echo "wpa=1"
+			echo "wpa_passphrase=${PWD}"
+			echo "wpa_key_mgmt=WPA-PSK WPA-PSK-SHA256"
+			echo "wpa_pairwise=TKIP"
+			;;
+	esac
+
+	# Multi-Band Operation - prefer WiFi over mobile networks
+	# This feature requires Management Frame Protection
+	case "${IEEE80211W}" in
+		on|optional)
+			echo "mbo=1"
+			echo "mbo_cell_data_conn_pref=1"
+			;;
+	esac
+
+	# Always enable SSID protection
+	echo "ssid_protection=1"
+
+	# Extended Key ID support for Individually Addressed frames
+	echo "extended_key_id=1"
+
+	# Fully enable Optimized Connectivity Experience
+	echo "oce=7"
+
+	# Enable 802.11u Interworking Support
+	echo "interworking=1"
+
+	# 802.11u: We are a private network
+	echo "access_network_type=0"
+
+	# 802.11u: We have internet access
+	echo "internet=1"
+
+	# 802.11v: Advertise the time
+	echo "time_advertisement=2"
+
+	# Convert multicast to unicast packets
+	echo "multicast_to_unicast=1"
+
+	return 0
+}
 
 eval $(/usr/local/bin/readhash /var/ipfire/wlanap/settings)
 
@@ -53,8 +670,31 @@ case "${1}" in
 			exit 1
 		fi
 
+		# Write the configuration
+		if ! write_config "${interface}" > /etc/hostapd.conf; then
+			boot_mesg "Failed to generate configuration"
+			echo_failure
+			exit 1
+		fi
+
+		# Compose the command line
+		args=(
+			/usr/bin/hostapd
+			-s
+			-B
+			/etc/hostapd.conf
+			-i "${interface}"
+		)
+
+		# Enable debugging?
+		if [ -n "${DEBUG}" ] && [[ "${DEBUG}" =~ ^[0-9]+$ ]]; then
+			for (( i = 0; i < DEBUG; i++ )); do
+				args+=( "-d" )
+			done
+		fi
+
 		boot_mesg "Starting hostapd... "
-		loadproc /usr/bin/hostapd -s -B /etc/hostapd.conf -i "${interface}"
+		loadproc "${args[@]}"
 		;;
 
 	stop)
@@ -73,6 +713,17 @@ case "${1}" in
 		statusproc /usr/bin/hostapd
 		;;
 
+	show-config)
+		interface="$(find_interface "${INTERFACE}")"
+		if [ -z "${interface}" ]; then
+			boot_mesg "Could not find interface with address ${INTERFACE} for wireless access point"
+			echo_failure
+			exit 1
+		fi
+
+		write_config "${interface}"
+		;;
+
 	*)
 		echo "Usage: ${0} {start|stop|restart|status}"
 		exit 1


hooks/post-receive
--
IPFire 2.x development tree


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2025-09-22 11:54 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-09-22 11:54 [git.ipfire.org] IPFire 2.x development tree branch, next, updated. ed6a1a9504669c7cccab3fd81d600efd4905a317 Michael Tremer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox