X-Git-Url: https://git.proxmox.com/?p=pve-common.git;a=blobdiff_plain;f=src%2FPVE%2FINotify.pm;h=22f01d14c9c186c94c937edc93e0ae80c860f333;hp=5fce0c8656f7405f48826ef894f56b63d9c72247;hb=685a2528b1562bc23fb156c94c092fbef6bc7751;hpb=516a50a4ac3b31fb1cfda672d25f99ec50f369e2 diff --git a/src/PVE/INotify.pm b/src/PVE/INotify.pm index 5fce0c8..22f01d1 100644 --- a/src/PVE/INotify.pm +++ b/src/PVE/INotify.pm @@ -874,6 +874,8 @@ sub __read_etc_network_interfaces { } } elsif ($id eq 'bridge_fd') { $d->{$id} = $value; + } elsif ($id eq 'bridge_vlan_aware') { + $d->{$id} = 1; } elsif ($id eq 'bond_miimon') { $d->{$id} = $value; } elsif ($id eq 'bond_xmit_hash_policy') { @@ -1059,6 +1061,11 @@ sub __interface_to_string { $v = defined($d->{bridge_fd}) ? $d->{bridge_fd} : 0; $raw .= "\tbridge_fd $v\n"; $done->{bridge_fd} = 1; + + if( defined($d->{bridge_vlan_aware})) { + $raw .= "\tbridge_vlan_aware yes\n"; + } + $done->{bridge_vlan_aware} = 1; } elsif ($d->{type} eq 'bond') { @@ -1216,6 +1223,7 @@ sub __write_etc_network_interfaces { my $n = $ifaces->{$p}; die "OVS bridge '$iface' - unable to find port '$p'\n" if !$n; + $n->{autostart} = 0; if ($n->{type} eq 'eth') { $n->{type} = 'OVSPort'; $n->{ovs_bridge} = $iface; @@ -1229,6 +1237,19 @@ sub __write_etc_network_interfaces { } } + # Remove autostart from linux bridge ports + foreach my $iface (keys %$ifaces) { + my $d = $ifaces->{$iface}; + if ($d->{type} eq 'bridge' && $d->{bridge_ports}) { + foreach my $p (split (/\s+/, $d->{bridge_ports})) { + my $n = $ifaces->{$p}; + die "bridge '$iface' - unable to find port '$p'\n" + if !$n; + $n->{autostart} = 0; + } + } + } + # check OVS bond ports foreach my $iface (keys %$ifaces) { my $d = $ifaces->{$iface}; @@ -1261,10 +1282,10 @@ NETWORKDOC my $if_type_hash = { unknown => 0, - loopback => 10, - eth => 20, - bond => 30, - bridge => 40, + loopback => 100000, + eth => 200000, + bond => 300000, + bridge => 400000, }; my $lookup_type_prio = sub { @@ -1296,24 +1317,21 @@ NETWORKDOC my $p1 = &$lookup_type_prio($a); my $p2 = &$lookup_type_prio($b); - return $p1 <=> $p2 if $p1 != $p2; - - $p1 = $ref1->{priority} || 100000; - $p2 = $ref2->{priority} || 100000; + $p1 += $ref1->{priority} // 50000; + $p2 += $ref2->{priority} // 50000; return $p1 <=> $p2 if $p1 != $p2; return $a cmp $b; - } keys %$ifaces) { - - my $d = $ifaces->{$iface}; - + } keys %$ifaces) { next if $printed->{$iface}; - if (@options && $options[0]->[0] < $d->{priority}) { + my $d = $ifaces->{$iface}; + my $pri = $d->{priority} // 0; + if (@options && $options[0]->[0] < $pri) { do { $raw .= (shift @options)->[1] . "\n"; - } while (@options && $options[0]->[0] < $d->{priority}); + } while (@options && $options[0]->[0] < $pri); $raw .= "\n"; }