]> git.proxmox.com Git - pve-common.git/blobdiff - src/PVE/Network.pm
Network: tap_create|plug : sdn : use bridge_vlan
[pve-common.git] / src / PVE / Network.pm
index 5f40353ccd6e01ef170c1626c10503ed0294c650..bdbf3d680cbd579be0c31c36a09a3d907d9b7782 100644 (file)
@@ -272,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);
@@ -286,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);
@@ -377,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 {}) };
 
@@ -607,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;
     }