From 6c674537bb779d3a4cfe5b38c342f406b3e4bcf1 Mon Sep 17 00:00:00 2001 From: billz Date: Tue, 20 Apr 2021 15:19:00 +0100 Subject: [PATCH 1/4] WIP: txpower feature --- app/js/custom.js | 5 +++++ config/defaults.json | 3 +++ includes/functions.php | 7 ++++--- includes/hostapd.php | 6 ++++-- installers/raspap.sudoers | 1 + templates/hostapd/advanced.php | 12 ++++++++++++ 6 files changed, 29 insertions(+), 5 deletions(-) diff --git a/app/js/custom.js b/app/js/custom.js index d5c1abe5..3523fc56 100644 --- a/app/js/custom.js +++ b/app/js/custom.js @@ -120,6 +120,11 @@ $(document).on("click", "#gen_wpa_passphrase", function(e) { $('#txtwpapassphrase').val(genPassword(63)); }); +// Enable Bootstrap tooltips +$(function () { + $('[data-toggle="tooltip"]').tooltip() +}) + function genPassword(pwdLen) { var pwdChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; var rndPass = Array(pwdLen).fill(pwdChars).map(function(x) { return x[Math.floor(Math.random() * x.length)] }).join(''); diff --git a/config/defaults.json b/config/defaults.json index faab15b6..67948d0d 100644 --- a/config/defaults.json +++ b/config/defaults.json @@ -49,6 +49,9 @@ "AllowedIPs": ["10.8.2.0/24"], "PersistentKeepalive": [ "15" ] } + }, + "txpower": { + "dbm": [ "auto", "30", "20", "17", "10", "6", "3", "1", "0" ] } } diff --git a/includes/functions.php b/includes/functions.php index 2f1c502b..a3ffbf45 100755 --- a/includes/functions.php +++ b/includes/functions.php @@ -152,15 +152,16 @@ function getDefaultNetValue($svc,$iface,$key) * Returns default options for the specified service * * @param string $svc + * @param string $key * @return object $json */ -function getDefaultNetOpts($svc) +function getDefaultNetOpts($svc,$key) { $json = json_decode(file_get_contents(RASPI_CONFIG_NETWORK), true); if ($json === null) { return false; } else { - return $json[$svc]['options']; + return $json[$svc][$key]; } } @@ -774,4 +775,4 @@ function preg_only_match($pat,$haystack) { function qr_encode($str) { return preg_replace('/(? 'WPA', 2 => 'WPA2', 3 => 'WPA+WPA2', 'none' => _("None")); $arrEncType = array('TKIP' => 'TKIP', 'CCMP' => 'CCMP', 'TKIP CCMP' => 'TKIP+CCMP'); + $arrTxPower = getDefaultNetOpts('txpower','dbm'); $managedModeEnabled = false; exec("ip -o link show | awk -F': ' '{print $2}'", $interfaces); sort($interfaces); @@ -102,6 +103,7 @@ function DisplayHostAPDConfig() "selectedHwMode", "arrSecurity", "arrEncType", + "arrTxPower", "arrHostapdConf" ) ); @@ -306,13 +308,13 @@ function SaveHostAPDConfig($wpa_array, $enc_types, $modes, $interfaces, $status) $ip_address.= (!preg_match('/.*\/\d+/', $ip_address)) ? '/'.mask2cidr($netmask) : null; if ($bridgedEnable == 1) { - $config = array_keys(getDefaultNetOpts('dhcp')); + $config = array_keys(getDefaultNetOpts('dhcp','options')); $config[] = PHP_EOL.'# RaspAP br0 configuration'; $config[] = 'denyinterfaces eth0 wlan0'; $config[] = 'interface br0'; $config[] = PHP_EOL; } elseif ($wifiAPEnable == 1) { - $config = array_keys(getDefaultNetOpts('dhcp')); + $config = array_keys(getDefaultNetOpts('dhcp','options')); $config[] = PHP_EOL.'# RaspAP uap0 configuration'; $config[] = 'interface uap0'; $config[] = 'static ip_address='.$ip_address; diff --git a/installers/raspap.sudoers b/installers/raspap.sudoers index 93389d4d..355fd8eb 100644 --- a/installers/raspap.sudoers +++ b/installers/raspap.sudoers @@ -32,6 +32,7 @@ www-data ALL=(ALL) NOPASSWD:/sbin/ip link set wlan[0-9] up www-data ALL=(ALL) NOPASSWD:/sbin/ip -s a f label wlan[0-9] www-data ALL=(ALL) NOPASSWD:/sbin/ifup * www-data ALL=(ALL) NOPASSWD:/sbin/ifdown * +www-data ALL=(ALL) NOPASSWD:/sbin/iw www-data ALL=(ALL) NOPASSWD:/bin/cp /etc/raspap/networking/dhcpcd.conf /etc/dhcpcd.conf www-data ALL=(ALL) NOPASSWD:/etc/raspap/hostapd/enablelog.sh www-data ALL=(ALL) NOPASSWD:/etc/raspap/hostapd/disablelog.sh diff --git a/templates/hostapd/advanced.php b/templates/hostapd/advanced.php index f7c9ee93..579e166c 100644 --- a/templates/hostapd/advanced.php +++ b/templates/hostapd/advanced.php @@ -1,3 +1,4 @@ +' . var_export($arrTxPower, true) . ''; ?>

@@ -52,6 +53,17 @@

