]> git.proxmox.com Git - pve-common.git/blobdiff - src/PVE/INotify.pm
INotify: fix unknown for unknown ovs_type
[pve-common.git] / src / PVE / INotify.pm
index 6c1ebf530fb1455ef2652935fd49ba966eddffc1..5fdd050fc4325abdc82dd2fd48b5bd5cd02ca75f 100644 (file)
@@ -1032,6 +1032,7 @@ sub __read_etc_network_interfaces {
 
     foreach my $iface (keys %$ifaces) {
        my $d = $ifaces->{$iface};
+       $d->{type} = 'unknown';
        if ($iface =~ m/^bond\d+$/) {
            if (!$d->{ovs_type}) {
                $d->{type} = 'bond';
@@ -1051,8 +1052,6 @@ sub __read_etc_network_interfaces {
                }
                my $tag = &$extract_ovs_option($d, 'tag');
                $d->{ovs_tag} = $tag if defined($tag);
-           } else {
-               $d->{type} = 'unknown';
            }
        } elsif ($iface =~ m/^vmbr\d+$/) {
            if (!$d->{ovs_type}) {
@@ -1066,8 +1065,6 @@ sub __read_etc_network_interfaces {
                }
            } elsif ($d->{ovs_type} eq 'OVSBridge') {
                $d->{type} = $d->{ovs_type};
-           } else {
-               $d->{type} = 'unknown';
            }
        } elsif ($iface =~ m/^(\S+):\d+$/) {
            $d->{type} = 'alias';
@@ -1094,16 +1091,12 @@ sub __read_etc_network_interfaces {
                $d->{type} = $d->{ovs_type};
                my $tag = &$extract_ovs_option($d, 'tag');
                $d->{ovs_tag} = $tag if defined($tag);
-           } else {
-               $d->{type} = 'unknown';
            }
        } elsif ($iface =~ m/^lo$/) {
            $d->{type} = 'loopback';
        } else {
            if ($d->{'vxlan-id'}) {
                $d->{type} = 'vxlan';
-           } elsif (!$d->{ovs_type}) {
-               $d->{type} = 'unknown';
            } elsif ($d->{ovs_type} eq 'OVSIntPort') {
                $d->{type} = $d->{ovs_type};
                my $tag = &$extract_ovs_option($d, 'tag');
@@ -1113,21 +1106,22 @@ sub __read_etc_network_interfaces {
 
        # map address and netmask to cidr
        if ($d->{address}) {
-           if ($d->{netmask} && $d->{netmask} =~ m/^\d+$/) { # e.g. netmask 20
-               $d->{address} = $d->{address} . "/" . $d->{netmask};
-           } elsif ($d->{netmask} &&
-                    (my $cidr = PVE::JSONSchema::get_netmask_bits($d->{netmask}))) { # e.g. netmask 255.255.255.0
-               $d->{address} = $d->{address} . "/" . $cidr;
+           if ($d->{netmask}) {
+               if ($d->{netmask} =~ m/^\d+$/) { # e.g. netmask 20
+                   $d->{address} = $d->{address} . "/" . $d->{netmask};
+               } elsif (my $mask = PVE::JSONSchema::get_netmask_bits($d->{netmask})) {
+                   $d->{address} = $d->{address} . "/" . $mask;
+               }
            }
-           #for api compatibility
-           $d->{cidr} = $d->{address} 
+          for api compatibility
+          $d->{cidr} = $d->{address};
        }
 
        # map address6 and netmask6 to cidr6
        if ($d->{address6}) {
            $d->{address6} .= "/" . $d->{netmask6} if $d->{address6} !~ m!^(.*)/(\d+)$! && $d->{netmask6};
-            #for api compatibility
-           $d->{cidr6} = $d->{address6} 
+           for api compatibility
+           $d->{cidr6} = $d->{address6};
        }
 
        $d->{method} = 'manual' if !$d->{method};
@@ -1175,8 +1169,8 @@ sub __interface_to_string {
     my $raw = '';
 
     $raw .= "iface $iface $family " . $d->{"method$suffix"} . "\n";
-    $raw .= "\taddress  " . $d->{"address$suffix"} . "\n" if $d->{"address$suffix"};
-    $raw .= "\tgateway  " . $d->{"gateway$suffix"} . "\n" if $d->{"gateway$suffix"};
+    $raw .= "\taddress " . $d->{"address$suffix"} . "\n" if $d->{"address$suffix"};
+    $raw .= "\tgateway " . $d->{"gateway$suffix"} . "\n" if $d->{"gateway$suffix"};
 
     my $done = { type => 1, priority => 1, method => 1, active => 1, exists => 1,
                 comments => 1, autostart => 1, options => 1,
@@ -1310,7 +1304,12 @@ sub __interface_to_string {
        $done->{ovs_type} = 1;
 
        if (my $bridge = $d->{ovs_bridge}) {
-           $raw = "allow-$bridge $iface\n$raw";
+           if ($ifupdown2) {
+               $raw = "auto $iface\n$raw";
+           } else {
+               $raw = "allow-$bridge $iface\n$raw";
+           }
+
            $raw .= "\tovs_bridge $bridge\n";
            $done->{ovs_bridge} = 1;
        }
@@ -1346,7 +1345,7 @@ sub __interface_to_string {
 
 sub write_etc_network_interfaces {
     my ($filename, $fh, $config) = @_;
-    my $ifupdown2 = -e '/usr/share/ifupdown2';
+    my $ifupdown2 = -e '/usr/share/ifupdown2/ifupdown2';
     my $raw = __write_etc_network_interfaces($config, $ifupdown2);
     PVE::Tools::safe_print($filename, $fh, encode('UTF-8', $raw));
 }
@@ -1652,7 +1651,7 @@ NETWORKDOC
 
        $printed->{$iface} = 1;
        if ($d->{autostart}) {
-           if ($d->{type} eq 'OVSBridge') {
+           if ($d->{type} eq 'OVSBridge' && !$ifupdown2) {
                # cannot use 'auto' for OVS, would add race with systemd ifup@.service
                $raw .= "allow-ovs $iface\n";
            } else {