-Add feature to manipulate iDataplex thermal profiles
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@1616 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
parent
418960eba3
commit
645d9c8b83
@ -60,6 +60,9 @@ my %usage = (
|
||||
BMC specific:
|
||||
rspconfig <noderange> [ip|netmask|gateway|backupgateway|garp]
|
||||
rspconfig <noderange> [garp=<number of 1/2 second>]
|
||||
iDataplex specific:
|
||||
rspconfig <noderange> [thermprofile]
|
||||
rspconfig <noderange> [thermprofile=<two digit number from chassis>]
|
||||
MPA specific:
|
||||
rspconfig <noderange> [sshcfg|snmpcfg|build|pd1|pd2|network|swnet|ntp|textid]
|
||||
rspconfig <singlenode> [textid=name]
|
||||
|
@ -76,6 +76,15 @@ use xCAT::data::ipmigenericevents;
|
||||
use xCAT::data::ipmisensorevents;
|
||||
my $cache_version = 1;
|
||||
|
||||
my %idpxthermbytes = ( #Data to enact the profile quickly
|
||||
'0z' => [0x0A,0x37,0x41,0x3C,0x0a,0x0a,0x1e],
|
||||
'1a' => [0x0A,0x30,0x3C,0x3C,0x0a,0x0a,0x1e],
|
||||
'2b' => [0x0A,0x30,0x3C,0x3C,0x0a,0x0a,0x1e],
|
||||
'3c' => [0x0A,0x30,0x3C,0x3C,0x0a,0x0a,0x1e],
|
||||
'4d' => [0x0A,0x37,0x44,0x3C,0x0a,0x0a,0x1e],
|
||||
'5e' => [0x0A,0x37,0x44,0x3C,0x0a,0x0a,0x1e],
|
||||
'6f' => [0x0A,0x35,0x44,0x3C,0x0a,0x0a,0x1e],
|
||||
);
|
||||
my %codes = (
|
||||
0x00 => "Command Completed Normal",
|
||||
0xC0 => "Node busy, command could not be processed",
|
||||
@ -814,10 +823,14 @@ sub setnetinfo {
|
||||
if($subcommand eq "snmpdest") {
|
||||
$subcommand = "snmpdest1";
|
||||
}
|
||||
|
||||
|
||||
unless(defined($argument)) {
|
||||
return 0;
|
||||
}
|
||||
if ($subcommand eq "thermprofile") {
|
||||
return idpxthermprofile($argument);
|
||||
}
|
||||
if ($subcommand eq "alert" and $argument eq "on" or $argument =~ /^en/ or $argument =~ /^enable/) {
|
||||
$netfun = 0x10;
|
||||
@cmd = (0x12,0x9,0x1,0x18,0x11,0x00);
|
||||
@ -900,6 +913,32 @@ sub setnetinfo {
|
||||
sub getnetinfo {
|
||||
my $subcommand = shift;
|
||||
$subcommand =~ s/=.*//;
|
||||
if ($subcommand eq "thermprofile") {
|
||||
my $code;
|
||||
my @returnd;
|
||||
my $thermdata;
|
||||
foreach (0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6) {
|
||||
docmd(0x18,[0x52,0x15,0x40,0x1,$_],\@returnd);
|
||||
$code = $returnd[36-$authoffset];
|
||||
if ($code eq 0) {
|
||||
$thermdata.= sprintf("%02x ",$returnd[37-$authoffset]);
|
||||
} else {
|
||||
return (1,"Error reading thermal profile data for this server");
|
||||
}
|
||||
}
|
||||
chop($thermdata);
|
||||
my $validprofiles="";
|
||||
foreach (keys %idpxthermbytes) {
|
||||
if ($thermdata eq sprintf("%02x %02x %02x %02x %02x %02x %02x",@{$idpxthermbytes{$_}})) {
|
||||
$validprofiles.="$_,";
|
||||
}
|
||||
}
|
||||
if ($validprofiles) {
|
||||
chop($validprofiles);
|
||||
return (0,"The following thermal profiles are in effect: ".$validprofiles);
|
||||
}
|
||||
return (1,"Unable to identify current thermal profile: \"$thermdata\"");
|
||||
}
|
||||
|
||||
my $netfun = 0x30;
|
||||
my @cmd;
|
||||
@ -1187,6 +1226,44 @@ sub setboot {
|
||||
return($rc,$text);
|
||||
}
|
||||
|
||||
sub idpxthermprofile {
|
||||
#iDataplex thermal profiles as of 6/10/2008
|
||||
my $subcommand = lc(shift);
|
||||
my @returnd;
|
||||
my $netfun = 0xb8;
|
||||
my @cmd = (0x41,0x4d,0x4f,0x00,0x6f,0xfe,0x60,0,00,0,0,0,0,0xff);
|
||||
#Hash for extensibility
|
||||
my %thermprofiles = (
|
||||
'0z' => [0x37,0x41,0,0,0,0,6,0xa,0x3c,0xa,0xa,0x1e,0x6],
|
||||
'1a' => [0x30,0x3c,0,0,0,0,6,0xa,0x3c,0xa,0xa,0x1e,0x6],
|
||||
'2b' => [0x30,0x3c,0,0,0,0,6,0xa,0x3c,0xa,0xa,0x1e,0x6],
|
||||
'3c' => [0x30,0x3c,0,0,0,0,6,0xa,0x3c,0xa,0xa,0x1e,0x6],
|
||||
'4d' => [0x37,0x44,0,0,0,0,6,0xa,0x3c,0xa,0xa,0x1e,0x6],
|
||||
'5e' => [0x37,0x44,0,0,0,0,6,0xa,0x3c,0xa,0xa,0x1e,0x6],
|
||||
'6f' => [0x35,0x44,0,0,0,0,6,0xa,0x3c,0xa,0xa,0x1e,0x6],
|
||||
);
|
||||
if ($thermprofiles{$subcommand}) {
|
||||
push @cmd,@{$thermprofiles{$subcommand}};
|
||||
} else {
|
||||
return (1,"Not an understood thermal profile, expected a 2 hex digit value corresponding to chassis label on iDataplex server");
|
||||
}
|
||||
docmd(
|
||||
$netfun,
|
||||
\@cmd,
|
||||
\@returnd
|
||||
);
|
||||
#The BMC now understands the thermal profile, for immediate results, push to power supply now
|
||||
my @directbytes = @{$idpxthermbytes{$subcommand}};
|
||||
my $dindex=0;
|
||||
foreach (@directbytes) {
|
||||
@cmd = (0x52,0x15,0x40,0x0,0xe0+$dindex,$_);
|
||||
docmd(0x18,\@cmd,\@returnd);
|
||||
$dindex++;
|
||||
}
|
||||
return (0,"OK");
|
||||
}
|
||||
|
||||
|
||||
sub power {
|
||||
my $subcommand = shift;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user