From patchwork Mon Jan 19 16:21:36 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Tremer X-Patchwork-Id: 9405 Return-Path: Received: from mail01.ipfire.org (mail01.haj.ipfire.org [172.28.1.202]) (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 "R12" (verified OK)) by web04.haj.ipfire.org (Postfix) with ESMTPS id 4dvwhK2MKSz3wjW for ; Mon, 19 Jan 2026 16:21:53 +0000 (UTC) Received: from mail02.haj.ipfire.org (mail02.haj.ipfire.org [172.28.1.201]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (Client CN "mail02.haj.ipfire.org", Issuer "E8" (verified OK)) by mail01.ipfire.org (Postfix) with ESMTPS id 4dvwhJ5MDfz44c for ; Mon, 19 Jan 2026 16:21:52 +0000 (UTC) Received: from mail02.haj.ipfire.org (localhost [IPv6:::1]) by mail02.haj.ipfire.org (Postfix) with ESMTP id 4dvwhJ4cVVz32SW for ; Mon, 19 Jan 2026 16:21:52 +0000 (UTC) X-Original-To: development@lists.ipfire.org Received: from mail01.ipfire.org (mail01.haj.ipfire.org [172.28.1.202]) (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 "R12" (verified OK)) by mail02.haj.ipfire.org (Postfix) with ESMTPS id 4dvwhF6gZJz2xHh for ; Mon, 19 Jan 2026 16:21:49 +0000 (UTC) Received: from michael.haj.ipfire.org (michael.haj.ipfire.org [172.28.1.242]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature ECDSA (secp384r1) client-digest SHA384) (Client CN "michael.haj.ipfire.org", Issuer "E8" (verified OK)) by mail01.ipfire.org (Postfix) with ESMTPS id 4dvwhF0v5BzDG; Mon, 19 Jan 2026 16:21:49 +0000 (UTC) Received: by michael.haj.ipfire.org (Postfix, from userid 0) id 4dvwhD3htMzTh9y; Mon, 19 Jan 2026 16:21:48 +0000 (UTC) From: Michael Tremer To: development@lists.ipfire.org Cc: Michael Tremer Subject: [PATCH 1/5] hostapd: Bring back support for 802.11g/a Date: Mon, 19 Jan 2026 16:21:36 +0000 Message-ID: <20260119162140.3373757-1-michael.tremer@ipfire.org> X-Mailer: git-send-email 2.47.3 Precedence: list List-Id: List-Subscribe: , List-Unsubscribe: , List-Post: List-Help: Sender: Mail-Followup-To: MIME-Version: 1.0 I just have a little bit of easily accessible testing hardware in form of USB devices which are very suitable for testing, but the one that I found in my drawer doesn't support 802.11n. Signed-off-by: Michael Tremer Reviewed-by: Bernhard Bitsch --- doc/language_issues.de | 2 ++ doc/language_issues.en | 2 ++ doc/language_issues.es | 2 ++ doc/language_issues.fr | 2 ++ doc/language_issues.it | 2 ++ doc/language_issues.nl | 2 ++ doc/language_issues.pl | 2 ++ doc/language_issues.ru | 2 ++ doc/language_issues.tr | 2 ++ doc/language_issues.tw | 2 ++ doc/language_issues.zh | 2 ++ doc/language_missings | 20 ++++++++++++++++++++ html/cgi-bin/wlanap.cgi | 8 +++++++- langs/en/cgi-bin/en.pl | 2 ++ src/initscripts/packages/hostapd | 15 +++++++++++++-- 15 files changed, 64 insertions(+), 3 deletions(-) diff --git a/doc/language_issues.de b/doc/language_issues.de index 008b9520f..1795ec5af 100644 --- a/doc/language_issues.de +++ b/doc/language_issues.de @@ -1210,6 +1210,8 @@ WARNING: untranslated string: wio_webinterface_link = unknown string WARNING: untranslated string: wireguard = WireGuard WARNING: untranslated string: wlan client encryption wpa3 = WPA3 WARNING: untranslated string: wlan client management frame protection = Management Frame Protection +WARNING: untranslated string: wlanap 802.11ag = IEEE 802.11a/g +WARNING: untranslated string: wlanap 802.11ag 20mhz = IEEE802.11a/g @ 20 MHz WARNING: untranslated string: wlanap 802.11w disabled = Disabled WARNING: untranslated string: wlanap 802.11w enforced = Enforced WARNING: untranslated string: wlanap 802.11w optional = Optional diff --git a/doc/language_issues.en b/doc/language_issues.en index 6ea0f1963..30e2fbcce 100644 --- a/doc/language_issues.en +++ b/doc/language_issues.en @@ -2408,6 +2408,8 @@ WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz +WARNING: untranslated string: wlanap 802.11ag = IEEE 802.11a/g +WARNING: untranslated string: wlanap 802.11ag 20mhz = IEEE802.11a/g @ 20 MHz WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz diff --git a/doc/language_issues.es b/doc/language_issues.es index 48dfffa7e..980d27874 100644 --- a/doc/language_issues.es +++ b/doc/language_issues.es @@ -1250,6 +1250,8 @@ WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz +WARNING: untranslated string: wlanap 802.11ag = IEEE 802.11a/g +WARNING: untranslated string: wlanap 802.11ag 20mhz = IEEE802.11a/g @ 20 MHz WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz diff --git a/doc/language_issues.fr b/doc/language_issues.fr index 65b3838d0..a7c31beaf 100644 --- a/doc/language_issues.fr +++ b/doc/language_issues.fr @@ -1301,6 +1301,8 @@ WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz +WARNING: untranslated string: wlanap 802.11ag = IEEE 802.11a/g +WARNING: untranslated string: wlanap 802.11ag 20mhz = IEEE802.11a/g @ 20 MHz WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz diff --git a/doc/language_issues.it b/doc/language_issues.it index 5214abda2..10e77143f 100644 --- a/doc/language_issues.it +++ b/doc/language_issues.it @@ -1652,6 +1652,8 @@ WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz +WARNING: untranslated string: wlanap 802.11ag = IEEE 802.11a/g +WARNING: untranslated string: wlanap 802.11ag 20mhz = IEEE802.11a/g @ 20 MHz WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz diff --git a/doc/language_issues.nl b/doc/language_issues.nl index d3f814785..5d56a5ca2 100644 --- a/doc/language_issues.nl +++ b/doc/language_issues.nl @@ -1672,6 +1672,8 @@ WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz +WARNING: untranslated string: wlanap 802.11ag = IEEE 802.11a/g +WARNING: untranslated string: wlanap 802.11ag 20mhz = IEEE802.11a/g @ 20 MHz WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz diff --git a/doc/language_issues.pl b/doc/language_issues.pl index 24b5429ef..7a1128c20 100644 --- a/doc/language_issues.pl +++ b/doc/language_issues.pl @@ -1920,6 +1920,8 @@ WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz +WARNING: untranslated string: wlanap 802.11ag = IEEE 802.11a/g +WARNING: untranslated string: wlanap 802.11ag 20mhz = IEEE802.11a/g @ 20 MHz WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz diff --git a/doc/language_issues.ru b/doc/language_issues.ru index 0682bfd6f..b6320fd30 100644 --- a/doc/language_issues.ru +++ b/doc/language_issues.ru @@ -1919,6 +1919,8 @@ WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz +WARNING: untranslated string: wlanap 802.11ag = IEEE 802.11a/g +WARNING: untranslated string: wlanap 802.11ag 20mhz = IEEE802.11a/g @ 20 MHz WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz diff --git a/doc/language_issues.tr b/doc/language_issues.tr index 2ef6920ac..2ad1bf054 100644 --- a/doc/language_issues.tr +++ b/doc/language_issues.tr @@ -1522,6 +1522,8 @@ WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz +WARNING: untranslated string: wlanap 802.11ag = IEEE 802.11a/g +WARNING: untranslated string: wlanap 802.11ag 20mhz = IEEE802.11a/g @ 20 MHz WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz diff --git a/doc/language_issues.tw b/doc/language_issues.tw index 73e116b7c..c676ffa52 100644 --- a/doc/language_issues.tw +++ b/doc/language_issues.tw @@ -1268,6 +1268,8 @@ WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz +WARNING: untranslated string: wlanap 802.11ag = IEEE 802.11a/g +WARNING: untranslated string: wlanap 802.11ag 20mhz = IEEE802.11a/g @ 20 MHz WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz diff --git a/doc/language_issues.zh b/doc/language_issues.zh index 73e116b7c..c676ffa52 100644 --- a/doc/language_issues.zh +++ b/doc/language_issues.zh @@ -1268,6 +1268,8 @@ WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz +WARNING: untranslated string: wlanap 802.11ag = IEEE 802.11a/g +WARNING: untranslated string: wlanap 802.11ag 20mhz = IEEE802.11a/g @ 20 MHz WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz diff --git a/doc/language_missings b/doc/language_missings index 1d435f16f..268add65b 100644 --- a/doc/language_missings +++ b/doc/language_missings @@ -141,6 +141,8 @@ < wg pre-shared key (optional) < winbind daemon < wireguard +< wlanap 802.11ag +< wlanap 802.11ag 20mhz < wlanap 802.11w disabled < wlanap 802.11w enforced < wlanap 802.11w optional @@ -217,6 +219,8 @@ < wlanap 802.11ac 20mhz < wlanap 802.11ac 40mhz < wlanap 802.11ac 80mhz +< wlanap 802.11ag +< wlanap 802.11ag 20mhz < wlanap 802.11agn < wlanap 802.11agn 20mhz < wlanap 802.11agn 40mhz @@ -398,6 +402,8 @@ < wlanap 802.11ac 20mhz < wlanap 802.11ac 40mhz < wlanap 802.11ac 80mhz +< wlanap 802.11ag +< wlanap 802.11ag 20mhz < wlanap 802.11agn < wlanap 802.11agn 20mhz < wlanap 802.11agn 40mhz @@ -1040,6 +1046,8 @@ < wlanap 802.11ac 20mhz < wlanap 802.11ac 40mhz < wlanap 802.11ac 80mhz +< wlanap 802.11ag +< wlanap 802.11ag 20mhz < wlanap 802.11agn < wlanap 802.11agn 20mhz < wlanap 802.11agn 40mhz @@ -1754,6 +1762,8 @@ < wlanap 802.11ac 20mhz < wlanap 802.11ac 40mhz < wlanap 802.11ac 80mhz +< wlanap 802.11ag +< wlanap 802.11ag 20mhz < wlanap 802.11agn < wlanap 802.11agn 20mhz < wlanap 802.11agn 40mhz @@ -2882,6 +2892,8 @@ < wlanap 802.11ac 20mhz < wlanap 802.11ac 40mhz < wlanap 802.11ac 80mhz +< wlanap 802.11ag +< wlanap 802.11ag 20mhz < wlanap 802.11agn < wlanap 802.11agn 20mhz < wlanap 802.11agn 40mhz @@ -4048,6 +4060,8 @@ < wlanap 802.11ac 20mhz < wlanap 802.11ac 40mhz < wlanap 802.11ac 80mhz +< wlanap 802.11ag +< wlanap 802.11ag 20mhz < wlanap 802.11agn < wlanap 802.11agn 20mhz < wlanap 802.11agn 40mhz @@ -4591,6 +4605,8 @@ < wlanap 802.11ac 20mhz < wlanap 802.11ac 40mhz < wlanap 802.11ac 80mhz +< wlanap 802.11ag +< wlanap 802.11ag 20mhz < wlanap 802.11agn < wlanap 802.11agn 20mhz < wlanap 802.11agn 40mhz @@ -4727,6 +4743,8 @@ < wlanap 802.11ac 20mhz < wlanap 802.11ac 40mhz < wlanap 802.11ac 80mhz +< wlanap 802.11ag +< wlanap 802.11ag 20mhz < wlanap 802.11agn < wlanap 802.11agn 20mhz < wlanap 802.11agn 40mhz @@ -4828,6 +4846,8 @@ < wlanap 802.11ac 20mhz < wlanap 802.11ac 40mhz < wlanap 802.11ac 80mhz +< wlanap 802.11ag +< wlanap 802.11ag 20mhz < wlanap 802.11agn < wlanap 802.11agn 20mhz < wlanap 802.11agn 40mhz diff --git a/html/cgi-bin/wlanap.cgi b/html/cgi-bin/wlanap.cgi index 0d1c5a90b..0c5dad558 100644 --- a/html/cgi-bin/wlanap.cgi +++ b/html/cgi-bin/wlanap.cgi @@ -102,7 +102,7 @@ if ($cgiparams{'ACTION'} eq "$Lang::tr{'save'}") { } # Validate MODE - unless ($cgiparams{'MODE'} =~ m/^(HT|HE|VHT|EHT)(20|40|80|160|320)$/) { + unless ($cgiparams{'MODE'} =~ m/^(|HT|HE|VHT|EHT)(20|40|80|160|320)$/) { $errormessage .= "$Lang::tr{'wlanap invalid mode'}
"; } @@ -343,6 +343,12 @@ print < + + + + diff --git a/langs/en/cgi-bin/en.pl b/langs/en/cgi-bin/en.pl index 79a512498..dda3e8d5b 100644 --- a/langs/en/cgi-bin/en.pl +++ b/langs/en/cgi-bin/en.pl @@ -3202,6 +3202,8 @@ 'wlanap 802.11ac 20mhz' => 'IEEE 802.11ac @ 20 MHz', 'wlanap 802.11ac 40mhz' => 'IEEE 802.11ac @ 40 MHz', 'wlanap 802.11ac 80mhz' => 'IEEE 802.11ac @ 80 MHz', +'wlanap 802.11ag' => 'IEEE 802.11a/g', +'wlanap 802.11ag 20mhz' => 'IEEE802.11a/g @ 20 MHz', 'wlanap 802.11agn' => 'IEEE 802.11an/gn', 'wlanap 802.11agn 20mhz' => 'IEEE 802.11an/gn @ 20 MHz', 'wlanap 802.11agn 40mhz' => 'IEEE 802.11an/gn @ 40 MHz', diff --git a/src/initscripts/packages/hostapd b/src/initscripts/packages/hostapd index 5384badab..9bb6a2120 100644 --- a/src/initscripts/packages/hostapd +++ b/src/initscripts/packages/hostapd @@ -360,6 +360,15 @@ write_config() { # Always enable WMM echo "wmm_enabled=1" + # 802.11n + local enable_n=0 + + case "${MODE}" in + HT*|VHT*|HE*|EHT*) + enable_n=1 + ;; + esac + # 802.11ac local enable_ac=0 local vht_oper_chwidth=0 @@ -507,8 +516,10 @@ write_config() { fi fi - # Always enable 802.11n - echo "ieee80211n=1" + # Enable 802.11n? + if [ "${enable_n}" -eq 1 ]; then + echo "ieee80211n=1" + fi # Set HT capabilities if [ ${#ht_caps[@]} -gt 0 ]; then