From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 513EE1FF137 for ; Tue, 17 Mar 2026 12:14:37 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 80F9DA560; Tue, 17 Mar 2026 12:14:50 +0100 (CET) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773746048; x=1774350848; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=ozbonXv3H48vws/ZuCJiidNelSRv2hjXD5lnJQV4l+A=; b=DczhTyvpHRbFTVghqEAX0QtbmQUMejfRicfapTc9VfdFa5p4rQWLuJ+qZIFjpLs6w6 oi9lsI3lK2lMG0eJtiEeSUioSBkYGGzZsNyeGPRKfp/5IRP7a2DFvh+rJyp2vZa8OU8d z+U52cdbRhTe62e7RExAv6PYivgH4+1r4WMJWqH6b/NundPLfalrB9ThdnEx++fTB0Iv RGcnW9Cts97TDuja230SllPhynq89FNl9znbSLQkYzqX8fxUsMkLCKxqapZ12emJCvDW x7u4+XQEyUdLRun5uFc2R3j0SCBYTBlukIjYh/LvIZ6HHsnRgZ00wKyN7JVW9LYXSGRf Bu8g== X-Gm-Message-State: AOJu0YxKZe1bUoQ504wkCenvPoDT3QMZz4ilR/tgRowniHY9/qmacreB Xw0ftyzzU9Tju21Tn1Tt141i+TZHgly1Z1MoMMLlyzJGdzvFN0KNhtbehp/68njEh2iX X-Gm-Gg: ATEYQzwB8UDo5aIz7CssCAOLLlELyJsiHjiFuNFW6FgxFmOstgLlmMHjHFo0YdoYwdl kRM0/Qu3YZDp64HM5oVgVngNzEAoGTne0TY3HZkl4HvETd9iVHi0gdYaDrL9nInJpw4igSN7FJ1 dV9lFR1nCINnCROfeU8fAKl9Px6OG49dx97OSonWoy5WcND5IAfsEZEVL6n1bIp9grvqxNIyUGW YBZ7pJJnYqoMru/pQqINMWOMUtd3lFkmOFzVKU+m76Ni2ZVXWA/yMDR2FZhKiAnOq3vkADQm3xC yqVI7JZRYiDQpQvY4vv+16HxqNpqZmx/TPXd3H5MUcifk0mBt3cn4L5Dl1I3EpHVxZIsulEWGJJ W1iyHRFDPc/zF8hsK/IVVwwyYz7p9lbHoUWxBDx37QMBVCNk3J1EjTB3OPD7ZF4LnaMgFQUwkNZ kBxPXOpBdWEFuysKxnDo/k+hxloLfZHw03tyjPcLGtvcqz+czz3AOIvSuvTuXPcFRc4SIRJjgV4 RnDBgbfhQRpNP2duocldx1rVP2sm2RMf3FjaJ3HFK7SN9rwFQ== X-Received: by 2002:a17:90b:390a:b0:359:f88d:1e2e with SMTP id 98e67ed59e1d1-35a2206e4f3mr14304151a91.31.1773746048349; Tue, 17 Mar 2026 04:14:08 -0700 (PDT) From: Ryosuke Nakayama To: pve-devel@lists.proxmox.com Subject: Re: [RFC PATCH 0/2] network: add VPP (fd.io) as alternative dataplane Date: Tue, 17 Mar 2026 20:14:01 +0900 Message-ID: <20260317111404.37254-1-ryosuke.nakayama@ryskn.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 1 BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy FREEMAIL_ENVFROM_END_DIGIT 1 Envelope-from freemail username ends in digit FREEMAIL_FORGED_FROMDOMAIN 0.249 2nd level domains in From and EnvelopeFrom freemail headers are different FREEMAIL_FROM 0.001 Sender email is commonly abused enduser mail provider HEADER_FROM_DIFFERENT_DOMAINS 0.25 From and EnvelopeFrom 2nd level mail domains are different KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_DNSWL_NONE -0.0001 Sender listed at https://www.dnswl.org/, no trust RCVD_IN_MSPIKE_H3 0.001 Good reputation (+3) RCVD_IN_MSPIKE_WL 0.001 Mailspike good senders RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.408 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.819 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.903 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: YYUWAAGUBNX22WNZJ2KKXH47AZCZCLUO X-Message-ID-Hash: YYUWAAGUBNX22WNZJ2KKXH47AZCZCLUO X-MailFrom: koyakiu666@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: On Mon, 2026-03-17, Alexandre wrote: > Could it be possible to write a small Howto to install vpp > software itself + bridge configuration ? Sure! Also, I should clarify that the original two patches are not sufficient on their own: a third patch for qemu-server is required to make VMs actually connect to VPP via vhost-user. I have attached those patches below (RFC, same caveats apply). --- How to install VPP on Proxmox VE --- 1. Add the fd.io package repository: curl -fsSL https://packagecloud.io/fdio/release/gpgkey | \ gpg --dearmor \ -o /usr/share/keyrings/fdio-release.gpg echo "deb [signed-by=/usr/share/keyrings/fdio-release.gpg \ trusted=yes] \ https://packagecloud.io/fdio/release/debian bookworm main" \ > /etc/apt/sources.list.d/fdio.list apt update 2. Install VPP and required plugins: apt install vpp vpp-plugin-core vpp-plugin-dpdk vpp-drivers 3. Configure /etc/vpp/startup.conf. The critical sections are: unix { nodaemon log /var/log/vpp/vpp.log cli-listen /run/vpp/cli.sock exec /etc/vpp/vpp-pve.conf } cpu { main-core 0 corelist-workers 1,2 scheduler-policy fifo scheduler-priority 50 } Note: adjust cpu core pinning to your hardware. VPP uses polling threads, so dedicated cores are strongly recommended. 4. Enable and start VPP: systemctl enable --now vpp --- Bridge domain creation --- With the pve-manager patch applied, VPP bridge domains can be created and managed via the Proxmox WebUI (Node > Network > Create > VPP Bridge) or via the API. Manually via vppctl: vppctl create bridge-domain 1 learn 1 forward 1 flood 1 vppctl show bridge-domain 1 Note: bridge-domain 0 is reserved by VPP; use ID >= 1. The WebUI will expose the bridge as "vppbr" (e.g. vppbr1). --- Connecting a VM --- With the qemu-server patch applied, setting a VM's NIC to a VPP bridge (e.g. bridge=vppbr1) is sufficient. On VM start, Proxmox will automatically: - create a vhost-user server socket at /var/run/vpp/qemu--.sock - add the resulting VirtualEthernet interface to the bridge domain - pass the socket to QEMU as a vhost-user chardev On VM stop, the vhost-user interface is removed from VPP. Example VM config (/etc/pve/qemu-server/100.conf): net0: virtio=AA:BB:CC:DD:EE:FF,bridge=vppbr1 No additional configuration is needed. --- ryskn (2): qemu: add VPP vhost-user dataplane support qemu: VPP: clean up vhost-user interfaces on stop, fix tx_queue_size src/PVE/QemuServer.pm | 174 ++++++++++++++++++++++++++++++++++- src/PVE/QemuServer/Memory.pm | 16 +++- 2 files changed, 174 insertions(+), 39 deletions(-)