* [PATCH 1/5] hostapd: Bring back support for 802.11g/a
@ 2026-01-19 16:21 Michael Tremer
2026-01-19 16:21 ` [PATCH 2/5] hostapd: Use the new readhash implementation to read configuration files Michael Tremer
` (4 more replies)
0 siblings, 5 replies; 9+ messages in thread
From: Michael Tremer @ 2026-01-19 16:21 UTC (permalink / raw)
To: development; +Cc: Michael Tremer
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 <michael.tremer@ipfire.org>
---
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'}<br />";
}
@@ -343,6 +343,12 @@ print <<END;
$Lang::tr{'wlanap 802.11agn 20mhz'}
</option>
</optgroup>
+
+ <optgroup label="$Lang::tr{'wlanap 802.11ag'}">
+ <option value="20" $selected{'MODE'}{'20'}>
+ $Lang::tr{'wlanap 802.11ag 20mhz'}
+ </option>
+ </optgroup>
</select>
</td>
</tr>
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
--
2.47.3
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/5] hostapd: Use the new readhash implementation to read configuration files
2026-01-19 16:21 [PATCH 1/5] hostapd: Bring back support for 802.11g/a Michael Tremer
@ 2026-01-19 16:21 ` Michael Tremer
2026-01-21 19:58 ` Bernhard Bitsch
2026-01-19 16:21 ` [PATCH 3/5] readhash: Fix the quote check Michael Tremer
` (3 subsequent siblings)
4 siblings, 1 reply; 9+ messages in thread
From: Michael Tremer @ 2026-01-19 16:21 UTC (permalink / raw)
To: development; +Cc: Michael Tremer
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
---
src/initscripts/packages/hostapd | 110 ++++++++++++++++---------------
1 file changed, 56 insertions(+), 54 deletions(-)
diff --git a/src/initscripts/packages/hostapd b/src/initscripts/packages/hostapd
index 9bb6a2120..93ddae72f 100644
--- a/src/initscripts/packages/hostapd
+++ b/src/initscripts/packages/hostapd
@@ -127,9 +127,9 @@ write_config() {
local eht_phy_flags=0
# Set some default BAND if none is set
- if [ -z "${BAND}" ]; then
+ if [ -z "${CONFIG["BAND"]}" ]; then
# Use 2.4 GHz for 802.11g/n and assume 5 GHz for anything else
- case "${HW_MODE}" in
+ case "${CONFIG["HW_MODE"]}" in
gn)
BAND="2g"
;;
@@ -164,13 +164,13 @@ write_config() {
# Check if we are in the right band
"* 2412.0 MHz"*)
- if [ "${BAND}" = "2g" ]; then
+ if [ "${CONFIG["BAND"]}" = "2g" ]; then
break
fi
;;
"* 5180.0 MHz"*)
- if [ "${BAND}" = "5g" ]; then
+ if [ "${CONFIG["BAND"]}" = "5g" ]; then
break
fi
;;
@@ -310,18 +310,18 @@ write_config() {
done
# Set the channel to zero if not set
- if [ -z "${CHANNEL}" ]; then
- CHANNEL=0
+ if [ -z "${CONFIG["CHANNEL"]}" ]; then
+ CONFIG["CHANNEL"]=0
fi
# Translate the old HW_MODE to the newer MODE setting
- if [ -z "${MODE}" ]; then
- case "${HW_MODE}" in
+ if [ -z "${CONFIG["MODE"]}" ]; then
+ case "${CONFIG["HW_MODE"]}" in
ac)
- MODE="VHT20"
+ CONFIG["MODE"]="VHT20"
;;
an|gn)
- MODE="HT20";
+ CONFIG["MODE"]="HT20";
;;
esac
fi
@@ -338,7 +338,7 @@ write_config() {
echo "driver=nl80211"
# Set the country code
- echo "country_code=${COUNTRY}"
+ echo "country_code=${CONFIG["COUNTRY"]}"
echo "country3=0x49"
# Enable 802.11d and 802.11h
@@ -346,8 +346,8 @@ write_config() {
echo "ieee80211h=1"
# Set the channel (if chosen)
- if [ -n "${CHANNEL}" ]; then
- echo "channel=${CHANNEL}"
+ if [ -n "${CONFIG["CHANNEL"]}" ]; then
+ echo "channel=${CONFIG["CHANNEL"]}"
fi
# Always advertise TPC
@@ -363,7 +363,7 @@ write_config() {
# 802.11n
local enable_n=0
- case "${MODE}" in
+ case "${CONFIG["MODE"]}" in
HT*|VHT*|HE*|EHT*)
enable_n=1
;;
@@ -374,7 +374,7 @@ write_config() {
local vht_oper_chwidth=0
local vht_oper_centr_freq_seg0_idx=""
- case "${MODE}" in
+ case "${CONFIG["MODE"]}" in
VHT20|HE20|EHT20)
enable_ac=1
;;
@@ -384,13 +384,13 @@ write_config() {
enable_ac=1
# Compute the channel segment index
- if [ "${CHANNEL}" -gt 0 ]; then
- case "$(( (${CHANNEL} / 4) % 2 ))" in
+ if [ "${CONFIG["CHANNEL"]}" -gt 0 ]; then
+ case "$(( (${CONFIG["CHANNEL"]} / 4) % 2 ))" in
0)
- vht_oper_centr_freq_seg0_idx="$(( ${CHANNEL} - 2 ))"
+ vht_oper_centr_freq_seg0_idx="$(( ${CONFIG["CHANNEL"]} - 2 ))"
;;
1)
- vht_oper_centr_freq_seg0_idx="$(( ${CHANNEL} + 2 ))"
+ vht_oper_centr_freq_seg0_idx="$(( ${CONFIG["CHANNEL"]} + 2 ))"
;;
esac
fi
@@ -402,19 +402,19 @@ write_config() {
vht_oper_chwidth=1
# Compute the channel segment index
- if [ "${CHANNEL}" -gt 0 ]; then
- case "$(( (${CHANNEL} / 4) % 4 ))" in
+ if [ "${CONFIG["CHANNEL"]}" -gt 0 ]; then
+ case "$(( (${CONFIG["CHANNEL"]} / 4) % 4 ))" in
0)
- vht_oper_centr_freq_seg0_idx="$(( ${CHANNEL} - 6 ))"
+ vht_oper_centr_freq_seg0_idx="$(( ${CONFIG["CHANNEL"]} - 6 ))"
;;
1)
- vht_oper_centr_freq_seg0_idx="$(( ${CHANNEL} + 6 ))"
+ vht_oper_centr_freq_seg0_idx="$(( ${CONFIG["CHANNEL"]} + 6 ))"
;;
2)
- vht_oper_centr_freq_seg0_idx="$(( ${CHANNEL} + 2 ))"
+ vht_oper_centr_freq_seg0_idx="$(( ${CONFIG["CHANNEL"]} + 2 ))"
;;
3)
- vht_oper_centr_freq_seg0_idx="$(( ${CHANNEL} - 2 ))"
+ vht_oper_centr_freq_seg0_idx="$(( ${CONFIG["CHANNEL"]} - 2 ))"
;;
esac
fi
@@ -426,8 +426,8 @@ write_config() {
vht_oper_chwidth=2
# Compute the channel segment index
- if [ "${CHANNEL}" -gt 0 ]; then
- case "${CHANNEL}" in
+ if [ "${CONFIG["CHANNEL"]}" -gt 0 ]; then
+ case "${CONFIG["CHANNEL"]}" in
36|40|44|48|52|56|60|64)
vht_oper_centr_freq_seg0_idx=50
;;
@@ -447,7 +447,7 @@ write_config() {
local he_oper_chwidth="${vht_oper_chwidth}"
local he_oper_centr_freq_seg0_idx="${vht_oper_centr_freq_seg0_idx}"
- case "${MODE}" in
+ case "${CONFIG["MODE"]}" in
HE*|EHT*)
enable_ax=1
;;
@@ -458,14 +458,14 @@ write_config() {
local eht_oper_chwidth="${he_oper_chwidth}"
local eht_oper_centr_freq_seg0_idx="${he_oper_centr_freq_seg0_idx}"
- case "${MODE}" in
+ case "${CONFIG["MODE"]}" in
EHT*)
enable_be=1
;;
esac
# Set hardware mode
- case "${BAND}" in
+ case "${CONFIG["BAND"]}" in
5g)
echo "hw_mode=a"
;;
@@ -527,15 +527,16 @@ write_config() {
fi
# Configure antennas
- if [ -z "${RX_ANTENNAS}" ]; then
- RX_ANTENNAS="0xffffffff"
+ if [ -z "${CONFIG["RX_ANTENNAS"]}" ]; then
+ CONFIG["RX_ANTENNAS"]="0xffffffff"
fi
- if [ -z "${TX_ANTENNAS}" ]; then
- TX_ANTENNAS="0xffffffff"
+ if [ -z "${CONFIG["TX_ANTENNAS"]}" ]; then
+ CONFIG["TX_ANTENNAS"]="0xffffffff"
fi
# Set the antennas to use
- iw phy "${phy}" set antenna "${TX_ANTENNAS}" "${RX_ANTENNAS}" &>/dev/null
+ iw phy "${phy}" set antenna \
+ "${CONFIG["TX_ANTENNAS"]}" "${CONFIG["RX_ANTENNAS"]}" &>/dev/null
# Enable authentication
echo "auth_algs=1"
@@ -548,28 +549,28 @@ write_config() {
echo "disassoc_low_ack=1"
# SSID
- echo "ssid2=\"${SSID}\""
+ echo "ssid2=\"${CONFIG["SSID"]}\""
echo "utf8_ssid=1"
# Hide the SSID?
- if [ "${HIDESSID}" = "on" ]; then
+ if [ "${CONFIG["HIDESSID"]}" = "on" ]; then
echo "ignore_broadcast_ssid=2"
fi
# Isolate clients?
- if [ "${CLIENTISOLATION}" = "on" ]; then
+ if [ "${CONFIG["CLIENTISOLATION"]}" = "on" ]; then
echo "ap_isolate=1"
fi
# Disable neighbour scan?
- if [ "${NOSCAN}" = "on" ]; then
+ if [ "${CONFIG["NOSCAN"]}" = "on" ]; then
echo "noscan=1"
else
echo "noscan=0"
fi
# Management Frame Protection (802.11w)
- case "${IEEE80211W}" in
+ case "${CONFIG["IEEE80211W"]}" in
on)
echo "ieee80211w=2"
@@ -595,35 +596,35 @@ write_config() {
esac
# Encryption
- case "${ENC}" in
+ case "${CONFIG["ENC"]}" in
wpa3)
echo "wpa=2"
- echo "wpa_passphrase=${PWD}"
+ echo "wpa_passphrase=${CONFIG["PWD"]}"
echo "wpa_key_mgmt=SAE"
echo "rsn_pairwise=CCMP"
;;
wpa2+3)
echo "wpa=2"
- echo "wpa_passphrase=${PWD}"
+ echo "wpa_passphrase=${CONFIG["PWD"]}"
echo "wpa_key_mgmt=WPA-PSK WPA-PSK-SHA256 SAE"
echo "rsn_pairwise=CCMP"
;;
wpa2)
echo "wpa=2"
- echo "wpa_passphrase=${PWD}"
+ echo "wpa_passphrase=${CONFIG["PWD"]}"
echo "wpa_key_mgmt=WPA-PSK WPA-PSK-SHA256"
echo "rsn_pairwise=CCMP"
;;
wpa1+2)
echo "wpa=3"
- echo "wpa_passphrase=${PWD}"
+ echo "wpa_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=${PWD}"
+ echo "wpa_passphrase=${CONFIG["PWD"]}"
echo "wpa_key_mgmt=WPA-PSK WPA-PSK-SHA256"
echo "wpa_pairwise=TKIP"
;;
@@ -631,7 +632,7 @@ write_config() {
# Multi-Band Operation - prefer WiFi over mobile networks
# This feature requires Management Frame Protection
- case "${IEEE80211W}" in
+ case "${CONFIG["IEEE80211W"]}" in
on|optional)
echo "mbo=1"
echo "mbo_cell_data_conn_pref=1"
@@ -665,13 +666,14 @@ write_config() {
return 0
}
-eval $(/usr/local/bin/readhash /var/ipfire/wlanap/settings)
+# Read the configuration
+readhash CONFIG "/var/ipfire/wlanap/settings"
case "${1}" in
start)
- interface="$(find_interface "${INTERFACE}")"
+ interface="$(find_interface "${CONFIG["INTERFACE"]}")"
if [ -z "${interface}" ]; then
- boot_mesg "Could not find interface with address ${INTERFACE} for wireless access point"
+ boot_mesg "Could not find interface with address ${CONFIG["INTERFACE"]} for wireless access point"
echo_failure
exit 1
fi
@@ -693,8 +695,8 @@ case "${1}" in
)
# Enable debugging?
- if [ -n "${DEBUG}" ] && [[ "${DEBUG}" =~ ^[0-9]+$ ]]; then
- for (( i = 0; i < DEBUG; i++ )); do
+ if [ -n "${CONFIG["DEBUG"]}" ] && [[ "${CONFIG["DEBUG"]}" =~ ^[0-9]+$ ]]; then
+ for (( i = 0; i < CONFIG["DEBUG"]; i++ )); do
args+=( "-d" )
done
fi
@@ -720,9 +722,9 @@ case "${1}" in
;;
show-config)
- interface="$(find_interface "${INTERFACE}")"
+ interface="$(find_interface "${CONFIG["INTERFACE"]}")"
if [ -z "${interface}" ]; then
- boot_mesg "Could not find interface with address ${INTERFACE} for wireless access point"
+ boot_mesg "Could not find interface with address ${CONFIG["INTERFACE"]} for wireless access point"
echo_failure
exit 1
fi
--
2.47.3
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 3/5] readhash: Fix the quote check
2026-01-19 16:21 [PATCH 1/5] hostapd: Bring back support for 802.11g/a Michael Tremer
2026-01-19 16:21 ` [PATCH 2/5] hostapd: Use the new readhash implementation to read configuration files Michael Tremer
@ 2026-01-19 16:21 ` Michael Tremer
2026-01-21 20:00 ` Bernhard Bitsch
2026-01-19 16:21 ` [PATCH 4/5] initscripts: functions: Permit ! in the value of key/value files Michael Tremer
` (2 subsequent siblings)
4 siblings, 1 reply; 9+ messages in thread
From: Michael Tremer @ 2026-01-19 16:21 UTC (permalink / raw)
To: development; +Cc: Michael Tremer
The single quotes changed bash's behaviour to interpret the * character
literally, but this is not what we wanted here. We need to escape the
single quotes.
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
---
src/initscripts/system/functions | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/initscripts/system/functions b/src/initscripts/system/functions
index c4b7cb39e..757912eab 100644
--- a/src/initscripts/system/functions
+++ b/src/initscripts/system/functions
@@ -930,7 +930,7 @@ readhash() {
# strip leading and trailing single quotes
case "${val}" in
- '*')
+ \'*\')
val="${val#\'}"
val="${val%\'}"
;;
--
2.47.3
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 4/5] initscripts: functions: Permit ! in the value of key/value files
2026-01-19 16:21 [PATCH 1/5] hostapd: Bring back support for 802.11g/a Michael Tremer
2026-01-19 16:21 ` [PATCH 2/5] hostapd: Use the new readhash implementation to read configuration files Michael Tremer
2026-01-19 16:21 ` [PATCH 3/5] readhash: Fix the quote check Michael Tremer
@ 2026-01-19 16:21 ` Michael Tremer
2026-01-19 16:21 ` [PATCH 5/5] hostapd: Bump package version Michael Tremer
2026-01-21 19:46 ` [PATCH 1/5] hostapd: Bring back support for 802.11g/a Bernhard Bitsch
4 siblings, 0 replies; 9+ messages in thread
From: Michael Tremer @ 2026-01-19 16:21 UTC (permalink / raw)
To: development; +Cc: Michael Tremer
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
---
src/initscripts/system/functions | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/initscripts/system/functions b/src/initscripts/system/functions
index 757912eab..c0c40e986 100644
--- a/src/initscripts/system/functions
+++ b/src/initscripts/system/functions
@@ -923,7 +923,7 @@ readhash() {
local val="${line#*=}"
# Skip lines with invalid values
- if ! [[ ${val} =~ ^[\'][\ A-Za-z0-9=/,.:%_@#+-]*[\']$ ]] && ! [[ ${val} =~ ^[A-Za-z0-9=/,.:%_@#+-]*$ ]]; then
+ if ! [[ ${val} =~ ^[\'][\ A-Za-z0-9=/,.:%_@#+-\\!]*[\']$ ]] && ! [[ ${val} =~ ^[A-Za-z0-9=/,.:%_@#+-\\!]*$ ]]; then
echo "Invalid value '${val}' for key '${key}'" >&2
continue
fi
--
2.47.3
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 5/5] hostapd: Bump package version
2026-01-19 16:21 [PATCH 1/5] hostapd: Bring back support for 802.11g/a Michael Tremer
` (2 preceding siblings ...)
2026-01-19 16:21 ` [PATCH 4/5] initscripts: functions: Permit ! in the value of key/value files Michael Tremer
@ 2026-01-19 16:21 ` Michael Tremer
2026-01-21 19:46 ` [PATCH 1/5] hostapd: Bring back support for 802.11g/a Bernhard Bitsch
4 siblings, 0 replies; 9+ messages in thread
From: Michael Tremer @ 2026-01-19 16:21 UTC (permalink / raw)
To: development; +Cc: Michael Tremer
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
---
lfs/hostapd | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lfs/hostapd b/lfs/hostapd
index 1bb77a5e8..27c6006e4 100644
--- a/lfs/hostapd
+++ b/lfs/hostapd
@@ -33,7 +33,7 @@ DL_FROM = $(URL_IPFIRE)
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
PROG = hostapd
-PAK_VER = 71
+PAK_VER = 72
DEPS =
--
2.47.3
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/5] hostapd: Bring back support for 802.11g/a
2026-01-19 16:21 [PATCH 1/5] hostapd: Bring back support for 802.11g/a Michael Tremer
` (3 preceding siblings ...)
2026-01-19 16:21 ` [PATCH 5/5] hostapd: Bump package version Michael Tremer
@ 2026-01-21 19:46 ` Bernhard Bitsch
2026-01-22 11:14 ` Michael Tremer
4 siblings, 1 reply; 9+ messages in thread
From: Bernhard Bitsch @ 2026-01-21 19:46 UTC (permalink / raw)
To: development
Reviewed-by: Bernhard Bitsch <bbitsch@ipfire.org>
Am 19.01.2026 um 17:21 schrieb Michael Tremer:
> 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 <michael.tremer@ipfire.org>
> ---
> 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'}<br />";
> }
>
> @@ -343,6 +343,12 @@ print <<END;
> $Lang::tr{'wlanap 802.11agn 20mhz'}
> </option>
> </optgroup>
> +
> + <optgroup label="$Lang::tr{'wlanap 802.11ag'}">
> + <option value="20" $selected{'MODE'}{'20'}>
> + $Lang::tr{'wlanap 802.11ag 20mhz'}
> + </option>
> + </optgroup>
> </select>
> </td>
> </tr>
> 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
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/5] hostapd: Use the new readhash implementation to read configuration files
2026-01-19 16:21 ` [PATCH 2/5] hostapd: Use the new readhash implementation to read configuration files Michael Tremer
@ 2026-01-21 19:58 ` Bernhard Bitsch
0 siblings, 0 replies; 9+ messages in thread
From: Bernhard Bitsch @ 2026-01-21 19:58 UTC (permalink / raw)
To: development
NOSCAN is generated by the WUI, where it is used as 'scan
neighbourhood?'. Just in diametral sense. Therefore NOSCAN should
generate 'noscan=0'.
Reviewed-by: Bernhard Bitsch <bbitsch@ipfire.org>
Am 19.01.2026 um 17:21 schrieb Michael Tremer:
> Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
> ---
> src/initscripts/packages/hostapd | 110 ++++++++++++++++---------------
> 1 file changed, 56 insertions(+), 54 deletions(-)
>
> diff --git a/src/initscripts/packages/hostapd b/src/initscripts/packages/hostapd
> index 9bb6a2120..93ddae72f 100644
> --- a/src/initscripts/packages/hostapd
> +++ b/src/initscripts/packages/hostapd
> @@ -127,9 +127,9 @@ write_config() {
> local eht_phy_flags=0
>
> # Set some default BAND if none is set
> - if [ -z "${BAND}" ]; then
> + if [ -z "${CONFIG["BAND"]}" ]; then
> # Use 2.4 GHz for 802.11g/n and assume 5 GHz for anything else
> - case "${HW_MODE}" in
> + case "${CONFIG["HW_MODE"]}" in
> gn)
> BAND="2g"
> ;;
> @@ -164,13 +164,13 @@ write_config() {
>
> # Check if we are in the right band
> "* 2412.0 MHz"*)
> - if [ "${BAND}" = "2g" ]; then
> + if [ "${CONFIG["BAND"]}" = "2g" ]; then
> break
> fi
> ;;
>
> "* 5180.0 MHz"*)
> - if [ "${BAND}" = "5g" ]; then
> + if [ "${CONFIG["BAND"]}" = "5g" ]; then
> break
> fi
> ;;
> @@ -310,18 +310,18 @@ write_config() {
> done
>
> # Set the channel to zero if not set
> - if [ -z "${CHANNEL}" ]; then
> - CHANNEL=0
> + if [ -z "${CONFIG["CHANNEL"]}" ]; then
> + CONFIG["CHANNEL"]=0
> fi
>
> # Translate the old HW_MODE to the newer MODE setting
> - if [ -z "${MODE}" ]; then
> - case "${HW_MODE}" in
> + if [ -z "${CONFIG["MODE"]}" ]; then
> + case "${CONFIG["HW_MODE"]}" in
> ac)
> - MODE="VHT20"
> + CONFIG["MODE"]="VHT20"
> ;;
> an|gn)
> - MODE="HT20";
> + CONFIG["MODE"]="HT20";
> ;;
> esac
> fi
> @@ -338,7 +338,7 @@ write_config() {
> echo "driver=nl80211"
>
> # Set the country code
> - echo "country_code=${COUNTRY}"
> + echo "country_code=${CONFIG["COUNTRY"]}"
> echo "country3=0x49"
>
> # Enable 802.11d and 802.11h
> @@ -346,8 +346,8 @@ write_config() {
> echo "ieee80211h=1"
>
> # Set the channel (if chosen)
> - if [ -n "${CHANNEL}" ]; then
> - echo "channel=${CHANNEL}"
> + if [ -n "${CONFIG["CHANNEL"]}" ]; then
> + echo "channel=${CONFIG["CHANNEL"]}"
> fi
>
> # Always advertise TPC
> @@ -363,7 +363,7 @@ write_config() {
> # 802.11n
> local enable_n=0
>
> - case "${MODE}" in
> + case "${CONFIG["MODE"]}" in
> HT*|VHT*|HE*|EHT*)
> enable_n=1
> ;;
> @@ -374,7 +374,7 @@ write_config() {
> local vht_oper_chwidth=0
> local vht_oper_centr_freq_seg0_idx=""
>
> - case "${MODE}" in
> + case "${CONFIG["MODE"]}" in
> VHT20|HE20|EHT20)
> enable_ac=1
> ;;
> @@ -384,13 +384,13 @@ write_config() {
> enable_ac=1
>
> # Compute the channel segment index
> - if [ "${CHANNEL}" -gt 0 ]; then
> - case "$(( (${CHANNEL} / 4) % 2 ))" in
> + if [ "${CONFIG["CHANNEL"]}" -gt 0 ]; then
> + case "$(( (${CONFIG["CHANNEL"]} / 4) % 2 ))" in
> 0)
> - vht_oper_centr_freq_seg0_idx="$(( ${CHANNEL} - 2 ))"
> + vht_oper_centr_freq_seg0_idx="$(( ${CONFIG["CHANNEL"]} - 2 ))"
> ;;
> 1)
> - vht_oper_centr_freq_seg0_idx="$(( ${CHANNEL} + 2 ))"
> + vht_oper_centr_freq_seg0_idx="$(( ${CONFIG["CHANNEL"]} + 2 ))"
> ;;
> esac
> fi
> @@ -402,19 +402,19 @@ write_config() {
> vht_oper_chwidth=1
>
> # Compute the channel segment index
> - if [ "${CHANNEL}" -gt 0 ]; then
> - case "$(( (${CHANNEL} / 4) % 4 ))" in
> + if [ "${CONFIG["CHANNEL"]}" -gt 0 ]; then
> + case "$(( (${CONFIG["CHANNEL"]} / 4) % 4 ))" in
> 0)
> - vht_oper_centr_freq_seg0_idx="$(( ${CHANNEL} - 6 ))"
> + vht_oper_centr_freq_seg0_idx="$(( ${CONFIG["CHANNEL"]} - 6 ))"
> ;;
> 1)
> - vht_oper_centr_freq_seg0_idx="$(( ${CHANNEL} + 6 ))"
> + vht_oper_centr_freq_seg0_idx="$(( ${CONFIG["CHANNEL"]} + 6 ))"
> ;;
> 2)
> - vht_oper_centr_freq_seg0_idx="$(( ${CHANNEL} + 2 ))"
> + vht_oper_centr_freq_seg0_idx="$(( ${CONFIG["CHANNEL"]} + 2 ))"
> ;;
> 3)
> - vht_oper_centr_freq_seg0_idx="$(( ${CHANNEL} - 2 ))"
> + vht_oper_centr_freq_seg0_idx="$(( ${CONFIG["CHANNEL"]} - 2 ))"
> ;;
> esac
> fi
> @@ -426,8 +426,8 @@ write_config() {
> vht_oper_chwidth=2
>
> # Compute the channel segment index
> - if [ "${CHANNEL}" -gt 0 ]; then
> - case "${CHANNEL}" in
> + if [ "${CONFIG["CHANNEL"]}" -gt 0 ]; then
> + case "${CONFIG["CHANNEL"]}" in
> 36|40|44|48|52|56|60|64)
> vht_oper_centr_freq_seg0_idx=50
> ;;
> @@ -447,7 +447,7 @@ write_config() {
> local he_oper_chwidth="${vht_oper_chwidth}"
> local he_oper_centr_freq_seg0_idx="${vht_oper_centr_freq_seg0_idx}"
>
> - case "${MODE}" in
> + case "${CONFIG["MODE"]}" in
> HE*|EHT*)
> enable_ax=1
> ;;
> @@ -458,14 +458,14 @@ write_config() {
> local eht_oper_chwidth="${he_oper_chwidth}"
> local eht_oper_centr_freq_seg0_idx="${he_oper_centr_freq_seg0_idx}"
>
> - case "${MODE}" in
> + case "${CONFIG["MODE"]}" in
> EHT*)
> enable_be=1
> ;;
> esac
>
> # Set hardware mode
> - case "${BAND}" in
> + case "${CONFIG["BAND"]}" in
> 5g)
> echo "hw_mode=a"
> ;;
> @@ -527,15 +527,16 @@ write_config() {
> fi
>
> # Configure antennas
> - if [ -z "${RX_ANTENNAS}" ]; then
> - RX_ANTENNAS="0xffffffff"
> + if [ -z "${CONFIG["RX_ANTENNAS"]}" ]; then
> + CONFIG["RX_ANTENNAS"]="0xffffffff"
> fi
> - if [ -z "${TX_ANTENNAS}" ]; then
> - TX_ANTENNAS="0xffffffff"
> + if [ -z "${CONFIG["TX_ANTENNAS"]}" ]; then
> + CONFIG["TX_ANTENNAS"]="0xffffffff"
> fi
>
> # Set the antennas to use
> - iw phy "${phy}" set antenna "${TX_ANTENNAS}" "${RX_ANTENNAS}" &>/dev/null
> + iw phy "${phy}" set antenna \
> + "${CONFIG["TX_ANTENNAS"]}" "${CONFIG["RX_ANTENNAS"]}" &>/dev/null
>
> # Enable authentication
> echo "auth_algs=1"
> @@ -548,28 +549,28 @@ write_config() {
> echo "disassoc_low_ack=1"
>
> # SSID
> - echo "ssid2=\"${SSID}\""
> + echo "ssid2=\"${CONFIG["SSID"]}\""
> echo "utf8_ssid=1"
>
> # Hide the SSID?
> - if [ "${HIDESSID}" = "on" ]; then
> + if [ "${CONFIG["HIDESSID"]}" = "on" ]; then
> echo "ignore_broadcast_ssid=2"
> fi
>
> # Isolate clients?
> - if [ "${CLIENTISOLATION}" = "on" ]; then
> + if [ "${CONFIG["CLIENTISOLATION"]}" = "on" ]; then
> echo "ap_isolate=1"
> fi
>
> # Disable neighbour scan?
> - if [ "${NOSCAN}" = "on" ]; then
> + if [ "${CONFIG["NOSCAN"]}" = "on" ]; then
> echo "noscan=1"
> else
> echo "noscan=0"
> fi
>
> # Management Frame Protection (802.11w)
> - case "${IEEE80211W}" in
> + case "${CONFIG["IEEE80211W"]}" in
> on)
> echo "ieee80211w=2"
>
> @@ -595,35 +596,35 @@ write_config() {
> esac
>
> # Encryption
> - case "${ENC}" in
> + case "${CONFIG["ENC"]}" in
> wpa3)
> echo "wpa=2"
> - echo "wpa_passphrase=${PWD}"
> + echo "wpa_passphrase=${CONFIG["PWD"]}"
> echo "wpa_key_mgmt=SAE"
> echo "rsn_pairwise=CCMP"
> ;;
> wpa2+3)
> echo "wpa=2"
> - echo "wpa_passphrase=${PWD}"
> + echo "wpa_passphrase=${CONFIG["PWD"]}"
> echo "wpa_key_mgmt=WPA-PSK WPA-PSK-SHA256 SAE"
> echo "rsn_pairwise=CCMP"
> ;;
> wpa2)
> echo "wpa=2"
> - echo "wpa_passphrase=${PWD}"
> + echo "wpa_passphrase=${CONFIG["PWD"]}"
> echo "wpa_key_mgmt=WPA-PSK WPA-PSK-SHA256"
> echo "rsn_pairwise=CCMP"
> ;;
> wpa1+2)
> echo "wpa=3"
> - echo "wpa_passphrase=${PWD}"
> + echo "wpa_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=${PWD}"
> + echo "wpa_passphrase=${CONFIG["PWD"]}"
> echo "wpa_key_mgmt=WPA-PSK WPA-PSK-SHA256"
> echo "wpa_pairwise=TKIP"
> ;;
> @@ -631,7 +632,7 @@ write_config() {
>
> # Multi-Band Operation - prefer WiFi over mobile networks
> # This feature requires Management Frame Protection
> - case "${IEEE80211W}" in
> + case "${CONFIG["IEEE80211W"]}" in
> on|optional)
> echo "mbo=1"
> echo "mbo_cell_data_conn_pref=1"
> @@ -665,13 +666,14 @@ write_config() {
> return 0
> }
>
> -eval $(/usr/local/bin/readhash /var/ipfire/wlanap/settings)
> +# Read the configuration
> +readhash CONFIG "/var/ipfire/wlanap/settings"
>
> case "${1}" in
> start)
> - interface="$(find_interface "${INTERFACE}")"
> + interface="$(find_interface "${CONFIG["INTERFACE"]}")"
> if [ -z "${interface}" ]; then
> - boot_mesg "Could not find interface with address ${INTERFACE} for wireless access point"
> + boot_mesg "Could not find interface with address ${CONFIG["INTERFACE"]} for wireless access point"
> echo_failure
> exit 1
> fi
> @@ -693,8 +695,8 @@ case "${1}" in
> )
>
> # Enable debugging?
> - if [ -n "${DEBUG}" ] && [[ "${DEBUG}" =~ ^[0-9]+$ ]]; then
> - for (( i = 0; i < DEBUG; i++ )); do
> + if [ -n "${CONFIG["DEBUG"]}" ] && [[ "${CONFIG["DEBUG"]}" =~ ^[0-9]+$ ]]; then
> + for (( i = 0; i < CONFIG["DEBUG"]; i++ )); do
> args+=( "-d" )
> done
> fi
> @@ -720,9 +722,9 @@ case "${1}" in
> ;;
>
> show-config)
> - interface="$(find_interface "${INTERFACE}")"
> + interface="$(find_interface "${CONFIG["INTERFACE"]}")"
> if [ -z "${interface}" ]; then
> - boot_mesg "Could not find interface with address ${INTERFACE} for wireless access point"
> + boot_mesg "Could not find interface with address ${CONFIG["INTERFACE"]} for wireless access point"
> echo_failure
> exit 1
> fi
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/5] readhash: Fix the quote check
2026-01-19 16:21 ` [PATCH 3/5] readhash: Fix the quote check Michael Tremer
@ 2026-01-21 20:00 ` Bernhard Bitsch
0 siblings, 0 replies; 9+ messages in thread
From: Bernhard Bitsch @ 2026-01-21 20:00 UTC (permalink / raw)
To: development
Reviewed-by: Bernhard Bitsch <bbitsch@ipfire.org>
Am 19.01.2026 um 17:21 schrieb Michael Tremer:
> The single quotes changed bash's behaviour to interpret the * character
> literally, but this is not what we wanted here. We need to escape the
> single quotes.
>
> Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
> ---
> src/initscripts/system/functions | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/src/initscripts/system/functions b/src/initscripts/system/functions
> index c4b7cb39e..757912eab 100644
> --- a/src/initscripts/system/functions
> +++ b/src/initscripts/system/functions
> @@ -930,7 +930,7 @@ readhash() {
>
> # strip leading and trailing single quotes
> case "${val}" in
> - '*')
> + \'*\')
> val="${val#\'}"
> val="${val%\'}"
> ;;
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/5] hostapd: Bring back support for 802.11g/a
2026-01-21 19:46 ` [PATCH 1/5] hostapd: Bring back support for 802.11g/a Bernhard Bitsch
@ 2026-01-22 11:14 ` Michael Tremer
0 siblings, 0 replies; 9+ messages in thread
From: Michael Tremer @ 2026-01-22 11:14 UTC (permalink / raw)
To: Bernhard Bitsch; +Cc: development
Hello Bernhard,
Thank you very much for reviewing this patch set.
Did you also run the scripts?
-Michael
> On 21 Jan 2026, at 19:46, Bernhard Bitsch <bbitsch@ipfire.org> wrote:
>
> Reviewed-by: Bernhard Bitsch <bbitsch@ipfire.org>
>
> Am 19.01.2026 um 17:21 schrieb Michael Tremer:
>> 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 <michael.tremer@ipfire.org>
>> ---
>> 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'}<br />";
>> }
>> @@ -343,6 +343,12 @@ print <<END;
>> $Lang::tr{'wlanap 802.11agn 20mhz'}
>> </option>
>> </optgroup>
>> +
>> + <optgroup label="$Lang::tr{'wlanap 802.11ag'}">
>> + <option value="20" $selected{'MODE'}{'20'}>
>> + $Lang::tr{'wlanap 802.11ag 20mhz'}
>> + </option>
>> + </optgroup>
>> </select>
>> </td>
>> </tr>
>> 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
>
>
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2026-01-22 11:14 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-01-19 16:21 [PATCH 1/5] hostapd: Bring back support for 802.11g/a Michael Tremer
2026-01-19 16:21 ` [PATCH 2/5] hostapd: Use the new readhash implementation to read configuration files Michael Tremer
2026-01-21 19:58 ` Bernhard Bitsch
2026-01-19 16:21 ` [PATCH 3/5] readhash: Fix the quote check Michael Tremer
2026-01-21 20:00 ` Bernhard Bitsch
2026-01-19 16:21 ` [PATCH 4/5] initscripts: functions: Permit ! in the value of key/value files Michael Tremer
2026-01-19 16:21 ` [PATCH 5/5] hostapd: Bump package version Michael Tremer
2026-01-21 19:46 ` [PATCH 1/5] hostapd: Bring back support for 802.11g/a Bernhard Bitsch
2026-01-22 11:14 ` Michael Tremer
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox