package Ocsinventory::Agent::Backend::OS::BSD::Archs::Sparc; use strict; sub check{ my $arch; chomp($arch=`sysctl -n hw.machine`); $arch =~ /^sparc/; } sub run { my $params = shift; my $common = $params->{common}; my( $SystemSerial , $SystemModel, $SystemManufacturer, $BiosManufacturer, $BiosVersion, $BiosDate); my ( $processort , $processorn , $processors ); ### Get system serial with "sysctl kern.hostid" # # sysctl -n kern.hostid gives e.g. 0x807b65c on NetBSD # and 2155570635 on OpenBSD; we keep the hex form chomp ($SystemSerial = `sysctl -n kern.hostid`); if ( $SystemSerial =~ /^\d*$/ ) { # convert to NetBSD format $SystemSerial = sprintf ("0x%x",$SystemSerial); } $SystemSerial =~ s/^0x//; # remove 0x to make it appear as in the firmware ### Get system model and processor type in dmesg # # cannot use "sysctl hw.model" to get SystemModel # because it gives only the CPU on OpenBSD/sparc64 # # Examples of dmesg output : # # I) SPARC # a) NetBSD # mainbus0 (root): SUNW,SPARCstation-20: hostid 72362bb1 # cpu0 at mainbus0: TMS390Z50 v0 or TMS390Z55 @ 50 MHz, on-chip FPU # b) OpenBSD # mainbus0 (root): SUNW,SPARCstation-20 # cpu0 at mainbus0: TMS390Z50 v0 or TMS390Z55 @ 50 MHz, on-chip FPU # # II) SPARC64 # a) NetBSD # mainbus0 (root): SUNW,Ultra-1: hostid 807b65cb # cpu0 at mainbus0: SUNW,UltraSPARC @ 166.999 MHz, version 0 FPU # b) OpenBSD # mainbus0 (root): Sun Ultra 1 SBus (UltraSPARC 167MHz) # cpu0 at mainbus0: SUNW,UltraSPARC @ 166.999 MHz, version 0 FPU # c) FreeBSD # cpu0: Sun Microsystems UltraSparc-I Processor (167.00 MHz CPU) for (`dmesg`) { if (/^mainbus0 \(root\):\s*(.*)$/) { $SystemModel = $1; } if (/^cpu[^:]*:\s*(.*)$/i) { $processort = $1 unless $processort; } } $SystemModel || chomp ($SystemModel = `sysctl -n hw.model`); # for FreeBSD $SystemManufacturer = "SUN"; # some cleanup $SystemModel =~ s/SUNW,//; $SystemModel =~ s/[:\(].*$//; $SystemModel =~ s/^\s*//; $SystemModel =~ s/\s*$//; $processort =~ s/SUNW,//; $processort =~ s/^\s*//; $processort =~ s/\s*$//; # number of procs with "sysctl hw.ncpu" chomp($processorn=`sysctl -n hw.ncpu`); # XXX quick and dirty _attempt_ to get proc speed if ( $processort =~ /(\d+)(\.\d+|)\s*mhz/i ) { # possible decimal point $processors = sprintf("%.0f", "$1$2"); # round number } # Writing data $common->setBios ({ SMANUFACTURER => $SystemManufacturer, SMODEL => $SystemModel, SSN => $SystemSerial, BMANUFACTURER => $BiosManufacturer, BVERSION => $BiosVersion, BDATE => $BiosDate, }); $common->setHardware({ PROCESSORT => $processort, PROCESSORN => $processorn, PROCESSORS => $processors }); } 1;