* [git.ipfire.org] IPFire 2.x development tree branch, next, updated. 884303944bdba5030b2efedb455d0f64f0cf882e
@ 2026-10-29 18:02 Michael Tremer
0 siblings, 0 replies; only message in thread
From: Michael Tremer @ 2026-10-29 18:02 UTC (permalink / raw)
To: ipfire-scm
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 79168 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 884303944bdba5030b2efedb455d0f64f0cf882e (commit)
via c09ea7888433f9577bb8b94b26dbe5ab9d4e4efd (commit)
via 5c2664c3da3be13d3771d3d71343c85c60506c6b (commit)
via 2dc199cb00afafa107fede29c98a437150272a1d (commit)
via 1288367f32915c6184f795ea91b9b49862576e1e (commit)
via 3d0d96bc8689cc46b4a731ec29bb875866a4d0d5 (commit)
via e9a4ef71447bae3e8480aac59461fa7e3476bcb0 (commit)
via 2caaa2f4301e1e910ecee866d6cedcb2861daf6a (commit)
via 31d7a127fde52078eb4ea949b1ebd37f56a2c682 (commit)
via e9cf0b6b4e42c49862709f69f66c33a56e8d366a (commit)
via 8cc2267e0de4a66003a54ef278554693aefae355 (commit)
via 1f41d52be4dd67beab452af0fdd648c2d80e6375 (commit)
via 929483c9b79ceb2cf85b600b2edfb6cbf78ff695 (commit)
via e624817b7c5fd27e378cbcf20ce4dbc468ec3e67 (commit)
via 5c6f2f086e389a41abbebcea5f30f9f8791925d0 (commit)
via 3b754012092921a041c6ad0e871b6a6232d913f0 (commit)
from d2b105cfc992bc29c7656873a108c22342a8dd26 (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 884303944bdba5030b2efedb455d0f64f0cf882e
Merge: d2b105cfc c09ea7888
Author: Michael Tremer <michael.tremer@ipfire.org>
Date: Thu Oct 29 18:01:22 2026 +0000
Merge branch 'hostapd-fixes' into next
commit c09ea7888433f9577bb8b94b26dbe5ab9d4e4efd
Author: Michael Tremer <michael.tremer@ipfire.org>
Date: Thu Oct 29 17:56:25 2026 +0000
po: Update German translation
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
commit 5c2664c3da3be13d3771d3d71343c85c60506c6b
Author: Michael Tremer <michael.tremer@ipfire.org>
Date: Thu Oct 29 17:56:00 2026 +0000
po: Update from sources
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
commit 2dc199cb00afafa107fede29c98a437150272a1d
Author: Michael Tremer <michael.tremer@ipfire.org>
Date: Thu Oct 29 17:41:08 2026 +0000
hostapd: Add support for Opportunistic Wireless Encryption (OWE)
OWE (also known as Enhanced Open) encrypts the traffic of open networks
without requiring a passphrase. It requires Management Frame Protection
and can also be used in the 6 GHz band.
Clients that do not support OWE cannot connect as transition mode is not
supported, yet.
The passphrase is now also validated if it is not used as it is always
stored.
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
commit 1288367f32915c6184f795ea91b9b49862576e1e
Author: Michael Tremer <michael.tremer@ipfire.org>
Date: Thu Oct 29 17:31:34 2026 +0000
hostapd: Remove the unused configuration template and ACL files
The configuration is generated by the initscript, so the template (with
its default passphrase) was only copied around and then overwritten. The
MAC address lists were never used.
The generated configuration is now removed when the add-on is
uninstalled as it contains the passphrase.
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
commit 3d0d96bc8689cc46b4a731ec29bb875866a4d0d5
Author: Michael Tremer <michael.tremer@ipfire.org>
Date: Thu Oct 29 17:31:10 2026 +0000
wlanap.cgi: Allow to disconnect clients
Fixes: #14735
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
commit e9a4ef71447bae3e8480aac59461fa7e3476bcb0
Author: Michael Tremer <michael.tremer@ipfire.org>
Date: Thu Oct 29 16:59:04 2026 +0000
hostapd: Enforce the requirements of WPA3 and the 6 GHz band
WPA3 requires Management Frame Protection, which is now enforced for
WPA3 and at least enabled for WPA2+3 where WPA3 clients must use it.
SAE uses both, Hash-to-Element and Hunting-and-Pecking.
The web user interface now checks that the 6 GHz band uses WPA3 and
IEEE 802.11ax or newer, and that the selected mode is available in the
selected band.
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
commit 2caaa2f4301e1e910ecee866d6cedcb2861daf6a
Author: Michael Tremer <michael.tremer@ipfire.org>
Date: Thu Oct 29 16:56:45 2026 +0000
hostapd: Drop support for WPA1
WPA1 and TKIP are deprecated and hostapd disables 802.11n and newer
when TKIP is the only cipher. Any existing WPA1 and WPA1+2 configuration
falls back to WPA2.
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
commit 31d7a127fde52078eb4ea949b1ebd37f56a2c682
Author: Michael Tremer <michael.tremer@ipfire.org>
Date: Thu Oct 29 16:55:56 2026 +0000
hostapd: Make the transmit power setting work
The setting was stored under a different name than the form field
and was never applied. It is now used as a limit (in dBm) which never
exceeds the limit of the regulatory domain.
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
commit e9cf0b6b4e42c49862709f69f66c33a56e8d366a
Author: Michael Tremer <michael.tremer@ipfire.org>
Date: Thu Oct 29 16:46:11 2026 +0000
hostapd: Only accept numeric channels
The channel is used in shell arithmetic which would evaluate anything
that is stored in the settings file.
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
commit 8cc2267e0de4a66003a54ef278554693aefae355
Author: Michael Tremer <michael.tremer@ipfire.org>
Date: Thu Oct 29 16:46:11 2026 +0000
wlanap.cgi: Validate all settings before saving them
Unvalidated values were written to the settings file which were then
used to generate the hostapd configuration (as root). A newline in the
SSID or passphrase could inject arbitrary configuration and the channel
was used in shell arithmetic.
This also migrates the old 802.11an mode to the 5 GHz band.
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
commit 1f41d52be4dd67beab452af0fdd648c2d80e6375
Author: Michael Tremer <michael.tremer@ipfire.org>
Date: Thu Oct 29 16:45:43 2026 +0000
hostapd: Only enable OCE in AP mode
oce=7 also set a reserved bit and enabled STA-CFON mode which is meant
for stations that act as an access point.
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
commit 929483c9b79ceb2cf85b600b2edfb6cbf78ff695
Author: Michael Tremer <michael.tremer@ipfire.org>
Date: Thu Oct 29 16:45:43 2026 +0000
hostapd: Fix detecting HE/EHT beamforming capabilities
iw prints the HE/EHT PHY capabilities byte by byte which does not
match the bit masks that we used. The HE PHY capabilities are also
longer than 64 bits and overflowed the shell arithmetic. Therefore the
wrong bits have been checked.
We now use the decoded names that iw prints and only consider the
capabilities that apply to the access point interface type. Anything
that was found for a previous band is now being reset, too.
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
commit e624817b7c5fd27e378cbcf20ce4dbc468ec3e67
Author: Michael Tremer <michael.tremer@ipfire.org>
Date: Thu Oct 29 16:44:59 2026 +0000
hostapd: Read all bits of the VHT capability fields
RX STBC, the compressed steering number, the sounding dimension and the
A-MPDU length exponent are three bits wide, but only two bits were read.
Chips that support more than four beamforming antennas are now capped at
four as this is the maximum hostapd knows.
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
commit 5c6f2f086e389a41abbebcea5f30f9f8791925d0
Author: Michael Tremer <michael.tremer@ipfire.org>
Date: Thu Oct 29 16:44:47 2026 +0000
hostapd: Actually write the antenna pattern settings
These were assigned to shell variables instead of being written to the
configuration.
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
commit 3b754012092921a041c6ad0e871b6a6232d913f0
Author: Michael Tremer <michael.tremer@ipfire.org>
Date: Thu Oct 29 16:44:42 2026 +0000
hostapd: Fix setting the default band
The default was written to a variable that was never used again, so
that no hw_mode was set and the capabilities of the wrong band could
have been used.
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
-----------------------------------------------------------------------
Summary of changes:
config/backup/includes/hostapd | 3 -
config/hostapd/config | 3 +-
config/hostapd/hostapd.conf | 23 -----
config/rootfiles/packages/hostapd | 6 --
html/cgi-bin/wlanap.cgi | 116 +++++++++++++++++++---
lfs/hostapd | 4 -
po/de.po | 80 +++++++++++++--
po/es.po | 77 +++++++++++++--
po/fr.po | 77 +++++++++++++--
po/ipfire.pot | 75 ++++++++++++--
po/it.po | 74 ++++++++++++--
po/nl.po | 74 ++++++++++++--
po/pl.po | 74 ++++++++++++--
po/ru.po | 74 ++++++++++++--
po/tr.po | 74 ++++++++++++--
po/zh_CN.po | 77 +++++++++++++--
po/zh_TW.po | 77 +++++++++++++--
src/initscripts/packages/hostapd | 202 ++++++++++++++++++++++----------------
src/misc-progs/wlanapctrl.c | 29 +++++-
src/paks/hostapd/install.sh | 7 ++
src/paks/hostapd/uninstall.sh | 3 +
21 files changed, 1017 insertions(+), 212 deletions(-)
delete mode 100644 config/hostapd/hostapd.conf
Difference in files:
diff --git a/config/backup/includes/hostapd b/config/backup/includes/hostapd
index 0e9b9fb7d0..c92e455626 100644
--- a/config/backup/includes/hostapd
+++ b/config/backup/includes/hostapd
@@ -1,4 +1 @@
-/etc/hostapd.conf
-/var/ipfire/wlanap/macfile
/var/ipfire/wlanap/settings
-/var/ipfire/wlanap/hostapd.conf
diff --git a/config/hostapd/config b/config/hostapd/config
index 7bda725a77..dec4e5f163 100644
--- a/config/hostapd/config
+++ b/config/hostapd/config
@@ -384,8 +384,7 @@ CONFIG_FILS_SK_PFS=y
CONFIG_WPA_CLI_EDIT=y
# Opportunistic Wireless Encryption (OWE)
-# Experimental implementation of draft-harkins-owe-07.txt
-#CONFIG_OWE=y
+CONFIG_OWE=y
# Airtime policy support
CONFIG_AIRTIME_POLICY=y
diff --git a/config/hostapd/hostapd.conf b/config/hostapd/hostapd.conf
deleted file mode 100644
index 33fd30411b..0000000000
--- a/config/hostapd/hostapd.conf
+++ /dev/null
@@ -1,23 +0,0 @@
-driver=nl80211
-######################### basic hostapd configuration ##########################
-#
-interface=blue0
-hw_mode=g
-channel=6
-logger_syslog=-1
-logger_syslog_level=3
-logger_stdout=-1
-logger_stdout_level=4
-dump_file=/tmp/hostapd.dump
-auth_algs=3
-ctrl_interface=/var/run/hostapd
-ctrl_interface_group=0
-macaddr_acl=0
-ssid=IPFire
-ignore_broadcast_ssid=0
-######################### wpa hostapd configuration ############################
-#
-wpa=2
-wpa_passphrase=IPFire-2.x
-wpa_key_mgmt=WPA-PSK
-wpa_pairwise=CCMP TKIP
diff --git a/config/rootfiles/packages/hostapd b/config/rootfiles/packages/hostapd
index 78c9c82644..602527f50e 100644
--- a/config/rootfiles/packages/hostapd
+++ b/config/rootfiles/packages/hostapd
@@ -1,6 +1,3 @@
-etc/hostapd.accept
-etc/hostapd.conf
-etc/hostapd.deny
usr/bin/hostapd
usr/bin/hostapd_cli
#usr/include/linux/genetlink.h
@@ -8,9 +5,6 @@ usr/bin/hostapd_cli
#usr/include/linux/netfilter/nfnetlink_compat.h
var/ipfire/backup/addons/includes/hostapd
#var/ipfire/wlanap
-var/ipfire/wlanap/hostapd.accept
-var/ipfire/wlanap/hostapd.conf
-var/ipfire/wlanap/hostapd.deny
var/ipfire/wlanap/settings
srv/web/ipfire/cgi-bin/wlanap.cgi
var/ipfire/menu.d/EX-wlanap.menu
diff --git a/html/cgi-bin/wlanap.cgi b/html/cgi-bin/wlanap.cgi
index a5c25bb351..128791b2d9 100644
--- a/html/cgi-bin/wlanap.cgi
+++ b/html/cgi-bin/wlanap.cgi
@@ -43,7 +43,10 @@ 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") {
+ } elsif ($wlanapsettings{'HW_MODE'} eq "an") {
+ $wlanapsettings{'BAND'} = '5g';
+ $wlanapsettings{'MODE'} = "HT20";
+ } elsif ($wlanapsettings{'HW_MODE'} eq "gn") {
$wlanapsettings{'BAND'} = '2g';
$wlanapsettings{'MODE'} = "HT20";
}
@@ -52,6 +55,11 @@ unless (defined $wlanapsettings{'MODE'}) {
undef $wlanapsettings{'HW_MODE'};
}
+# WPA1 is no longer supported
+if ($wlanapsettings{'ENC'} eq "wpa1" || $wlanapsettings{'ENC'} eq "wpa1+2") {
+ $wlanapsettings{'ENC'} = "wpa2";
+}
+
# Set defaults
&General::set_defaults(\%wlanapsettings, {
"APMODE" => "on",
@@ -112,17 +120,17 @@ if ($station =~ m/^[0-9a-f]{12}$/) {
}
if ($cgiparams{'ACTION'} eq _('Save')) {
- # verify WPA Passphrase - only with enabled enc
- if ($cgiparams{'ENC'} ne "none") {
+ # verify WPA Passphrase - only if one is being used
+ if ($cgiparams{'ENC'} ne "none" && $cgiparams{'ENC'} ne "owe") {
# must be 8 .. 63 characters
if ((length($cgiparams{'PWD'}) < 8) || (length($cgiparams{'PWD'}) > 63)) {
$errormessage .= "@{[ _('Invalid length in WPA passphrase. Must be between 8 and 63 characters.') ]}<br />";
}
+ }
- # only ASCII alowed
- if (!($cgiparams{'PWD'} !~ /[^\x00-\x7f]/)) {
- $errormessage .= "@{[ _('Invalid length in WPA passphrase. Must be between 8 and 63 characters.') ]}<br />";
- }
+ # only printable ASCII alowed (the passphrase is stored even if not used)
+ if ($cgiparams{'PWD'} =~ /[^\x20-\x7e]/) {
+ $errormessage .= "@{[ _('Invalid length in WPA passphrase. Must be between 8 and 63 characters.') ]}<br />";
}
# Validate BAND
@@ -135,7 +143,72 @@ if ($cgiparams{'ACTION'} eq _('Save')) {
$errormessage .= "@{[ _('Invalid Mode') ]}<br />";
}
- # XXX This needs validation
+ # Validate INTERFACE
+ unless ($cgiparams{'INTERFACE'} =~ m/^[0-9a-f]{2}(:[0-9a-f]{2}){5}$/) {
+ $errormessage .= "@{[ _('Invalid Interface') ]}<br />";
+ }
+
+ # Validate SSID (1-32 bytes without any control characters)
+ my $ssid = $cgiparams{'SSID'} // "";
+ utf8::encode($ssid) if (utf8::is_utf8($ssid));
+
+ if ((length($ssid) < 1) || (length($ssid) > 32) || ($cgiparams{'SSID'} =~ /[\x00-\x1f\x7f]/)) {
+ $errormessage .= "@{[ _('Invalid SSID') ]}<br />";
+ }
+
+ # Validate COUNTRY
+ unless ($cgiparams{'COUNTRY'} =~ m/^[A-Z0-9]{2}$/) {
+ $errormessage .= "@{[ _('Invalid Country Code') ]}<br />";
+ }
+
+ # Validate CHANNEL
+ unless ($cgiparams{'CHANNEL'} =~ m/^\d{1,3}$/) {
+ $errormessage .= "@{[ _('Invalid Channel') ]}<br />";
+ }
+
+ # Validate TXPOWER (either automatic or a limit in dBm)
+ $cgiparams{'TXPOWER'} = "auto" if (($cgiparams{'TXPOWER'} // "") eq "");
+
+ unless ($cgiparams{'TXPOWER'} eq "auto" || ($cgiparams{'TXPOWER'} =~ m/^\d{1,2}$/ && $cgiparams{'TXPOWER'} >= 1 && $cgiparams{'TXPOWER'} <= 36)) {
+ $errormessage .= "@{[ _('Invalid Tx Power') ]}<br />";
+ }
+
+ # Validate ENC
+ unless ($cgiparams{'ENC'} =~ m/^(none|owe|wpa2|wpa3|wpa2\+3)$/) {
+ $errormessage .= "@{[ _('Invalid Encryption') ]}<br />";
+ }
+
+ # WPA3 and OWE require Management Frame Protection
+ if ($cgiparams{'ENC'} eq "wpa3" && $cgiparams{'IEEE80211W'} ne "on") {
+ $errormessage .= "@{[ _('WPA3 requires Management Frame Protection to be enforced') ]}<br />";
+ } elsif ($cgiparams{'ENC'} eq "owe" && $cgiparams{'IEEE80211W'} ne "on") {
+ $errormessage .= "@{[ _('OWE requires Management Frame Protection to be enforced') ]}<br />";
+ } elsif ($cgiparams{'ENC'} eq "wpa2+3" && $cgiparams{'IEEE80211W'} ne "on" && $cgiparams{'IEEE80211W'} ne "optional") {
+ $errormessage .= "@{[ _('WPA2+3 requires Management Frame Protection to be enabled') ]}<br />";
+ }
+
+ # The 6 GHz band only permits WPA3 and OWE
+ if ($cgiparams{'BAND'} eq "6g" && $cgiparams{'ENC'} ne "wpa3" && $cgiparams{'ENC'} ne "owe") {
+ $errormessage .= "@{[ _('The 6 GHz band requires WPA3 or OWE') ]}<br />";
+ }
+
+ # Check that the mode can be used in the selected band
+ if ($cgiparams{'BAND'} eq "6g") {
+ unless ($cgiparams{'MODE'} =~ m/^(HE|EHT)/) {
+ $errormessage .= "@{[ _('The 6 GHz band requires IEEE 802.11ax or newer') ]}<br />";
+ }
+ } elsif ($cgiparams{'BAND'} eq "5g") {
+ if ($cgiparams{'MODE'} eq "EHT320") {
+ $errormessage .= "@{[ _('320 MHz channels are only available in the 6 GHz band') ]}<br />";
+ }
+ } elsif ($cgiparams{'BAND'} eq "2g") {
+ if ($cgiparams{'MODE'} =~ m/^VHT/) {
+ $errormessage .= "@{[ _('IEEE 802.11ac is not available in the 2.4 GHz band') ]}<br />";
+ } elsif ($cgiparams{'MODE'} =~ m/(80|160|320)$/) {
+ $errormessage .= "@{[ _('The 2.4 GHz band only supports channels of up to 40 MHz') ]}<br />";
+ }
+ }
+
$wlanapsettings{'INTERFACE'} = $cgiparams{'INTERFACE'};
$wlanapsettings{'SSID'} = $cgiparams{'SSID'};
$wlanapsettings{'HIDESSID'} = ($cgiparams{'HIDESSID'} eq 'on') ? 'on' : 'off';
@@ -149,7 +222,10 @@ if ($cgiparams{'ACTION'} eq _('Save')) {
$wlanapsettings{'ENC'} = $cgiparams{'ENC'};
$wlanapsettings{'PWD'} = $cgiparams{'PWD'};
$wlanapsettings{'IEEE80211W'} = ($cgiparams{'IEEE80211W'} eq 'on' || $cgiparams{'IEEE80211W'} eq 'optional') ? $cgiparams{'IEEE80211W'} : 'off';
- $wlanapsettings{'TX_POWER'} = $cgiparams{'TX_POWER'};
+ $wlanapsettings{'TXPOWER'} = $cgiparams{'TXPOWER'};
+
+ # This was stored under the wrong name before
+ delete $wlanapsettings{'TX_POWER'};
if ($errormessage eq '') {
&General::writehash("/var/ipfire/wlanap/settings", \%wlanapsettings);
@@ -164,6 +240,12 @@ if ($cgiparams{'ACTION'} eq _('Save')) {
# Stop
} elsif ($cgiparams{'ACTION'} eq _('Stop')) {
&General::system("/usr/local/bin/wlanapctrl", "stop");
+
+# Disconnect a client
+} elsif ($cgiparams{'ACTION'} eq _('Disconnect')) {
+ if ($cgiparams{'ADDRESS'} =~ m/^[0-9a-f]{2}(:[0-9a-f]{2}){5}$/) {
+ &General::system("/usr/local/bin/wlanapctrl", "disconnect", $cgiparams{'ADDRESS'});
+ }
}
&Header::openpage(_('Wireless Access Point Configuration'), 1, '', '');
@@ -207,7 +289,6 @@ $selected{'IEEE80211W'}{$wlanapsettings{'IEEE80211W'}} = "selected";
$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{'MODE'}{$wlanapsettings{'MODE'}} = "selected";
$selected{'BAND'}{$wlanapsettings{'BAND'}} = "selected";
@@ -433,10 +514,9 @@ print <<END;
<td>
<select name='ENC'>
<option value='none' $selected{'ENC'}{'none'}>@{[ _('None') ]}</option>
- <option value='wpa1' $selected{'ENC'}{'wpa1'}>WPA1</option>
+ <option value='owe' $selected{'ENC'}{'owe'}>@{[ _('Enhanced Open (OWE)') ]}</option>
<option value='wpa2' $selected{'ENC'}{'wpa2'}>WPA2</option>
<option value='wpa3' $selected{'ENC'}{'wpa3'}>WPA3</option>
- <option value='wpa1+2' $selected{'ENC'}{'wpa1+2'}>WPA1+2</option>
<option value='wpa2+3' $selected{'ENC'}{'wpa2+3'}>WPA2+3</option>
</select>
</td>
@@ -467,9 +547,10 @@ print <<END;
</tr>
<tr>
- <td>Tx Power</td>
+ <td>@{[ _('Tx Power') ]}</td>
<td>
- <input type='text' name='TXPOWER' value='$wlanapsettings{'TXPOWER'}' />
+ <input type='text' name='TXPOWER' value='@{[ &Header::escape($wlanapsettings{'TXPOWER'}) ]}' placeholder="auto" />
+ dBm
</td>
</tr>
@@ -563,6 +644,7 @@ END
<th>@{[ _('Connected') ]}</th>
<th>@{[ _('Features') ]}</th>
<th></th>
+ <th></th>
</tr>
END
@@ -656,6 +738,12 @@ END
<td class="text-center">$connected</td>
<td>@features</td>
<td class="text-center">$graph</td>
+ <td class="text-center">
+ <form method="post" action="$ENV{'SCRIPT_NAME'}">
+ <input type="hidden" name="ADDRESS" value="$address">
+ <input type="submit" name="ACTION" value="@{[ _('Disconnect') ]}">
+ </form>
+ </td>
</tr>
END
}
diff --git a/lfs/hostapd b/lfs/hostapd
index 5dc719b3a4..c840e1e90e 100644
--- a/lfs/hostapd
+++ b/lfs/hostapd
@@ -93,10 +93,6 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
$(call INSTALL_INITSCRIPTS,$(SERVICES))
mkdir -p /var/ipfire/wlanap
touch /var/ipfire/wlanap/settings
- cp -vrf $(DIR_SRC)/config/hostapd/hostapd.conf /var/ipfire/wlanap/hostapd.conf
- touch /var/ipfire/wlanap/hostapd.accept
- touch /var/ipfire/wlanap/hostapd.deny
- cp -vrf /var/ipfire/wlanap/hostapd.* /etc/
chown nobody:nobody /var/ipfire/wlanap/*
chmod 644 /var/ipfire/wlanap/*
@rm -rf $(DIR_APP)
diff --git a/po/de.po b/po/de.po
index 8feed87a0d..cb94e16587 100644
--- a/po/de.po
+++ b/po/de.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: IPFire\n"
"Report-Msgid-Bugs-To: https://bugzilla.ipfire.org/\n"
-"POT-Creation-Date: 2026-10-24 15:28+0000\n"
+"POT-Creation-Date: 2026-10-29 17:55+0000\n"
"Language-Team: German\n"
"Language: de\n"
"MIME-Version: 1.0\n"
@@ -931,8 +931,8 @@ msgstr "Externer IP-Alias entfernt"
msgid "Interface:"
msgstr "Schnittstelle:"
-#: html/cgi-bin/aliases.cgi html/cgi-bin/hosts.cgi html/cgi-bin/pppsetup.cgi
-#: html/cgi-bin/wio.cgi
+#: html/cgi-bin/aliases.cgi html/cgi-bin/dhcp.cgi html/cgi-bin/hosts.cgi
+#: html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
msgid "Invalid hostname."
msgstr "Ungültiger Hostname."
@@ -1299,7 +1299,9 @@ msgstr "Bitte geben Sie einen Gutscheincode ein"
#: html/cgi-bin/captive/index.cgi
msgid "You entered an invalid coupon code. Please try again."
-msgstr "Sie haben einen ungültigen Gutscheincode eingegeben. Bitte versuchen Sie es erneut."
+msgstr ""
+"Sie haben einen ungültigen Gutscheincode eingegeben. Bitte versuchen Sie es "
+"erneut."
#: html/cgi-bin/chpasswd.cgi
msgid "C h a n g e w e b a c c e s s p a s s w o r d"
@@ -1440,6 +1442,7 @@ msgid "Days:"
msgstr "Tage:"
#: html/cgi-bin/connscheduler.cgi html/cgi-bin/index.cgi
+#: html/cgi-bin/wlanap.cgi
msgid "Disconnect"
msgstr "Trennen"
@@ -1614,8 +1617,8 @@ msgstr ""
msgid "Hostname not set."
msgstr "Hostname nicht eingegeben."
-#: html/cgi-bin/ddns.cgi html/cgi-bin/hosts.cgi html/cgi-bin/index.cgi
-#: html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
+#: html/cgi-bin/ddns.cgi html/cgi-bin/dhcp.cgi html/cgi-bin/hosts.cgi
+#: html/cgi-bin/index.cgi html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
msgid "Hostname:"
msgstr "Hostname:"
@@ -2867,7 +2870,7 @@ msgstr "IPsec-Netzwerk"
msgid "Incoming Firewall Access:"
msgstr "Eingehender Firewallzugang:"
-#: html/cgi-bin/fwhosts.cgi
+#: html/cgi-bin/fwhosts.cgi html/cgi-bin/wlanap.cgi
msgid "Invalid Country Code"
msgstr "Ungültiger Ländercode"
@@ -5939,7 +5942,9 @@ msgstr "Es wurde keine Datei hochgeladen"
#: html/cgi-bin/ovpnmain.cgi
msgid ""
"This cipher is being used by clients that do not support cipher negotiation."
-msgstr "Diese Chiffre wird von Clients verwendet, die keine Aushandlung der Chiffre unterstützen."
+msgstr ""
+"Diese Chiffre wird von Clients verwendet, die keine Aushandlung der Chiffre "
+"unterstützen."
#: html/cgi-bin/ovpnmain.cgi html/cgi-bin/vpnmain.cgi
msgid ""
@@ -10435,6 +10440,10 @@ msgstr "%d Stream(s)"
msgid "2.4 GHz"
msgstr "2.4 GHz"
+#: html/cgi-bin/wlanap.cgi
+msgid "320 MHz channels are only available in the 6 GHz band"
+msgstr "320-MHz-Kanäle sind nur im 6-GHz-Band verfügbar"
+
#: html/cgi-bin/wlanap.cgi
msgid "5 GHz"
msgstr "5 GHz"
@@ -10479,6 +10488,10 @@ msgstr "Ländercode"
msgid "Enforced"
msgstr "Erzwungen"
+#: html/cgi-bin/wlanap.cgi
+msgid "Enhanced Open (OWE)"
+msgstr "Enhanced Open (OWE)"
+
#: html/cgi-bin/wlanap.cgi
msgid "Features"
msgstr "Funktionen"
@@ -10511,6 +10524,10 @@ msgstr "IEEE 802.11ac @ 40 MHz"
msgid "IEEE 802.11ac @ 80 MHz"
msgstr "IEEE 802.11ac @ 80 MHz"
+#: html/cgi-bin/wlanap.cgi
+msgid "IEEE 802.11ac is not available in the 2.4 GHz band"
+msgstr "IEEE 802.11ac ist im 2.4-GHz-Band nicht verfügbar"
+
#: html/cgi-bin/wlanap.cgi
msgid "IEEE 802.11an/gn"
msgstr "IEEE 802.11an/gn"
@@ -10575,10 +10592,30 @@ msgstr "IEEE802.11a/g @ 20 MHz"
msgid "Invalid Band"
msgstr "Ungültiges Band"
+#: html/cgi-bin/wlanap.cgi
+msgid "Invalid Channel"
+msgstr "Ungültiger Kanal"
+
+#: html/cgi-bin/wlanap.cgi
+msgid "Invalid Encryption"
+msgstr "Ungültige Verschlüsselung"
+
+#: html/cgi-bin/wlanap.cgi
+msgid "Invalid Interface"
+msgstr "Ungültige Schnittstelle"
+
#: html/cgi-bin/wlanap.cgi
msgid "Invalid Mode"
msgstr "Ungültiger Modus"
+#: html/cgi-bin/wlanap.cgi
+msgid "Invalid SSID"
+msgstr "Ungültige SSID"
+
+#: html/cgi-bin/wlanap.cgi
+msgid "Invalid Tx Power"
+msgstr "Ungültige Sendeleistung"
+
#: html/cgi-bin/wlanap.cgi
msgid "Invalid length in WPA passphrase. Must be between 8 and 63 characters."
msgstr ""
@@ -10596,6 +10633,10 @@ msgstr "Nachbarschaftsscan"
msgid "Not Authorized"
msgstr "Nicht autorisiert"
+#: html/cgi-bin/wlanap.cgi
+msgid "OWE requires Management Frame Protection to be enforced"
+msgstr "OWE erfordert, dass der Schutz der Management-Frames erzwungen wird"
+
#: html/cgi-bin/wlanap.cgi
msgid "Pre-Shared Key"
msgstr "Schlüssel"
@@ -10624,6 +10665,18 @@ msgstr "Kurze Slot-Zeit"
msgid "Signal"
msgstr "Signal"
+#: html/cgi-bin/wlanap.cgi
+msgid "The 2.4 GHz band only supports channels of up to 40 MHz"
+msgstr "Das 2.4-GHz-Band unterstützt nur Kanäle mit bis zu 40 MHz"
+
+#: html/cgi-bin/wlanap.cgi
+msgid "The 6 GHz band requires IEEE 802.11ax or newer"
+msgstr "Das 6-GHz-Band erfordert IEEE 802.11ax oder neuer"
+
+#: html/cgi-bin/wlanap.cgi
+msgid "The 6 GHz band requires WPA3 or OWE"
+msgstr "Das 6-GHz-Band erfordert WPA3 oder OWE"
+
#: html/cgi-bin/wlanap.cgi src/squid-accounting/accounting.cgi
msgid "Traffic"
msgstr "Traffic"
@@ -10632,9 +10685,18 @@ msgstr "Traffic"
msgid "Tx Power"
msgstr "Sendeleistung"
+#: html/cgi-bin/wlanap.cgi
+msgid "WPA2+3 requires Management Frame Protection to be enabled"
+msgstr "WPA2+3 erfordert, dass der Schutz der Management-Frames aktiviert ist"
+
+#: html/cgi-bin/wlanap.cgi
+msgid "WPA3 requires Management Frame Protection to be enforced"
+msgstr "WPA3 erfordert, dass der Schutz der Management-Frames erzwungen wird"
+
#: html/cgi-bin/wlanap.cgi
msgid "Warning: Disabling the scan may violate regulatory rules"
-msgstr "Warnung: Das Deaktivieren des Scans kann gegen Funkvorschriften verstoßen"
+msgstr ""
+"Warnung: Das Deaktivieren des Scans kann gegen Funkvorschriften verstoßen"
#: html/cgi-bin/wlanap.cgi
msgid "WiFi Clients"
diff --git a/po/es.po b/po/es.po
index a090a43330..14339490db 100644
--- a/po/es.po
+++ b/po/es.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: IPFire\n"
"Report-Msgid-Bugs-To: https://bugzilla.ipfire.org/\n"
-"POT-Creation-Date: 2026-10-24 15:28+0000\n"
+"POT-Creation-Date: 2026-10-29 17:55+0000\n"
"Language-Team: Spanish\n"
"Language: es\n"
"MIME-Version: 1.0\n"
@@ -937,8 +937,8 @@ msgstr "Alias de dirección IP externa removido"
msgid "Interface:"
msgstr "Interfaz:"
-#: html/cgi-bin/aliases.cgi html/cgi-bin/hosts.cgi html/cgi-bin/pppsetup.cgi
-#: html/cgi-bin/wio.cgi
+#: html/cgi-bin/aliases.cgi html/cgi-bin/dhcp.cgi html/cgi-bin/hosts.cgi
+#: html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
msgid "Invalid hostname."
msgstr "Nombre de host no válido."
@@ -1447,6 +1447,7 @@ msgid "Days:"
msgstr "Días:"
#: html/cgi-bin/connscheduler.cgi html/cgi-bin/index.cgi
+#: html/cgi-bin/wlanap.cgi
msgid "Disconnect"
msgstr "Desconectar"
@@ -1621,8 +1622,8 @@ msgstr ""
msgid "Hostname not set."
msgstr "Nombre de host no configurado"
-#: html/cgi-bin/ddns.cgi html/cgi-bin/hosts.cgi html/cgi-bin/index.cgi
-#: html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
+#: html/cgi-bin/ddns.cgi html/cgi-bin/dhcp.cgi html/cgi-bin/hosts.cgi
+#: html/cgi-bin/index.cgi html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
msgid "Hostname:"
msgstr "Nombre de host:"
@@ -2868,7 +2869,7 @@ msgstr "Red IPsec"
msgid "Incoming Firewall Access:"
msgstr "Reglas Entrantes:"
-#: html/cgi-bin/fwhosts.cgi
+#: html/cgi-bin/fwhosts.cgi html/cgi-bin/wlanap.cgi
msgid "Invalid Country Code"
msgstr ""
@@ -10437,6 +10438,10 @@ msgstr ""
msgid "2.4 GHz"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "320 MHz channels are only available in the 6 GHz band"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "5 GHz"
msgstr ""
@@ -10484,6 +10489,10 @@ msgstr "Código de País"
msgid "Enforced"
msgstr "Forzado"
+#: html/cgi-bin/wlanap.cgi
+msgid "Enhanced Open (OWE)"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "Features"
msgstr ""
@@ -10516,6 +10525,10 @@ msgstr ""
msgid "IEEE 802.11ac @ 80 MHz"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "IEEE 802.11ac is not available in the 2.4 GHz band"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "IEEE 802.11an/gn"
msgstr ""
@@ -10580,10 +10593,35 @@ msgstr ""
msgid "Invalid Band"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Channel"
+msgstr "Campo inválido"
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Encryption"
+msgstr "Endpoint no válido"
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Interface"
+msgstr "Entrada no válida"
+
#: html/cgi-bin/wlanap.cgi
msgid "Invalid Mode"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid SSID"
+msgstr "Entrada no válida"
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Tx Power"
+msgstr "Puerto de proxy no válido"
+
#: html/cgi-bin/wlanap.cgi
msgid "Invalid length in WPA passphrase. Must be between 8 and 63 characters."
msgstr ""
@@ -10603,6 +10641,11 @@ msgstr "Desactivación Escaneo de vecindario"
msgid "Not Authorized"
msgstr "No montado"
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "OWE requires Management Frame Protection to be enforced"
+msgstr "Protección del marco de gestión"
+
#: html/cgi-bin/wlanap.cgi
msgid "Pre-Shared Key"
msgstr "Clave precompartida"
@@ -10633,6 +10676,18 @@ msgstr ""
msgid "Signal"
msgstr "Calidad de la señal"
+#: html/cgi-bin/wlanap.cgi
+msgid "The 2.4 GHz band only supports channels of up to 40 MHz"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "The 6 GHz band requires IEEE 802.11ax or newer"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "The 6 GHz band requires WPA3 or OWE"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi src/squid-accounting/accounting.cgi
msgid "Traffic"
msgstr ""
@@ -10641,6 +10696,16 @@ msgstr ""
msgid "Tx Power"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "WPA2+3 requires Management Frame Protection to be enabled"
+msgstr "Protección del marco de gestión"
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "WPA3 requires Management Frame Protection to be enforced"
+msgstr "Protección del marco de gestión"
+
#: html/cgi-bin/wlanap.cgi
#, fuzzy
msgid "Warning: Disabling the scan may violate regulatory rules"
diff --git a/po/fr.po b/po/fr.po
index 1abe6d7e3a..4c1ef6d243 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: IPFire\n"
"Report-Msgid-Bugs-To: https://bugzilla.ipfire.org/\n"
-"POT-Creation-Date: 2026-10-24 15:28+0000\n"
+"POT-Creation-Date: 2026-10-29 17:55+0000\n"
"Language-Team: French\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
@@ -939,8 +939,8 @@ msgstr "Alias d'IP externe supprimée"
msgid "Interface:"
msgstr "Interface :"
-#: html/cgi-bin/aliases.cgi html/cgi-bin/hosts.cgi html/cgi-bin/pppsetup.cgi
-#: html/cgi-bin/wio.cgi
+#: html/cgi-bin/aliases.cgi html/cgi-bin/dhcp.cgi html/cgi-bin/hosts.cgi
+#: html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
msgid "Invalid hostname."
msgstr "Nom d'hôte non valide."
@@ -1446,6 +1446,7 @@ msgid "Days:"
msgstr "Jours :"
#: html/cgi-bin/connscheduler.cgi html/cgi-bin/index.cgi
+#: html/cgi-bin/wlanap.cgi
msgid "Disconnect"
msgstr "Déconnexion"
@@ -1619,8 +1620,8 @@ msgstr "Deviner la véritable IP publique à l'aide d'un serveur externe"
msgid "Hostname not set."
msgstr "Le nom d'hôte n'est pas défini."
-#: html/cgi-bin/ddns.cgi html/cgi-bin/hosts.cgi html/cgi-bin/index.cgi
-#: html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
+#: html/cgi-bin/ddns.cgi html/cgi-bin/dhcp.cgi html/cgi-bin/hosts.cgi
+#: html/cgi-bin/index.cgi html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
msgid "Hostname:"
msgstr "Nom hôte :"
@@ -2873,7 +2874,7 @@ msgstr "Réseau IPsec"
msgid "Incoming Firewall Access:"
msgstr "Accès entrant du pare-feu :"
-#: html/cgi-bin/fwhosts.cgi
+#: html/cgi-bin/fwhosts.cgi html/cgi-bin/wlanap.cgi
msgid "Invalid Country Code"
msgstr ""
@@ -10452,6 +10453,10 @@ msgstr ""
msgid "2.4 GHz"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "320 MHz channels are only available in the 6 GHz band"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "5 GHz"
msgstr ""
@@ -10499,6 +10504,10 @@ msgstr "Code pays"
msgid "Enforced"
msgstr "Forcé"
+#: html/cgi-bin/wlanap.cgi
+msgid "Enhanced Open (OWE)"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "Features"
msgstr ""
@@ -10531,6 +10540,10 @@ msgstr ""
msgid "IEEE 802.11ac @ 80 MHz"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "IEEE 802.11ac is not available in the 2.4 GHz band"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "IEEE 802.11an/gn"
msgstr ""
@@ -10595,10 +10608,35 @@ msgstr ""
msgid "Invalid Band"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Channel"
+msgstr "Champ invalide"
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Encryption"
+msgstr "Chiffrement"
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Interface"
+msgstr "Entrée non valide"
+
#: html/cgi-bin/wlanap.cgi
msgid "Invalid Mode"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid SSID"
+msgstr "Entrée non valide"
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Tx Power"
+msgstr "Port proxy non valide"
+
#: html/cgi-bin/wlanap.cgi
msgid "Invalid length in WPA passphrase. Must be between 8 and 63 characters."
msgstr ""
@@ -10619,6 +10657,11 @@ msgstr "Désactivation Balayage réseaux proches"
msgid "Not Authorized"
msgstr "Non monté"
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "OWE requires Management Frame Protection to be enforced"
+msgstr "Protection du cadre de gestion"
+
#: html/cgi-bin/wlanap.cgi
msgid "Pre-Shared Key"
msgstr "Clé pré-partagée"
@@ -10649,6 +10692,18 @@ msgstr ""
msgid "Signal"
msgstr "qualité du signal"
+#: html/cgi-bin/wlanap.cgi
+msgid "The 2.4 GHz band only supports channels of up to 40 MHz"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "The 6 GHz band requires IEEE 802.11ax or newer"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "The 6 GHz band requires WPA3 or OWE"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi src/squid-accounting/accounting.cgi
msgid "Traffic"
msgstr "Trafic"
@@ -10657,6 +10712,16 @@ msgstr "Trafic"
msgid "Tx Power"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "WPA2+3 requires Management Frame Protection to be enabled"
+msgstr "Protection du cadre de gestion"
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "WPA3 requires Management Frame Protection to be enforced"
+msgstr "Protection du cadre de gestion"
+
#: html/cgi-bin/wlanap.cgi
#, fuzzy
msgid "Warning: Disabling the scan may violate regulatory rules"
diff --git a/po/ipfire.pot b/po/ipfire.pot
index e0c9752a9b..8b10fc5e6c 100644
--- a/po/ipfire.pot
+++ b/po/ipfire.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: IPFire\n"
"Report-Msgid-Bugs-To: https://bugzilla.ipfire.org/\n"
-"POT-Creation-Date: 2026-10-24 15:28+0000\n"
+"POT-Creation-Date: 2026-10-29 17:55+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -824,8 +824,8 @@ msgstr ""
msgid "Empty name."
msgstr ""
-#: html/cgi-bin/aliases.cgi html/cgi-bin/hosts.cgi html/cgi-bin/pppsetup.cgi
-#: html/cgi-bin/wio.cgi
+#: html/cgi-bin/aliases.cgi html/cgi-bin/dhcp.cgi html/cgi-bin/hosts.cgi
+#: html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
msgid "Invalid hostname."
msgstr ""
@@ -1427,6 +1427,7 @@ msgid "Connect"
msgstr ""
#: html/cgi-bin/connscheduler.cgi html/cgi-bin/index.cgi
+#: html/cgi-bin/wlanap.cgi
msgid "Disconnect"
msgstr ""
@@ -1620,8 +1621,8 @@ msgstr ""
msgid "Service:"
msgstr ""
-#: html/cgi-bin/ddns.cgi html/cgi-bin/hosts.cgi html/cgi-bin/index.cgi
-#: html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
+#: html/cgi-bin/ddns.cgi html/cgi-bin/dhcp.cgi html/cgi-bin/hosts.cgi
+#: html/cgi-bin/index.cgi html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
msgid "Hostname:"
msgstr ""
@@ -2773,7 +2774,7 @@ msgstr ""
msgid "This entry already exists in the group"
msgstr ""
-#: html/cgi-bin/fwhosts.cgi
+#: html/cgi-bin/fwhosts.cgi html/cgi-bin/wlanap.cgi
msgid "Invalid Country Code"
msgstr ""
@@ -10204,6 +10205,58 @@ msgstr ""
msgid "Invalid Mode"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "Invalid Interface"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "Invalid SSID"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "Invalid Channel"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "Invalid Tx Power"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "Invalid Encryption"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "WPA3 requires Management Frame Protection to be enforced"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "OWE requires Management Frame Protection to be enforced"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "WPA2+3 requires Management Frame Protection to be enabled"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "The 6 GHz band requires WPA3 or OWE"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "The 6 GHz band requires IEEE 802.11ax or newer"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "320 MHz channels are only available in the 6 GHz band"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "IEEE 802.11ac is not available in the 2.4 GHz band"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "The 2.4 GHz band only supports channels of up to 40 MHz"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "Wireless Access Point Configuration"
msgstr ""
@@ -10344,6 +10397,10 @@ msgstr ""
msgid "Warning: Disabling the scan may violate regulatory rules"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "Enhanced Open (OWE)"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "Pre-Shared Key"
msgstr ""
@@ -10357,15 +10414,15 @@ msgid "Enforced"
msgstr ""
#: html/cgi-bin/wlanap.cgi
-msgid "WiFi Status"
+msgid "Tx Power"
msgstr ""
#: html/cgi-bin/wlanap.cgi
-msgid "Channel Width"
+msgid "WiFi Status"
msgstr ""
#: html/cgi-bin/wlanap.cgi
-msgid "Tx Power"
+msgid "Channel Width"
msgstr ""
#: html/cgi-bin/wlanap.cgi
diff --git a/po/it.po b/po/it.po
index 2180da3fc8..b133b94146 100644
--- a/po/it.po
+++ b/po/it.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: IPFire\n"
"Report-Msgid-Bugs-To: https://bugzilla.ipfire.org/\n"
-"POT-Creation-Date: 2026-10-24 15:28+0000\n"
+"POT-Creation-Date: 2026-10-29 17:55+0000\n"
"Language-Team: Italian\n"
"Language: it\n"
"MIME-Version: 1.0\n"
@@ -930,8 +930,8 @@ msgstr "External IP alias removed"
msgid "Interface:"
msgstr "Interfaccia:"
-#: html/cgi-bin/aliases.cgi html/cgi-bin/hosts.cgi html/cgi-bin/pppsetup.cgi
-#: html/cgi-bin/wio.cgi
+#: html/cgi-bin/aliases.cgi html/cgi-bin/dhcp.cgi html/cgi-bin/hosts.cgi
+#: html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
msgid "Invalid hostname."
msgstr "Invalid hostname."
@@ -1436,6 +1436,7 @@ msgid "Days:"
msgstr "Giorno:"
#: html/cgi-bin/connscheduler.cgi html/cgi-bin/index.cgi
+#: html/cgi-bin/wlanap.cgi
msgid "Disconnect"
msgstr "Disconnesso"
@@ -1607,8 +1608,8 @@ msgstr "Ottieni l'indirizzo IP pubblico con l'aiuto di un server esterno"
msgid "Hostname not set."
msgstr "Hostname not set."
-#: html/cgi-bin/ddns.cgi html/cgi-bin/hosts.cgi html/cgi-bin/index.cgi
-#: html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
+#: html/cgi-bin/ddns.cgi html/cgi-bin/dhcp.cgi html/cgi-bin/hosts.cgi
+#: html/cgi-bin/index.cgi html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
msgid "Hostname:"
msgstr "Hostname:"
@@ -2843,7 +2844,7 @@ msgstr "IPsec network"
msgid "Incoming Firewall Access:"
msgstr "Incoming Firewall Access:"
-#: html/cgi-bin/fwhosts.cgi
+#: html/cgi-bin/fwhosts.cgi html/cgi-bin/wlanap.cgi
msgid "Invalid Country Code"
msgstr ""
@@ -10328,6 +10329,10 @@ msgstr ""
msgid "2.4 GHz"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "320 MHz channels are only available in the 6 GHz band"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "5 GHz"
msgstr ""
@@ -10375,6 +10380,10 @@ msgstr "Country Code"
msgid "Enforced"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "Enhanced Open (OWE)"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "Features"
msgstr ""
@@ -10407,6 +10416,10 @@ msgstr ""
msgid "IEEE 802.11ac @ 80 MHz"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "IEEE 802.11ac is not available in the 2.4 GHz band"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "IEEE 802.11an/gn"
msgstr ""
@@ -10471,10 +10484,35 @@ msgstr ""
msgid "Invalid Band"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Channel"
+msgstr "Invalid hostname."
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Encryption"
+msgstr "Encryption"
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Interface"
+msgstr "Invalid input"
+
#: html/cgi-bin/wlanap.cgi
msgid "Invalid Mode"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid SSID"
+msgstr "Invalid input"
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Tx Power"
+msgstr "Invalid proxy port"
+
#: html/cgi-bin/wlanap.cgi
msgid "Invalid length in WPA passphrase. Must be between 8 and 63 characters."
msgstr ""
@@ -10492,6 +10530,10 @@ msgstr ""
msgid "Not Authorized"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "OWE requires Management Frame Protection to be enforced"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "Pre-Shared Key"
msgstr "Pre-shared key"
@@ -10522,6 +10564,18 @@ msgstr ""
msgid "Signal"
msgstr "Signal Quality"
+#: html/cgi-bin/wlanap.cgi
+msgid "The 2.4 GHz band only supports channels of up to 40 MHz"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "The 6 GHz band requires IEEE 802.11ax or newer"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "The 6 GHz band requires WPA3 or OWE"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi src/squid-accounting/accounting.cgi
msgid "Traffic"
msgstr ""
@@ -10530,6 +10584,14 @@ msgstr ""
msgid "Tx Power"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "WPA2+3 requires Management Frame Protection to be enabled"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "WPA3 requires Management Frame Protection to be enforced"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "Warning: Disabling the scan may violate regulatory rules"
msgstr ""
diff --git a/po/nl.po b/po/nl.po
index c7486f28f4..64a4e57bcd 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: IPFire\n"
"Report-Msgid-Bugs-To: https://bugzilla.ipfire.org/\n"
-"POT-Creation-Date: 2026-10-24 15:28+0000\n"
+"POT-Creation-Date: 2026-10-29 17:55+0000\n"
"Language-Team: Dutch\n"
"Language: nl\n"
"MIME-Version: 1.0\n"
@@ -931,8 +931,8 @@ msgstr "Extern IP-alias verwijderd"
msgid "Interface:"
msgstr "Interface:"
-#: html/cgi-bin/aliases.cgi html/cgi-bin/hosts.cgi html/cgi-bin/pppsetup.cgi
-#: html/cgi-bin/wio.cgi
+#: html/cgi-bin/aliases.cgi html/cgi-bin/dhcp.cgi html/cgi-bin/hosts.cgi
+#: html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
msgid "Invalid hostname."
msgstr "Ongeldige hostnaam."
@@ -1437,6 +1437,7 @@ msgid "Days:"
msgstr "Dagen:"
#: html/cgi-bin/connscheduler.cgi html/cgi-bin/index.cgi
+#: html/cgi-bin/wlanap.cgi
msgid "Disconnect"
msgstr "Verbreek"
@@ -1610,8 +1611,8 @@ msgstr "Bepaal het echte publieke IP-adres met behulp van een externe server"
msgid "Hostname not set."
msgstr "Hostnaam niet opgegeven."
-#: html/cgi-bin/ddns.cgi html/cgi-bin/hosts.cgi html/cgi-bin/index.cgi
-#: html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
+#: html/cgi-bin/ddns.cgi html/cgi-bin/dhcp.cgi html/cgi-bin/hosts.cgi
+#: html/cgi-bin/index.cgi html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
msgid "Hostname:"
msgstr "Hostnaam:"
@@ -2851,7 +2852,7 @@ msgstr "IPsec netwerk"
msgid "Incoming Firewall Access:"
msgstr "Inkomende firewalltoegang:"
-#: html/cgi-bin/fwhosts.cgi
+#: html/cgi-bin/fwhosts.cgi html/cgi-bin/wlanap.cgi
msgid "Invalid Country Code"
msgstr ""
@@ -10352,6 +10353,10 @@ msgstr ""
msgid "2.4 GHz"
msgstr "2.4 GHz"
+#: html/cgi-bin/wlanap.cgi
+msgid "320 MHz channels are only available in the 6 GHz band"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "5 GHz"
msgstr "5 GHz"
@@ -10399,6 +10404,10 @@ msgstr "Landcode"
msgid "Enforced"
msgstr "Afgedwongen"
+#: html/cgi-bin/wlanap.cgi
+msgid "Enhanced Open (OWE)"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "Features"
msgstr ""
@@ -10431,6 +10440,10 @@ msgstr "IEEE 802.11ac @ 40 MHz"
msgid "IEEE 802.11ac @ 80 MHz"
msgstr "IEEE 802.11ac @ 80 MHz"
+#: html/cgi-bin/wlanap.cgi
+msgid "IEEE 802.11ac is not available in the 2.4 GHz band"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "IEEE 802.11an/gn"
msgstr "IEEE 802.11an/gn"
@@ -10495,10 +10508,35 @@ msgstr "IEEE802.11a/g @ 20 MHz"
msgid "Invalid Band"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Channel"
+msgstr "Ongeldige hostnaam."
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Encryption"
+msgstr "Encryptie"
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Interface"
+msgstr "Ongeldige invoer"
+
#: html/cgi-bin/wlanap.cgi
msgid "Invalid Mode"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid SSID"
+msgstr "Ongeldige invoer"
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Tx Power"
+msgstr "Ongeldige proxy poort"
+
#: html/cgi-bin/wlanap.cgi
msgid "Invalid length in WPA passphrase. Must be between 8 and 63 characters."
msgstr ""
@@ -10517,6 +10555,10 @@ msgstr ""
msgid "Not Authorized"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "OWE requires Management Frame Protection to be enforced"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "Pre-Shared Key"
msgstr "Pre-shared sleutel"
@@ -10546,6 +10588,18 @@ msgstr ""
msgid "Signal"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "The 2.4 GHz band only supports channels of up to 40 MHz"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "The 6 GHz band requires IEEE 802.11ax or newer"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "The 6 GHz band requires WPA3 or OWE"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi src/squid-accounting/accounting.cgi
msgid "Traffic"
msgstr ""
@@ -10554,6 +10608,14 @@ msgstr ""
msgid "Tx Power"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "WPA2+3 requires Management Frame Protection to be enabled"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "WPA3 requires Management Frame Protection to be enforced"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "Warning: Disabling the scan may violate regulatory rules"
msgstr ""
diff --git a/po/pl.po b/po/pl.po
index 62793b8f4f..b227c7f3d4 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: IPFire\n"
"Report-Msgid-Bugs-To: https://bugzilla.ipfire.org/\n"
-"POT-Creation-Date: 2026-10-24 15:28+0000\n"
+"POT-Creation-Date: 2026-10-29 17:55+0000\n"
"Language-Team: Polish\n"
"Language: pl\n"
"MIME-Version: 1.0\n"
@@ -929,8 +929,8 @@ msgstr "Usunięto zewnętrzny alias IP"
msgid "Interface:"
msgstr "Interfejs:"
-#: html/cgi-bin/aliases.cgi html/cgi-bin/hosts.cgi html/cgi-bin/pppsetup.cgi
-#: html/cgi-bin/wio.cgi
+#: html/cgi-bin/aliases.cgi html/cgi-bin/dhcp.cgi html/cgi-bin/hosts.cgi
+#: html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
msgid "Invalid hostname."
msgstr "Niepoprawna nazwa hosta."
@@ -1435,6 +1435,7 @@ msgid "Days:"
msgstr "Dni:"
#: html/cgi-bin/connscheduler.cgi html/cgi-bin/index.cgi
+#: html/cgi-bin/wlanap.cgi
msgid "Disconnect"
msgstr "Rozłącz"
@@ -1606,8 +1607,8 @@ msgstr "Próbuj uzyskać publiczne IP za pomocą zewnętrznego serwera"
msgid "Hostname not set."
msgstr "Nazwa hosta nie ustawiona."
-#: html/cgi-bin/ddns.cgi html/cgi-bin/hosts.cgi html/cgi-bin/index.cgi
-#: html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
+#: html/cgi-bin/ddns.cgi html/cgi-bin/dhcp.cgi html/cgi-bin/hosts.cgi
+#: html/cgi-bin/index.cgi html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
msgid "Hostname:"
msgstr "Nazwa hosta:"
@@ -2831,7 +2832,7 @@ msgstr ""
msgid "Incoming Firewall Access:"
msgstr ""
-#: html/cgi-bin/fwhosts.cgi
+#: html/cgi-bin/fwhosts.cgi html/cgi-bin/wlanap.cgi
msgid "Invalid Country Code"
msgstr ""
@@ -10297,6 +10298,10 @@ msgstr ""
msgid "2.4 GHz"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "320 MHz channels are only available in the 6 GHz band"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "5 GHz"
msgstr ""
@@ -10343,6 +10348,10 @@ msgstr ""
msgid "Enforced"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "Enhanced Open (OWE)"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "Features"
msgstr ""
@@ -10375,6 +10384,10 @@ msgstr ""
msgid "IEEE 802.11ac @ 80 MHz"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "IEEE 802.11ac is not available in the 2.4 GHz band"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "IEEE 802.11an/gn"
msgstr ""
@@ -10439,10 +10452,35 @@ msgstr ""
msgid "Invalid Band"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Channel"
+msgstr "Niepoprawna nazwa hosta."
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Encryption"
+msgstr "Szyfrowanie"
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Interface"
+msgstr "Niepoprawna wartość"
+
#: html/cgi-bin/wlanap.cgi
msgid "Invalid Mode"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid SSID"
+msgstr "Niepoprawna wartość"
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Tx Power"
+msgstr "Nieprawidłowy port proxy"
+
#: html/cgi-bin/wlanap.cgi
msgid "Invalid length in WPA passphrase. Must be between 8 and 63 characters."
msgstr ""
@@ -10460,6 +10498,10 @@ msgstr ""
msgid "Not Authorized"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "OWE requires Management Frame Protection to be enforced"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "Pre-Shared Key"
msgstr ""
@@ -10489,6 +10531,18 @@ msgstr ""
msgid "Signal"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "The 2.4 GHz band only supports channels of up to 40 MHz"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "The 6 GHz band requires IEEE 802.11ax or newer"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "The 6 GHz band requires WPA3 or OWE"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi src/squid-accounting/accounting.cgi
msgid "Traffic"
msgstr ""
@@ -10497,6 +10551,14 @@ msgstr ""
msgid "Tx Power"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "WPA2+3 requires Management Frame Protection to be enabled"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "WPA3 requires Management Frame Protection to be enforced"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "Warning: Disabling the scan may violate regulatory rules"
msgstr ""
diff --git a/po/ru.po b/po/ru.po
index c87deebc96..f9d6bfd0ea 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: IPFire\n"
"Report-Msgid-Bugs-To: https://bugzilla.ipfire.org/\n"
-"POT-Creation-Date: 2026-10-24 15:28+0000\n"
+"POT-Creation-Date: 2026-10-29 17:55+0000\n"
"Language-Team: Russian\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
@@ -925,8 +925,8 @@ msgstr "External IP alias removed"
msgid "Interface:"
msgstr "Интерфейс:"
-#: html/cgi-bin/aliases.cgi html/cgi-bin/hosts.cgi html/cgi-bin/pppsetup.cgi
-#: html/cgi-bin/wio.cgi
+#: html/cgi-bin/aliases.cgi html/cgi-bin/dhcp.cgi html/cgi-bin/hosts.cgi
+#: html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
msgid "Invalid hostname."
msgstr "Неверный имя хоста."
@@ -1430,6 +1430,7 @@ msgid "Days:"
msgstr "Дни:"
#: html/cgi-bin/connscheduler.cgi html/cgi-bin/index.cgi
+#: html/cgi-bin/wlanap.cgi
msgid "Disconnect"
msgstr "Отключится"
@@ -1601,8 +1602,8 @@ msgstr "Узнать реальный внешний IP с помощью вне
msgid "Hostname not set."
msgstr "Hostname not set."
-#: html/cgi-bin/ddns.cgi html/cgi-bin/hosts.cgi html/cgi-bin/index.cgi
-#: html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
+#: html/cgi-bin/ddns.cgi html/cgi-bin/dhcp.cgi html/cgi-bin/hosts.cgi
+#: html/cgi-bin/index.cgi html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
msgid "Hostname:"
msgstr "Имя Хоста:"
@@ -2828,7 +2829,7 @@ msgstr ""
msgid "Incoming Firewall Access:"
msgstr ""
-#: html/cgi-bin/fwhosts.cgi
+#: html/cgi-bin/fwhosts.cgi html/cgi-bin/wlanap.cgi
msgid "Invalid Country Code"
msgstr ""
@@ -10288,6 +10289,10 @@ msgstr ""
msgid "2.4 GHz"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "320 MHz channels are only available in the 6 GHz band"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "5 GHz"
msgstr ""
@@ -10334,6 +10339,10 @@ msgstr ""
msgid "Enforced"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "Enhanced Open (OWE)"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "Features"
msgstr ""
@@ -10366,6 +10375,10 @@ msgstr ""
msgid "IEEE 802.11ac @ 80 MHz"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "IEEE 802.11ac is not available in the 2.4 GHz band"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "IEEE 802.11an/gn"
msgstr ""
@@ -10430,10 +10443,35 @@ msgstr ""
msgid "Invalid Band"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Channel"
+msgstr "Неверный имя хоста."
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Encryption"
+msgstr "Encryption"
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Interface"
+msgstr "Неверный ввод"
+
#: html/cgi-bin/wlanap.cgi
msgid "Invalid Mode"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid SSID"
+msgstr "Неверный ввод"
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Tx Power"
+msgstr "Неверный порт proxy"
+
#: html/cgi-bin/wlanap.cgi
msgid "Invalid length in WPA passphrase. Must be between 8 and 63 characters."
msgstr ""
@@ -10451,6 +10489,10 @@ msgstr ""
msgid "Not Authorized"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "OWE requires Management Frame Protection to be enforced"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "Pre-Shared Key"
msgstr ""
@@ -10480,6 +10522,18 @@ msgstr ""
msgid "Signal"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "The 2.4 GHz band only supports channels of up to 40 MHz"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "The 6 GHz band requires IEEE 802.11ax or newer"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "The 6 GHz band requires WPA3 or OWE"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi src/squid-accounting/accounting.cgi
msgid "Traffic"
msgstr ""
@@ -10488,6 +10542,14 @@ msgstr ""
msgid "Tx Power"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "WPA2+3 requires Management Frame Protection to be enabled"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "WPA3 requires Management Frame Protection to be enforced"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "Warning: Disabling the scan may violate regulatory rules"
msgstr ""
diff --git a/po/tr.po b/po/tr.po
index 6dcca21fa9..0de64eff2d 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: IPFire\n"
"Report-Msgid-Bugs-To: https://bugzilla.ipfire.org/\n"
-"POT-Creation-Date: 2026-10-24 15:28+0000\n"
+"POT-Creation-Date: 2026-10-29 17:55+0000\n"
"Language-Team: Turkish\n"
"Language: tr\n"
"MIME-Version: 1.0\n"
@@ -936,8 +936,8 @@ msgstr "Harici IP takma adı kaldırıldı"
msgid "Interface:"
msgstr "Ara birim:"
-#: html/cgi-bin/aliases.cgi html/cgi-bin/hosts.cgi html/cgi-bin/pppsetup.cgi
-#: html/cgi-bin/wio.cgi
+#: html/cgi-bin/aliases.cgi html/cgi-bin/dhcp.cgi html/cgi-bin/hosts.cgi
+#: html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
msgid "Invalid hostname."
msgstr "Geçersiz ana bilgisayar adı."
@@ -1443,6 +1443,7 @@ msgid "Days:"
msgstr "Günler:"
#: html/cgi-bin/connscheduler.cgi html/cgi-bin/index.cgi
+#: html/cgi-bin/wlanap.cgi
msgid "Disconnect"
msgstr "Bağlantıyı kes"
@@ -1614,8 +1615,8 @@ msgstr "Harici sunucunun yardımıyla tahmini gerçek genel IP"
msgid "Hostname not set."
msgstr "Ana bilgisayar adı ayarlanmadı."
-#: html/cgi-bin/ddns.cgi html/cgi-bin/hosts.cgi html/cgi-bin/index.cgi
-#: html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
+#: html/cgi-bin/ddns.cgi html/cgi-bin/dhcp.cgi html/cgi-bin/hosts.cgi
+#: html/cgi-bin/index.cgi html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
msgid "Hostname:"
msgstr "Ana bilgisayar adı:"
@@ -2856,7 +2857,7 @@ msgstr "IPsec ağ"
msgid "Incoming Firewall Access:"
msgstr "Gelen güvenlik duvarı bağlantısı:"
-#: html/cgi-bin/fwhosts.cgi
+#: html/cgi-bin/fwhosts.cgi html/cgi-bin/wlanap.cgi
msgid "Invalid Country Code"
msgstr ""
@@ -10373,6 +10374,10 @@ msgstr ""
msgid "2.4 GHz"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "320 MHz channels are only available in the 6 GHz band"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "5 GHz"
msgstr ""
@@ -10420,6 +10425,10 @@ msgstr "Ülke Kodu"
msgid "Enforced"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "Enhanced Open (OWE)"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "Features"
msgstr ""
@@ -10452,6 +10461,10 @@ msgstr ""
msgid "IEEE 802.11ac @ 80 MHz"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "IEEE 802.11ac is not available in the 2.4 GHz band"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "IEEE 802.11an/gn"
msgstr ""
@@ -10516,10 +10529,35 @@ msgstr ""
msgid "Invalid Band"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Channel"
+msgstr "Geçersiz alan"
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Encryption"
+msgstr "Şifreleme"
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Interface"
+msgstr "Geçersiz giriş"
+
#: html/cgi-bin/wlanap.cgi
msgid "Invalid Mode"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid SSID"
+msgstr "Geçersiz giriş"
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Tx Power"
+msgstr "Geçersiz vekil sunucu bağlantı noktası"
+
#: html/cgi-bin/wlanap.cgi
msgid "Invalid length in WPA passphrase. Must be between 8 and 63 characters."
msgstr ""
@@ -10538,6 +10576,10 @@ msgstr ""
msgid "Not Authorized"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "OWE requires Management Frame Protection to be enforced"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "Pre-Shared Key"
msgstr "Önceden paylaşılan anahtar"
@@ -10568,6 +10610,18 @@ msgstr ""
msgid "Signal"
msgstr "Sinyal kalitesi"
+#: html/cgi-bin/wlanap.cgi
+msgid "The 2.4 GHz band only supports channels of up to 40 MHz"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "The 6 GHz band requires IEEE 802.11ax or newer"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "The 6 GHz band requires WPA3 or OWE"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi src/squid-accounting/accounting.cgi
msgid "Traffic"
msgstr "Trafik"
@@ -10576,6 +10630,14 @@ msgstr "Trafik"
msgid "Tx Power"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "WPA2+3 requires Management Frame Protection to be enabled"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "WPA3 requires Management Frame Protection to be enforced"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "Warning: Disabling the scan may violate regulatory rules"
msgstr ""
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 0c5684a656..6505f4a06b 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: IPFire\n"
"Report-Msgid-Bugs-To: https://bugzilla.ipfire.org/\n"
-"POT-Creation-Date: 2026-10-24 15:28+0000\n"
+"POT-Creation-Date: 2026-10-29 17:55+0000\n"
"Language-Team: Chinese (Simplified)\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
@@ -925,8 +925,8 @@ msgstr "外部IP别名已删除"
msgid "Interface:"
msgstr "接口:"
-#: html/cgi-bin/aliases.cgi html/cgi-bin/hosts.cgi html/cgi-bin/pppsetup.cgi
-#: html/cgi-bin/wio.cgi
+#: html/cgi-bin/aliases.cgi html/cgi-bin/dhcp.cgi html/cgi-bin/hosts.cgi
+#: html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
msgid "Invalid hostname."
msgstr "无效主机。"
@@ -1428,6 +1428,7 @@ msgid "Days:"
msgstr "日:"
#: html/cgi-bin/connscheduler.cgi html/cgi-bin/index.cgi
+#: html/cgi-bin/wlanap.cgi
msgid "Disconnect"
msgstr "断开连接"
@@ -1598,8 +1599,8 @@ msgstr "借助外部服务器猜测真实的公共IP"
msgid "Hostname not set."
msgstr "未设置主机名。"
-#: html/cgi-bin/ddns.cgi html/cgi-bin/hosts.cgi html/cgi-bin/index.cgi
-#: html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
+#: html/cgi-bin/ddns.cgi html/cgi-bin/dhcp.cgi html/cgi-bin/hosts.cgi
+#: html/cgi-bin/index.cgi html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
msgid "Hostname:"
msgstr "主机名:"
@@ -2827,7 +2828,7 @@ msgstr "IPsec网络"
msgid "Incoming Firewall Access:"
msgstr "入站防火墙访问:"
-#: html/cgi-bin/fwhosts.cgi
+#: html/cgi-bin/fwhosts.cgi html/cgi-bin/wlanap.cgi
msgid "Invalid Country Code"
msgstr ""
@@ -10250,6 +10251,10 @@ msgstr ""
msgid "2.4 GHz"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "320 MHz channels are only available in the 6 GHz band"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "5 GHz"
msgstr ""
@@ -10297,6 +10302,10 @@ msgstr "国家代码"
msgid "Enforced"
msgstr "启用"
+#: html/cgi-bin/wlanap.cgi
+msgid "Enhanced Open (OWE)"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "Features"
msgstr ""
@@ -10329,6 +10338,10 @@ msgstr ""
msgid "IEEE 802.11ac @ 80 MHz"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "IEEE 802.11ac is not available in the 2.4 GHz band"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "IEEE 802.11an/gn"
msgstr ""
@@ -10393,10 +10406,35 @@ msgstr ""
msgid "Invalid Band"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Channel"
+msgstr "无效字段"
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Encryption"
+msgstr "端点无效"
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Interface"
+msgstr "输入无效"
+
#: html/cgi-bin/wlanap.cgi
msgid "Invalid Mode"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid SSID"
+msgstr "输入无效"
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Tx Power"
+msgstr "无效的代理端口"
+
#: html/cgi-bin/wlanap.cgi
msgid "Invalid length in WPA passphrase. Must be between 8 and 63 characters."
msgstr "WPA密码中的长度无效。 必须介于8到63个字符之间。"
@@ -10414,6 +10452,11 @@ msgstr ""
msgid "Not Authorized"
msgstr "未挂载"
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "OWE requires Management Frame Protection to be enforced"
+msgstr "管理帧保护"
+
#: html/cgi-bin/wlanap.cgi
msgid "Pre-Shared Key"
msgstr "预共享密钥"
@@ -10444,6 +10487,18 @@ msgstr ""
msgid "Signal"
msgstr "信号品质"
+#: html/cgi-bin/wlanap.cgi
+msgid "The 2.4 GHz band only supports channels of up to 40 MHz"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "The 6 GHz band requires IEEE 802.11ax or newer"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "The 6 GHz band requires WPA3 or OWE"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi src/squid-accounting/accounting.cgi
msgid "Traffic"
msgstr ""
@@ -10452,6 +10507,16 @@ msgstr ""
msgid "Tx Power"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "WPA2+3 requires Management Frame Protection to be enabled"
+msgstr "管理帧保护"
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "WPA3 requires Management Frame Protection to be enforced"
+msgstr "管理帧保护"
+
#: html/cgi-bin/wlanap.cgi
msgid "Warning: Disabling the scan may violate regulatory rules"
msgstr ""
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 0db3f90491..7b75844b40 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: IPFire\n"
"Report-Msgid-Bugs-To: https://bugzilla.ipfire.org/\n"
-"POT-Creation-Date: 2026-10-24 15:28+0000\n"
+"POT-Creation-Date: 2026-10-29 17:55+0000\n"
"Language-Team: Chinese (Traditional)\n"
"Language: zh_TW\n"
"MIME-Version: 1.0\n"
@@ -925,8 +925,8 @@ msgstr "外部IP別名已刪除"
msgid "Interface:"
msgstr "接口:"
-#: html/cgi-bin/aliases.cgi html/cgi-bin/hosts.cgi html/cgi-bin/pppsetup.cgi
-#: html/cgi-bin/wio.cgi
+#: html/cgi-bin/aliases.cgi html/cgi-bin/dhcp.cgi html/cgi-bin/hosts.cgi
+#: html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
msgid "Invalid hostname."
msgstr "無效主機。"
@@ -1428,6 +1428,7 @@ msgid "Days:"
msgstr "日:"
#: html/cgi-bin/connscheduler.cgi html/cgi-bin/index.cgi
+#: html/cgi-bin/wlanap.cgi
msgid "Disconnect"
msgstr "斷開連接"
@@ -1598,8 +1599,8 @@ msgstr "藉助外部伺服器猜測真實的公共IP"
msgid "Hostname not set."
msgstr "未設置主機名。"
-#: html/cgi-bin/ddns.cgi html/cgi-bin/hosts.cgi html/cgi-bin/index.cgi
-#: html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
+#: html/cgi-bin/ddns.cgi html/cgi-bin/dhcp.cgi html/cgi-bin/hosts.cgi
+#: html/cgi-bin/index.cgi html/cgi-bin/pppsetup.cgi html/cgi-bin/wio.cgi
msgid "Hostname:"
msgstr "主機名:"
@@ -2827,7 +2828,7 @@ msgstr "IPsec網絡"
msgid "Incoming Firewall Access:"
msgstr "入站防火牆訪問:"
-#: html/cgi-bin/fwhosts.cgi
+#: html/cgi-bin/fwhosts.cgi html/cgi-bin/wlanap.cgi
msgid "Invalid Country Code"
msgstr ""
@@ -10250,6 +10251,10 @@ msgstr ""
msgid "2.4 GHz"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "320 MHz channels are only available in the 6 GHz band"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "5 GHz"
msgstr ""
@@ -10297,6 +10302,10 @@ msgstr "國家代碼"
msgid "Enforced"
msgstr "啟用"
+#: html/cgi-bin/wlanap.cgi
+msgid "Enhanced Open (OWE)"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "Features"
msgstr ""
@@ -10329,6 +10338,10 @@ msgstr ""
msgid "IEEE 802.11ac @ 80 MHz"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+msgid "IEEE 802.11ac is not available in the 2.4 GHz band"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi
msgid "IEEE 802.11an/gn"
msgstr ""
@@ -10393,10 +10406,35 @@ msgstr ""
msgid "Invalid Band"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Channel"
+msgstr "無效欄位"
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Encryption"
+msgstr "端點無效"
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Interface"
+msgstr "輸入無效"
+
#: html/cgi-bin/wlanap.cgi
msgid "Invalid Mode"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid SSID"
+msgstr "輸入無效"
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "Invalid Tx Power"
+msgstr "無效的代理埠"
+
#: html/cgi-bin/wlanap.cgi
msgid "Invalid length in WPA passphrase. Must be between 8 and 63 characters."
msgstr "WPA密碼中的長度無效。 必須介於8到63個字符之間。"
@@ -10414,6 +10452,11 @@ msgstr ""
msgid "Not Authorized"
msgstr "未掛載"
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "OWE requires Management Frame Protection to be enforced"
+msgstr "管理幀保護"
+
#: html/cgi-bin/wlanap.cgi
msgid "Pre-Shared Key"
msgstr "預共享密鑰"
@@ -10444,6 +10487,18 @@ msgstr ""
msgid "Signal"
msgstr "信號品質"
+#: html/cgi-bin/wlanap.cgi
+msgid "The 2.4 GHz band only supports channels of up to 40 MHz"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "The 6 GHz band requires IEEE 802.11ax or newer"
+msgstr ""
+
+#: html/cgi-bin/wlanap.cgi
+msgid "The 6 GHz band requires WPA3 or OWE"
+msgstr ""
+
#: html/cgi-bin/wlanap.cgi src/squid-accounting/accounting.cgi
msgid "Traffic"
msgstr ""
@@ -10452,6 +10507,16 @@ msgstr ""
msgid "Tx Power"
msgstr ""
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "WPA2+3 requires Management Frame Protection to be enabled"
+msgstr "管理幀保護"
+
+#: html/cgi-bin/wlanap.cgi
+#, fuzzy
+msgid "WPA3 requires Management Frame Protection to be enforced"
+msgstr "管理幀保護"
+
#: html/cgi-bin/wlanap.cgi
msgid "Warning: Disabling the scan may violate regulatory rules"
msgstr ""
diff --git a/src/initscripts/packages/hostapd b/src/initscripts/packages/hostapd
index 3d6ea4f698..16d4e16574 100644
--- a/src/initscripts/packages/hostapd
+++ b/src/initscripts/packages/hostapd
@@ -74,30 +74,6 @@ declare -A VHT_CAPS=(
[0x20000000]="[TX-ANTENNA-PATTERN]"
)
-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}"
@@ -121,43 +97,84 @@ write_config() {
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 channel_offset
+ local ht_caps=()
+ local vht_caps=()
+ local he_caps=()
+ local eht_caps=()
+
# Set some default BAND if none is set
if [ -z "${CONFIG["BAND"]}" ]; then
# Use 2.4 GHz for 802.11g/n and assume 5 GHz for anything else
case "${CONFIG["HW_MODE"]}" in
gn)
- BAND="2g"
+ CONFIG["BAND"]="2g"
;;
*)
- BAND="5g"
+ CONFIG["BAND"]="5g"
;;
esac
fi
# Fetch PHY information
+ local section
local line
while read -r line; do
case "${line}" in
- "EHT MAC Capabilities"*)
- eht_mac_flags="${line:22:6}"
+ # Forget anything that we have found for a previous band
+ "Band "*)
+ ht_flags=0
+ vht_flags=0
+ he_caps=()
+ eht_caps=()
+ section=
;;
- "EHT PHY Capabilities"*)
- eht_phy_flags="${line:23:18}"
- ;;
- "HE MAC Capabilities"*)
- he_mac_flags="${line:21:14}"
+
+ # The HE/EHT capabilities are listed for each interface type,
+ # but we are only interested in those for the access point.
+ # iw prints them in a byte order that does not fit into a
+ # shell integer, so we use the decoded names instead.
+ "HE Iftypes: "*|"EHT Iftypes: "*)
+ section=
+
+ if [[ "${line}" =~ [:,]\ AP(,|$) ]]; then
+ section="${line%% *}"
+ fi
;;
- "HE PHY Capabilities"*)
- he_phy_flags="${line:22:24}"
+
+ "SU Beamformer"|"SU Beamformee"|"MU Beamformer")
+ case "${section}" in
+ HE)
+ case "${line}" in
+ "SU Beamformer")
+ he_caps+=( "he_su_beamformer=1" )
+ ;;
+ "SU Beamformee")
+ he_caps+=( "he_su_beamformee=1" )
+ ;;
+ "MU Beamformer")
+ he_caps+=( "he_mu_beamformer=1" )
+ ;;
+ esac
+ ;;
+
+ EHT)
+ case "${line}" in
+ "SU Beamformer")
+ eht_caps+=( "eht_su_beamformer=1" )
+ ;;
+ "SU Beamformee")
+ eht_caps+=( "eht_su_beamformee=1" )
+ ;;
+ esac
+ ;;
+ esac
;;
+
"VHT Capabilities"*)
vht_flags="${line:18:10}"
+ section=
;;
"Capabilities: "*)
ht_flags="${line:14}"
@@ -184,11 +201,6 @@ write_config() {
esac
done <<<"$(iw phy "${phy}" info)"
- local ht_caps=()
- local vht_caps=()
- local he_caps=()
- local eht_caps=()
-
# Clear [HT40+][HT40-]
ht_flags="$(( ht_flags & ~0x0002 ))"
@@ -249,7 +261,7 @@ write_config() {
esac
# RX Spacial Streams
- case "$(( (${vht_flags} >> 8) & 0x03 ))" in
+ case "$(( (${vht_flags} >> 8) & 0x07 ))" in
1)
vht_caps+=( "[RX-STBC-1]" )
;;
@@ -264,34 +276,39 @@ write_config() {
;;
esac
- # Compressed Steering
- case "$(( ((${vht_flags} >> 13) & 0x03) + 1 ))" in
+ # Compressed Steering (hostapd cannot advertise more than four antennas)
+ case "$(( ((${vht_flags} >> 13) & 0x07) + 1 ))" in
+ 1)
+ ;;
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
+ # Sounding Dimension (hostapd cannot advertise more than four)
+ case "$(( ((${vht_flags} >> 16) & 0x07) + 1 ))" in
+ 1)
+ ;;
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
+ # Max A-MPDU Length Exponent
+ local exponent="$(( (${vht_flags} >> 23) & 0x07 ))"
+ if [ "${exponent}" -gt 0 ]; then
vht_caps+=( "[MAX-A-MPDU-LEN-EXP${exponent}]" )
fi
@@ -305,22 +322,8 @@ write_config() {
;;
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 "${CONFIG["CHANNEL"]}" ]; then
+ # Set the channel to zero if not set (or invalid)
+ if ! [[ "${CONFIG["CHANNEL"]}" =~ ^[0-9]+$ ]]; then
CONFIG["CHANNEL"]=0
fi
@@ -646,8 +649,8 @@ write_config() {
fi
# The antenna patterns don't change
- he_6ghz_rx_ant_pat=1
- he_6ghz_tx_ant_pat=1
+ echo "he_6ghz_rx_ant_pat=1"
+ echo "he_6ghz_tx_ant_pat=1"
fi
# Enable 802.11ac?
@@ -717,6 +720,25 @@ write_config() {
echo "noscan=0"
fi
+ # WPA1 is no longer supported, fall back to WPA2
+ case "${CONFIG["ENC"]}" in
+ wpa1|wpa1+2)
+ CONFIG["ENC"]="wpa2"
+ ;;
+ esac
+
+ # WPA3 and OWE require Management Frame Protection
+ case "${CONFIG["ENC"]}" in
+ wpa3|owe)
+ CONFIG["IEEE80211W"]="on"
+ ;;
+ wpa2+3)
+ if [ "${CONFIG["IEEE80211W"]}" != "on" ]; then
+ CONFIG["IEEE80211W"]="optional"
+ fi
+ ;;
+ esac
+
# Management Frame Protection (802.11w)
case "${CONFIG["IEEE80211W"]}" in
on)
@@ -745,17 +767,31 @@ write_config() {
# Encryption
case "${CONFIG["ENC"]}" in
+ owe)
+ echo "wpa=2"
+ echo "wpa_key_mgmt=OWE"
+ echo "rsn_pairwise=CCMP"
+ ;;
wpa3)
echo "wpa=2"
echo "wpa_passphrase=${CONFIG["PWD"]}"
echo "wpa_key_mgmt=SAE"
echo "rsn_pairwise=CCMP"
+
+ # Support both, Hash-to-Element and Hunting-and-Pecking
+ echo "sae_pwe=2"
;;
wpa2+3)
echo "wpa=2"
echo "wpa_passphrase=${CONFIG["PWD"]}"
echo "wpa_key_mgmt=WPA-PSK WPA-PSK-SHA256 SAE"
echo "rsn_pairwise=CCMP"
+
+ # Support both, Hash-to-Element and Hunting-and-Pecking
+ echo "sae_pwe=2"
+
+ # Require MFP for WPA3 clients, even if it is optional for WPA2
+ echo "sae_require_mfp=1"
;;
wpa2)
echo "wpa=2"
@@ -763,19 +799,6 @@ write_config() {
echo "wpa_key_mgmt=WPA-PSK WPA-PSK-SHA256"
echo "rsn_pairwise=CCMP"
;;
- wpa1+2)
- echo "wpa=3"
- echo "wpa_passphrase=${CONFIG["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=${CONFIG["PWD"]}"
- echo "wpa_key_mgmt=WPA-PSK WPA-PSK-SHA256"
- echo "wpa_pairwise=TKIP"
- ;;
esac
# Multi-Band Operation - prefer WiFi over mobile networks
@@ -793,8 +816,8 @@ write_config() {
# Extended Key ID support for Individually Addressed frames
echo "extended_key_id=1"
- # Fully enable Optimized Connectivity Experience
- echo "oce=7"
+ # Enable Optimized Connectivity Experience in AP mode
+ echo "oce=4"
# Enable 802.11u Interworking Support
echo "interworking=1"
@@ -856,6 +879,13 @@ case "${1}" in
boot_mesg "Starting hostapd... "
loadproc "${args[@]}"
+
+ # Limit the transmit power (the regulatory limit always applies)
+ if [[ "${CONFIG["TXPOWER"]}" =~ ^[0-9]+$ ]]; then
+ iw dev "${interface}" set txpower limit "$(( CONFIG["TXPOWER"] * 100 ))" &>/dev/null
+ else
+ iw dev "${interface}" set txpower auto &>/dev/null
+ fi
;;
stop)
diff --git a/src/misc-progs/wlanapctrl.c b/src/misc-progs/wlanapctrl.c
index d0ece2e262..2cfbdfb1ae 100644
--- a/src/misc-progs/wlanapctrl.c
+++ b/src/misc-progs/wlanapctrl.c
@@ -4,8 +4,25 @@
#include <stdlib.h>
#include <sys/types.h>
#include <fcntl.h>
+#include <ctype.h>
#include "setuid.h"
+static int is_valid_address(const char* address) {
+ if (strlen(address) != 17)
+ return 0;
+
+ for (int i = 0; i < 17; i++) {
+ if (i % 3 == 2) {
+ if (address[i] != ':')
+ return 0;
+ } else if (!isxdigit(address[i])) {
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
int main(int argc, char *argv[]){
if ( argc < 2 ){
printf("invalid parameter(s)\n");
@@ -16,15 +33,23 @@ int main(int argc, char *argv[]){
exit(1);
if (strcmp(argv[1], "start") == 0){
- safe_system("cp /var/ipfire/wlanap/hostapd.* /etc/");
safe_system("/etc/init.d/hostapd start");
}else if (strcmp(argv[1], "stop") == 0){
safe_system("/etc/init.d/hostapd stop");
}else if (strcmp(argv[1], "restart") == 0){
- safe_system("cp /var/ipfire/wlanap/hostapd.* /etc/");
safe_system("/etc/init.d/hostapd restart");
}else if (strcmp(argv[1], "status") == 0){
safe_system("/etc/init.d/hostapd status");
+ }else if (strcmp(argv[1], "disconnect") == 0){
+ if (argc != 3 || !is_valid_address(argv[2])) {
+ printf("invalid address\n");
+ return(1);
+ }
+
+ // Deauthenticate the client so that it has to connect again
+ char* args[] = { "-p", "/var/run/hostapd", "deauthenticate", argv[2], NULL };
+
+ return run("/usr/bin/hostapd_cli", args);
}else{
printf("invalid parameter(s)\n");
return(1);
diff --git a/src/paks/hostapd/install.sh b/src/paks/hostapd/install.sh
index 2dae5364ee..eaf3d32fc6 100644
--- a/src/paks/hostapd/install.sh
+++ b/src/paks/hostapd/install.sh
@@ -25,6 +25,13 @@
extract_files
restore_backup ${NAME}
+# Remove files that are no longer used (and might have been restored)
+rm -f /etc/hostapd.accept /etc/hostapd.deny \
+ /var/ipfire/wlanap/hostapd.conf \
+ /var/ipfire/wlanap/hostapd.accept \
+ /var/ipfire/wlanap/hostapd.deny \
+ /var/ipfire/wlanap/macfile
+
# Convert INTERFACE setting to MAC address
(
eval $(/usr/local/bin/readhash /var/ipfire/wlanap/settings)
diff --git a/src/paks/hostapd/uninstall.sh b/src/paks/hostapd/uninstall.sh
index 6c421b35aa..58c4541e13 100644
--- a/src/paks/hostapd/uninstall.sh
+++ b/src/paks/hostapd/uninstall.sh
@@ -26,3 +26,6 @@ stop_service ${NAME}
make_backup ${NAME}
rm -rf /etc/rc.d/rc*.d/*hostapd
remove_files
+
+# Remove the generated configuration
+rm -f /etc/hostapd.conf
hooks/post-receive
--
IPFire 2.x development tree
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2026-10-29 18:02 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-29 18:02 [git.ipfire.org] IPFire 2.x development tree branch, next, updated. 884303944bdba5030b2efedb455d0f64f0cf882e Michael Tremer
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox