# 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. #
###############################################################################
# #
# 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 #
# 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() {
}
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;