From nobody Mon Feb 9 08:57:30 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=yodel.dev ARC-Seal: i=1; a=rsa-sha256; t=1769693591; cv=none; d=zohomail.com; s=zohoarc; b=JJkOipjVKPyG6QjSQMTcsXHs31HGZuoCS9+T90Gl+N/xlNujgk+1+u2uSqTFtW4F+B5LQ7ByGOFHjIcMc88hG147Tfnub3JLyjcfvM9D9+M105ZkXEF7eHpz2t1wY/gwIgHybdTy7wX5Gh2gM6vwNEjNCfxsDs355PYVIPPpSmw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769693591; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=kgquQpF2g+PzRJvMQiQu1Tdx631FtZ+L4+iJOqwiLJg=; b=HAQBbzEiAvaUGw5UzQfBjfM/JyA+rkOB7zkXAksMXL7ulcbV34awwShv3RmDotsSPAe0cg4usqoH8pxJKkLfuPHFYbprjLlrX7T12ZZULIiX6v/TQ5MnFEAgsWeNdH1/KTtN4zkWhL5hwbGfJ+1Urj8D2Nq8OL7FI+iROneQou4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 176969359099789.85496567144048; Thu, 29 Jan 2026 05:33:10 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vlS8F-0007tu-6A; Thu, 29 Jan 2026 08:32:23 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlS7S-0007bN-C0 for qemu-devel@nongnu.org; Thu, 29 Jan 2026 08:31:44 -0500 Received: from k62.kb8c70eb.use4.send.mailgun.net ([204.220.184.62]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vlS7P-0002KG-85 for qemu-devel@nongnu.org; Thu, 29 Jan 2026 08:31:33 -0500 Received: from mail.yodel.dev (mail.yodel.dev [35.209.39.246]) by 6407dfe53d2a0b3d7f8ac5f53fdcedf683ffe6e3a11d22dd7b1943316ba8d53a with SMTP id 697b6125834a10b0f0b46579; Thu, 29 Jan 2026 13:31:17 GMT X-Mailgun-Sid: WyI4ZDFlNiIsInFlbXUtZGV2ZWxAbm9uZ251Lm9yZyIsIjk3NjA3ZSJd X-Mailgun-Sending-Ip: 204.220.184.62 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yodel.dev; s=rsa2048; t=1769693477; bh=kgquQpF2g+PzRJvMQiQu1Tdx631FtZ+L4+iJOqwiLJg=; h=X-Mailgun-Dkim:From:To:Cc:Subject:Date:Message-ID:In-Reply-To: References:MIME-Version:Content-Type:Content-Transfer-Encoding: From:Reply-to:Subject:Date:Message-id:To:Cc:Mime-version: Content-type:Content-transfer-encoding:In-reply-to:References; b=nmTnGHD1rtHaOIiiKPsJ7FBdRoM/itkb0aVUEUpSifRrRWp7sAxyN5utCvp0FjLMh ASalMlHuyvx7WQ5pvpWUyLAAfB53SfW1gvVTdp/z4yyHwn0E+d0B3wbnmRVqe7khBr pjZtdsIDjbVYlhDKqP+mr9jtnW6SRmwZM5dcneGeKb9n/a7h7Y2kyB55kfPo0L2pEt G/5H+iVp8QAnlk365iw5XIXg6o9dm/I93W4tihDPHR4LxzAUT86hG2Hi0CepTxfmqh rt6L+R8nNV1B1mG2lO78ECG7oKT3xEbvZuKzLdTgGL8KV0N6Sxmp71g5SN23ybXyrd /TANtDLFoDZ9Q== X-Mailgun-Dkim: no X-Mailgun-Dkim: no From: Yodel Eldar To: qemu-devel@nongnu.org Cc: "Michael S. Tsirkin" , Stefano Garzarella , Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Thomas Huth , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , Yodel Eldar Subject: [PATCH v4 1/3] tests/vhost-user-bridge: Move to contrib/vhost-user-bridge/ Date: Thu, 29 Jan 2026 07:30:47 -0600 Message-ID: <20260129133049.119829-2-yodel.eldar@yodel.dev> In-Reply-To: <20260129133049.119829-1-yodel.eldar@yodel.dev> References: <20260129133049.119829-1-yodel.eldar@yodel.dev> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=204.220.184.62; envelope-from=bounce+0e9322.97607e-qemu-devel=nongnu.org@yodel.dev; helo=k62.kb8c70eb.use4.send.mailgun.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yodel.dev) X-ZM-MESSAGEID: 1769693592424158500 After the introduction of vhost-user-bridge and libvhost-user, we formed the convention of placing vhost-user daemons in eponymous subdirs of contrib/. Follow this convention. Create a contrib/vhost-user-bridge/ directory and move vhost-user-bridge into it. Extract its build target definition from tests/meson.build into the new directory, and include its subdir in the root-level meson.build. Add a section about it in the "vhost-user daemons in contrib" document. Reviewed-by: Marc-Andr=C3=A9 Lureau Signed-off-by: Yodel Eldar --- contrib/vhost-user-bridge/meson.build | 4 ++ .../vhost-user-bridge}/vhost-user-bridge.c | 0 .../devices/virtio/vhost-user-contrib.rst | 39 +++++++++++++++++++ meson.build | 1 + tests/meson.build | 6 --- 5 files changed, 44 insertions(+), 6 deletions(-) create mode 100644 contrib/vhost-user-bridge/meson.build rename {tests =3D> contrib/vhost-user-bridge}/vhost-user-bridge.c (100%) diff --git a/contrib/vhost-user-bridge/meson.build b/contrib/vhost-user-bri= dge/meson.build new file mode 100644 index 0000000000..aa58c1df20 --- /dev/null +++ b/contrib/vhost-user-bridge/meson.build @@ -0,0 +1,4 @@ +if have_tools and have_vhost_user and host_os =3D=3D 'linux' + executable('vhost-user-bridge', files('vhost-user-bridge.c'), + dependencies: [qemuutil, vhost_user], install: false) +endif diff --git a/tests/vhost-user-bridge.c b/contrib/vhost-user-bridge/vhost-us= er-bridge.c similarity index 100% rename from tests/vhost-user-bridge.c rename to contrib/vhost-user-bridge/vhost-user-bridge.c diff --git a/docs/system/devices/virtio/vhost-user-contrib.rst b/docs/syste= m/devices/virtio/vhost-user-contrib.rst index 48d04d2ade..660d29a700 100644 --- a/docs/system/devices/virtio/vhost-user-contrib.rst +++ b/docs/system/devices/virtio/vhost-user-contrib.rst @@ -85,3 +85,42 @@ vhost-user-scsi - SCSI controller =20 The vhost-user-scsi daemon can proxy iSCSI devices onto a virtualized SCSI controller. + +.. _vhost_user_bridge: + +vhost-user-bridge - Network bridge +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +The vhost-user-bridge daemon serves as a development tool for testing real +internet traffic by providing a networking backend, i.e. server, for the +vhost-user protocol. + +Example +------- +For a single QEMU instance that both runs the user-mode net stack (slirp) = and +serves as a vhost-user protocol frontend, i.e. client, simultaneously: + +First, start vhost-user-bridge: + +:: + + $ vhost-user-bridge -u /tmp/vubr.sock \ + -l 127.0.0.1:4444 \ + -r 127.0.0.1:5555 + +Then, invoke QEMU: + +:: + + $ qemu-system-x86_64 \ + -m 4G \ + -object memory-backend-memfd,id=3Dmem0,size=3D4G,share=3Don,preall= oc=3Don \ + -numa node,memdev=3Dmem0 \ + -chardev socket,id=3Dchar0,path=3D/tmp/vubr.sock \ + -netdev vhost-user,id=3Dvhost0,chardev=3Dchar0,vhostforce=3Don \ + -device virtio-net-pci,netdev=3Dvhost0 \ + -netdev socket,id=3Dudp0,udp=3Dlocalhost:4444,localaddr=3Dlocalhos= t:5555 \ + -netdev user,id=3Duser0 \ + -netdev hubport,id=3Dhub0,hubid=3D0,netdev=3Dudp0 \ + -netdev hubport,id=3Dhub1,hubid=3D0,netdev=3Duser0 \ + ... diff --git a/meson.build b/meson.build index cc0dfed066..bca61aae65 100644 --- a/meson.build +++ b/meson.build @@ -4494,6 +4494,7 @@ if have_tools =20 if have_vhost_user subdir('contrib/vhost-user-blk') + subdir('contrib/vhost-user-bridge') subdir('contrib/vhost-user-gpu') subdir('contrib/vhost-user-input') subdir('contrib/vhost-user-scsi') diff --git a/tests/meson.build b/tests/meson.build index cbe7916241..87861b2857 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -70,12 +70,6 @@ test_deps =3D { 'test-qht-par': qht_bench, } =20 -if have_tools and have_vhost_user and host_os =3D=3D 'linux' - executable('vhost-user-bridge', - sources: files('vhost-user-bridge.c'), - dependencies: [qemuutil, vhost_user]) -endif - subdir('decode') =20 if 'CONFIG_TCG' in config_all_accel --=20 2.52.0