From 38250dafc448bbb5f12e1a02d39f8ab3acab8ccb Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Thu, 15 May 2008 14:25:55 -0700 Subject: Use perl to read sysfs directly No need to use cat command to read file, just use perl file i/o --- scripts/vyatta-show-interfaces.pl | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'scripts') diff --git a/scripts/vyatta-show-interfaces.pl b/scripts/vyatta-show-interfaces.pl index 7cacb57..9046c17 100644 --- a/scripts/vyatta-show-interfaces.pl +++ b/scripts/vyatta-show-interfaces.pl @@ -107,12 +107,23 @@ sub get_intf_description { } } +sub get_sysfs_value { + my ($intf, $name) = @_; + + open (my $statf, '<', "/sys/class/net/$intf/$name") + or die "Can't open statistics file /sys/class/net/$intf/$name"; + + my $value = <$statf>; + close $statf; + return $value; +} + sub get_intf_stats { my $intf = shift; my %stats = (); foreach my $var (@rx_stat_vars, @tx_stat_vars) { - $stats{$var} = `cat /sys/class/net/$intf/statistics/$var`; + $stats{$var} = get_sysfs_value($intf, "statistics/$var"); } return %stats; } @@ -176,8 +187,8 @@ sub get_state_link { my $IFF_UP = 0x1; my ($state, $link); - my $flags = `cat /sys/class/net/$intf/flags 2> /dev/null`; - my $carrier = `cat /sys/class/net/$intf/carrier 2> /dev/null`; + my $flags = get_sysfs_value($intf, 'flags'); + my $carrier = get_sysfs_value($intf, 'carrier'); chomp $flags; chomp $carrier; my $hex_flags = hex($flags); if ($hex_flags & $IFF_UP) { -- cgit v1.2.3