+
+
+ + "> + + +
+
+
From 643afe09e8905c98f7b34dd8a1ec3a36b3d19802 Mon Sep 17 00:00:00 2001 From: billz Date: Tue, 20 Apr 2021 17:53:09 +0100 Subject: [PATCH 2/4] Set txpower w/ iw, persist value in UI --- includes/hostapd.php | 18 +++++++++++++++++- templates/hostapd/advanced.php | 3 +-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/includes/hostapd.php b/includes/hostapd.php index b87b1e67..8ed66946 100755 --- a/includes/hostapd.php +++ b/includes/hostapd.php @@ -32,6 +32,10 @@ function DisplayHostAPDConfig() exec("iw reg get | awk '/country / { sub(/:/,\"\",$2); print $2 }'", $country_code); + $cmd = "iw dev ".$_SESSION['ap_interface']." info | awk '$1==\"txpower\" {print $2}'"; + exec($cmd, $txpower); + $txpower = intval($txpower[0]); + if (!RASPI_MONITOR_ENABLED) { if (isset($_POST['SaveHostAPDSettings'])) { SaveHostAPDConfig($arrSecurity, $arrEncType, $arr80211Standard, $interfaces, $status); @@ -62,7 +66,7 @@ function DisplayHostAPDConfig() } exec('cat '. RASPI_HOSTAPD_CONFIG, $hostapdconfig); - exec('iwgetid '. $_POST['interface']. ' -r', $wifiNetworkID); + exec('iwgetid '. $_POST['interface'].' -r', $wifiNetworkID); if (!empty($wifiNetworkID[0])) { $managedModeEnabled = true; } @@ -90,6 +94,17 @@ function DisplayHostAPDConfig() if (!isset($arrConfig['country_code']) && isset($country_code[0])) { $arrConfig['country_code'] = $country_code[0]; } + // set txpower with iw if value is non-default ('auto') + if (isset($_POST['txpower']) && ($_POST['txpower'] != 'auto')) { + $sdBm = $_POST['txpower'] * 100; + exec('sudo /sbin/iw dev '.$_POST['interface'].' set txpower fixed '.$sdBm, $return); + $status->addMessage('Setting transmit power to '.$_POST['txpower'].' dBm.', 'success'); + $txpower = $_POST['txpower']; + } elseif ($_POST['txpower'] == 'auto') { + exec('sudo /sbin/iw dev '.$_POST['interface'].' set txpower auto', $return); + $status->addMessage('Setting transmit power to '.$_POST['txpower'].'.', 'success'); + $txpower = $_POST['txpower']; + } echo renderTemplate( "hostapd", compact( @@ -104,6 +119,7 @@ function DisplayHostAPDConfig() "arrSecurity", "arrEncType", "arrTxPower", + "txpower", "arrHostapdConf" ) ); diff --git a/templates/hostapd/advanced.php b/templates/hostapd/advanced.php index 579e166c..447623f8 100644 --- a/templates/hostapd/advanced.php +++ b/templates/hostapd/advanced.php @@ -1,4 +1,3 @@ -' . var_export($arrTxPower, true) . ''; ?>

@@ -58,7 +57,7 @@ ">
From 14b6a72105ee4affce1a26cc0ea06f1ef4cfe0d8 Mon Sep 17 00:00:00 2001 From: billz Date: Tue, 20 Apr 2021 20:00:40 +0100 Subject: [PATCH 3/4] Add text-muted to tooltip, revise placement + text --- templates/hostapd/advanced.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/templates/hostapd/advanced.php b/templates/hostapd/advanced.php index 447623f8..f331734b 100644 --- a/templates/hostapd/advanced.php +++ b/templates/hostapd/advanced.php @@ -55,11 +55,11 @@
- "> + "> - + txpower option for the AP interface and the configured country."); ?>
@@ -67,7 +67,7 @@
" aria-describedby="max_num_sta_help"> - + max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies.") ?>
From 3ee38e6abe2dd62f8887a735c75e75a822225f29 Mon Sep 17 00:00:00 2001 From: billz Date: Tue, 20 Apr 2021 20:01:25 +0100 Subject: [PATCH 4/4] Update en_US locale w/ new messages + compile .mo --- locale/en_US/LC_MESSAGES/messages.mo | Bin 25717 -> 26387 bytes locale/en_US/LC_MESSAGES/messages.po | 13 +++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/locale/en_US/LC_MESSAGES/messages.mo b/locale/en_US/LC_MESSAGES/messages.mo index cd410c69d72f88d6f60dfe8efed0ca700e0a7c49..f51f7c62d77de2fcf26b546fbdae30f2fa79006b 100644 GIT binary patch literal 26387 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 G_5TH!Cm{U* diff --git a/locale/en_US/LC_MESSAGES/messages.po b/locale/en_US/LC_MESSAGES/messages.po index 5713516c..a321f2b7 100644 --- a/locale/en_US/LC_MESSAGES/messages.po +++ b/locale/en_US/LC_MESSAGES/messages.po @@ -528,8 +528,8 @@ msgstr "Hide SSID in broadcast" msgid "Maximum number of clients" msgstr "Maximum number of clients" -msgid "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." -msgstr "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." +msgid "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." +msgstr "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." msgid "Beacon interval" msgstr "Beacon interval" @@ -549,6 +549,15 @@ msgstr "Close" msgid "Enable this option to log hostapd activity." msgstr "Enable this option to log hostapd activity." +msgid "Transmit power (dBm)" +msgstr "Transmit power (dBm)" + +msgid "Sets the txpower option for the AP interface and the configured country." +msgstr "Sets the txpower option for the AP interface and the configured country." + +msgid "dBm is a unit of level used to indicate that a power ratio is expressed in decibels (dB) with reference to one milliwatt (mW). 30 dBm is equal to 1000 mW, while 0 dBm equals 1.25 mW." +msgstr "dBm is a unit of level used to indicate that a power ratio is expressed in decibels (dB) with reference to one milliwatt (mW). 30 dBm is equal to 1000 mW, while 0 dBm equals 1.25 mW." + #: includes/networking.php msgid "Summary" msgstr "Summary"