From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.haj.ipfire.org (localhost [IPv6:::1]) by mail02.haj.ipfire.org (Postfix) with ESMTP id 4jFsWL3vQZz2xWP for ; Thu, 29 Oct 2026 18:02:06 +0000 (UTC) Received: from mail01.ipfire.org (mail01.haj.ipfire.org [IPv6:2001:678:b28::25]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (secp384r1 raw public key) server-digest SHA384 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mail01.haj.ipfire.org", Issuer "YR1" (not verified)) by mail02.haj.ipfire.org (Postfix) with ESMTPS id 4jFsWK3QVHz2xNx for ; Thu, 29 Oct 2026 18:02:05 +0000 (UTC) Received: from people01.haj.ipfire.org (people01.haj.ipfire.org [172.28.1.161]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bit raw public key) server-digest SHA256 client-signature ECDSA (secp384r1) client-digest SHA384) (Client CN "people01.haj.ipfire.org", Issuer "YE1" (not verified)) by mail01.ipfire.org (Postfix) with ESMTPS id 4jFsWG4t4Mz47F for ; Thu, 29 Oct 2026 18:02:02 +0000 (UTC) DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=ipfire.org; s=202003ed25519; t=1793296922; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc; bh=7DxT0lQWws19abGVYQWiShxs5jPf6/VYmYCoIQ8a9Ug=; b=F3jq5KDdudpvUlxSzoayvJDVd9buGqeNdOUZUJ7zvaFORdt006A1IEs1UjD642nyYQPRtK 9OmZsa2fj8mwErCA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ipfire.org; s=202003rsa; t=1793296922; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc; bh=7DxT0lQWws19abGVYQWiShxs5jPf6/VYmYCoIQ8a9Ug=; b=ghkQ5ybUxSQZ8U3o2Pknb+K24eZrWq+MKLAYEOe0VS/ct+LSOsMXbfIFzWN1n+/ZZUtEs+ WtdiUvsDd/ANxHBCS6iFWIY/xkUs62SbK8eDOSDPSDoxenkccuBo/b6dyItE3G91RGmmMP fZ774hAT0s+FoK2C89nb681O38dS2Q9nGtF/8uy4zrLaTi57hNGoosCmQxJ2Q/ohhRsL6G Ozj/993/StEYiYq+Za0ENH82EZHG7oBZS+WPwE1TjYQo9JW/YN9EOGI/ZyGjMdNfUJ+uPj FMthbFi4uQJKBVbJQAwQ27yBS7MTWaVuOzopVI2ynMJqjYjP8ouq+9grWzQrxA== Received: by people01.haj.ipfire.org (Postfix, from userid 1000) id 4jFsWF5FJXz2xVw; Thu, 29 Oct 2026 18:02:01 +0000 (UTC) To: ipfire-scm@lists.ipfire.org Subject: [git.ipfire.org] IPFire 2.x development tree branch, next, updated. 884303944bdba5030b2efedb455d0f64f0cf882e X-Git-Refname: refs/heads/next X-Git-Reftype: branch X-Git-Oldrev: d2b105cfc992bc29c7656873a108c22342a8dd26 X-Git-Newrev: 884303944bdba5030b2efedb455d0f64f0cf882e Message-Id: <4jFsWF5FJXz2xVw@people01.haj.ipfire.org> Date: Thu, 29 Oct 2026 18:02:01 +0000 (UTC) From: Michael Tremer Precedence: list List-Id: List-Subscribe: , List-Unsubscribe: , List-Post: List-Help: Sender: Mail-Followup-To: 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 Date: Thu Oct 29 18:01:22 2026 +0000 Merge branch 'hostapd-fixes' into next commit c09ea7888433f9577bb8b94b26dbe5ab9d4e4efd Author: Michael Tremer Date: Thu Oct 29 17:56:25 2026 +0000 po: Update German translation Signed-off-by: Michael Tremer commit 5c2664c3da3be13d3771d3d71343c85c60506c6b Author: Michael Tremer Date: Thu Oct 29 17:56:00 2026 +0000 po: Update from sources Signed-off-by: Michael Tremer commit 2dc199cb00afafa107fede29c98a437150272a1d Author: Michael Tremer 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 commit 1288367f32915c6184f795ea91b9b49862576e1e Author: Michael Tremer 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 commit 3d0d96bc8689cc46b4a731ec29bb875866a4d0d5 Author: Michael Tremer Date: Thu Oct 29 17:31:10 2026 +0000 wlanap.cgi: Allow to disconnect clients Fixes: #14735 Signed-off-by: Michael Tremer commit e9a4ef71447bae3e8480aac59461fa7e3476bcb0 Author: Michael Tremer 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 commit 2caaa2f4301e1e910ecee866d6cedcb2861daf6a Author: Michael Tremer 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 commit 31d7a127fde52078eb4ea949b1ebd37f56a2c682 Author: Michael Tremer 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 commit e9cf0b6b4e42c49862709f69f66c33a56e8d366a Author: Michael Tremer 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 commit 8cc2267e0de4a66003a54ef278554693aefae355 Author: Michael Tremer 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 commit 1f41d52be4dd67beab452af0fdd648c2d80e6375 Author: Michael Tremer 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 commit 929483c9b79ceb2cf85b600b2edfb6cbf78ff695 Author: Michael Tremer 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 commit e624817b7c5fd27e378cbcf20ce4dbc468ec3e67 Author: Michael Tremer 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 commit 5c6f2f086e389a41abbebcea5f30f9f8791925d0 Author: Michael Tremer 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 commit 3b754012092921a041c6ad0e871b6a6232d913f0 Author: Michael Tremer 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 ----------------------------------------------------------------------- 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.') ]}
"; } + } - # only ASCII alowed - if (!($cgiparams{'PWD'} !~ /[^\x00-\x7f]/)) { - $errormessage .= "@{[ _('Invalid length in WPA passphrase. Must be between 8 and 63 characters.') ]}
"; - } + # 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.') ]}
"; } # Validate BAND @@ -135,7 +143,72 @@ if ($cgiparams{'ACTION'} eq _('Save')) { $errormessage .= "@{[ _('Invalid Mode') ]}
"; } - # XXX This needs validation + # Validate INTERFACE + unless ($cgiparams{'INTERFACE'} =~ m/^[0-9a-f]{2}(:[0-9a-f]{2}){5}$/) { + $errormessage .= "@{[ _('Invalid Interface') ]}
"; + } + + # 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') ]}
"; + } + + # Validate COUNTRY + unless ($cgiparams{'COUNTRY'} =~ m/^[A-Z0-9]{2}$/) { + $errormessage .= "@{[ _('Invalid Country Code') ]}
"; + } + + # Validate CHANNEL + unless ($cgiparams{'CHANNEL'} =~ m/^\d{1,3}$/) { + $errormessage .= "@{[ _('Invalid Channel') ]}
"; + } + + # 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') ]}
"; + } + + # Validate ENC + unless ($cgiparams{'ENC'} =~ m/^(none|owe|wpa2|wpa3|wpa2\+3)$/) { + $errormessage .= "@{[ _('Invalid Encryption') ]}
"; + } + + # 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') ]}
"; + } elsif ($cgiparams{'ENC'} eq "owe" && $cgiparams{'IEEE80211W'} ne "on") { + $errormessage .= "@{[ _('OWE requires Management Frame Protection to be enforced') ]}
"; + } elsif ($cgiparams{'ENC'} eq "wpa2+3" && $cgiparams{'IEEE80211W'} ne "on" && $cgiparams{'IEEE80211W'} ne "optional") { + $errormessage .= "@{[ _('WPA2+3 requires Management Frame Protection to be enabled') ]}
"; + } + + # 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') ]}
"; + } + + # 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') ]}
"; + } + } elsif ($cgiparams{'BAND'} eq "5g") { + if ($cgiparams{'MODE'} eq "EHT320") { + $errormessage .= "@{[ _('320 MHz channels are only available in the 6 GHz band') ]}
"; + } + } elsif ($cgiparams{'BAND'} eq "2g") { + if ($cgiparams{'MODE'} =~ m/^VHT/) { + $errormessage .= "@{[ _('IEEE 802.11ac is not available in the 2.4 GHz band') ]}
"; + } elsif ($cgiparams{'MODE'} =~ m/(80|160|320)$/) { + $errormessage .= "@{[ _('The 2.4 GHz band only supports channels of up to 40 MHz') ]}
"; + } + } + $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 < @@ -467,9 +547,10 @@ print < - Tx Power + @{[ _('Tx Power') ]} - + + dBm @@ -563,6 +644,7 @@ END @{[ _('Connected') ]} @{[ _('Features') ]} + END @@ -656,6 +738,12 @@ END $connected @features $graph + +
+ + +
+ 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 \n" "Language-Team: LANGUAGE \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 #include #include +#include #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