1 |
diff -Nur e-smith-lib-2.4.0/root/usr/share/perl5/vendor_perl/esmith/ethernet.pm e-smith-lib-2.4.0-nokudzu/root/usr/share/perl5/vendor_perl/esmith/ethernet.pm |
2 |
--- e-smith-lib-2.4.0/root/usr/share/perl5/vendor_perl/esmith/ethernet.pm 2013-01-25 17:09:11.000000000 +0100 |
3 |
+++ e-smith-lib-2.4.0-nokudzu/root/usr/share/perl5/vendor_perl/esmith/ethernet.pm 2013-01-31 18:22:05.610588921 +0100 |
4 |
@@ -9,6 +9,7 @@ |
5 |
#---------------------------------------------------------------------- |
6 |
|
7 |
use strict; |
8 |
+use File::Basename; |
9 |
|
10 |
=head1 NAME |
11 |
|
12 |
@@ -37,36 +38,52 @@ |
13 |
|
14 |
sub probeAdapters () |
15 |
{ |
16 |
- my @devs; |
17 |
- my $r; |
18 |
- local $ENV{PATH} = "/bin:/sbin:/usr/bin:/usr/sbin"; |
19 |
- unless (open(HWC, "/usr/sbin/kudzu --probe --class network|")) |
20 |
- { |
21 |
- warn "Could not run kudzu probe: $!"; |
22 |
- return ""; |
23 |
- } |
24 |
- while (<HWC>) |
25 |
- { |
26 |
- if (/^-/) |
27 |
- { |
28 |
- $r = {}; |
29 |
- push @devs, $r; |
30 |
- } |
31 |
- if (/(.+): (.+)/) |
32 |
- { |
33 |
- $r->{$1} = $2; |
34 |
- } |
35 |
- } |
36 |
- close HWC; |
37 |
- |
38 |
- my @nics = grep { $_->{device} && $_->{device} =~ /^eth/ } @devs; |
39 |
- my $adapters = ''; |
40 |
+ opendir(my $dh, "/sys/class/net") or die "Couldn't open /sys/class/net: $!"; |
41 |
+ my @nics = grep { $_ !~ m/^\./ } readdir($dh); |
42 |
+ closedir($dh); |
43 |
+ my $adapters = ''; |
44 |
my $index = 1; |
45 |
- foreach my $nic (@nics) |
46 |
- { |
47 |
- $adapters .= |
48 |
- "EthernetDriver" . $index++ . "\t" . $nic->{driver} . "\t" |
49 |
- . $nic->{'network.hwaddr'} . "\t" . $nic->{desc} . "\n"; |
50 |
+ foreach my $nic (@nics){ |
51 |
+ next if ( |
52 |
+ # skip loopback |
53 |
+ $nic eq 'lo' || |
54 |
+ # skip non links |
55 |
+ !-l "/sys/class/net/$nic" || |
56 |
+ # skip wireless nics |
57 |
+ -d "/sys/class/net/$nic/wireless" || |
58 |
+ -l "/sys/class/net/$nic/phy80211" || |
59 |
+ # skip bridges |
60 |
+ -d "/sys/class/net/$nic/bridge" || |
61 |
+ # skip vlans |
62 |
+ -f "/proc/net/vlan/$nic" || |
63 |
+ # skip bonds |
64 |
+ -d "/sys/class/net/$nic/bonding" || |
65 |
+ # skip tun/tap |
66 |
+ -f "/sys/class/net/$nic/tun_flags" || |
67 |
+ # skip dummy |
68 |
+ -d "/sys/devices/virtual/net/$nic" |
69 |
+ ); |
70 |
+ # Now we should be left only wth ethernet adapters |
71 |
+ open HW, "/sys/class/net/$nic/address"; |
72 |
+ my $mac = join("", <HW>); |
73 |
+ chomp($mac); |
74 |
+ close HW; |
75 |
+ my $driver = basename (readlink "/sys/class/net/$nic/device/driver"); |
76 |
+ my $bus = basename (readlink "/sys/class/net/$nic/device/subsystem"); |
77 |
+ my $desc = $nic; |
78 |
+ if ($bus eq 'pci'){ |
79 |
+ my $dev = basename (readlink "/sys/class/net/$nic/device"); |
80 |
+ $desc = `/sbin/lspci -s $dev`; |
81 |
+ # Extract only description |
82 |
+ $desc =~ m/^.*:.*:\s+(.*)\s*/; |
83 |
+ $desc = $1; |
84 |
+ } |
85 |
+ elsif ($bus eq 'virtio'){ |
86 |
+ $desc = 'Virtio Network Device'; |
87 |
+ } |
88 |
+ # TODO: we should also try to get the description of USB devices |
89 |
+ $adapters .= "EthernetDriver" . $index++ . "\t" . $driver . "\t" . |
90 |
+ $mac . "\t" . "\"$desc\"" . "\n"; |
91 |
} |
92 |
return $adapters; |
93 |
} |