speed.cgi: replave parsing of ip show output

latest ipfroute2 update change the output so this repkace it by reading /sys/class/net/*/statistics

Signed-off-by: Arne Fitzenreiter <arne_f@ipfire.org>
This commit is contained in:
Arne Fitzenreiter
2021-10-25 12:58:10 +02:00
parent 36b00b8ed1
commit a8dd6e98ba
2 changed files with 11 additions and 38 deletions

View File

@@ -4,7 +4,7 @@
# IPFire.org - A linux based firewall #
# Copyright (C) 2007-2021 IPFire Team <info@ipfire.org> #
# #
# This program is free software: you can redistribute it and/or modify #
# This program is free software: you c:an redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation, either version 3 of the License, or #
# (at your option) any later version. #

View File

@@ -2,7 +2,7 @@
###############################################################################
# #
# IPFire.org - A linux based firewall #
# Copyright (C) 2007 Michael Tremer & Christian Schmidt #
# Copyright (C) 2007-2021 IPFire Twan <info@ipfire.org> #
# #
# This program is free software: you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
@@ -25,28 +25,6 @@
# high system load #
###########################################OA##################################
#
# Returns the output of a shell command
sub General__system_output($) {
my @command = @_;
my $pid;
my @output = ();
unless ($pid = open(OUTPUT, "-|")) {
open(STDERR, ">&STDOUT");
exec { ${command[0]} } @command;
die "Could not execute @command: $!";
}
waitpid($pid, 0);
while (<OUTPUT>) {
push(@output, $_);
}
close(OUTPUT);
return @output;
}
#
# Function which will return the used interface for the red network zone (red0, ppp0, etc).
sub General__get_red_interface() {
@@ -79,21 +57,16 @@ foreach $field (@fields) {
}
my $interface = &General__get_red_interface();
my @data_now = &General__system_output("ip", "-s", "link", "show", "$interface");
my $lastline;
my $rxb_now = 0;
my $txb_now = 0;
foreach (@data_now) {
if ( $lastline =~ /RX/ ) {
@fields = split(/ /, $_);
$rxb_now = $fields[4];
} elsif ( $lastline =~ /TX/ ) {
@fields = split(/ /, $_);
$txb_now = $fields[4];
}
$lastline = $_;
}
open(RX, "/sys/class/net/$interface/statistics/rx_bytes") or die "Could not open /sys/class/net/$interface/statistics/rx_bytes";
my $rxb_now = <RX>;
close(RX);
chomp $rxb_now;
open(TX, "/sys/class/net/$interface/statistics/tx_bytes") or die "Could not open /sys/class/net/$interface/statistics/tx_bytes";
my $txb_now = <TX>;
close(TX);
chomp $txb_now;
my ($rx_kbs, $tx_kbs);
my $rxb_diff = $rxb_now - $rxb_last;