remove the IPv6 related network subroutines
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@6008 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
parent
2bc904db70
commit
d97f02aa20
@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env perl
|
||||
# IBM(c) 2010 EPL license http://www.eclipse.org/legal/epl-v10.html
|
||||
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
|
||||
package xCAT::Utils;
|
||||
|
||||
BEGIN
|
||||
@ -5711,260 +5711,4 @@ sub setupAIXconserver
|
||||
return $rc;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
=head3 gethostnameandip
|
||||
Works for both IPv4 and IPv6.
|
||||
Takes either a host name or an IP address string
|
||||
and performs a lookup on that name,
|
||||
returns an array with two elements: the hostname, the ip address
|
||||
if the host name or ip address can not be resolved,
|
||||
the corresponding element in the array will be undef
|
||||
Arguments:
|
||||
hostname or ip address
|
||||
Returns: the hostname and the ip address
|
||||
Globals:
|
||||
|
||||
Error:
|
||||
none
|
||||
Example:
|
||||
my ($ip, $host) = xCAT::Utils->gethostnameandip($iporhost);
|
||||
Comments:
|
||||
none
|
||||
=cut
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
sub gethostnameandip()
|
||||
{
|
||||
my ($class, $iporhost) = @_;
|
||||
|
||||
if (($iporhost =~ /\d+\.\d+\.\d+\.\d+/) || ($iporhost =~ /:/)) #ip address
|
||||
{
|
||||
return (xCAT::Utils->gethostname($iporhost), $iporhost);
|
||||
}
|
||||
else #hostname
|
||||
{
|
||||
return ($iporhost, xCAT::Utils->getipaddr($iporhost));
|
||||
}
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
=head3 gethostname
|
||||
Works for both IPv4 and IPv6.
|
||||
Takes an IP address string and performs a lookup on that name,
|
||||
returns the hostname of the ip address
|
||||
if the ip address can not be resolved, returns undef
|
||||
Arguments:
|
||||
ip address
|
||||
Returns: the hostname
|
||||
Globals:
|
||||
cache: %::iphosthash
|
||||
Error:
|
||||
none
|
||||
Example:
|
||||
my $host = xCAT::Utils->gethostname($ip);
|
||||
Comments:
|
||||
none
|
||||
=cut
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
sub gethostname()
|
||||
{
|
||||
my ($class, $iporhost) = @_;
|
||||
|
||||
my $socket6support = eval { require Socket6 };
|
||||
|
||||
if (($iporhost !~ /\d+\.\d+\.\d+\.\d+/) && ($iporhost !~ /:/))
|
||||
{
|
||||
#why you do so? pass in a hostname and only want a hostname??
|
||||
return $iporhost;
|
||||
}
|
||||
#cache, do not lookup DNS each time
|
||||
if (defined($::iphosthash{$iporhost}) && $::iphosthash{$iporhost})
|
||||
{
|
||||
return $::iphosthash{$iporhost};
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($socket6support) # the getaddrinfo and getnameinfo supports both IPv4 and IPv6
|
||||
{
|
||||
my ($family, $socket, $protocol, $ip, $name) = getaddrinfo($iporhost,0);
|
||||
my $host = (getnameinfo($ip))[0];
|
||||
if ($host eq $iporhost) # can not resolve
|
||||
{
|
||||
return undef;
|
||||
}
|
||||
if ($host)
|
||||
{
|
||||
$host =~ s/\..*//; #short hostname
|
||||
}
|
||||
return $host;
|
||||
}
|
||||
else
|
||||
{
|
||||
my $hostname = gethostbyaddr(inet_aton($iporhost), AF_INET);
|
||||
$hostname =~ s/\..*//; #short hostname
|
||||
return $hostname;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
=head3 getipaddr
|
||||
Works for both IPv4 and IPv6.
|
||||
Takes a hostname string and performs a lookup on that name,
|
||||
returns the the ip address of the hostname
|
||||
if the hostname can not be resolved, returns undef
|
||||
Arguments:
|
||||
hostname
|
||||
Returns: ip address
|
||||
Globals:
|
||||
cache: %::hostiphash
|
||||
Error:
|
||||
none
|
||||
Example:
|
||||
my $ip = xCAT::Utils->getipaddr($hostname);
|
||||
Comments:
|
||||
none
|
||||
=cut
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
sub getipaddr()
|
||||
{
|
||||
my ($class, $iporhost) = @_;
|
||||
|
||||
my $socket6support = eval { require Socket6 };
|
||||
|
||||
if (($iporhost =~ /\d+\.\d+\.\d+\.\d+/) || ($iporhost =~ /:/))
|
||||
{
|
||||
#pass in an ip and only want an ip??
|
||||
return $iporhost;
|
||||
}
|
||||
|
||||
#cache, do not lookup DNS each time
|
||||
if (defined($::hostiphash{$iporhost}) && $::hostiphash{$iporhost})
|
||||
{
|
||||
return $::hostiphash{$iporhost};
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($socket6support) # the getaddrinfo and getnameinfo supports both IPv4 and IPv6
|
||||
{
|
||||
my ($family, $socket, $protocol, $ip, $name) = getaddrinfo($iporhost,0);
|
||||
if ($ip)
|
||||
{
|
||||
return (getnameinfo($ip, NI_NUMERICHOST()))[0];
|
||||
}
|
||||
return undef;
|
||||
}
|
||||
else
|
||||
{
|
||||
return inet_ntoa(inet_aton($iporhost))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
=head3 linklocaladdr
|
||||
Only for IPv6.
|
||||
Takes a mac address, calculate the IPv6 link local address
|
||||
Arguments:
|
||||
mac address
|
||||
Returns:
|
||||
ipv6 link local address. returns undef if passed in a invalid mac address
|
||||
Globals:
|
||||
Error:
|
||||
none
|
||||
Example:
|
||||
my $linklocaladdr = xCAT::Utils->linklocaladdr($mac);
|
||||
Comments:
|
||||
none
|
||||
=cut
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
sub linklocaladdr {
|
||||
my ($class, $mac) = @_;
|
||||
$mac = lc($mac);
|
||||
my $localprefix = "fe80";
|
||||
|
||||
my ($m1, $m2, $m3, $m6, $m7, $m8);
|
||||
# mac address can be 00215EA376B0 or 00:21:5E:A3:76:B0
|
||||
if($mac =~ /^([0-9A-Fa-f]{2}).*?([0-9A-Fa-f]{2}).*?([0-9A-Fa-f]{2}).*?([0-9A-Fa-f]{2}).*?([0-9A-Fa-f]{2}).*?([0-9A-Fa-f]{2})$/)
|
||||
{
|
||||
($m1, $m2, $m3, $m6, $m7, $m8) = ($1, $2, $3, $4, $5, $6);
|
||||
}
|
||||
else
|
||||
{
|
||||
#not a valid mac address
|
||||
return undef;
|
||||
}
|
||||
my ($m4, $m5) = ("ff","fe");
|
||||
|
||||
my $bit = (int $m1) & 2;
|
||||
if ($bit) {
|
||||
$m1 = $m1 - 2;
|
||||
} else {
|
||||
$m1 = $m1 + 2;
|
||||
}
|
||||
|
||||
$m1 = $m1 . $m2;
|
||||
$m3 = $m3 . $m4;
|
||||
$m5 = $m5 . $m6;
|
||||
$m7 = $m7 . $m8;
|
||||
|
||||
my $laddr = join ":", $m1, $m3, $m5, $m7;
|
||||
$laddr = join "::", $localprefix, $laddr;
|
||||
|
||||
return $laddr;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
=head3 ishostinsubnet
|
||||
Works for both IPv4 and IPv6.
|
||||
Takes an ip address, the netmask and a subnet,
|
||||
chcek if the ip address is in the subnet
|
||||
Arguments:
|
||||
ip address, netmask, subnet
|
||||
Returns:
|
||||
1 - if the ip address is in the subnet
|
||||
0 - if the ip address is NOT in the subnet
|
||||
Globals:
|
||||
Error:
|
||||
none
|
||||
Example:
|
||||
if(xCAT::Utils->ishostinsubnet($ip, $netmask, $subnet);
|
||||
Comments:
|
||||
none
|
||||
=cut
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
sub ishostinsubnet {
|
||||
my ($class, $ip) = shift;
|
||||
my $mask = shift;
|
||||
my $subnet =shift;
|
||||
|
||||
if ($ip =~ /\d+\.\d+\.\d+\.\d+/) {# ipv4 address
|
||||
$ip =~ /([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/;
|
||||
my $ipnum = ($1<<24)+($2<<16)+($3<<8)+$4;
|
||||
|
||||
$mask =~ /([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/;
|
||||
my $masknum = ($1<<24)+($2<<16)+($3<<8)+$4;
|
||||
|
||||
$subnet =~ /([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/;
|
||||
my $netnum = ($1<<24)+($2<<16)+($3<<8)+$4;
|
||||
|
||||
if (($ipnum & $masknum) == $netnum) {
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
} else { # for ipv6
|
||||
#TODO
|
||||
}
|
||||
}
|
||||
|
||||
1;
|
||||
|
Loading…
x
Reference in New Issue
Block a user