git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@5308 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
		
			
				
	
	
		
			163 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			163 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
 | 
						|
 | 
						|
package xCAT::FSPinv;
 | 
						|
use strict;
 | 
						|
use Getopt::Long;
 | 
						|
use xCAT::PPCcli qw(SUCCESS EXPECT_ERROR RC_ERROR NR_ERROR);
 | 
						|
use xCAT::Usage;
 | 
						|
use xCAT::PPCinv;
 | 
						|
use Data::Dumper;
 | 
						|
 | 
						|
##########################################
 | 
						|
# Maps fsp-api attributes to text
 | 
						|
##########################################
 | 
						|
my @licmap = (
 | 
						|
    ["ecnumber",               "Release Level  "],
 | 
						|
    ["activated_level",        "Active Level   "],
 | 
						|
    ["installed_level",        "Installed Level"],
 | 
						|
    ["accepted_level",         "Accepted Level "],
 | 
						|
    ["curr_ecnumber_a",        "Release Level A"],
 | 
						|
    ["curr_level_a",           "Level A        "],
 | 
						|
    ["curr_ecnumber_b",        "Release Level B"],
 | 
						|
    ["curr_level_b",           "Level B        "],
 | 
						|
    ["curr_ecnumber_primary",  "Release Level Primary"],
 | 
						|
    ["curr_level_primary",     "Level Primary  "],
 | 
						|
    ["curr_ecnumber_secondary","Release Level Secondary"],
 | 
						|
    ["curr_level_secondary",   "Level Secondary"]
 | 
						|
);
 | 
						|
 | 
						|
##########################################################################
 | 
						|
# Parse the command line for options and operands 
 | 
						|
##########################################################################
 | 
						|
sub parse_args {
 | 
						|
    xCAT::PPCinv::parse_args(@_);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
##########################################################################
 | 
						|
# Returns FSP/BPA firmware information
 | 
						|
##########################################################################
 | 
						|
sub firmware {
 | 
						|
 | 
						|
    my $request = shift;
 | 
						|
    my $hash    = shift;
 | 
						|
    my @result;
 | 
						|
 
 | 
						|
    # print "in FSPinv \n";
 | 
						|
    #print Dumper($request);
 | 
						|
    #print Dumper($hash);
 | 
						|
 | 
						|
    ####################################
 | 
						|
    # FSPinv with firm command is grouped by hardware control point
 | 
						|
    # In FSPinv, the hcp is the related fsp.  
 | 
						|
    ####################################
 | 
						|
    
 | 
						|
    # Example of $hash.    
 | 
						|
    #VAR1 = {
 | 
						|
    #	          '9110-51A*1075ECF' => {
 | 
						|
    #                                   'Server-9110-51A-SN1075ECF' => [
 | 
						|
    #    	                                                          0,
 | 
						|
    #		                                                          0,
 | 
						|
    #                           									  '9110-51A*1075ECF',
 | 
						|
    #							                            		  'fsp1_name',
 | 
						|
    #				                            					  'fsp',
 | 
						|
    #									                               0
 | 
						|
    #									                               ]
 | 
						|
    #					                }
 | 
						|
    # 	   };
 | 
						|
 | 
						|
    while (my ($mtms,$h) = each(%$hash) ) {
 | 
						|
        while (my ($name,$d) = each(%$h) ) {
 | 
						|
 | 
						|
            #####################################
 | 
						|
            # Command only supported on FSP/BPA/LPARs 
 | 
						|
            #####################################
 | 
						|
            if ( @$d[4] !~ /^(fsp|bpa|lpar)$/ ) {
 | 
						|
                push @result, 
 | 
						|
                    [$name,"Information only available for CEC/BPA/LPAR",RC_ERROR];
 | 
						|
                next; 
 | 
						|
            }
 | 
						|
	       #################
 | 
						|
	       #For support on  Lpars, the flag need to be changed.
 | 
						|
	       ##########
 | 
						|
	       if(@$d[4] eq "lpar")	{
 | 
						|
		        @$d[4] = "fsp";
 | 
						|
			    @$d[0] = 0;
 | 
						|
	       }
 | 
						|
           my $values = xCAT::Utils::fsp_api_action( $name, $d, "list_firmware_level");
 | 
						|
           my $Rc = @$values[2];
 | 
						|
   	       my $data = @$values[1];
 | 
						|
           #print "values";
 | 
						|
           #print Dumper($values); 
 | 
						|
           #####################################
 | 
						|
           # Return error
 | 
						|
           #####################################
 | 
						|
           if ( $Rc != SUCCESS ) {
 | 
						|
                push @result, [$name,$data,$Rc];
 | 
						|
                next; 
 | 
						|
            }
 | 
						|
            
 | 
						|
	        #####################################
 | 
						|
            # Format fsp-api results
 | 
						|
            #####################################
 | 
						|
            my $val;
 | 
						|
            foreach $val ( @licmap ) {  
 | 
						|
                if ( $data =~ /@$val[0]=(\w+)/ ) {
 | 
						|
                    push @result, [$name,"@$val[1]: $1",$Rc];
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
    return( \@result );
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
##########################################################################
 | 
						|
# Returns firmware version 
 | 
						|
##########################################################################
 | 
						|
sub firm {
 | 
						|
    return( firmware(@_) );
 | 
						|
}
 | 
						|
 | 
						|
##########################################################################
 | 
						|
# Returns serial-number
 | 
						|
##########################################################################
 | 
						|
sub serial {
 | 
						|
}
 | 
						|
 | 
						|
sub vpd {
 | 
						|
}
 | 
						|
 | 
						|
sub bus {
 | 
						|
}
 | 
						|
 | 
						|
sub config {
 | 
						|
}
 | 
						|
 | 
						|
##########################################################################
 | 
						|
# Returns machine-type-model
 | 
						|
##########################################################################
 | 
						|
sub model {
 | 
						|
}
 | 
						|
 | 
						|
##########################################################################
 | 
						|
# Returns all inventory information
 | 
						|
##########################################################################
 | 
						|
sub all {
 | 
						|
 | 
						|
    my @result = ( 
 | 
						|
        @{vpd(@_)}, 
 | 
						|
        @{bus(@_)}, 
 | 
						|
        @{config(@_)},
 | 
						|
        @{firmware(@_)} 
 | 
						|
    );       
 | 
						|
    return( \@result );
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
1;
 | 
						|
 | 
						|
 |