Get the HFI mac address from console

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@6658 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
wanghuaz 2010-07-07 08:27:42 +00:00
parent 60fd10c53a
commit a4e0843a33

View File

@ -504,6 +504,32 @@ sub getmacs {
}
}
##########################################################################
# Calculate secondary 1 and secondary 2 MAC address based on primary MAC
# for HFI devices
##########################################################################
sub cal_mac {
my $mac = shift;
$mac =~ s/://g;
$mac =~ /(.........)(.)(..)/;
my ($basemac, $mac_h, $mac_l) = ($1,$2, $3);
my $macnum_l = hex($mac_l);
my $macnum_h = hex($mac_h);
$macnum_l += 1;
if ($macnum_l > 0xFF) {
$macnum_h += 1;
}
my $newmac_l = sprintf("%02X", $macnum_l);
$newmac_l =~ /(..)$/;
$newmac_l = $1;
my $newmac_h = sprintf("%01X", $macnum_h);
my $newmac = $basemac.$newmac_h.$newmac_l;
return( $newmac );
}
##########################################################################
# Insert colons in MAC addresses for Linux only
##########################################################################
@ -511,22 +537,53 @@ sub format_mac {
my $data = shift;
if ( !xCAT::Utils->isAIX() ) {
#####################################
# Get adapter mac
#####################################
$data =~ /^(\S+\s+\S+\s+)(\S+)(\s+.*)$/;
my $mac = $2;
my $save = $mac;
#################################
# Delineate MAC with colons
#################################
$mac = lc($mac);
$mac =~ s/(\w{2})/$1:/g;
$mac =~ s/:$//;
$data =~ s/$save/$mac/;
}
#####################################
# Get adapter mac
#####################################
$data =~ /^(\S+\s+\S+\s+)(\S+)(\s+.*)$/;
my $mac = $2;
my $save = $mac;
#####################################
# Currenlty HFI drivers don't support
# broadcast, users need to fresh the
# ARP table. Write 3 MAC addresses
# is useless in this case. Comment
# the code until HFI drivers support
# broadcast.
#####################################
# if ( $data =~ /^hfi-ent\s+/ ) {
# my @macs;
# my $newmac;
# my $newmac0 = cal_mac( $mac );
# my $newmac1 = cal_mac( $newmac0 );
# push @macs, $mac;
# push @macs, $newmac0;
# push @macs, $newmac1;
# foreach my $mac_a ( @macs ) {
# if ( !xCAT::Utils->isAIX() ) {
# $mac_a = lc($mac_a);
# $mac_a =~ s/(\w{2})/$1:/g;
# $mac_a =~ s/:$//;
# $newmac = $newmac.",".$mac_a;
# } else {
# $newmac = $newmac.",".$mac_a;
# }
# $newmac =~ s/^,//;
# }
# $data =~ s/$save/$newmac/;
# } else {
if ( !xCAT::Utils->isAIX() ) {
#################################
# Delineate MAC with colons
#################################
$mac = lc($mac);
$mac =~ s/(\w{2})/$1:/g;
$mac =~ s/:$//;
$data =~ s/$save/$mac/;
}
# }
return( "$data\n" );
}