X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;ds=sidebyside;f=src%2FPVE%2FNetwork.pm;h=bdbf3d680cbd579be0c31c36a09a3d907d9b7782;hb=c02d6d1c96a97cbdfb47d0ff28bca833bce2f91a;hp=e91aeb28e55b4cd2964f70611ee659a1ff02021c;hpb=b15e50dda13024d631ff1659dbfee90442a928c8;p=pve-common.git diff --git a/src/PVE/Network.pm b/src/PVE/Network.pm index e91aeb2..bdbf3d6 100644 --- a/src/PVE/Network.pm +++ b/src/PVE/Network.pm @@ -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 @@ -271,6 +272,17 @@ my $activate_interface = sub { sub tap_create { my ($iface, $bridge) = @_; + my $have_sdn; + eval { + require PVE::Network::SDN::Zones; + $have_sdn = 1; + }; + + if ($have_sdn) { + my ($bridgesdn, undef) = PVE::Network::SDN::Zones::get_bridge_vlan($bridge); + $bridge = $bridgesdn if $bridgesdn; + } + die "unable to get bridge setting\n" if !$bridge; my $bridgemtu = &$read_bridge_mtu($bridge); @@ -285,6 +297,17 @@ sub tap_create { sub veth_create { my ($veth, $vethpeer, $bridge, $mac) = @_; + my $have_sdn; + eval { + require PVE::Network::SDN::Zones; + $have_sdn = 1; + }; + + if ($have_sdn) { + my ($bridgesdn, undef) = PVE::Network::SDN::Zones::get_bridge_vlan($bridge); + $bridge = $bridgesdn if $bridgesdn; + } + die "unable to get bridge setting\n" if !$bridge; my $bridgemtu = &$read_bridge_mtu($bridge); @@ -376,6 +399,18 @@ my $cleanup_firewall_bridge = sub { sub tap_plug { my ($iface, $bridge, $tag, $firewall, $trunks, $rate) = @_; + my $have_sdn; + eval { + require PVE::Network::SDN::Zones; + $have_sdn = 1; + }; + + if ($have_sdn) { + my ($bridgesdn, $tag) = PVE::Network::SDN::Zones::get_bridge_vlan($bridge); + $bridge = $bridgesdn if $bridgesdn; + $trunks = undef; + } + #cleanup old port config from any openvswitch bridge eval {run_command("/usr/bin/ovs-vsctl del-port $iface", outfunc => sub {}, errfunc => sub {}) }; @@ -606,19 +641,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; }