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 4dxFPv6k1Hz2y1f for ; Wed, 21 Jan 2026 19:58:59 +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) (Client CN "mail01.haj.ipfire.org", Issuer "R12" (verified OK)) by mail02.haj.ipfire.org (Postfix) with ESMTPS id 4dxFPr2Twbz2xLw for ; Wed, 21 Jan 2026 19:58:56 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) by mail01.ipfire.org (Postfix) with ESMTPSA id 4dxFPq4fDDzN7 for ; Wed, 21 Jan 2026 19:58:55 +0000 (UTC) DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=ipfire.org; s=202003ed25519; t=1769025535; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=0/d782O44oHII1OdKCqzoUvHS/Dh9yJwqL5i3w39UOw=; b=OWj6q+Nxr07voKr8BnNZiWC6lEsU/3fbYPJuBW9x7vxikDNw9Na6s93RZCrr8+NwtZhe+n I9G1wcXprlM4z6Dw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ipfire.org; s=202003rsa; t=1769025535; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=0/d782O44oHII1OdKCqzoUvHS/Dh9yJwqL5i3w39UOw=; b=wi3ZsZ1YFwfmrfOdMVqHo12c0i+yqiTKKp7A1Yl+cHq3QNFzX5zgHi8cRQOux8/3rE9yGe im1a+XGyd0/Vl+5PWRVh0nsL+FIaR+7XG4o/Avcq+nouShKjEyoXp6fnObXZhvTwnNE81P HqWomfmPqaMquJc6F25At75MmFIafxNJRlFSI6biQmueOSckqb7bSx4RhXJxAwz8rv9wRz XJANxD2H9pHyWQ1T3A2sZGEHpvwiElBFRNGoXSVd6+gNXy00EihJJkcpPziE49x916657W nh6cr1veLrpM8Zyz1AXz6NCHCEAvPsDCyKUDRgXsUkyEM6xoEK+aco5kbH1JNQ== Message-ID: <3d547ac9-fca3-4c7d-aed7-50fe1f95911b@ipfire.org> Date: Wed, 21 Jan 2026 20:58:50 +0100 Precedence: list List-Id: List-Subscribe: , List-Unsubscribe: , List-Post: List-Help: Sender: Mail-Followup-To: MIME-Version: 1.0 Subject: Re: [PATCH 2/5] hostapd: Use the new readhash implementation to read configuration files To: development@lists.ipfire.org References: <20260119162140.3373757-1-michael.tremer@ipfire.org> <20260119162140.3373757-2-michael.tremer@ipfire.org> Content-Language: en-GB From: Bernhard Bitsch In-Reply-To: <20260119162140.3373757-2-michael.tremer@ipfire.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit 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 Am 19.01.2026 um 17:21 schrieb Michael Tremer: > Signed-off-by: Michael Tremer > --- > 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