This series adds automatic detection of the host tap device's MTU and exposes it to the guest via VIRTIO_NET_F_MTU, addressing gitlab.com/qemu-project/qemu/-/issues/3155.
Currently, host_mtu= must be set manually on the virtio-net-pci device, duplicating the MTU already configured on the host's tap interface. This series adds a new mtu-from-tap boolean property (default off) that, when enabled, automatically reads the backend's MTU and uses it for the guest, avoiding the need to specify the value twice. v2: - Addressed feedback from Eugenio Perez Martin: rather than checking for NET_CLIENT_DRIVER_TAP and calling tap_get_mtu() directly, added a generic get_mtu callback to NetClientInfo and a qemu_get_mtu() wrapper, following the existing qemu_has_ufo() pattern. virtio-net.c now calls qemu_get_mtu() without any backend-type check, so other backends (e.g. vhost-user, vhost-vdpa) can implement get_mtu in the future without requiring any change to virtio-net.c. (patch 2 is new as a result; patch 3 updated accordingly) The series is split into three patches: - patch 1 adds a helper to query a tap fd's host MTU (Linux only, with build-safe stubs for BSD/Solaris/stub backends) - patch 2 adds a generic get_mtu NetClientInfo callback and wires it up for the tap backend - patch 3 adds the new virtio-net property and wires it up, including a note on a config-space sizing timing issue discovered during testing Tested manually with a tap device configured for MTU 9000 and an Alpine Linux guest, confirming the guest correctly negotiates VIRTIO_NET_F_MTU and reports the expected MTU. Also tested by Aniket Sahu on ppc64le/POWER10 with a SLES guest. Nariman Sayed (3): net/tap: add tap_fd_get_mtu() to query host tap MTU net: add generic get_mtu NetClientInfo callback virtio-net: add mtu-from-tap property for automatic MTU detection hw/net/virtio-net.c | 10 ++++++++++ include/hw/virtio/virtio-net.h | 1 + include/net/net.h | 3 +++ net/net.c | 9 +++++++++ net/tap-bsd.c | 5 +++++ net/tap-linux.c | 30 ++++++++++++++++++++++++++++++ net/tap-solaris.c | 5 +++++ net/tap-stub.c | 5 +++++ net/tap.c | 8 ++++++++ net/tap_int.h | 1 + 10 files changed, 77 insertions(+) -- 2.34.1
