]> git.proxmox.com Git - pve-common.git/blobdiff - src/PVE/Network.pm
Revert "Network: tap_create|plug : sdn : use bridge_vlan"
[pve-common.git] / src / PVE / Network.pm
index cc754452aa19faafe752b5b3d554b1d2b5a75c61..98a58fa98ee683ff2148a50cd24f0e9be44cbd25 100644 (file)
@@ -2,15 +2,16 @@ package PVE::Network;
 
 use strict;
 use warnings;
-use PVE::Tools qw(run_command lock_file);
-use PVE::ProcFSTools;
+
 use PVE::INotify;
+use PVE::ProcFSTools;
+use PVE::Tools qw(run_command lock_file);
+
 use File::Basename;
 use IO::Socket::IP;
-use Socket qw(NI_NUMERICHOST NI_NUMERICSERV);
-use POSIX qw(ECONNREFUSED);
-
 use Net::IP;
+use POSIX qw(ECONNREFUSED);
+use Socket qw(NI_NUMERICHOST NI_NUMERICSERV);
 
 # host network related utility functions
 
@@ -585,19 +586,12 @@ sub is_ip_in_cidr {
 sub get_local_ip_from_cidr {
     my ($cidr) = @_;
 
-    my $cmd = ['/sbin/ip', 'address', 'show', 'to', $cidr, 'up'];
-
     my $IPs = [];
-
-    my $code = sub {
-       my $line = shift;
-
-       if ($line =~ m!^\s*inet(?:6)?\s+($PVE::Tools::IPRE)(?:/\d+|\s+peer\s+)!) {
+    run_command(['/sbin/ip', 'address', 'show', 'to', $cidr, 'up'], outfunc => sub {
+       if ($_[0] =~ m!^\s*inet(?:6)?\s+($PVE::Tools::IPRE)(?:/\d+|\s+peer\s+)!) {
            push @$IPs, $1;
        }
-    };
-
-    PVE::Tools::run_command($cmd, outfunc => $code);
+    });
 
     return $IPs;
 }
@@ -613,19 +607,22 @@ sub addr_to_ip {
 sub get_ip_from_hostname {
     my ($hostname, $noerr) = @_;
 
-    my ($family, $ip);
-
-    eval {
-       my @res = PVE::Tools::getaddrinfo_all($hostname);
-       $family = $res[0]->{family};
-       $ip = addr_to_ip($res[0]->{addr})
-    };
+    my @res = eval { PVE::Tools::getaddrinfo_all($hostname) };
     if ($@) {
        die "hostname lookup '$hostname' failed - $@" if !$noerr;
        return undef;
     }
 
-    if ($ip =~ m/^127\.|^::1$/) {
+    my ($ip, $family);
+    for my $ai (@res) {
+       $family = $ai->{family};
+       my $tmpip = addr_to_ip($ai->{addr});
+       if ($tmpip !~ m/^127\.|^::1$/) {
+           $ip = $tmpip;
+           last;
+       }
+    }
+    if (!defined($ip) ) {
        die "hostname lookup '$hostname' failed - got local IP address '$ip'\n" if !$noerr;
        return undef;
     }