mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-11-03 21:02:34 +00:00 
			
		
		
		
	Redhat7 support defect 4092
This commit is contained in:
		@@ -697,19 +697,26 @@ sub get_nic_ip
 | 
			
		||||
        #      Base address:0x2600 Memory:fbfe0000-fc0000080
 | 
			
		||||
        #
 | 
			
		||||
        # eth1 ...
 | 
			
		||||
        # Redhat7
 | 
			
		||||
        #eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
 | 
			
		||||
        # inet 10.1.0.178  netmask 255.255.0.0  broadcast 10.1.255.255
 | 
			
		||||
        #
 | 
			
		||||
        ##############################################################
 | 
			
		||||
        my @adapter= split /\n{2,}/, $result;
 | 
			
		||||
        foreach ( @adapter ) {
 | 
			
		||||
            if ( !($_ =~ /LOOPBACK / ) and
 | 
			
		||||
                   $_ =~ /UP / and
 | 
			
		||||
                   $_ =~ /$mode / ) {
 | 
			
		||||
            if ( !($_ =~ /LOOPBACK/ ) and
 | 
			
		||||
                   $_ =~ /UP( |,|>)/ and 
 | 
			
		||||
                   $_ =~ /$mode/ ) {
 | 
			
		||||
                my @ip = split /\n/;
 | 
			
		||||
                for my $ent ( @ip ) {
 | 
			
		||||
                    if ($ent =~ /^(eth\d|ib\d|hf\d)\s+/) {
 | 
			
		||||
                        $nic = $1;
 | 
			
		||||
                    }    
 | 
			
		||||
                    if ( $ent =~ /^\s*inet addr:\s*(\d+\.\d+\.\d+\.\d+)/ ) {
 | 
			
		||||
                    }   
 | 
			
		||||
                    if ($ent =~ /^(eth\d:|ib\d:|hf\d:)\s+/) {
 | 
			
		||||
                        $nic = $1;
 | 
			
		||||
                    }   
 | 
			
		||||
                    $ent=~ s/addr://;   # works for Redhat7 also
 | 
			
		||||
                    if ( $ent =~ /^\s*inet \s*(\d+\.\d+\.\d+\.\d+)/ ) {
 | 
			
		||||
                        $iphash{$nic} = $1; 
 | 
			
		||||
                        next;
 | 
			
		||||
                    }
 | 
			
		||||
@@ -1837,6 +1844,100 @@ sub validate_ip
 | 
			
		||||
    return([0]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
=head3   getFacingIP
 | 
			
		||||
       Gets the ip address of the adapter of the localhost that is facing the
 | 
			
		||||
    the given node.
 | 
			
		||||
       Assume it is the same as my_ip_facing...
 | 
			
		||||
    Arguments:
 | 
			
		||||
       The name of the node that is facing the localhost.
 | 
			
		||||
    Returns:
 | 
			
		||||
       The ip address of the adapter that faces the node.
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------------------------------------------
 | 
			
		||||
sub getFacingIP
 | 
			
		||||
{
 | 
			
		||||
    my ($class, $node) = @_;
 | 
			
		||||
    my $ip;
 | 
			
		||||
    my $cmd;
 | 
			
		||||
    my @ipaddress;
 | 
			
		||||
 | 
			
		||||
    my $nodeip = inet_ntoa(inet_aton($node));
 | 
			
		||||
    unless ($nodeip =~ /\d+\.\d+\.\d+\.\d+/)
 | 
			
		||||
    {
 | 
			
		||||
        return 0;    #Not supporting IPv6 here IPV6TODO
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $cmd = "ifconfig" . " -a";
 | 
			
		||||
    $cmd = $cmd . "| grep \"inet \"";
 | 
			
		||||
    my @result = xCAT::Utils->runcmd($cmd, 0);
 | 
			
		||||
    if ($::RUNCMD_RC != 0)
 | 
			
		||||
    {
 | 
			
		||||
        xCAT::MsgUtils->message("S", "Error from $cmd\n");
 | 
			
		||||
        exit $::RUNCMD_RC;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # split node address
 | 
			
		||||
    my ($n1, $n2, $n3, $n4) = split('\.', $nodeip);
 | 
			
		||||
 | 
			
		||||
    foreach my $addr (@result)
 | 
			
		||||
    {
 | 
			
		||||
        my $ip;
 | 
			
		||||
        my $mask;
 | 
			
		||||
        if (xCAT::Utils->isLinux())
 | 
			
		||||
        {
 | 
			
		||||
            my ($inet, $addr1, $Bcast, $Mask) = split(" ", $addr);
 | 
			
		||||
            if ((!$addr1) || (!$Mask)) { next; }
 | 
			
		||||
            my @ips   = split(":", $addr1);
 | 
			
		||||
            my @masks = split(":", $Mask);
 | 
			
		||||
            $ip   = $ips[1];
 | 
			
		||||
            $mask = $masks[1];
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {    #AIX
 | 
			
		||||
            my ($inet, $addr1, $netmask, $mask1, $Bcast, $bcastaddr) =
 | 
			
		||||
              split(" ", $addr);
 | 
			
		||||
            if ((!$addr1) && (!$mask1)) { next; }
 | 
			
		||||
            $ip = $addr1;
 | 
			
		||||
            $mask1 =~ s/0x//;
 | 
			
		||||
            $mask =
 | 
			
		||||
              `printf "%d.%d.%d.%d" \$(echo "$mask1" | sed 's/../0x& /g')`;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if ($ip && $mask)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            # split interface IP
 | 
			
		||||
            my ($h1, $h2, $h3, $h4) = split('\.', $ip);
 | 
			
		||||
 | 
			
		||||
            # split mask
 | 
			
		||||
            my ($m1, $m2, $m3, $m4) = split('\.', $mask);
 | 
			
		||||
 | 
			
		||||
            # AND this interface IP with the netmask of the network
 | 
			
		||||
            my $a1 = ((int $h1) & (int $m1));
 | 
			
		||||
            my $a2 = ((int $h2) & (int $m2));
 | 
			
		||||
            my $a3 = ((int $h3) & (int $m3));
 | 
			
		||||
            my $a4 = ((int $h4) & (int $m4));
 | 
			
		||||
 | 
			
		||||
            # AND node IP with the netmask of the network
 | 
			
		||||
            my $b1 = ((int $n1) & (int $m1));
 | 
			
		||||
            my $b2 = ((int $n2) & (int $m2));
 | 
			
		||||
            my $b3 = ((int $n3) & (int $m3));
 | 
			
		||||
            my $b4 = ((int $n4) & (int $m4));
 | 
			
		||||
 | 
			
		||||
            if (($b1 == $a1) && ($b2 == $a2) && ($b3 == $a3) && ($b4 == $a4))
 | 
			
		||||
            {
 | 
			
		||||
                return $ip;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    xCAT::MsgUtils->message("S", "Cannot find master for the node $node\n");
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
@@ -2212,6 +2313,7 @@ sub isValidHostname
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
=head3 isValidFQDN
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user