superseded by v2: https://lore.proxmox.com/pve-devel/20250417104855.144882-1-s.hanre...@proxmox.com/T
On 4/17/25 11:59, Stefan Hanreich wrote: > When creating a new network device from the UI and leaving the MTU > field empty, the field hints that this means that the MTU is inherited > from the bridge. Since leaving the field empty omits the key from the > network device configuration, we need to inherit from the bridge MTU > when this key is missing as well, instead of only inheriting from the > bridge when the field is explicitly set to 1. > > The common case where this was encountered was with creating network > devices on SDN VXLAN vnets. There the default MTU for bridges is 1450, > since VXLAN adds some overhead and we automatically subtract that > overhead from the default bridge MTU (1500) if no MTU is explicitly > set in the zone configuration. > > I decided to fix this here, instead of in the UI, since the fix then > also works for existing network devices where MTU is unset. This means > that users would not have to re-apply the setting from the UI. It also > seems like the sensible default to inherit the MTU value from the > bridge when this key doesn't exist instead of just not setting > host_mtu at all. > > Signed-off-by: Stefan Hanreich <s.hanre...@proxmox.com> > --- > PVE/QemuServer.pm | 28 +++++++++++++++------------- > test/cfg2cmd/netdev_vxlan.conf | 8 ++++++++ > test/cfg2cmd/netdev_vxlan.conf.cmd | 26 ++++++++++++++++++++++++++ > test/run_config2command_tests.pl | 6 ++++++ > 4 files changed, 55 insertions(+), 13 deletions(-) > create mode 100644 test/cfg2cmd/netdev_vxlan.conf > create mode 100644 test/cfg2cmd/netdev_vxlan.conf.cmd > > diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm > index ccdceedc..6a55d59f 100644 > --- a/PVE/QemuServer.pm > +++ b/PVE/QemuServer.pm > @@ -1596,20 +1596,22 @@ sub print_netdevice_full { > > $tmpstr .= ",bootindex=$net->{bootindex}" if $net->{bootindex} ; > > - if (my $mtu = $net->{mtu}) { > - if ($net->{model} eq 'virtio' && $net->{bridge}) { > - my $bridge_mtu = PVE::Network::read_bridge_mtu($net->{bridge}); > - if ($mtu == 1) { > - $mtu = $bridge_mtu; > - } elsif ($mtu < 576) { > - die "netdev $netid: MTU '$mtu' is smaller than the IP minimum > MTU '576'\n"; > - } elsif ($mtu > $bridge_mtu) { > - die "netdev $netid: MTU '$mtu' is bigger than the bridge MTU > '$bridge_mtu'\n"; > - } > - $tmpstr .= ",host_mtu=$mtu"; > - } else { > - warn "WARN: netdev $netid: ignoring MTU '$mtu', not using VirtIO or > no bridge configured.\n"; > + my $mtu = $net->{mtu}; > + > + if ($net->{model} eq 'virtio' && $net->{bridge}) { > + my $bridge_mtu = PVE::Network::read_bridge_mtu($net->{bridge}); > + > + if (!defined($mtu) || $mtu == 1) { > + $mtu = $bridge_mtu; > + } elsif ($mtu < 576) { > + die "netdev $netid: MTU '$mtu' is smaller than the IP minimum MTU > '576'\n"; > + } elsif ($mtu > $bridge_mtu) { > + die "netdev $netid: MTU '$mtu' is bigger than the bridge MTU > '$bridge_mtu'\n"; > } > + > + $tmpstr .= ",host_mtu=$mtu" if $mtu != 1500; > + } elsif (defined($mtu)) { > + warn "WARN: netdev $netid: ignoring MTU '$mtu', not using VirtIO or no > bridge configured.\n"; > } > > if ($use_old_bios_files) { > diff --git a/test/cfg2cmd/netdev_vxlan.conf b/test/cfg2cmd/netdev_vxlan.conf > new file mode 100644 > index 00000000..222a66d4 > --- /dev/null > +++ b/test/cfg2cmd/netdev_vxlan.conf > @@ -0,0 +1,8 @@ > +# TEST: Simple test for netdev related stuff > +# QEMU_VERSION: 5.0 > +bootdisk: scsi0 > +cores: 3 > +memory: 768 > +name: netdev > +net0: virtio=A2:C0:43:77:08:A0,bridge=vxlan_bridge > +ostype: l26 > diff --git a/test/cfg2cmd/netdev_vxlan.conf.cmd > b/test/cfg2cmd/netdev_vxlan.conf.cmd > new file mode 100644 > index 00000000..a9db44bf > --- /dev/null > +++ b/test/cfg2cmd/netdev_vxlan.conf.cmd > @@ -0,0 +1,26 @@ > +/usr/bin/kvm \ > + -id 8006 \ > + -name 'netdev,debug-threads=on' \ > + -no-shutdown \ > + -chardev > 'socket,id=qmp,path=/var/run/qemu-server/8006.qmp,server=on,wait=off' \ > + -mon 'chardev=qmp,mode=control' \ > + -chardev 'socket,id=qmp-event,path=/var/run/qmeventd.sock,reconnect=5' \ > + -mon 'chardev=qmp-event,mode=control' \ > + -pidfile /var/run/qemu-server/8006.pid \ > + -daemonize \ > + -smp '3,sockets=1,cores=3,maxcpus=3' \ > + -nodefaults \ > + -boot > 'menu=on,strict=on,reboot-timeout=1000,splash=/usr/share/qemu-server/bootsplash.jpg' > \ > + -vnc 'unix:/var/run/qemu-server/8006.vnc,password=on' \ > + -cpu kvm64,enforce,+kvm_pv_eoi,+kvm_pv_unhalt,+lahf_lm,+sep \ > + -m 768 \ > + -device 'pci-bridge,id=pci.1,chassis_nr=1,bus=pci.0,addr=0x1e' \ > + -device 'pci-bridge,id=pci.2,chassis_nr=2,bus=pci.0,addr=0x1f' \ > + -device 'piix3-usb-uhci,id=uhci,bus=pci.0,addr=0x1.0x2' \ > + -device 'usb-tablet,id=tablet,bus=uhci.0,port=1' \ > + -device 'VGA,id=vga,bus=pci.0,addr=0x2' \ > + -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3' \ > + -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \ > + -netdev > 'type=tap,id=net0,ifname=tap8006i0,script=/usr/libexec/qemu-server/pve-bridge,downscript=/usr/libexec/qemu-server/pve-bridgedown,vhost=on' > \ > + -device > 'virtio-net-pci,mac=A2:C0:43:77:08:A0,netdev=net0,bus=pci.0,addr=0x12,id=net0,bootindex=300,host_mtu=1450' > \ > + -machine 'type=pc+pve0' > diff --git a/test/run_config2command_tests.pl > b/test/run_config2command_tests.pl > index 209122c2..c2dfbd31 100755 > --- a/test/run_config2command_tests.pl > +++ b/test/run_config2command_tests.pl > @@ -316,6 +316,12 @@ my $pve_common_network; > $pve_common_network = Test::MockModule->new('PVE::Network'); > $pve_common_network->mock( > read_bridge_mtu => sub { > + my ($bridge_name) = @_; > + > + if ($bridge_name eq 'vxlan_bridge') { > + return 1450; > + } > + > return 1500; > }, > ); _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel