From nobody Thu Nov 12 15:08:49 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) client-ip=38.145.34.151; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1793296932; cv=none; d=zohomail.com; s=zohoarc; b=RhK3oBiIyaAcu4fHr7K9hetZQP4sGTMRf1iK4sY+Vva1hpb/uj7B6ItiQmCTxQvaP3ji+s+K7xUQ1S6ZZz6md/z/L0EwwmVUPyiSDeV2aEoJgoxO1CnM0U67wQqJKB5FQ3UtbyhKeAe9oh5A+gkFH+UTF1wre33nFeNHt8kZPFw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1793296932; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=fDsx7rLNNQ8HFHnXhyApeD3uq2LX1X9U0Fz4dBIPoos=; b=DwSg7xUevpeaVuHrGDnpM17bXDZ61aG96a3GhuvMPysi/UbvwERcdKk4gl+zucw3bLPJu63grJdNZ6RtgYc4ey/2iLwbqIDtMK+QFWA65kwx/eJ4pIvbOLSF2MEvh5nJBbVd5OGX1cVMorX6myvYtsUvnN+YtK/haSRI1HgWj2Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [38.145.34.151]) by mx.zohomail.com with SMTPS id 1793296932087144.03985805432103; Thu, 29 Oct 2026 11:02:12 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 31A2441AFE; Thu, 29 Oct 2026 14:02:10 -0400 (EDT) Received: from [172.19.199.19] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id 81BB641BD8; Thu, 29 Oct 2026 14:00:31 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 2A7C43F375; Thu, 29 Oct 2026 14:00:24 -0400 (EDT) Received: from mail-ed1-x52e.google.com (mail-ed1-x52e.google.com [IPv6:2a00:1450:4864:20::52e]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 724E33F35B for ; Thu, 29 Oct 2026 14:00:22 -0400 (EDT) Received: by mail-ed1-x52e.google.com with SMTP id 4fb4d7f45d1cf-6b1aa27963eso1730269a12.1 for ; Thu, 29 Oct 2026 11:00:22 -0700 (PDT) Received: from tulp.my.domain (2001-1c02-1a15-3000-25f6-628e-6064-de9b.cable.dynamic.v6.ziggo.nl. [2001:1c02:1a15:3000:25f6:628e:6064:de9b]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c4ca2ddf8c1sm9011966b.9.2026.10.29.11.00.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 29 Oct 2026 11:00:20 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20260707; t=1793296821; x=1793901621; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=fDsx7rLNNQ8HFHnXhyApeD3uq2LX1X9U0Fz4dBIPoos=; b=MUjbuyl3NRH+Y+DmArM3qnej8fyPH/JU9qh5D98Pzu1+MTOFf/U0FK3bwS2lGp00F/ r0Wv9vNB75pyYQElS46CX4rRDUcieIZGRfegGepBAK6NaMgbpt/Y8oakaysFy/R5PbwO fm+irX4OamBs4s9e8pF6hXzakfok7uAx2p+HDUCkSvY0US5+COsAsHHuDuhKjJecqO/5 wssRscE+t/wjzEGaVvxF0vYKgjS1ct/akH3+mXmzMRi6tylODmFZgH3zuTeSqCkWuzJq 61uJqtmFE8UiALXIMGWbMJfMJnzXcu4dI2fJt9RbCupJzMwFrjtUcRjV01Hj5nvFAKQI L+GQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1793296821; x=1793901621; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=fDsx7rLNNQ8HFHnXhyApeD3uq2LX1X9U0Fz4dBIPoos=; b=LJZ/YH5eHr+9slOJN73RgBxafJ5nOJZy0QtSt9H2/j2+OPoHr9rKHKGKwkpCKpgSGZ MZZamTiogWC4D0DajgWrg5eTj7oXlBlPJ1MymH+AjHqWcNxvDQqJeku2GoIYnSJLJeVF ROPp3itQeUzAZf3qDnMP7fExbUQWr867Z3fhMgCT3w4COqfrZMrHGuNR/tSlqtfJtuvP e+Y3f1KUUhTdSC/RK9arMUSWObBJWnjlmeg+0iEqek6dDC0gN5xa9hzL7Ap2CY6UtGfX dCEKEviiOwFCoLdaqbuUD2rjsH+7G0gCTPt0zGl6r0FZcAqU7SlAPeSWAMB/W1WsmcWu rBNQ== X-Gm-Message-State: AFq9FYKwPe7J1/KlWL4FqJoq1MnNsiKWYls04vZlbgmcdz20Gnu/TN5I 2MBcj77m5ubr0ZzJzgk/4bIJ4p03/TDb8yseGYk5IQP+IK6LHdQBbIVouQFOv2bM X-Gm-Gg: AYBFou2zwJayG4qU01Dh0ylmmuGTvwlJgfkis7boS78qno2eaGA+UGK6c1WN+z6LAKW vEcx64oS26AVB3xM5g7IYQqTOLSEz0fyaxNK/D58fubFaLHlN3nF1yqsDGAZoTqKo3QyLU1Gc1n XmMFerRFeprh5YjZU1JNPAMPPXcA3ZUjlHqcaBJyTnNqj17Ae6h19ByCNot+0SLfXuFu4zsqbRB FgVUE76g6gL3f8d+PwcerbDDwjmxnmnfMwEFXpnSBLmMpe58zlmjcbTGZmQ2fBpkLI2Fo9+x5ym XFCYGduSUT6FJjgWdQPi9draIa//3rsbTitZQDfWjY0ff6qLAkhIwZi9jfo6QY43/U2F3PHy8ew lMS+oDI2DKcY5mjGG3scwYypRpCgD85ZRD2y46Wd4yNqpGxReVTuhBMq86aBrY6sL9cWhqSzsb9 e4UYoHE61luyAWEAIC9psHKCCLI+UWT6a79P8UoewLth/iJ1n7TSgFikawOwkdoHdSJmfG0GlvH Pxs+ujc90XjFofMfBHmxfXGe37ZaM1jUbkbOYNNMP3QNWupr2l7MAxmBKEuOvWJRp576zoNZqiE sVJ0O1liLJZrNpDR29j9QhDVxjIUeIj9FwXWncgMbh3oxOkkcGEvRWtCqT8alIAdL4oxdgRJqXB +dC72LIrrKXcwN/KpRVFNaGBOQoy657BYgfnWm9U3 X-Received: by 2002:a17:907:3f20:b0:c33:dbe8:290d with SMTP id a640c23a62f3a-c49d12ab323mr322399666b.22.1793296820701; Thu, 29 Oct 2026 11:00:20 -0700 (PDT) From: Roman Bogorodskiy To: devel@lists.libvirt.org Subject: [PATCH] bhyve: respect network MTU Date: Thu, 29 Oct 2026 18:59:24 +0100 Message-ID: <20261029175924.18332-1-bogorodskiy@gmail.com> X-Mailer: git-send-email 2.55.0 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: GNTAQZQ4Z4VGEHF4ZEG6M77HINAFH5WA X-Message-ID-Hash: GNTAQZQ4Z4VGEHF4ZEG6M77HINAFH5WA X-MailFrom: bogorodskiy@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Roman Bogorodskiy X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1793296933500158500 Content-Type: text/plain; charset="utf-8" Update the bhyve driver to propagate the network interface's MTU: - Configure the SLIRP backend MTU for user networking. - Configure the TAP interface MTU for bridge networking. - Advertise the MTU to the guest for virtio-net devices. The e1000 device does not support advertising an MTU to the guest. Its backend MTU is still configured, but the guest interface must be configured separately. Signed-off-by: Roman Bogorodskiy Reviewed-by: Michal Privoznik --- src/bhyve/bhyve_command.c | 19 ++++++++---- .../x86_64/bhyvexml2argv-net-mtu-bridge.args | 11 +++++++ .../bhyvexml2argv-net-mtu-bridge.ldargs | 4 +++ .../x86_64/bhyvexml2argv-net-mtu-bridge.xml | 31 +++++++++++++++++++ .../x86_64/bhyvexml2argv-net-mtu-slirp.args | 11 +++++++ .../x86_64/bhyvexml2argv-net-mtu-slirp.ldargs | 4 +++ .../x86_64/bhyvexml2argv-net-mtu-slirp.xml | 29 +++++++++++++++++ tests/bhyvexml2argvmock.c | 8 +++-- tests/bhyvexml2argvtest.c | 2 ++ 9 files changed, 111 insertions(+), 8 deletions(-) create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-net-mtu-br= idge.args create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-net-mtu-br= idge.ldargs create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-net-mtu-br= idge.xml create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-net-mtu-sl= irp.args create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-net-mtu-sl= irp.ldargs create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-net-mtu-sl= irp.xml diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c index 09ef61e798..7e3d3d4553 100644 --- a/src/bhyve/bhyve_command.c +++ b/src/bhyve/bhyve_command.c @@ -49,6 +49,7 @@ bhyveBuildNetArgStr(const virDomainDef *def, virCommand *cmd, bool dryRun) { + g_auto(virBuffer) netarg =3D VIR_BUFFER_INITIALIZER; char macaddr[VIR_MAC_STRING_BUFLEN]; char *realifname =3D NULL; const char *brname =3D NULL; @@ -97,8 +98,11 @@ bhyveBuildNetArgStr(const virDomainDef *def, break; case VIR_DOMAIN_NET_TYPE_USER: virCommandAddArg(cmd, "-s"); - virCommandAddArgFormat(cmd, "%d:0,%s,slirp,mac=3D%s,open", - net->info.addr.pci.slot, nic_model, macaddr= ); + virBufferAsprintf(&netarg, "%d:0,%s,slirp,mac=3D%s,open", + net->info.addr.pci.slot, nic_model, macaddr); + if (net->mtu) + virBufferAsprintf(&netarg, ",mtu=3D%u", net->mtu); + virCommandAddArgBuffer(cmd, &netarg); return 0; case VIR_DOMAIN_NET_TYPE_ETHERNET: case VIR_DOMAIN_NET_TYPE_DIRECT: @@ -125,7 +129,7 @@ bhyveBuildNetArgStr(const virDomainDef *def, virDomainNetGetActualVirtPortPr= ofile(net), virDomainNetGetActualVlan(net), virDomainNetGetActualPortOption= sIsolated(net), - NULL, 0, NULL, + NULL, net->mtu, NULL, VIR_NETDEV_TAP_CREATE_IFUP | VI= R_NETDEV_TAP_CREATE_PERSIST) < 0) { goto cleanup; } @@ -148,9 +152,12 @@ bhyveBuildNetArgStr(const virDomainDef *def, =20 =20 virCommandAddArg(cmd, "-s"); - virCommandAddArgFormat(cmd, "%d:0,%s,%s,mac=3D%s", - net->info.addr.pci.slot, nic_model, - realifname, macaddr); + virBufferAsprintf(&netarg, "%d:0,%s,%s,mac=3D%s", + net->info.addr.pci.slot, nic_model, + realifname, macaddr); + if (net->mtu && net->model =3D=3D VIR_DOMAIN_NET_MODEL_VIRTIO) + virBufferAsprintf(&netarg, ",mtu=3D%u", net->mtu); + virCommandAddArgBuffer(cmd, &netarg); =20 ret =3D 0; cleanup: diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-net-mtu-bridge.ar= gs b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-net-mtu-bridge.args new file mode 100644 index 0000000000..6eb2da65ed --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-net-mtu-bridge.args @@ -0,0 +1,11 @@ +bhyve \ +-c 1 \ +-m 214 \ +-u \ +-H \ +-P \ +-s 0:0,hostbridge \ +-s 2:0,ahci,hd:/tmp/freebsd.img \ +-s 3:0,virtio-net,faketapdev,mac=3D52:54:00:00:00:01,mtu=3D9000 \ +-s 4:0,e1000,faketapdev,mac=3D52:54:00:00:00:02 \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-net-mtu-bridge.ld= args b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-net-mtu-bridge.ldargs new file mode 100644 index 0000000000..5905f4b3e6 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-net-mtu-bridge.ldargs @@ -0,0 +1,4 @@ +bhyveload \ +-m 214 \ +-d /tmp/freebsd.img \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-net-mtu-bridge.xm= l b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-net-mtu-bridge.xml new file mode 100644 index 0000000000..6ed278b0d7 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-net-mtu-bridge.xml @@ -0,0 +1,31 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 1 + + hvm + + + + + + +
+ + + + + + +
+ + + + + + +
+ + + diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-net-mtu-slirp.arg= s b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-net-mtu-slirp.args new file mode 100644 index 0000000000..0f67b4aa43 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-net-mtu-slirp.args @@ -0,0 +1,11 @@ +bhyve \ +-c 1 \ +-m 214 \ +-u \ +-H \ +-P \ +-s 0:0,hostbridge \ +-s 2:0,ahci,hd:/tmp/freebsd.img \ +-s 3:0,virtio-net,slirp,mac=3D52:54:00:00:00:01,open,mtu=3D9000 \ +-s 4:0,e1000,slirp,mac=3D52:54:00:00:00:02,open,mtu=3D9000 \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-net-mtu-slirp.lda= rgs b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-net-mtu-slirp.ldargs new file mode 100644 index 0000000000..5905f4b3e6 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-net-mtu-slirp.ldargs @@ -0,0 +1,4 @@ +bhyveload \ +-m 214 \ +-d /tmp/freebsd.img \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-net-mtu-slirp.xml= b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-net-mtu-slirp.xml new file mode 100644 index 0000000000..ff2467fda4 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-net-mtu-slirp.xml @@ -0,0 +1,29 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 1 + + hvm + + + + + + +
+ + + + + +
+ + + + + +
+ + + diff --git a/tests/bhyvexml2argvmock.c b/tests/bhyvexml2argvmock.c index 2248b721d0..93289ba572 100644 --- a/tests/bhyvexml2argvmock.c +++ b/tests/bhyvexml2argvmock.c @@ -61,7 +61,7 @@ void virMacAddrGenerate(const unsigned char prefix[VIR_MA= C_PREFIX_BUFLEN], addr->addr[5] =3D 0; } =20 -int virNetDevTapCreateInBridgePort(const char *brname G_GNUC_UNUSED, +int virNetDevTapCreateInBridgePort(const char *brname, char **ifname, const virMacAddr *macaddr G_GNUC_UNUSED, const unsigned char *vmuuid G_GNUC_UNUS= ED, @@ -72,10 +72,14 @@ int virNetDevTapCreateInBridgePort(const char *brname G= _GNUC_UNUSED, const virNetDevVlan *virtVlan G_GNUC_UN= USED, virTristateBool isolatedPort G_GNUC_UNU= SED, virNetDevCoalesce *coalesce G_GNUC_UNUS= ED, - unsigned int mtu G_GNUC_UNUSED, + unsigned int mtu, unsigned int *actualMTU G_GNUC_UNUSED, unsigned int fakeflags G_GNUC_UNUSED) { + /* Validate MTU passed by the net-mtu-bridge test */ + if (STREQ(brname, "mtu-br0") && mtu !=3D 9000) + return -1; + VIR_FREE(*ifname); *ifname =3D g_strdup("vnet0"); return 0; diff --git a/tests/bhyvexml2argvtest.c b/tests/bhyvexml2argvtest.c index 650563821b..0b700cc5b0 100644 --- a/tests/bhyvexml2argvtest.c +++ b/tests/bhyvexml2argvtest.c @@ -260,6 +260,8 @@ mymain(void) DO_TEST("serial-grub"); DO_TEST("localtime"); DO_TEST("net-e1000"); + DO_TEST("net-mtu-bridge"); + DO_TEST("net-mtu-slirp"); DO_TEST("passthru"); DO_TEST("passthru-multiple-devs"); DO_TEST("uefi"); --=20 2.55.0