hotsanic |
Subversion Repositories: |
Compare with Previous - Blame - Download
#!/usr/bin/env perl
use warnings;
use diagnostics;
use lib "../../lib";
use HotSaNICparser;
use HotSaNICshellio;
my @CONFmod=HotSaNICparser::read_settings(".",$MODNAME);
my %devlist = ( "3_0" => "/dev/hda", "3_64" => "/dev/hdb", "22_0" => "/dev/hdc", "22_64" => "/dev/hdd",
"33_0" => "/dev/hde", "33_64" => "/dev/hdf", "34_0" => "/dev/hdg", "34_64" => "/dev/hdh",
"8_0" => "/dev/sda", "8_1" => "/dev/sdb", "8_2" => "/dev/sdc", "8_3" => "/dev/sdd",
"8_4" => "/dev/sde", "8_5" => "/dev/sdf", "8_6" => "/dev/sdg", "8_7" => "/dev/sdh",
"8_8" => "/dev/sdi", "8_9" => "/dev/sdj", "8_10" => "/dev/sdk", "8_11" => "/dev/sdl",
"8_12" => "/dev/sdm", "8_13" => "/dev/sdn", "8_14" => "/dev/sdo");
if ( ! -e "settings" ) { $OUTFILE="settings"; } else { $OUTFILE="settings.new"; }
open OUTFILE,">$OUTFILE" || die "could not open $MODNAME settings file for writing.\n";
print OUTFILE "# SHORT DESCRIPTION
#
# kernel version
# KERNEL=\"2.2\" for 2.1.x and 2.2.x kernels
# KERNEL=\"2.4\" for 2.3.x and 2.4.x kernels
#
";
if ($OUTFILE eq "settings.new") {
for (@CONFmod) { print OUTFILE $_,"\n" if /^KERNEL *=/; }
}
else {
my $version=HotSaNICparser::identify_kernel();
print OUTFILE "KERNEL=$version\n";
}
print OUTFILE "
# all entries have to be of the form:
# DEV=<device>,<device name>
#
# <device> the device-number as in /proc/stat -> disk_io
# for kernels < 2.3 \"0\" is the first drive, \"1\" the second ...
# <2.3 kernels support (unless patched) only 4 drives.
#
# <device name> a description for the device
#
# Example for Kernel >= 2.3:
# DEV=8_0,sda
# DEV=3_0,hda
# DEV=22_0,hdc
#
# Example for Kernel <= 2.2:
# DEV=0,hda
# DEV=1,hdb
#
";
if ($OUTFILE eq "settings.new") {
for (@CONFmod) { print OUTFILE $_,"\n" if /^DEV *=/; }
}
else {
if ($^O eq "netbsd") {
open RESULT,"/usr/sbin/iostat -Ix|";
while (<RESULT>) {
chomp;
($drv) = split / /, $_;
next if ($drv =~ /device/ || $drv =~ /md?/ ||$drv =~ /fd?/);
print OUTFILE "DEV=$drv,$drv\n";
}
}
elsif ($^O eq "linux") {
open STAT,"/proc/stat";
while (<STAT>) {
chomp;
if (/disk_io/) {
foreach (split) {
next if /disk_io:/;
my $major;
my $minor;
/\(([0-9]+),([0-9]+)\)/, $major=$1, $minor=$2;
$device=$devlist{$major."_$minor"};
if (HotSaNICshellio::askyesno("Use $device","y") eq "y") {
print OUTFILE "DEV=".$major."_$minor,$device\n";
}
}
last;
}
}
}
else { print "not supported yet, sorry\n"; }
}
close OUTFILE;
if ($OUTFILE eq "settings.new") {
HotSaNICparser::backup_file("settings");
rename "settings.new","settings";
}
print "Please check the settings file and adapt it to satisfy your needs.\n";
# kernel2.4 source-snip (/usr/src/linux/fs/proc/proc_misc.c) :
#
# proc_sprintf(page, &off, &len, "\ndisk_io: ");
#
# for (major = 0; major < DK_MAX_MAJOR; major++) {
# for (disk = 0; disk < DK_MAX_DISK; disk++) {
# int active = kstat.dk_drive[major][disk] +
# kstat.dk_drive_rblk[major][disk] +
# kstat.dk_drive_wblk[major][disk];
# if (active)
# proc_sprintf(page, &off, &len, "(%u,%u):(%u,%u,%u,%u,%u) ", major, disk,
# kstat.dk_drive[major][disk], kstat.dk_drive_rio[major][disk], kstat.dk_drive_rblk[major][disk],
# kstat.dk_drive_wio[major][disk], kstat.dk_drive_wblk[major][disk]);
# }
# }