1 |
--- e-smith-lib-2.2.0/root/usr/lib/perl5/site_perl/esmith/ethernet.pm 2006-10-12 01:14:18.000000000 +1000 |
2 |
+++ e-smith-lib-2.2.0/root/usr/lib/perl5/site_perl/esmith/ethernet.pm.new 2010-02-05 18:59:46.000000000 +1100 |
3 |
@@ -26,204 +26,6 @@ |
4 |
|
5 |
This module contains routines for |
6 |
|
7 |
-=cut |
8 |
- |
9 |
-#---------------------------------------------------------------------- |
10 |
-# Private variables |
11 |
-#---------------------------------------------------------------------- |
12 |
- |
13 |
-my %private_pci_network_cards; |
14 |
-my %private_pci_network_drivers; |
15 |
- |
16 |
-BEGIN |
17 |
-{ |
18 |
- |
19 |
- # All the routines below need the arrays, so populate them on entry. |
20 |
- |
21 |
- my $proc_version = "/proc/version"; |
22 |
- |
23 |
- open( VERSION, "$proc_version" ) |
24 |
- or warn "Could not open $proc_version for reading. $!\n"; |
25 |
- |
26 |
- my $kernel = ( split( ' ', <VERSION> ) )[2]; |
27 |
- close VERSION; |
28 |
- |
29 |
- my @modules_path = ( |
30 |
- "/lib/modules/" . $kernel . "/kernel/net", |
31 |
- "/lib/modules/" . $kernel . "/kernel/drivers/net", |
32 |
- "/lib/modules/" . $kernel . "/unsupported/drivers/net", |
33 |
- "/lib/modules/" . $kernel . "/kernel/drivers/addon", |
34 |
- ); |
35 |
- |
36 |
- sub find_modules |
37 |
- { |
38 |
- my @paths = @_; |
39 |
- my %modules_hash = (); |
40 |
- local *DIR; |
41 |
- foreach my $path (@paths) |
42 |
- { |
43 |
- next unless -d $path; |
44 |
- opendir (DIR, $path) |
45 |
- or die "Failed to open directory $path: $!\n"; |
46 |
- while (my $entry = readdir(DIR)) |
47 |
- { |
48 |
- next if $entry =~ /^\./; |
49 |
- my $fullpath = "$path/$entry"; |
50 |
- if (-d $fullpath) |
51 |
- { |
52 |
- %modules_hash = (%modules_hash, find_modules($fullpath)); |
53 |
- } |
54 |
- else |
55 |
- { |
56 |
- if ($entry =~ /\.k?o$/) |
57 |
- { |
58 |
- $entry =~ s/(.+)\.k?o$//; |
59 |
- $modules_hash{$1} = 1; |
60 |
- } |
61 |
- } |
62 |
- } |
63 |
- closedir(DIR); |
64 |
- } |
65 |
- return %modules_hash; |
66 |
- } |
67 |
- |
68 |
- my %network_drivers = find_modules(@modules_path); |
69 |
- |
70 |
- my $pcitable = "/usr/share/hwdata/pcitable"; |
71 |
- |
72 |
- unless ( open( PCITABLE, $pcitable ) |
73 |
- || open( PCITABLE, $pcitable = "/usr/share/kudzu/pcitable" ) ) |
74 |
- { |
75 |
- warn "Could not open pci table $pcitable: $!\n"; |
76 |
- return; |
77 |
- } |
78 |
- |
79 |
- my %descriptions; |
80 |
- |
81 |
- while (<PCITABLE>) |
82 |
- { |
83 |
- next if (/^\s*#|^\s*$/); |
84 |
- |
85 |
- chomp; |
86 |
- my @f = split(/\t/); |
87 |
- |
88 |
- next if ( $f[2] =~ /^0x/ ); # Can't handle sub vendor IDs yet. |
89 |
- |
90 |
- $f[0] =~ s/^0x//; |
91 |
- $f[1] =~ s/^0x//; |
92 |
- $f[2] =~ s/"//g; |
93 |
- # Gracefully handle CentOS4 pcitable format |
94 |
- $f[3] ||= "(no description)"; |
95 |
- $f[3] =~ s/"//g; |
96 |
- |
97 |
- if ( exists $network_drivers{ $f[2] } ) |
98 |
- { |
99 |
- my $card = $f[0] . ":" . $f[1]; |
100 |
- $private_pci_network_cards{$card}{driver} = $f[2]; |
101 |
- $private_pci_network_cards{$card}{description} = $f[3]; |
102 |
- |
103 |
- my $description = $f[3]; |
104 |
- $description =~ s/\|.*//; |
105 |
- |
106 |
- if ( exists $private_pci_network_drivers{ $f[2] } ) |
107 |
- { |
108 |
- unless ( exists $descriptions{ $f[2] . $description } ) |
109 |
- { |
110 |
- $private_pci_network_drivers{ $f[2] } .= " or $description"; |
111 |
- ++$descriptions{ $f[2] . $description }; |
112 |
- } |
113 |
- } |
114 |
- else |
115 |
- { |
116 |
- $private_pci_network_drivers{ $f[2] } = $description; |
117 |
- ++$descriptions{ $f[2] . $description }; |
118 |
- } |
119 |
- |
120 |
- } |
121 |
- } |
122 |
- |
123 |
- close PCITABLE; |
124 |
-} |
125 |
- |
126 |
-=pod |
127 |
- |
128 |
-=head2 listDrivers(); |
129 |
- |
130 |
-List the available drivers |
131 |
- |
132 |
-=cut |
133 |
- |
134 |
-sub listDrivers () |
135 |
-{ |
136 |
- my $driver; |
137 |
- my $drivers = ''; |
138 |
- |
139 |
- return "\"unknown driver\"\t\"unknown description\" " |
140 |
- unless ( scalar keys %private_pci_network_drivers ); |
141 |
- |
142 |
- foreach $driver ( sort keys %private_pci_network_drivers ) |
143 |
- { |
144 |
- $drivers .= |
145 |
- "\"" . $driver . "\"\t\"" |
146 |
- . $private_pci_network_drivers{$driver} |
147 |
- . " based adapter\" "; |
148 |
- } |
149 |
- |
150 |
- return $drivers; |
151 |
-} |
152 |
- |
153 |
-=pod |
154 |
- |
155 |
-=head2 listAdapters(); |
156 |
- |
157 |
-List the available adapter cards |
158 |
- |
159 |
-=cut |
160 |
- |
161 |
-sub listAdapters () |
162 |
-{ |
163 |
- my $cards = ''; |
164 |
- |
165 |
- return "\"unknown driver\"\t\"unknown adapter card\" " |
166 |
- unless ( scalar keys %private_pci_network_cards ); |
167 |
- |
168 |
- foreach ( sort private_card_by_driver keys %private_pci_network_cards ) |
169 |
- { |
170 |
- $cards .= "\"" |
171 |
- . $private_pci_network_cards{$_}{driver} |
172 |
- . "\"\t\"" |
173 |
- . $private_pci_network_cards{$_}{description} . "\" "; |
174 |
- } |
175 |
- |
176 |
- return $cards; |
177 |
-} |
178 |
- |
179 |
-=pod |
180 |
- |
181 |
-=head2 lookupAdapter($adapter); |
182 |
- |
183 |
-Find the driver for a particular card |
184 |
- |
185 |
-=cut |
186 |
- |
187 |
-sub lookupAdapter ($) |
188 |
-{ |
189 |
- my $adapter = shift; |
190 |
- |
191 |
- return "unknown" |
192 |
- unless ( scalar keys %private_pci_network_cards |
193 |
- && $adapter ); |
194 |
- |
195 |
- foreach ( sort keys %private_pci_network_cards ) |
196 |
- { |
197 |
- if ( $private_pci_network_cards{$_}{description} eq $adapter ) |
198 |
- { |
199 |
- return $private_pci_network_cards{$_}{driver}; |
200 |
- } |
201 |
- } |
202 |
- |
203 |
- return "unknown"; |
204 |
-} |
205 |
|
206 |
=pod |
207 |
|
208 |
@@ -237,6 +39,7 @@ |
209 |
{ |
210 |
my @devs; |
211 |
my $r; |
212 |
+ local $ENV{PATH} = "/bin:/sbin:/usr/bin:/usr/sbin"; |
213 |
unless (open(HWC, "/usr/sbin/kudzu --probe --class network|")) |
214 |
{ |
215 |
warn "Could not run kudzu probe: $!"; |
216 |
@@ -263,28 +66,11 @@ |
217 |
{ |
218 |
$adapters .= |
219 |
"EthernetDriver" . $index++ . "\t" . $nic->{driver} . "\t" |
220 |
- . $nic->{desc} . "\n"; |
221 |
+ . $nic->{'network.hwaddr'} . "\t" . $nic->{desc} . "\n"; |
222 |
} |
223 |
return $adapters; |
224 |
} |
225 |
|
226 |
-#---------------------------------------------------------------------- |
227 |
-# Private method. Sort adapters by their driver type. |
228 |
-#---------------------------------------------------------------------- |
229 |
- |
230 |
-sub private_card_by_driver () |
231 |
-{ |
232 |
- |
233 |
- # Sort the network cards by their driver type |
234 |
- |
235 |
- $private_pci_network_cards{$a}{driver} |
236 |
- cmp $private_pci_network_cards{$b}{driver}; |
237 |
-} |
238 |
- |
239 |
- |
240 |
-END |
241 |
-{ |
242 |
-} |
243 |
|
244 |
#---------------------------------------------------------------------- |
245 |
# Return one to make the import process return success. |