summaryrefslogtreecommitdiffstats
path: root/cluster/data/gen_modules_conf.pl.pl
blob: 0fa8e265f24cb61ffaeeaf8d45bf7c653935eb8b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/usr/bin/perl

use list_modules;

my %kinds = (
    scsi => 'disk/scsi|hardware_raid',
    network => 'network/main|usb|gigabit',
);

my %kinds2all_modules = map { 
    $_ => [ list_modules::category2modules($kinds{$_}) ];
} keys %kinds;

$kinds2all_modules{usb} = [ qw(usb-uhci usb-ohci ehci-hcd) ];

use Data::Dumper;
print Data::Dumper->Dump([\%kinds2all_modules], ['$kinds2all_modules']);

print <<'EOF';
my @l = map { /^(\S+)\s*:/ ? $1 : () } `lspcidrake`;

my %kinds2modules = map { 
    $_ => [ intersection(\@l, $kinds2all_modules->{$_}) ];
} qw(usb scsi);

$kinds2modules{network} = [
  grep {
	  my $l = $_;
	  scalar grep { $_ eq $l } @{ $kinds2all_modules->{network} }
  } @l
];

if (my @scsi = @{$kinds2modules{scsi}}) {
    print "probeall scsi_hostadapter ", join(" ", @scsi), "\n";
}
if (my @usb = @{$kinds2modules{usb}}) {
    print "probeall usb-interface ", join(" ", @usb), "\n";
}
my $eth = 0;
foreach (@{$kinds2modules{network}}) {
    print "alias eth$eth $_\n";
    $eth++;
}

sub intersection { my (%l, @m); @l{@{shift @_}} = (); foreach (@_) { @m = grep { exists $l{$_} } @$_; %l = (); @l{@m} = () } keys %l }
EOF