network-functions.pl: Improve wifi_get_link_quality

Message ID 20210723110942.679-1-hofmann@leo-andres.de
State Accepted
Commit 6dd084c22d05271c205a3bacf86da7689e4e3dbb
Headers
Series network-functions.pl: Improve wifi_get_link_quality |

Commit Message

Leo-Andres Hofmann July 23, 2021, 11:09 a.m. UTC
  iwconfig doesn't return values for "Link Quality" if the interface
is disconnected, causing a division by zero error. If there are odd
values, the resulting percentage may contain many decimal places.

This patch makes wifi_get_link_quality return zero instead of failing
and rounds the percentage to a more meaningful integer.

Signed-off-by: Leo-Andres Hofmann <hofmann@leo-andres.de>
---
 config/cfgroot/network-functions.pl | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
  

Comments

Michael Tremer Aug. 4, 2021, 2:36 p.m. UTC | #1
Hello,

Good catch :)

Reviewed-by: Michael Tremer <michael.tremer@ipfire.org>

-Michael

> On 23 Jul 2021, at 13:09, Leo-Andres Hofmann <hofmann@leo-andres.de> wrote:
> 
> iwconfig doesn't return values for "Link Quality" if the interface
> is disconnected, causing a division by zero error. If there are odd
> values, the resulting percentage may contain many decimal places.
> 
> This patch makes wifi_get_link_quality return zero instead of failing
> and rounds the percentage to a more meaningful integer.
> 
> Signed-off-by: Leo-Andres Hofmann <hofmann@leo-andres.de>
> ---
> config/cfgroot/network-functions.pl | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/config/cfgroot/network-functions.pl b/config/cfgroot/network-functions.pl
> index b7a840559..c0abc76b5 100644
> --- a/config/cfgroot/network-functions.pl
> +++ b/config/cfgroot/network-functions.pl
> @@ -403,7 +403,11 @@ sub wifi_get_link_quality($) {
> 
> 	my ($cur, $max) = $status =~ /Link Quality=(\d+)\/(\d+)/;
> 
> -	return $cur * 100 / $max;
> +	if($max > 0) {
> +		return sprintf('%.0f', ($cur * 100) / $max);
> +	}
> +
> +	return 0;
> }
> 
> sub wifi_get_signal_level($) {
> -- 
> 2.27.0.windows.1
>
  

Patch

diff --git a/config/cfgroot/network-functions.pl b/config/cfgroot/network-functions.pl
index b7a840559..c0abc76b5 100644
--- a/config/cfgroot/network-functions.pl
+++ b/config/cfgroot/network-functions.pl
@@ -403,7 +403,11 @@  sub wifi_get_link_quality($) {
 
 	my ($cur, $max) = $status =~ /Link Quality=(\d+)\/(\d+)/;
 
-	return $cur * 100 / $max;
+	if($max > 0) {
+		return sprintf('%.0f', ($cur * 100) / $max);
+	}
+
+	return 0;
 }
 
 sub wifi_get_signal_level($) {