use PVE::INotify;
use File::Basename;
use IO::Socket::IP;
+use Socket qw(NI_NUMERICHOST NI_NUMERICSERV);
use POSIX qw(ECONNREFUSED);
use Net::IP;
# host network related utility functions
+our $PHYSICAL_NIC_RE = qr/(?:eth\d+|en[^:.]+|ib\d+)/;
+
our $ipv4_reverse_mask = [
'0.0.0.0',
'128.0.0.0',
my ($bridge) = @_;
if (! -d "/sys/class/net/$bridge") {
- system("/sbin/brctl addbr $bridge") == 0 ||
- die "can't add bridge '$bridge'\n";
+ system("/sbin/brctl addbr $bridge") == 0 ||
+ die "can't add bridge '$bridge'\n";
+ disable_ipv6($bridge);
}
};
my ($fwbr, $vethfw, $vethfwpeer) = &$compute_fwbr_names($vmid, $devid);
&$cond_create_bridge($fwbr);
- disable_ipv6($fwbr);
&$activate_interface($fwbr);
copy_bridge_config($bridge, $fwbr);
my $bridgemtu = &$read_bridge_mtu($bridge);
&$cond_create_bridge($fwbr);
- disable_ipv6($fwbr);
&$activate_interface($fwbr);
&$bridge_add_interface($fwbr, $iface);
if (! -d "/sys/class/net/$ifacevlan") {
system("/sbin/ip link add link $iface name $ifacevlan type vlan id $tag") == 0 ||
die "can't add vlan tag $tag to interface $iface\n";
- }
- # remove ipv6 link-local address before activation
- disable_ipv6($ifacevlan);
+ # remove ipv6 link-local address before activation
+ disable_ipv6($ifacevlan);
+ }
# be sure to have the $ifacevlan up
&$activate_interface($ifacevlan);
return $IPs;
}
+sub addr_to_ip {
+ my ($addr) = @_;
+ my ($err, $host, $port) = Socket::getnameinfo($addr, NI_NUMERICHOST | NI_NUMERICSERV);
+ die "failed to get numerical host address: $err\n" if $err;
+ return ($host, $port) if wantarray;
+ return $host;
+}
+
+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})
+ };
+ if ($@) {
+ die "hostname lookup '$hostname' failed - $@" if !$noerr;
+ return undef;
+ }
+
+ if ($ip =~ m/^127\.|^::1$/) {
+ die "hostname lookup '$hostname' failed - got local IP address '$ip'\n" if !$noerr;
+ return undef;
+ }
+
+ return wantarray ? ($ip, $family) : $ip;
+}
+
sub lock_network {
my ($code, @param) = @_;
my $res = lock_file('/var/lock/pve-network.lck', 10, $code, @param);