[pve-devel] [PATCH pve-common] network_interfaces: use allow-ovs for OVSBridge
Alexandre Derumier
aderumier at odiso.com
Fri Sep 20 08:45:05 CEST 2019
new openvswitch-switch service use "ifup --allow-ovs",
and this race with "auto ..." used by networking service
bug reported here:
https://forum.proxmox.com/threads/so-is-openvswitch-bonding-just-broken-on-pve-6-whats-going-on.58020/
This is also fixing ovs with ifupdown2
Openvswitch github have a note about this:
https://github.com/openvswitch/ovs/commit/e0dfd67b456c8ea36cc2e2f23039a300dbbedfed#diff-555e6da95251766b76e83867900bd8fe
Signed-off-by: Alexandre Derumier <aderumier at odiso.com>
---
src/PVE/INotify.pm | 20 ++++++++++---------
.../t.list-interfaces.pl | 2 +-
.../t.ovs_bridge_allow.pl | 6 +++---
3 files changed, 15 insertions(+), 13 deletions(-)
diff --git a/src/PVE/INotify.pm b/src/PVE/INotify.pm
index 6a7f110..b3e5ab0 100644
--- a/src/PVE/INotify.pm
+++ b/src/PVE/INotify.pm
@@ -1142,7 +1142,9 @@ sub __read_etc_network_interfaces {
# from the {options} hash for them to be removed correctly.
@$options = grep {defined($_)} map {
my ($pri, $line) = @$_;
- if ($line =~ /^allow-(\S+)\s+(.*)$/) {
+ if ($line =~ /^allow-ovs\s+(.*)$/) {
+ undef;
+ } elsif ($line =~ /^allow-(\S+)\s+(.*)$/) {
my $bridge = $1;
my @ports = split(/\s+/, $2);
if (defined(my $br = $ifaces->{$bridge})) {
@@ -1254,6 +1256,7 @@ sub __interface_to_string {
$done->{ovs_type} = 1;
$raw .= "\tovs_ports $d->{ovs_ports}\n" if $d->{ovs_ports};
+
$done->{ovs_ports} = 1;
} elsif ($d->{type} eq 'OVSPort' || $d->{type} eq 'OVSIntPort' ||
$d->{type} eq 'OVSBond') {
@@ -1293,12 +1296,7 @@ sub __interface_to_string {
if ($d->{ovs_bridge}) {
- if ($ifupdown2) {
- $raw = "auto $iface\n$raw";
- } else {
- $raw = "allow-$d->{ovs_bridge} $iface\n$raw";
- }
-
+ $raw = "allow-$d->{ovs_bridge} $iface\n$raw";
$raw .= "\tovs_bridge $d->{ovs_bridge}\n";
$done->{ovs_bridge} = 1;
}
@@ -1592,7 +1590,6 @@ NETWORKDOC
return $a cmp $b;
} keys %$ifaces) {
next if $printed->{$iface};
-
my $d = $ifaces->{$iface};
my $pri = $d->{priority} // 0;
if (@options && $options[0]->[0] < $pri) {
@@ -1603,7 +1600,12 @@ NETWORKDOC
}
$printed->{$iface} = 1;
- $raw .= "auto $iface\n" if $d->{autostart};
+ if ($d->{type} eq 'OVSBridge') {
+ $raw .= "allow-ovs $iface\n";
+ } elsif ($d->{autostart}) {
+ $raw .= "auto $iface\n" if $d->{autostart};
+ }
+
my $i = 0; # some options should be printed only once
$raw .= __interface_to_string($iface, $d, $_, !$i++, $ifupdown2) foreach @{$d->{families}};
}
diff --git a/test/etc_network_interfaces/t.list-interfaces.pl b/test/etc_network_interfaces/t.list-interfaces.pl
index 41907ae..7e37afa 100644
--- a/test/etc_network_interfaces/t.list-interfaces.pl
+++ b/test/etc_network_interfaces/t.list-interfaces.pl
@@ -53,7 +53,7 @@ iface vmbr0 inet6 static
source-directory before-ovs.d
-auto vmbr1
+allow-ovs vmbr1
iface vmbr1 inet static
address $wanted{vmbr1}->{address}
netmask $wanted{vmbr1}->{netmask}
diff --git a/test/etc_network_interfaces/t.ovs_bridge_allow.pl b/test/etc_network_interfaces/t.ovs_bridge_allow.pl
index 6d22243..45fad2e 100644
--- a/test/etc_network_interfaces/t.ovs_bridge_allow.pl
+++ b/test/etc_network_interfaces/t.ovs_bridge_allow.pl
@@ -39,7 +39,7 @@ iface eth2 inet manual
iface eth3 inet manual
-auto vmbr0
+allow-ovs vmbr0
iface vmbr0 inet static
address $ip
netmask $nm
@@ -67,7 +67,7 @@ iface eth2 inet manual
iface eth3 inet manual
-auto vmbr0
+allow-ovs vmbr0
iface vmbr0 inet static
address $ip
netmask $nm
@@ -102,7 +102,7 @@ iface eth3 inet manual
iface eth2 inet manual
-auto vmbr0
+allow-ovs vmbr0
iface vmbr0 inet static
address $ip
netmask $nm
--
2.20.1
More information about the pve-devel
mailing list