]> git.proxmox.com Git - pve-common.git/blobdiff - src/PVE/INotify.pm
fix #545: interfaces: allow arbitrary bridge names in network config
[pve-common.git] / src / PVE / INotify.pm
index 643229567df5e7707868fb03b52305f02e45a42e..4568593328a9a02e9e80f78b98c1440079b68463 100644 (file)
@@ -22,6 +22,7 @@ use PVE::Network;
 use PVE::ProcFSTools;
 use PVE::SafeSyslog;
 use PVE::Tools;
+use PVE::RESTEnvironment qw(log_warn);
 
 use base 'Exporter';
 
@@ -1033,7 +1034,17 @@ sub __read_etc_network_interfaces {
     foreach my $iface (sort keys %$ifaces) {
        my $d = $ifaces->{$iface};
        $d->{type} = 'unknown';
-       if ($iface =~ m/^bond\d+$/) {
+       if (defined $d->{'bridge_ports'}) {
+           $d->{type} = 'bridge';
+           if (!defined ($d->{bridge_stp})) {
+               $d->{bridge_stp} = 'off';
+           }
+           if (!defined($d->{bridge_fd}) && $d->{bridge_stp} eq 'off') {
+               $d->{bridge_fd} = 0;
+           }
+       } elsif ($d->{ovs_type} && $d->{ovs_type} eq 'OVSBridge') {
+           $d->{type} = $d->{ovs_type};
+       } elsif ($iface =~ m/^bond\d+$/) {
            if (!$d->{ovs_type}) {
                $d->{type} = 'bond';
            } elsif ($d->{ovs_type} eq 'OVSBond') {
@@ -1053,18 +1064,6 @@ sub __read_etc_network_interfaces {
                my $tag = &$extract_ovs_option($d, 'tag');
                $d->{ovs_tag} = $tag if defined($tag);
            }
-       } elsif ($iface =~ m/^vmbr\d+$/) {
-           if (!$d->{ovs_type}) {
-               $d->{type} = 'bridge';
-               if (!defined ($d->{bridge_stp})) {
-                   $d->{bridge_stp} = 'off';
-               }
-               if (!defined($d->{bridge_fd}) && $d->{bridge_stp} eq 'off') {
-                   $d->{bridge_fd} = 0;
-               }
-           } elsif ($d->{ovs_type} eq 'OVSBridge') {
-               $d->{type} = $d->{ovs_type};
-           }
        } elsif ($iface =~ m/^(\S+):\d+$/) {
            $d->{type} = 'alias';
            if (defined ($ifaces->{$1})) {
@@ -1127,6 +1126,9 @@ sub __read_etc_network_interfaces {
            }
        }
 
+       log_warn("detected a interface $iface that is not a bridge!")
+           if !($d->{type} eq 'OVSBridge' || $d->{type} eq 'bridge') && $iface =~ m/^vmbr\d+$/;
+
        # map address and netmask to cidr
        if (my $addr = $d->{address}) {
            if (_address_is_cidr($addr)) {