/usr/local/CPAN/Ocsinventory-Agent/Ocsinventory/Agent/Backend/OS/Solaris/Bios.pm
package Ocsinventory::Agent::Backend::OS::Solaris::Bios;
# SPARC
# $ showrev
#Hostname: 157501s021plc
#Hostid: 83249bbf
#Release: 5.10
#Kernel architecture: sun4u
#Application architecture: sparc
#Hardware provider: Sun_Microsystems
#Domain: be.cnamts.fr
#Kernel version: SunOS 5.10 Generic_118833-17
#
# $ prtconf -pv (-b would be great...but doesn't work before S10)
#System Configuration: Sun Microsystems sun4u
#Memory size: 16384 Megabytes
#System Peripherals (PROM Nodes):
#
#Node 0xf0819f00
# scsi-initiator-id: 00000007
# node#: 00000000
# #size-cells: 00000002
# stick-frequency: 00bebc20
# clock-frequency: 08f0d180
# idprom: 01840014.4f4162cb.45255cf4.4162cb16.55555555.55555555.55555555.55555555
# breakpoint-trap: 0000007f
# device_type: 'gptwo'
# banner-name: 'Sun Fire E6900'
# compatible: 'SUNW,Serengeti'
# newio-addr: 00000001
# name: 'SUNW,Sun-Fire'
# X64
# $ showrev
#Hostname: stlaurent
#Hostid: 403100b
#Release: 5.10
#Kernel architecture: i86pc
#Application architecture: i386
#Hardware provider:
#Domain:
#Kernel version: SunOS 5.10 Generic_127112-07
#
# $ smbios -t SMB_TYPE_SYSTEM
#ID SIZE TYPE
#1 76 SMB_TYPE_SYSTEM (system information)
#
# Manufacturer: Sun Microsystems, Inc.
# Product: Sun Fire V40z
# Version: 00
# Serial Number: R00T34E0009
#
# UUID: be1630df-d130-41a4-be32-fd28bb4bd1ac
# Wake-Up Event: 0x6 (power switch)
# SKU Number:
# Family:
use strict;
sub check { can_run ("showrev") }
sub run {
my $params = shift;
my $inventory = $params->{inventory};
my( $SystemSerial , $SystemModel, $SystemManufacturer, $BiosManufacturer,
$BiosVersion, $BiosDate, $aarch);
foreach(`showrev`){
if(/^Application architecture:\s+(\S+)/){$SystemModel = $1};
if(/^Hardware provider:\s+(\S+)/){$SystemManufacturer = $1};
if(/^Application architecture:\s+(\S+)/){$aarch = $1};
}
if( $aarch eq "i386" ){
#
# For a Intel/AMD arch, we're using smbios
#
foreach(`/usr/sbin/smbios -t SMB_TYPE_SYSTEM`) {
if(/^\s*Manufacturer:\s*(.+)$/){$SystemManufacturer = $1};
if(/^\s*Serial Number:\s*(.+)$/){$SystemSerial = $1;}
if(/^\s*Product:\s*(.+)$/){$SystemModel = $1;}
}
foreach(`/usr/sbin/smbios -t SMB_TYPE_BIOS`) {
if(/^\s*Vendor:\s*(.+)$/){$BiosManufacturer = $1};
if(/^\s*Version String:\s*(.+)$/){$BiosVersion = $1};
if(/^\s*Release Date:\s*(.+)$/){$BiosDate = $1};
}
} elsif( $aarch eq "sparc" ) {
#
# For a Sparc arch, we're using prtconf
#
my $name;
my $OBPstring;
foreach(`/usr/sbin/prtconf -pv`) {
# prtconf is an awful thing to parse
if(/^\s*banner-name:\s*'(.+)'$/){$SystemModel = $1;}
unless ($name)
{ if(/^\s*name:\s*'(.+)'$/){$name = $1;} }
unless ($OBPstring) {
if(/^\s*version:\s*'(.+)'$/){
$OBPstring = $1;
# looks like : "OBP 4.16.4 2004/12/18 05:18"
# with further informations sometimes
if( $OBPstring =~ m@OBP\s+([\d|\.]+)\s+(\d+)/(\d+)/(\d+)@ ){
$BiosVersion = "OBP $1";
$BiosDate = "$2/$3/$4";
} else { $BiosVersion = $OBPstring }
}
}
}
$SystemModel .= " ($name)" if( $name );
if( -x "/opt/SUNWsneep/bin/sneep" ) {
chomp($SystemSerial = `/opt/SUNWsneep/bin/sneep`);
}
else {
$SystemSerial = "Please install package SUNWsneep";
}
}
# Writing data
$inventory->setBios ({
BVERSION => $BiosVersion,
BDATE => $BiosDate,
SMANUFACTURER => $SystemManufacturer,
SMODEL => $SystemModel,
SSN => $SystemSerial
});
}
1;