Fix problem where IPMI 1.5 timeouts would bug rather than properly report problem

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@13351 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
jbjohnso 2012-07-26 13:10:39 +00:00
parent f7fc5f7321
commit 2beaf85453

View File

@ -134,7 +134,7 @@ sub new {
$self->{'sessionid'} = [0,0,0,0]; # init session id
$self->{'authtype'}=0; # first messages will have auth type of 0
$self->{'ipmiversion'}='1.5'; # send first packet as 1.5
$self->{'timeout'}=2; #start at a quick timeout, increase on retry
$self->{'timeout'}=1; #start at a quick timeout, increase on retry
$self->{'seqlun'}=0; #the IPMB seqlun combo, increment by 4s
$self->{'logged'}=0;
return $self;
@ -242,14 +242,19 @@ sub session_activated {
0x85 => "Invalid session ID",
0x86 => $self->{userid}. " is not allowed to be Administrator or Administrator not allowed over network",
);
my @data = @{$rsp->{data}};
if ($code) {
my $errtxt = sprintf("ERROR: Unable to log in to BMC due to code %02xh",$code);
if ($localcodes{$code}) {
$errtxt .= " ($localcodes{$code})";
}
$self->{onlogon}->($errtxt, $self->{onlogon_args});
return;
}
if ($rsp->{error}) {
$self->{onlogon}->($rsp->{error}, $self->{onlogon_args});
return;
}
my @data = @{$rsp->{data}};
$self->{sessionid} = [splice @data,1,4];
$self->{sequencenumber}=$data[1]+($data[2]<<8)+($data[3]<<16)+($data[4]<<24);
$self->{sequencenumberbytes} = [splice @data,1,4];
@ -405,7 +410,7 @@ sub waitforrsp {
push @ipmiq,[$peerport,$data];
}
}
}
}
}
return scalar (keys %sessions_waiting);
}
@ -414,7 +419,7 @@ sub timedout {
my $self = shift;
$self->{timeout} = $self->{timeout}+1;
if ($self->{timeout} > 5) { #giveup, really
$self->{timeout}=2;
$self->{timeout}=1;
my $rsp={};
$rsp->{error} = "timeout";
$self->{ipmicallback}->($rsp,$self->{ipmicallback_args});
@ -712,6 +717,7 @@ sub parse_ipmi_payload {
$rsp->{cmd} = shift @payload;
$rsp->{code} = shift @payload;
$rsp->{data} = \@payload;
$self->{timeout}=1;
$self->{ipmicallback}->($rsp,$self->{ipmicallback_args});
return 0;
}