* [pve-devel] [PATCH V3 pve-common 0/1] network: tap_plug: fix mtu bugs
@ 2022-08-25 9:27 Alexandre Derumier
2022-08-25 9:27 ` [pve-devel] [PATCH V3 pve-common 1/1] network: tap_plug: fix mtu Alexandre Derumier
0 siblings, 1 reply; 3+ messages in thread
From: Alexandre Derumier @ 2022-08-25 9:27 UTC (permalink / raw)
To: pve-devel
changelog v2:
- rebase on last git
changelog v3:
- rebase on last git
a forum user have reported strange bug with ovs + mtu9000 when
switching between 2 ovs bridge with different mtu. (1500 vs 9000)
https://forum.proxmox.com/threads/ovs-problem-with-mtu-9000-on-vms-assigned-to-vmbr0.105172/
(user confirmed that this patch fix the problem)
I have found 2 bugs:
1) ovsint port mtu need to be set with ""ovs-vsctl set mtu-request"
(ip link set mtu 9000 don't seem to do nothing on ovs-int port, maybe this have change with last ovs version.)
fresh start of a vm 100 + firewall on ovs with mtu 9000:
153: tap100i0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 9000 qdisc pfifo_fast master fwbr100i0 state UNKNOWN group default qlen 1000
link/ether 62:42:32:cc:a2:24 brd ff:ff:ff:ff:ff:ff
154: fwbr100i0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 46:f6:b7:95:23:86 brd ff:ff:ff:ff:ff:ff
155: fwln100o0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master fwbr100i0 state UNKNOWN group default qlen 1000
2) when switching between 2 bridges or ovs with differents mtu, mtu are not updated on existing interfaces (veth,tap, fwbr, fwnl)
vm start : vmbr0 mtu=1500 + firewall
-----------------------------
200: tap100i0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master fwbr100i0 state UNKNOWN group default qlen 1000
link/ether 62:42:32:cc:a2:24 brd ff:ff:ff:ff:ff:ff
206: fwbr100i0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 46:f6:b7:95:23:86 brd ff:ff:ff:ff:ff:ff
207: fwpr100p0@fwln100i0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master vmbr0 state UP group default qlen 1000
link/ether 0a:2e:f5:f4:22:e3 brd ff:ff:ff:ff:ff:ff
208: fwln100i0@fwpr100p0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master fwbr100i0 state UP group default qlen 1000
link/ether 96:0e:94:11:c1:45 brd ff:ff:ff:ff:ff:ff
switch to vmbr1 mtu=9000 + firewall
--------------------------------------
200: tap100i0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master fwbr100i0 state UNKNOWN group default qlen 1000
link/ether 62:42:32:cc:a2:24 brd ff:ff:ff:ff:ff:ff
209: fwbr100i0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 46:f6:b7:95:23:86 brd ff:ff:ff:ff:ff:ff
210: fwpr100p0@fwln100i0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc noqueue master vmbr3 state UP group default qlen 1000
link/ether 0a:2e:f5:f4:22:e3 brd ff:ff:ff:ff:ff:ff
211: fwln100i0@fwpr100p0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc noqueue master fwbr100i0 state UP group default qlen 1000
link/ether 96:0e:94:11:c1:45 brd ff:ff:ff:ff:ff:ff
Alexandre Derumier (1):
network: tap_plug: fix mtu
src/PVE/Network.pm | 31 +++++++++++++++++++++----------
1 file changed, 21 insertions(+), 10 deletions(-)
--
2.30.2
^ permalink raw reply [flat|nested] 3+ messages in thread
* [pve-devel] [PATCH V3 pve-common 1/1] network: tap_plug: fix mtu
2022-08-25 9:27 [pve-devel] [PATCH V3 pve-common 0/1] network: tap_plug: fix mtu bugs Alexandre Derumier
@ 2022-08-25 9:27 ` Alexandre Derumier
2022-08-31 8:13 ` [pve-devel] applied: " Thomas Lamprecht
0 siblings, 1 reply; 3+ messages in thread
From: Alexandre Derumier @ 2022-08-25 9:27 UTC (permalink / raw)
To: pve-devel
- ovsint port mtu need to be set with ""ovs-vsctl set mtu-request"
- update mtu on already existing interfaces (fwbr,fwln,tap,veth)
if existing tap|veth interface is replugged on a different mtu bridge
Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
---
src/PVE/Network.pm | 31 +++++++++++++++++++++----------
1 file changed, 21 insertions(+), 10 deletions(-)
diff --git a/src/PVE/Network.pm b/src/PVE/Network.pm
index c83b1bb..d3eb5e0 100644
--- a/src/PVE/Network.pm
+++ b/src/PVE/Network.pm
@@ -219,6 +219,11 @@ my $bridge_disable_interface_learning = sub {
my $bridge_add_interface = sub {
my ($bridge, $iface, $tag, $trunks) = @_;
+ my $bridgemtu = read_bridge_mtu($bridge);
+ eval {
+ PVE::Tools::run_command(['/sbin/ip', 'link', 'set', $iface, 'mtu', $bridgemtu]);
+ };
+
# drop link local address (it can't be used when on a bridge anyway)
disable_ipv6($iface);
iface_set_master($iface, $bridge);
@@ -259,6 +264,9 @@ my $ovs_bridge_add_port = sub {
push @$cmd, "trunks=". join(',', $trunks) if $trunks;
push @$cmd, "vlan_mode=native-untagged" if $tag && $trunks;
+ my $bridgemtu = read_bridge_mtu($bridge);
+ push @$cmd, '--', 'set', 'Interface', $iface, "mtu_request=$bridgemtu";
+
if ($internal) {
# second command
push @$cmd, '--', 'set', 'Interface', $iface, 'type=internal';
@@ -271,9 +279,12 @@ my $ovs_bridge_add_port = sub {
};
my $activate_interface = sub {
- my ($iface) = @_;
+ my ($iface, $mtu) = @_;
- eval { run_command(['/sbin/ip', 'link', 'set', $iface, 'up']) };
+ my $cmd = ['/sbin/ip', 'link', 'set', $iface, 'up'];
+ push (@$cmd, ('mtu', $mtu)) if $mtu;
+
+ eval { run_command($cmd) };
die "can't activate interface '$iface' - $@\n" if $@;
};
@@ -354,8 +365,9 @@ sub veth_create {
# up vethpair
disable_ipv6($veth);
disable_ipv6($vethpeer);
- &$activate_interface($veth);
- &$activate_interface($vethpeer);
+ &$activate_interface($veth, $bridgemtu);
+ &$activate_interface($vethpeer, $bridgemtu);
+
}
sub veth_delete {
@@ -373,8 +385,10 @@ my $create_firewall_bridge_linux = sub {
my ($vmid, $devid) = &$parse_tap_device_name($iface);
my ($fwbr, $vethfw, $vethfwpeer) = &$compute_fwbr_names($vmid, $devid);
+ my $bridgemtu = read_bridge_mtu($bridge);
+
&$cond_create_bridge($fwbr);
- &$activate_interface($fwbr);
+ &$activate_interface($fwbr, $bridgemtu);
copy_bridge_config($bridge, $fwbr);
veth_create($vethfw, $vethfwpeer, $bridge);
@@ -395,15 +409,12 @@ my $create_firewall_bridge_ovs = sub {
my $bridgemtu = read_bridge_mtu($bridge);
&$cond_create_bridge($fwbr);
- &$activate_interface($fwbr);
+ &$activate_interface($fwbr, $bridgemtu);
&$bridge_add_interface($fwbr, $iface);
&$ovs_bridge_add_port($bridge, $ovsintport, $tag, 1, $trunks);
- &$activate_interface($ovsintport);
-
- # set the same mtu for ovs int port
- run_command(['/sbin/ip', 'link', 'set', $ovsintport, 'mtu', $bridgemtu]);
+ &$activate_interface($ovsintport, $bridgemtu);
&$bridge_add_interface($fwbr, $ovsintport);
&$bridge_disable_interface_learning($ovsintport) if $no_learning;
--
2.30.2
^ permalink raw reply [flat|nested] 3+ messages in thread
* [pve-devel] applied: [PATCH V3 pve-common 1/1] network: tap_plug: fix mtu
2022-08-25 9:27 ` [pve-devel] [PATCH V3 pve-common 1/1] network: tap_plug: fix mtu Alexandre Derumier
@ 2022-08-31 8:13 ` Thomas Lamprecht
0 siblings, 0 replies; 3+ messages in thread
From: Thomas Lamprecht @ 2022-08-31 8:13 UTC (permalink / raw)
To: Proxmox VE development discussion, Alexandre Derumier
Am 25/08/2022 um 11:27 schrieb Alexandre Derumier:
> - ovsint port mtu need to be set with ""ovs-vsctl set mtu-request"
> - update mtu on already existing interfaces (fwbr,fwln,tap,veth)
> if existing tap|veth interface is replugged on a different mtu bridge
>
> Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
> ---
> src/PVE/Network.pm | 31 +++++++++++++++++++++----------
> 1 file changed, 21 insertions(+), 10 deletions(-)
>
>
applied, thanks!
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2022-08-31 8:13 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-25 9:27 [pve-devel] [PATCH V3 pve-common 0/1] network: tap_plug: fix mtu bugs Alexandre Derumier
2022-08-25 9:27 ` [pve-devel] [PATCH V3 pve-common 1/1] network: tap_plug: fix mtu Alexandre Derumier
2022-08-31 8:13 ` [pve-devel] applied: " Thomas Lamprecht
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal