From: Alexandre Derumier Date: Thu, 29 Apr 2021 11:17:57 +0000 (+0200) Subject: zones: qinq: ovs: fix duplicate ovs_ports with multiple zones/vnets X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=d8c88170fdcebcffe4ddafc1cacbab2df7a37d26;p=matthieu%2Fpve-network.git zones: qinq: ovs: fix duplicate ovs_ports with multiple zones/vnets Signed-off-by: Alexandre Derumier --- diff --git a/PVE/Network/SDN/Zones/QinQPlugin.pm b/PVE/Network/SDN/Zones/QinQPlugin.pm index 0a5abf8..1543fc1 100644 --- a/PVE/Network/SDN/Zones/QinQPlugin.pm +++ b/PVE/Network/SDN/Zones/QinQPlugin.pm @@ -82,10 +82,10 @@ sub generate_sdn_config { push @iface_config, "ovs_options vlan_mode=dot1q-tunnel tag=$stag other_config:qinq-ethtype=$vlanprotocol"; push(@{$config->{$svlan_iface}}, @iface_config) if !$config->{$svlan_iface}; - #redefine main ovs bridge, ifupdown2 will merge ovs_ports - @iface_config = (); - push @iface_config, "ovs_ports $svlan_iface"; - push(@{$config->{$bridge}}, @iface_config); + #redefine main ovs bridge, ifupdown2 will merge ovs_ports + @{$config->{$bridge}}[0] = "ovs_ports" if !@{$config->{$bridge}}[0]; + my @ovs_ports = split / / , @{$config->{$bridge}}[0]; + @{$config->{$bridge}}[0] .= " $svlan_iface" if !grep( $_ eq $svlan_iface, @ovs_ports ); #zone vlan aware bridge @iface_config = (); diff --git a/test/zones/qinq/ovs/expected_sdn_interfaces b/test/zones/qinq/ovs/expected_sdn_interfaces index 71c7aa3..068ae7d 100644 --- a/test/zones/qinq/ovs/expected_sdn_interfaces +++ b/test/zones/qinq/ovs/expected_sdn_interfaces @@ -6,15 +6,33 @@ iface myvnet bridge_stp off bridge_fd 0 +auto myvnet2 +iface myvnet2 + bridge_ports z_myzone.101 + bridge_stp off + bridge_fd 0 + +auto myvnet3 +iface myvnet3 + bridge_ports z_myzone2.100 + bridge_stp off + bridge_fd 0 + auto sv_myzone iface sv_myzone ovs_type OVSIntPort ovs_bridge vmbr0 ovs_options vlan_mode=dot1q-tunnel tag=10 other_config:qinq-ethtype=802.1q +auto sv_myzone2 +iface sv_myzone2 + ovs_type OVSIntPort + ovs_bridge vmbr0 + ovs_options vlan_mode=dot1q-tunnel tag=20 other_config:qinq-ethtype=802.1q + auto vmbr0 iface vmbr0 - ovs_ports sv_myzone + ovs_ports sv_myzone sv_myzone2 auto z_myzone iface z_myzone @@ -23,3 +41,11 @@ iface z_myzone bridge-fd 0 bridge-vlan-aware yes bridge-vids 2-4094 + +auto z_myzone2 +iface z_myzone2 + bridge-stp off + bridge-ports sv_myzone2 + bridge-fd 0 + bridge-vlan-aware yes + bridge-vids 2-4094 diff --git a/test/zones/qinq/ovs/sdn_config b/test/zones/qinq/ovs/sdn_config index 1708d4c..6321603 100644 --- a/test/zones/qinq/ovs/sdn_config +++ b/test/zones/qinq/ovs/sdn_config @@ -3,9 +3,14 @@ vnets => { ids => { myvnet => { tag => 100, type => "vnet", zone => "myzone" }, + myvnet2 => { tag => 101, type => "vnet", zone => "myzone" }, + myvnet3 => { tag => 100, type => "vnet", zone => "myzone2" }, }, }, zones => { - ids => { myzone => { bridge => "vmbr0", tag => 10, ipam => "pve", type => "qinq" } }, + ids => { + myzone => { bridge => "vmbr0", tag => 10, ipam => "pve", type => "qinq" }, + myzone2 => { bridge => "vmbr0", tag => 20, ipam => "pve", type => "qinq" }, + }, }, }