From nobody Mon Feb 9 18:21:56 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=quarantine dis=none) header.from=jetbrains.com ARC-Seal: i=1; a=rsa-sha256; t=1645811910; cv=none; d=zohomail.com; s=zohoarc; b=QeZ0crcSxL+OWnCY+Y9+PSg5jOTa1nOHNxvnYQ7R1HCXkxLB3cMlRzIFNgqZXifjbDgXd0fcmC7+zeXwBKGgb3+0h2aw+vCCW+ayYmaIq+ofwCdDfc0+MZpkMttk6M/sEwquBeII9AZ7c22703A/l4NyUo7Y68q/w4WPvsIiaAk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1645811910; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ABH37W9HK9kaGmACCVxeajWPjuo7p/jvIsh697DQErY=; b=Fm3DbJtYz4o6F8KtieYVqqq7pb6ytTaiEKUrFbTkW+OofEzRsD9x1KZfNofemm12+lb+m5CDb1J3gF/zkIVW1pqiwCrKh2T9YyaMip2Qgx/VKHRfD0tdgM83UyXqz8mIHntI5iqeckY0+L/IULgSObHnl+pFq0V/NSgKrpUCh0c= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1645811910643713.6573205519101; Fri, 25 Feb 2022 09:58:30 -0800 (PST) Received: from localhost ([::1]:52164 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nNerM-00084O-J2 for importer@patchew.org; Fri, 25 Feb 2022 12:58:28 -0500 Received: from eggs.gnu.org ([209.51.188.92]:37594) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nNeAX-00078z-5w for qemu-devel@nongnu.org; Fri, 25 Feb 2022 12:14:14 -0500 Received: from [2a00:1450:4864:20::22a] (port=42535 helo=mail-lj1-x22a.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nNeAV-0000Ry-7n for qemu-devel@nongnu.org; Fri, 25 Feb 2022 12:14:12 -0500 Received: by mail-lj1-x22a.google.com with SMTP id v28so8262776ljv.9 for ; Fri, 25 Feb 2022 09:14:10 -0800 (PST) Received: from UNIT-808.lan ([2a02:2698:6c2a:768f:813e:378d:5c94:9b97]) by smtp.gmail.com with ESMTPSA id bq5-20020a056512150500b004433c791651sm252024lfb.69.2022.02.25.09.14.08 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 25 Feb 2022 09:14:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jetbrains.com; s=googleapps; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ABH37W9HK9kaGmACCVxeajWPjuo7p/jvIsh697DQErY=; b=UVMRs/hC/7SYVDYbgyBJInSc3BVnCSfeQN9XTXAvgqVqIzl8L/+k+4h7XqPWoP8n23 HAFgjWY7O4LvVfPd3XPDqZ0TQoBubcJtypvf/y9MnT6NUD2VHRzCP1k4mVkx+1wi7cT1 eQRwwHD5NMQsBT6l3zCbn6e8DjW5TWjHfMiSI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ABH37W9HK9kaGmACCVxeajWPjuo7p/jvIsh697DQErY=; b=tpqn/pzb/k/hayT6dY9dDhe1kNz9bpV5EGQc3gkf2+CrYvPNW+If9lYl1aXDbvh+JI yLWJnC/KnwYfjmyo/zWx3iOHtC2qILRF2+15sga2RpiPsNOCSdrEv4VKru/FywEbp4YZ 5gqjvBPlIuZ3E+R1lTsb4GKcrmt3UHBDdhV11eJl1ORF/PPDGuREQDyFJWsfsgyQ8a85 eOsJ/+j6IsSmQK6rijZ3GNnfD+UPn9Z1qEyEn/aZoMgw8vgqf7E2WWOkuY0goiJLapOU GNmwaAEe64sb5FeVOTQBn3QO2ujTxvh0cJrJgxf0YzvlgZqgEUC9RTL+TRdLuqsN0eE0 a3kw== X-Gm-Message-State: AOAM533uf0I/07/cffbj99iMeZbfV+4f3X4rivnAeoYxs1LZ51Ag8O1o bsnBpY2FTK4wVLJb6kjZUy9VeXJ2UT6sJNLQ X-Google-Smtp-Source: ABdhPJzwgS5J6Wy8NIsfSDkO2uidBs4TdjFr5h0YSdEeZM2wQuFaRmLoqLmYhYT7+bDXVBaxGIpFDg== X-Received: by 2002:a05:651c:982:b0:244:c35d:b1ef with SMTP id b2-20020a05651c098200b00244c35db1efmr5806985ljq.243.1645809249208; Fri, 25 Feb 2022 09:14:09 -0800 (PST) From: Vladislav Yaroshchuk X-Google-Original-From: Vladislav Yaroshchuk To: qemu-devel@nongnu.org Cc: jasowang@redhat.com, r.bolshakov@yadro.com, eblake@redhat.com, phillip.ennen@gmail.com, phillip@axleos.com, akihiko.odaki@gmail.com, armbru@redhat.com, hsp.cat7@gmail.com, hello@adns.io, roman@roolebo.dev, peter.maydell@linaro.org, dirty@apple.com, f4bug@amsat.org, agraf@csgraf.de, kraxel@redhat.com, alex.bennee@linaro.org, qemu_oss@crudebyte.com, Vladislav Yaroshchuk Subject: [PATCH v15 1/8] net/vmnet: add vmnet dependency and customizable option Date: Fri, 25 Feb 2022 20:13:55 +0300 Message-Id: <20220225171402.64861-2-Vladislav.Yaroshchuk@jetbrains.com> X-Mailer: git-send-email 2.34.1.vfs.0.0 In-Reply-To: <20220225171402.64861-1-Vladislav.Yaroshchuk@jetbrains.com> References: <20220225171402.64861-1-Vladislav.Yaroshchuk@jetbrains.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a00:1450:4864:20::22a (failed) 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=2a00:1450:4864:20::22a; envelope-from=vladislav.yaroshchuk@jetbrains.com; helo=mail-lj1-x22a.google.com X-Spam_score_int: -6 X-Spam_score: -0.7 X-Spam_bar: / X-Spam_report: (-0.7 / 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, PDS_HP_HELO_NORDNS=0.659, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Fri, 25 Feb 2022 12:16:18 -0500 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @jetbrains.com) X-ZM-MESSAGEID: 1645811923723100003 Content-Type: text/plain; charset="utf-8" vmnet.framework dependency is added with 'vmnet' option to enable or disable it. Default value is 'auto'. vmnet features to be used are available since macOS 11.0, corresponding probe is created into meson.build. Signed-off-by: Vladislav Yaroshchuk --- meson.build | 16 +++++++++++++++- meson_options.txt | 2 ++ scripts/meson-buildoptions.sh | 1 + 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/meson.build b/meson.build index 8df40bfac4..d3a791e6c4 100644 --- a/meson.build +++ b/meson.build @@ -522,6 +522,18 @@ if cocoa.found() and get_option('gtk').enabled() error('Cocoa and GTK+ cannot be enabled at the same time') endif =20 +vmnet =3D dependency('appleframeworks', modules: 'vmnet', required: get_op= tion('vmnet')) +if vmnet.found() and not cc.has_header_symbol('vmnet/vmnet.h', + 'VMNET_BRIDGED_MODE', + dependencies: vmnet) + vmnet =3D not_found + if get_option('vmnet').enabled() + error('vmnet.framework API is outdated') + else + warning('vmnet.framework API is outdated, disabling') + endif +endif + seccomp =3D not_found if not get_option('seccomp').auto() or have_system or have_tools seccomp =3D dependency('libseccomp', version: '>=3D2.3.0', @@ -1536,6 +1548,7 @@ config_host_data.set('CONFIG_SNAPPY', snappy.found()) config_host_data.set('CONFIG_TPM', have_tpm) config_host_data.set('CONFIG_USB_LIBUSB', libusb.found()) config_host_data.set('CONFIG_VDE', vde.found()) +config_host_data.set('CONFIG_VMNET', vmnet.found()) config_host_data.set('CONFIG_VHOST_USER_BLK_SERVER', have_vhost_user_blk_s= erver) config_host_data.set('CONFIG_VNC', vnc.found()) config_host_data.set('CONFIG_VNC_JPEG', jpeg.found()) @@ -3564,7 +3577,8 @@ summary(summary_info, bool_yn: true, section: 'Crypto= ') # Libraries summary_info =3D {} if targetos =3D=3D 'darwin' - summary_info +=3D {'Cocoa support': cocoa} + summary_info +=3D {'Cocoa support': cocoa} + summary_info +=3D {'vmnet.framework support': vmnet} endif summary_info +=3D {'SDL support': sdl} summary_info +=3D {'SDL image support': sdl_image} diff --git a/meson_options.txt b/meson_options.txt index 52b11cead4..d2c0b6b412 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -175,6 +175,8 @@ option('netmap', type : 'feature', value : 'auto', description: 'netmap network backend support') option('vde', type : 'feature', value : 'auto', description: 'vde network backend support') +option('vmnet', type : 'feature', value : 'auto', + description: 'vmnet.framework network backend support') option('virglrenderer', type : 'feature', value : 'auto', description: 'virgl rendering support') option('vnc', type : 'feature', value : 'auto', diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh index 9ee684ef03..30946f3798 100644 --- a/scripts/meson-buildoptions.sh +++ b/scripts/meson-buildoptions.sh @@ -116,6 +116,7 @@ meson_options_help() { printf "%s\n" ' usb-redir libusbredir support' printf "%s\n" ' vde vde network backend support' printf "%s\n" ' vdi vdi image format support' + printf "%s\n" ' vmnet vmnet.framework network backend support' printf "%s\n" ' vhost-user-blk-server' printf "%s\n" ' build vhost-user-blk server' printf "%s\n" ' virglrenderer virgl rendering support' --=20 2.34.1.vfs.0.0 From nobody Mon Feb 9 18:21:56 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=quarantine dis=none) header.from=jetbrains.com ARC-Seal: i=1; a=rsa-sha256; t=1645810111; cv=none; d=zohomail.com; s=zohoarc; b=T72P2jdacphGQl/o8ANBtjh5tMlSaanZDErMNclLgClXczjK2F2kBiOqwxr/XZiQovLZYFMdXkPDfvhMKna4ZrPCrZWnrUqYyCjX1SfbiMjMnuXY+RWbSOuXCTiq9G7j/b6t2Ng/V+oCDKcLIma3voCkRgCXS95YHHBpafvfl70= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1645810111; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=HO6k16tR4tmueWYKbchvYi1/w39GpooZcuShPaa3Fho=; b=KX8wVjrgPDpj1ba5CszWswQdcujL6XWqnF+E72O9y5mssP1QcGO1xnzXkrmzDeRbAmM+0EYbOqRwdZc2xu1NSzM8jYrRxscOpo652RVkO3mazYVSu/pbqQDzHvGvF200vXFef1u4s8odKMLdaKAVbZDMh+sRdsSXWctiQIbcVrc= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1645810111879517.4163828458726; Fri, 25 Feb 2022 09:28:31 -0800 (PST) Received: from localhost ([::1]:39426 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nNeOK-0003hg-O4 for importer@patchew.org; Fri, 25 Feb 2022 12:28:28 -0500 Received: from eggs.gnu.org ([209.51.188.92]:37612) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nNeAZ-0007Aa-9v for qemu-devel@nongnu.org; Fri, 25 Feb 2022 12:14:15 -0500 Received: from [2a00:1450:4864:20::229] (port=38768 helo=mail-lj1-x229.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nNeAW-0000SA-Qv for qemu-devel@nongnu.org; Fri, 25 Feb 2022 12:14:14 -0500 Received: by mail-lj1-x229.google.com with SMTP id s25so8297139lji.5 for ; Fri, 25 Feb 2022 09:14:12 -0800 (PST) Received: from UNIT-808.lan ([2a02:2698:6c2a:768f:813e:378d:5c94:9b97]) by smtp.gmail.com with ESMTPSA id bq5-20020a056512150500b004433c791651sm252024lfb.69.2022.02.25.09.14.09 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 25 Feb 2022 09:14:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jetbrains.com; s=googleapps; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=HO6k16tR4tmueWYKbchvYi1/w39GpooZcuShPaa3Fho=; b=E2rjh2I/eHGLaIJRzXDh3iljjNEkCX5T/liVb5LGhMP8SCgHYZEdst4CTKoSzjXw6T Vj9Hn9ahvXaDQrg1IMfcGUEJ3fepCMRUXtUuzyW+CKYXLyvser5nD/r3uJKSrsTKYtb5 CKYOhvp+LmgOXBgKjXGSlodp6BK7Gr8YT0boc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=HO6k16tR4tmueWYKbchvYi1/w39GpooZcuShPaa3Fho=; b=lD2OPrcDePlc3kJeKECXoE4DcyJDZXgqoIgvelT9dgHr5WzJy4Cb5Um4tu6LC3H5Nf GdTevzoI5xWP78yjSsCGsXtNgsDXhOBSt2OcsbY+nKnk6d9KrLV0pd0ni8w8+xBswDQY y7hOOEG9vyEUFwtAcxgut0UpYTcdPIA4Bb6PeqiefC4RDbI4PLUeTU/0h2HXsEpBq8m5 4MqEE+ZLMJ9Pl29T0DYbcPml9FSoXXe4NEQ7YsO5/hVMJM9C7ZhJ4SromqYH55A1JLsV VnZtaCem93/XCXg5B2QvLMyTvwH64pul7SxP6PLQdEro3GH4EvzVEg7fU6EY2WMTsjNG /q3A== X-Gm-Message-State: AOAM5328VDdq5FtwpM2xPb31gfVNumFngQN+Xl4jW04SxSDs2yZ+DCdZ r70i04vzaXSyY0T5zTdvL2m7I7LgEpQu/g== X-Google-Smtp-Source: ABdhPJxNQsXrB/Q9WYIa/FAGjxZsZUvvEz1UVfmMasn4yxtrHawKI7ZYPFbGghfDu9AKUm/tL/GESQ== X-Received: by 2002:a2e:a786:0:b0:246:215e:a0c1 with SMTP id c6-20020a2ea786000000b00246215ea0c1mr6005948ljf.118.1645809250322; Fri, 25 Feb 2022 09:14:10 -0800 (PST) From: Vladislav Yaroshchuk X-Google-Original-From: Vladislav Yaroshchuk To: qemu-devel@nongnu.org Cc: jasowang@redhat.com, r.bolshakov@yadro.com, eblake@redhat.com, phillip.ennen@gmail.com, phillip@axleos.com, akihiko.odaki@gmail.com, armbru@redhat.com, hsp.cat7@gmail.com, hello@adns.io, roman@roolebo.dev, peter.maydell@linaro.org, dirty@apple.com, f4bug@amsat.org, agraf@csgraf.de, kraxel@redhat.com, alex.bennee@linaro.org, qemu_oss@crudebyte.com, Vladislav Yaroshchuk Subject: [PATCH v15 2/8] net/vmnet: add vmnet backends to qapi/net Date: Fri, 25 Feb 2022 20:13:56 +0300 Message-Id: <20220225171402.64861-3-Vladislav.Yaroshchuk@jetbrains.com> X-Mailer: git-send-email 2.34.1.vfs.0.0 In-Reply-To: <20220225171402.64861-1-Vladislav.Yaroshchuk@jetbrains.com> References: <20220225171402.64861-1-Vladislav.Yaroshchuk@jetbrains.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a00:1450:4864:20::229 (failed) 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=2a00:1450:4864:20::229; envelope-from=vladislav.yaroshchuk@jetbrains.com; helo=mail-lj1-x229.google.com X-Spam_score_int: -6 X-Spam_score: -0.7 X-Spam_bar: / X-Spam_report: (-0.7 / 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, PDS_HP_HELO_NORDNS=0.659, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Fri, 25 Feb 2022 12:16:18 -0500 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @jetbrains.com) X-ZM-MESSAGEID: 1645810112811100005 Content-Type: text/plain; charset="utf-8" Create separate netdevs for each vmnet operating mode: - vmnet-host - vmnet-shared - vmnet-bridged Signed-off-by: Vladislav Yaroshchuk Acked-by: Markus Armbruster Reviewed-by you receive in later revisions, unless you make changes that --- net/clients.h | 11 ++++ net/meson.build | 7 +++ net/net.c | 10 ++++ net/vmnet-bridged.m | 25 +++++++++ net/vmnet-common.m | 20 +++++++ net/vmnet-host.c | 24 ++++++++ net/vmnet-shared.c | 25 +++++++++ net/vmnet_int.h | 25 +++++++++ qapi/net.json | 133 +++++++++++++++++++++++++++++++++++++++++++- 9 files changed, 278 insertions(+), 2 deletions(-) create mode 100644 net/vmnet-bridged.m create mode 100644 net/vmnet-common.m create mode 100644 net/vmnet-host.c create mode 100644 net/vmnet-shared.c create mode 100644 net/vmnet_int.h diff --git a/net/clients.h b/net/clients.h index 92f9b59aed..c9157789f2 100644 --- a/net/clients.h +++ b/net/clients.h @@ -63,4 +63,15 @@ int net_init_vhost_user(const Netdev *netdev, const char= *name, =20 int net_init_vhost_vdpa(const Netdev *netdev, const char *name, NetClientState *peer, Error **errp); +#ifdef CONFIG_VMNET +int net_init_vmnet_host(const Netdev *netdev, const char *name, + NetClientState *peer, Error **errp); + +int net_init_vmnet_shared(const Netdev *netdev, const char *name, + NetClientState *peer, Error **errp); + +int net_init_vmnet_bridged(const Netdev *netdev, const char *name, + NetClientState *peer, Error **errp); +#endif /* CONFIG_VMNET */ + #endif /* QEMU_NET_CLIENTS_H */ diff --git a/net/meson.build b/net/meson.build index 847bc2ac85..00a88c4951 100644 --- a/net/meson.build +++ b/net/meson.build @@ -42,4 +42,11 @@ softmmu_ss.add(when: 'CONFIG_POSIX', if_true: files(tap_= posix)) softmmu_ss.add(when: 'CONFIG_WIN32', if_true: files('tap-win32.c')) softmmu_ss.add(when: 'CONFIG_VHOST_NET_VDPA', if_true: files('vhost-vdpa.c= ')) =20 +vmnet_files =3D files( + 'vmnet-common.m', + 'vmnet-bridged.m', + 'vmnet-host.c', + 'vmnet-shared.c' +) +softmmu_ss.add(when: vmnet, if_true: vmnet_files) subdir('can') diff --git a/net/net.c b/net/net.c index f0d14dbfc1..1dbb64b935 100644 --- a/net/net.c +++ b/net/net.c @@ -1021,6 +1021,11 @@ static int (* const net_client_init_fun[NET_CLIENT_D= RIVER__MAX])( #ifdef CONFIG_L2TPV3 [NET_CLIENT_DRIVER_L2TPV3] =3D net_init_l2tpv3, #endif +#ifdef CONFIG_VMNET + [NET_CLIENT_DRIVER_VMNET_HOST] =3D net_init_vmnet_host, + [NET_CLIENT_DRIVER_VMNET_SHARED] =3D net_init_vmnet_shared, + [NET_CLIENT_DRIVER_VMNET_BRIDGED] =3D net_init_vmnet_bridged, +#endif /* CONFIG_VMNET */ }; =20 =20 @@ -1106,6 +1111,11 @@ void show_netdevs(void) #endif #ifdef CONFIG_VHOST_VDPA "vhost-vdpa", +#endif +#ifdef CONFIG_VMNET + "vmnet-host", + "vmnet-shared", + "vmnet-bridged", #endif }; =20 diff --git a/net/vmnet-bridged.m b/net/vmnet-bridged.m new file mode 100644 index 0000000000..c735901666 --- /dev/null +++ b/net/vmnet-bridged.m @@ -0,0 +1,25 @@ +/* + * vmnet-bridged.m + * + * Copyright(c) 2021 Vladislav Yaroshchuk + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + * + */ + +#include "qemu/osdep.h" +#include "qapi/qapi-types-net.h" +#include "vmnet_int.h" +#include "clients.h" +#include "qemu/error-report.h" +#include "qapi/error.h" + +#include + +int net_init_vmnet_bridged(const Netdev *netdev, const char *name, + NetClientState *peer, Error **errp) +{ + error_setg(errp, "vmnet-bridged is not implemented yet"); + return -1; +} diff --git a/net/vmnet-common.m b/net/vmnet-common.m new file mode 100644 index 0000000000..56612c72ce --- /dev/null +++ b/net/vmnet-common.m @@ -0,0 +1,20 @@ +/* + * vmnet-common.m - network client wrapper for Apple vmnet.framework + * + * Copyright(c) 2021 Vladislav Yaroshchuk + * Copyright(c) 2021 Phillip Tennen + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + * + */ + +#include "qemu/osdep.h" +#include "qapi/qapi-types-net.h" +#include "vmnet_int.h" +#include "clients.h" +#include "qemu/error-report.h" +#include "qapi/error.h" + +#include + diff --git a/net/vmnet-host.c b/net/vmnet-host.c new file mode 100644 index 0000000000..32dc437037 --- /dev/null +++ b/net/vmnet-host.c @@ -0,0 +1,24 @@ +/* + * vmnet-host.c + * + * Copyright(c) 2021 Vladislav Yaroshchuk + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + * + */ + +#include "qemu/osdep.h" +#include "qapi/qapi-types-net.h" +#include "vmnet_int.h" +#include "clients.h" +#include "qemu/error-report.h" +#include "qapi/error.h" + +#include + +int net_init_vmnet_host(const Netdev *netdev, const char *name, + NetClientState *peer, Error **errp) { + error_setg(errp, "vmnet-host is not implemented yet"); + return -1; +} diff --git a/net/vmnet-shared.c b/net/vmnet-shared.c new file mode 100644 index 0000000000..f07afaaf21 --- /dev/null +++ b/net/vmnet-shared.c @@ -0,0 +1,25 @@ +/* + * vmnet-shared.c + * + * Copyright(c) 2021 Vladislav Yaroshchuk + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + * + */ + +#include "qemu/osdep.h" +#include "qapi/qapi-types-net.h" +#include "vmnet_int.h" +#include "clients.h" +#include "qemu/error-report.h" +#include "qapi/error.h" + +#include + +int net_init_vmnet_shared(const Netdev *netdev, const char *name, + NetClientState *peer, Error **errp) +{ + error_setg(errp, "vmnet-shared is not implemented yet"); + return -1; +} diff --git a/net/vmnet_int.h b/net/vmnet_int.h new file mode 100644 index 0000000000..aac4d5af64 --- /dev/null +++ b/net/vmnet_int.h @@ -0,0 +1,25 @@ +/* + * vmnet_int.h + * + * Copyright(c) 2021 Vladislav Yaroshchuk + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + * + */ +#ifndef VMNET_INT_H +#define VMNET_INT_H + +#include "qemu/osdep.h" +#include "vmnet_int.h" +#include "clients.h" + +#include + +typedef struct VmnetCommonState { + NetClientState nc; + +} VmnetCommonState; + + +#endif /* VMNET_INT_H */ diff --git a/qapi/net.json b/qapi/net.json index 7fab2e7cd8..b922e2e34f 100644 --- a/qapi/net.json +++ b/qapi/net.json @@ -452,6 +452,120 @@ '*vhostdev': 'str', '*queues': 'int' } } =20 +## +# @NetdevVmnetHostOptions: +# +# vmnet (host mode) network backend. +# +# Allows the vmnet interface to communicate with other vmnet +# interfaces that are in host mode and also with the host. +# +# @start-address: The starting IPv4 address to use for the interface. +# Must be in the private IP range (RFC 1918). Must be +# specified along with @end-address and @subnet-mask. +# This address is used as the gateway address. The +# subsequent address up to and including end-address are +# placed in the DHCP pool. +# +# @end-address: The DHCP IPv4 range end address to use for the +# interface. Must be in the private IP range (RFC 1918). +# Must be specified along with @start-address and +# @subnet-mask. +# +# @subnet-mask: The IPv4 subnet mask to use on the interface. Must +# be specified along with @start-address and @subnet-mask. +# +# @isolated: Enable isolation for this interface. Interface isolation +# ensures that vmnet interface is not able to communicate +# with any other vmnet interfaces. Only communication with +# host is allowed. Available since macOS Big Sur 11.0. +# +# @net-uuid: The identifier (UUID) to uniquely identify the isolated +# network vmnet interface should be added to. If +# set, no DHCP service is provided for this interface and +# network communication is allowed only with other interfaces +# added to this network identified by the UUID. Available +# since macOS Big Sur 11.0. +# +# Since: 7.0 +## +{ 'struct': 'NetdevVmnetHostOptions', + 'data': { + '*start-address': 'str', + '*end-address': 'str', + '*subnet-mask': 'str', + '*isolated': 'bool', + '*net-uuid': 'str' }, + 'if': 'CONFIG_VMNET' } + +## +# @NetdevVmnetSharedOptions: +# +# vmnet (shared mode) network backend. +# +# Allows traffic originating from the vmnet interface to reach the +# Internet through a network address translator (NAT). +# The vmnet interface can communicate with the host and with +# other shared mode interfaces on the same subnet. If no DHCP +# settings, subnet mask and IPv6 prefix specified, the interface can +# communicate with any of other interfaces in shared mode. +# +# @start-address: The starting IPv4 address to use for the interface. +# Must be in the private IP range (RFC 1918). Must be +# specified along with @end-address and @subnet-mask. +# This address is used as the gateway address. The +# subsequent address up to and including end-address are +# placed in the DHCP pool. +# +# @end-address: The DHCP IPv4 range end address to use for the +# interface. Must be in the private IP range (RFC 1918). +# Must be specified along with @start-address and @subnet-ma= sk. +# +# @subnet-mask: The IPv4 subnet mask to use on the interface. Must +# be specified along with @start-address and @subnet-mask. +# +# @isolated: Enable isolation for this interface. Interface isolation +# ensures that vmnet interface is not able to communicate +# with any other vmnet interfaces. Only communication with +# host is allowed. Available since macOS Big Sur 11.0. +# +# @nat66-prefix: The IPv6 prefix to use into guest network. Must be a +# unique local address i.e. start with fd00::/8 and have +# length of 64. +# +# Since: 7.0 +## +{ 'struct': 'NetdevVmnetSharedOptions', + 'data': { + '*start-address': 'str', + '*end-address': 'str', + '*subnet-mask': 'str', + '*isolated': 'bool', + '*nat66-prefix': 'str' }, + 'if': 'CONFIG_VMNET' } + +## +# @NetdevVmnetBridgedOptions: +# +# vmnet (bridged mode) network backend. +# +# Bridges the vmnet interface with a physical network interface. +# +# @ifname: The name of the physical interface to be bridged. +# +# @isolated: Enable isolation for this interface. Interface isolation +# ensures that vmnet interface is not able to communicate +# with any other vmnet interfaces. Only communication with +# host is allowed. Available since macOS Big Sur 11.0. +# +# Since: 7.0 +## +{ 'struct': 'NetdevVmnetBridgedOptions', + 'data': { + 'ifname': 'str', + '*isolated': 'bool' }, + 'if': 'CONFIG_VMNET' } + ## # @NetClientDriver: # @@ -460,10 +574,16 @@ # Since: 2.7 # # @vhost-vdpa since 5.1 +# @vmnet-host since 7.0 +# @vmnet-shared since 7.0 +# @vmnet-bridged since 7.0 ## { 'enum': 'NetClientDriver', 'data': [ 'none', 'nic', 'user', 'tap', 'l2tpv3', 'socket', 'vde', - 'bridge', 'hubport', 'netmap', 'vhost-user', 'vhost-vdpa' ] } + 'bridge', 'hubport', 'netmap', 'vhost-user', 'vhost-vdpa', + { 'name': 'vmnet-host', 'if': 'CONFIG_VMNET' }, + { 'name': 'vmnet-shared', 'if': 'CONFIG_VMNET' }, + { 'name': 'vmnet-bridged', 'if': 'CONFIG_VMNET' }] } =20 ## # @Netdev: @@ -477,6 +597,9 @@ # Since: 1.2 # # 'l2tpv3' - since 2.1 +# 'vmnet-host' - since 7.0 +# 'vmnet-shared' - since 7.0 +# 'vmnet-bridged' - since 7.0 ## { 'union': 'Netdev', 'base': { 'id': 'str', 'type': 'NetClientDriver' }, @@ -492,7 +615,13 @@ 'hubport': 'NetdevHubPortOptions', 'netmap': 'NetdevNetmapOptions', 'vhost-user': 'NetdevVhostUserOptions', - 'vhost-vdpa': 'NetdevVhostVDPAOptions' } } + 'vhost-vdpa': 'NetdevVhostVDPAOptions', + 'vmnet-host': { 'type': 'NetdevVmnetHostOptions', + 'if': 'CONFIG_VMNET' }, + 'vmnet-shared': { 'type': 'NetdevVmnetSharedOptions', + 'if': 'CONFIG_VMNET' }, + 'vmnet-bridged': { 'type': 'NetdevVmnetBridgedOptions', + 'if': 'CONFIG_VMNET' } } } =20 ## # @RxState: --=20 2.34.1.vfs.0.0 From nobody Mon Feb 9 18:21:56 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=quarantine dis=none) header.from=jetbrains.com ARC-Seal: i=1; a=rsa-sha256; t=1645810175; cv=none; d=zohomail.com; s=zohoarc; b=HDzLySCiJCTtbOy2De/6tHr7X7u+0tzueghbjkO4lnzeo0raqpX2+xa/RFnqgJtpv3AwfXBWFIOGn3FE2fHbrbq8x76k+Nx46lWd8FTLo7RzzxoHYt49pTAGW6jnHhapzETab5az0LMcM8+q1Ac1QPszhfgaEYU/djwIDy3BygM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1645810175; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=KPiiHMkR24eYAL4yq+E/JH7G+7MOmi69ZR2E3NvpyNQ=; b=dcz7Hdkx4rHmG+ZMVNk55iFJFb5uMLAIe6mHgbrU7oeyRHOr+HfAK7OTeL8G4XzFeOatLDrXckK5HILqyKXBcbINEyFFrjVP0lasIRYVvUkuVYk3Z3exwvvRTYmaLLfjNf2bImQSwkAQQ8zLFBKvx6zB58xr9LUK9N0+VnlerSI= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1645810175807594.175964531605; Fri, 25 Feb 2022 09:29:35 -0800 (PST) Received: from localhost ([::1]:42254 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nNePO-0005UR-Ho for importer@patchew.org; Fri, 25 Feb 2022 12:29:34 -0500 Received: from eggs.gnu.org ([209.51.188.92]:37682) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nNeAc-0007HO-1F for qemu-devel@nongnu.org; Fri, 25 Feb 2022 12:14:18 -0500 Received: from [2a00:1450:4864:20::22b] (port=38770 helo=mail-lj1-x22b.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nNeAY-0000SE-40 for qemu-devel@nongnu.org; Fri, 25 Feb 2022 12:14:17 -0500 Received: by mail-lj1-x22b.google.com with SMTP id s25so8297172lji.5 for ; Fri, 25 Feb 2022 09:14:13 -0800 (PST) Received: from UNIT-808.lan ([2a02:2698:6c2a:768f:813e:378d:5c94:9b97]) by smtp.gmail.com with ESMTPSA id bq5-20020a056512150500b004433c791651sm252024lfb.69.2022.02.25.09.14.10 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 25 Feb 2022 09:14:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jetbrains.com; s=googleapps; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=KPiiHMkR24eYAL4yq+E/JH7G+7MOmi69ZR2E3NvpyNQ=; b=a0kBTGDEYkTkYN+TIaNilA4A/PNjweY61Ydj7g8gyaNRzM5+N2jzNOq/3KUNSvBvlK MYIeyytGU1z01IpTj2aqs6hStm4X2w1fKGDu7htHNvYtNkFy6z4WeOVQK0GwW4Yvu2FR 4H8EQLw29o0G91PGnMl8rPnnb52wi30YzTnFY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=KPiiHMkR24eYAL4yq+E/JH7G+7MOmi69ZR2E3NvpyNQ=; b=k7FBO6vCgmCAi13qHTGD5J9OkEjzANsB249yvGh91ZQ5atMmVfIbLP9hfvizqNdmBP 3jRckhXxSw20ksq7ugEb5eZj+G6UdEKLcarCTH9mLD5/HnN5gNojFoWK9LLsMgwe1QIe sTPFLhH/yLy5QZ3FI/S6xPk10mXw/qblVB82GEV4HYu1f9kGl5RlumTasZoIteBIjFdL IKyiO6rNvR9DzbvUQzfxJAs93xy+QmCNBWMNySQ+Er/X4enmix7NfO2ivL5uvuV2IP/K +XiqMLsjrmjTpB5OyjSdO2Atwx8DA586/EZ+DBJney5QmjnoTjQnuvfLjdYiMQtqLzT2 ZX0g== X-Gm-Message-State: AOAM530XYkAiKp04BMnnK81zXOsuv7qRT1XDuD6NFHtHGpCyHkQdBVrb Cs9dqNJPE5JEWRuB+bCXI+nl9SyjmXUAUA== X-Google-Smtp-Source: ABdhPJzCI1bgSfNBicJHiAFexcLvj1xXpqlWvgS/gSCKdOxhZBCLSiCwDyccfl8WHiatDfwRWqHVXg== X-Received: by 2002:a2e:aaa3:0:b0:244:e280:3b0d with SMTP id bj35-20020a2eaaa3000000b00244e2803b0dmr5919082ljb.63.1645809251121; Fri, 25 Feb 2022 09:14:11 -0800 (PST) From: Vladislav Yaroshchuk X-Google-Original-From: Vladislav Yaroshchuk To: qemu-devel@nongnu.org Cc: jasowang@redhat.com, r.bolshakov@yadro.com, eblake@redhat.com, phillip.ennen@gmail.com, phillip@axleos.com, akihiko.odaki@gmail.com, armbru@redhat.com, hsp.cat7@gmail.com, hello@adns.io, roman@roolebo.dev, peter.maydell@linaro.org, dirty@apple.com, f4bug@amsat.org, agraf@csgraf.de, kraxel@redhat.com, alex.bennee@linaro.org, qemu_oss@crudebyte.com, Vladislav Yaroshchuk Subject: [PATCH v15 3/8] net/vmnet: implement shared mode (vmnet-shared) Date: Fri, 25 Feb 2022 20:13:57 +0300 Message-Id: <20220225171402.64861-4-Vladislav.Yaroshchuk@jetbrains.com> X-Mailer: git-send-email 2.34.1.vfs.0.0 In-Reply-To: <20220225171402.64861-1-Vladislav.Yaroshchuk@jetbrains.com> References: <20220225171402.64861-1-Vladislav.Yaroshchuk@jetbrains.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a00:1450:4864:20::22b (failed) 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=2a00:1450:4864:20::22b; envelope-from=vladislav.yaroshchuk@jetbrains.com; helo=mail-lj1-x22b.google.com X-Spam_score_int: -6 X-Spam_score: -0.7 X-Spam_bar: / X-Spam_report: (-0.7 / 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, PDS_HP_HELO_NORDNS=0.659, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Fri, 25 Feb 2022 12:16:18 -0500 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @jetbrains.com) X-ZM-MESSAGEID: 1645810177329100001 Content-Type: text/plain; charset="utf-8" Interaction with vmnet.framework in different modes differs only on configuration stage, so we can create common `send`, `receive`, etc. procedures and reuse them. vmnet.framework supports iov, but writing more than one iov into vmnet interface fails with 'VMNET_INVALID_ARGUMENT'. Collecting provided iovs into one and passing it to vmnet works fine. That's the reason why receive_iov() left unimplemented. But it still works with good enough performance having .receive() net/vmnet: implement shared mode (vmnet-shared) Interaction with vmnet.framework in different modes differs only on configuration stage, so we can create common `send`, `receive`, etc. procedures and reuse them. vmnet.framework supports iov, but writing more than one iov into vmnet interface fails with 'VMNET_INVALID_ARGUMENT'. Collecting provided iovs into one and passing it to vmnet works fine. That's the reason why receive_iov() left unimplemented. But it still works with good enough performance having .receive() implemented only. Also, there is no way to unsubscribe from vmnet packages receiving except registering and unregistering event callback or simply drop packages just ignoring and not processing them when related flag is set. Here we do using the second way. Signed-off-by: Phillip Tennen Signed-off-by: Vladislav Yaroshchuk --- net/vmnet-common.m | 302 +++++++++++++++++++++++++++++++++++++++++++++ net/vmnet-shared.c | 94 +++++++++++++- net/vmnet_int.h | 39 +++++- 3 files changed, 430 insertions(+), 5 deletions(-) diff --git a/net/vmnet-common.m b/net/vmnet-common.m index 56612c72ce..2f70921cae 100644 --- a/net/vmnet-common.m +++ b/net/vmnet-common.m @@ -10,6 +10,8 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/main-loop.h" +#include "qemu/log.h" #include "qapi/qapi-types-net.h" #include "vmnet_int.h" #include "clients.h" @@ -17,4 +19,304 @@ #include "qapi/error.h" =20 #include +#include =20 + +static inline void vmnet_set_send_bh_scheduled(VmnetCommonState *s, + bool enable) +{ + qatomic_set(&s->send_scheduled, enable); +} + + +static inline bool vmnet_is_send_bh_scheduled(VmnetCommonState *s) +{ + return qatomic_load_acquire(&s->send_scheduled); +} + + +static inline void vmnet_set_send_enabled(VmnetCommonState *s, + bool enable) +{ + if (enable) { + vmnet_interface_set_event_callback( + s->vmnet_if, + VMNET_INTERFACE_PACKETS_AVAILABLE, + s->if_queue, + ^(interface_event_t event_id, xpc_object_t event) { + assert(event_id =3D=3D VMNET_INTERFACE_PACKETS_AVAILABLE); + /* + * This function is being called from a non qemu thread, so + * we only schedule a BH, and do the rest of the io comple= tion + * handling from vmnet_send_bh() which runs in a qemu cont= ext. + * + * Avoid scheduling multiple bottom halves + */ + if (!vmnet_is_send_bh_scheduled(s)) { + vmnet_set_send_bh_scheduled(s, true); + qemu_bh_schedule(s->send_bh); + } + }); + } else { + vmnet_interface_set_event_callback( + s->vmnet_if, + VMNET_INTERFACE_PACKETS_AVAILABLE, + NULL, + NULL); + } +} + + +static void vmnet_send_completed(NetClientState *nc, ssize_t len) +{ + VmnetCommonState *s =3D DO_UPCAST(VmnetCommonState, nc, nc); + vmnet_set_send_enabled(s, true); +} + + +static void vmnet_send_bh(void *opaque) +{ + NetClientState *nc =3D (NetClientState *) opaque; + VmnetCommonState *s =3D DO_UPCAST(VmnetCommonState, nc, nc); + + struct iovec *iov =3D s->iov_buf; + struct vmpktdesc *packets =3D s->packets_buf; + int pkt_cnt; + int i; + + vmnet_return_t status; + ssize_t size; + + /* read as many packets as present */ + pkt_cnt =3D VMNET_PACKETS_LIMIT; + for (i =3D 0; i < pkt_cnt; ++i) { + packets[i].vm_pkt_size =3D s->max_packet_size; + packets[i].vm_pkt_iovcnt =3D 1; + packets[i].vm_flags =3D 0; + } + + status =3D vmnet_read(s->vmnet_if, packets, &pkt_cnt); + if (status !=3D VMNET_SUCCESS) { + error_printf("vmnet: read failed: %s\n", + vmnet_status_map_str(status)); + goto done; + } + + for (i =3D 0; i < pkt_cnt; ++i) { + size =3D qemu_send_packet_async(nc, + iov[i].iov_base, + packets[i].vm_pkt_size, + vmnet_send_completed); + if (size =3D=3D 0) { + vmnet_set_send_enabled(s, false); + goto done; + } else if (size < 0) { + break; + } + } + +done: + vmnet_set_send_bh_scheduled(s, false); +} + + +static void vmnet_bufs_init(VmnetCommonState *s) +{ + struct vmpktdesc *packets =3D s->packets_buf; + struct iovec *iov =3D s->iov_buf; + int i; + + for (i =3D 0; i < VMNET_PACKETS_LIMIT; ++i) { + iov[i].iov_len =3D s->max_packet_size; + iov[i].iov_base =3D g_malloc0(iov[i].iov_len); + packets[i].vm_pkt_iov =3D iov + i; + } +} + + +const char *vmnet_status_map_str(vmnet_return_t status) +{ + switch (status) { + case VMNET_SUCCESS: + return "success"; + case VMNET_FAILURE: + return "general failure (possibly not enough privileges)"; + case VMNET_MEM_FAILURE: + return "memory allocation failure"; + case VMNET_INVALID_ARGUMENT: + return "invalid argument specified"; + case VMNET_SETUP_INCOMPLETE: + return "interface setup is not complete"; + case VMNET_INVALID_ACCESS: + return "invalid access, permission denied"; + case VMNET_PACKET_TOO_BIG: + return "packet size is larger than MTU"; + case VMNET_BUFFER_EXHAUSTED: + return "buffers exhausted in kernel"; + case VMNET_TOO_MANY_PACKETS: + return "packet count exceeds limit"; +#if defined(MAC_OS_VERSION_11_0) && \ + MAC_OS_X_VERSION_MIN_REQUIRED >=3D MAC_OS_VERSION_11_0 + case VMNET_SHARING_SERVICE_BUSY: + return "conflict, sharing service is in use"; +#endif + default: + return "unknown vmnet error"; + } +} + + +int vmnet_if_create(NetClientState *nc, + xpc_object_t if_desc, + Error **errp) +{ + VmnetCommonState *s =3D DO_UPCAST(VmnetCommonState, nc, nc);; + dispatch_semaphore_t if_created_sem =3D dispatch_semaphore_create(0); + __block vmnet_return_t if_status; + + s->if_queue =3D dispatch_queue_create( + "org.qemu.vmnet.if_queue", + DISPATCH_QUEUE_SERIAL + ); + + xpc_dictionary_set_bool( + if_desc, + vmnet_allocate_mac_address_key, + false + ); +#ifdef DEBUG + qemu_log("vmnet.start.interface_desc:\n"); + xpc_dictionary_apply(if_desc, + ^bool(const char *k, xpc_object_t v) { + char *desc =3D xpc_copy_description(v); + qemu_log(" %s=3D%s\n", k, desc); + free(desc); + return true; + }); +#endif /* DEBUG */ + + s->vmnet_if =3D vmnet_start_interface( + if_desc, + s->if_queue, + ^(vmnet_return_t status, xpc_object_t interface_param) { + if_status =3D status; + if (status !=3D VMNET_SUCCESS || !interface_param) { + dispatch_semaphore_signal(if_created_sem); + return; + } + +#ifdef DEBUG + qemu_log("vmnet.start.interface_param:\n"); + xpc_dictionary_apply(interface_param, + ^bool(const char *k, xpc_object_t v) { + char *desc =3D xpc_copy_description(v= ); + qemu_log(" %s=3D%s\n", k, desc); + free(desc); + return true; + }); +#endif /* DEBUG */ + + s->mtu =3D xpc_dictionary_get_uint64( + interface_param, + vmnet_mtu_key); + s->max_packet_size =3D xpc_dictionary_get_uint64( + interface_param, + vmnet_max_packet_size_key); + + dispatch_semaphore_signal(if_created_sem); + }); + + if (s->vmnet_if =3D=3D NULL) { + error_setg(errp, + "unable to create interface " + "with requested params"); + return -1; + } + + dispatch_semaphore_wait(if_created_sem, DISPATCH_TIME_FOREVER); + + if (if_status !=3D VMNET_SUCCESS) { + error_setg(errp, + "cannot create vmnet interface: %s", + vmnet_status_map_str(if_status)); + return -1; + } + + s->send_bh =3D aio_bh_new(qemu_get_aio_context(), vmnet_send_bh, nc); + vmnet_bufs_init(s); + vmnet_set_send_bh_scheduled(s, false); + vmnet_set_send_enabled(s, true); + return 0; +} + + +ssize_t vmnet_receive_common(NetClientState *nc, + const uint8_t *buf, + size_t size) +{ + VmnetCommonState *s =3D DO_UPCAST(VmnetCommonState, nc, nc); + struct vmpktdesc packet; + struct iovec iov; + int pkt_cnt; + vmnet_return_t if_status; + + if (size > s->max_packet_size) { + warn_report("vmnet: packet is too big, %zu > %llu\n", + packet.vm_pkt_size, + s->max_packet_size); + return -1; + } + + iov.iov_base =3D (char *) buf; + iov.iov_len =3D size; + + packet.vm_pkt_iovcnt =3D 1; + packet.vm_flags =3D 0; + packet.vm_pkt_size =3D size; + packet.vm_pkt_iov =3D &iov; + pkt_cnt =3D 1; + + if_status =3D vmnet_write(s->vmnet_if, &packet, &pkt_cnt); + if (if_status !=3D VMNET_SUCCESS) { + error_report("vmnet: write error: %s\n", + vmnet_status_map_str(if_status)); + } + + if (if_status =3D=3D VMNET_SUCCESS && pkt_cnt) { + return size; + } + return 0; +} + + +void vmnet_cleanup_common(NetClientState *nc) +{ + VmnetCommonState *s =3D DO_UPCAST(VmnetCommonState, nc, nc);; + dispatch_semaphore_t if_created_sem; + + qemu_purge_queued_packets(nc); + vmnet_set_send_bh_scheduled(s, true); + vmnet_set_send_enabled(s, false); + + if (s->vmnet_if =3D=3D NULL) { + return; + } + + if_created_sem =3D dispatch_semaphore_create(0); + vmnet_stop_interface( + s->vmnet_if, + s->if_queue, + ^(vmnet_return_t status) { + assert(status =3D=3D VMNET_SUCCESS); + dispatch_semaphore_signal(if_created_sem); + }); + dispatch_semaphore_wait(if_created_sem, DISPATCH_TIME_FOREVER); + + qemu_bh_delete(s->send_bh); + dispatch_release(if_created_sem); + dispatch_release(s->if_queue); + + for (int i =3D 0; i < VMNET_PACKETS_LIMIT; ++i) { + g_free(s->iov_buf[i].iov_base); + } +} diff --git a/net/vmnet-shared.c b/net/vmnet-shared.c index f07afaaf21..66f66c034b 100644 --- a/net/vmnet-shared.c +++ b/net/vmnet-shared.c @@ -10,16 +10,102 @@ =20 #include "qemu/osdep.h" #include "qapi/qapi-types-net.h" +#include "qapi/error.h" #include "vmnet_int.h" #include "clients.h" -#include "qemu/error-report.h" -#include "qapi/error.h" =20 #include =20 +typedef struct VmnetSharedState { + VmnetCommonState cs; +} VmnetSharedState; + + +static bool validate_options(const Netdev *netdev, Error **errp) +{ + const NetdevVmnetSharedOptions *options =3D &(netdev->u.vmnet_shared); + +#if !defined(MAC_OS_VERSION_11_0) || \ + MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_VERSION_11_0 + if (options->has_isolated) { + error_setg(errp, + "vmnet-shared.isolated feature is " + "unavailable: outdated vmnet.framework API"); + return false; + } +#endif + + if ((options->has_start_address || + options->has_end_address || + options->has_subnet_mask) && + !(options->has_start_address && + options->has_end_address && + options->has_subnet_mask)) { + error_setg(errp, + "'start-address', 'end-address', 'subnet-mask' " + "should be provided together" + ); + return false; + } + + return true; +} + +static xpc_object_t build_if_desc(const Netdev *netdev) +{ + const NetdevVmnetSharedOptions *options =3D &(netdev->u.vmnet_shared); + xpc_object_t if_desc =3D xpc_dictionary_create(NULL, NULL, 0); + + xpc_dictionary_set_uint64( + if_desc, + vmnet_operation_mode_key, + VMNET_SHARED_MODE + ); + + if (options->has_nat66_prefix) { + xpc_dictionary_set_string(if_desc, + vmnet_nat66_prefix_key, + options->nat66_prefix); + } + + if (options->has_start_address) { + xpc_dictionary_set_string(if_desc, + vmnet_start_address_key, + options->start_address); + xpc_dictionary_set_string(if_desc, + vmnet_end_address_key, + options->end_address); + xpc_dictionary_set_string(if_desc, + vmnet_subnet_mask_key, + options->subnet_mask); + } + +#if defined(MAC_OS_VERSION_11_0) && \ + MAC_OS_X_VERSION_MIN_REQUIRED >=3D MAC_OS_VERSION_11_0 + xpc_dictionary_set_bool( + if_desc, + vmnet_enable_isolation_key, + options->isolated + ); +#endif + + return if_desc; +} + +static NetClientInfo net_vmnet_shared_info =3D { + .type =3D NET_CLIENT_DRIVER_VMNET_SHARED, + .size =3D sizeof(VmnetSharedState), + .receive =3D vmnet_receive_common, + .cleanup =3D vmnet_cleanup_common, +}; + int net_init_vmnet_shared(const Netdev *netdev, const char *name, NetClientState *peer, Error **errp) { - error_setg(errp, "vmnet-shared is not implemented yet"); - return -1; + NetClientState *nc =3D qemu_new_net_client(&net_vmnet_shared_info, + peer, "vmnet-shared", name); + if (!validate_options(netdev, errp)) { + g_assert_not_reached(); + } + return vmnet_if_create(nc, build_if_desc(netdev), errp); } diff --git a/net/vmnet_int.h b/net/vmnet_int.h index aac4d5af64..acfe3a88c0 100644 --- a/net/vmnet_int.h +++ b/net/vmnet_int.h @@ -15,11 +15,48 @@ #include "clients.h" =20 #include +#include + +/** + * From vmnet.framework documentation + * + * Each read/write call allows up to 200 packets to be + * read or written for a maximum of 256KB. + * + * Each packet written should be a complete + * ethernet frame. + * + * https://developer.apple.com/documentation/vmnet + */ +#define VMNET_PACKETS_LIMIT 200 =20 typedef struct VmnetCommonState { - NetClientState nc; + NetClientState nc; + interface_ref vmnet_if; + + bool send_scheduled; =20 + uint64_t mtu; + uint64_t max_packet_size; + + struct vmpktdesc packets_buf[VMNET_PACKETS_LIMIT]; + struct iovec iov_buf[VMNET_PACKETS_LIMIT]; + + dispatch_queue_t if_queue; + + QEMUBH *send_bh; } VmnetCommonState; =20 +const char *vmnet_status_map_str(vmnet_return_t status); + +int vmnet_if_create(NetClientState *nc, + xpc_object_t if_desc, + Error **errp); + +ssize_t vmnet_receive_common(NetClientState *nc, + const uint8_t *buf, + size_t size); + +void vmnet_cleanup_common(NetClientState *nc); =20 #endif /* VMNET_INT_H */ --=20 2.34.1.vfs.0.0 From nobody Mon Feb 9 18:21:56 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=quarantine dis=none) header.from=jetbrains.com ARC-Seal: i=1; a=rsa-sha256; t=1645812059; cv=none; d=zohomail.com; s=zohoarc; b=gQYEjY+SyHzKLwBqVaUExot772G1MBRICI9vbTnUQ8jTARMYhDr9vF61f7UusQIR+Q2R2BqhJSqIkUqZIQ0CgqPCPEe6KNtkfK3PnhDOeUokHdub4gb8qvpzJUMkV1hv3R0Y0cTkC1MJ38JLGmwrJcbmCOk6iyLEUYBdEgYD17w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1645812059; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=v7no45Cg1W0LRKhNzoQg5XczUdm3gvdwwe9l+1jYHe4=; b=hIsLD+1FvF7ViNAXzlBHIO/s5yleCIIpWUnHIY1cqQ+mQPT5fdVrg6NR74D87+eR65bpzHHxY8jAjUsjONSHpE6k2FcdKB9wY25TEDhRbmuvrelZnB4CM1OetAINDigmdVgcxkvaLw4pvH16guEIpqHpQ+e/XLWj/g9xQGjzvk0= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1645812059320329.47963420682345; Fri, 25 Feb 2022 10:00:59 -0800 (PST) Received: from localhost ([::1]:60742 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nNetm-0005QH-6S for importer@patchew.org; Fri, 25 Feb 2022 13:00:58 -0500 Received: from eggs.gnu.org ([209.51.188.92]:37640) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nNeAa-0007Df-65 for qemu-devel@nongnu.org; Fri, 25 Feb 2022 12:14:16 -0500 Received: from [2a00:1450:4864:20::234] (port=33372 helo=mail-lj1-x234.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nNeAY-0000SN-IH for qemu-devel@nongnu.org; Fri, 25 Feb 2022 12:14:15 -0500 Received: by mail-lj1-x234.google.com with SMTP id p20so8362982ljo.0 for ; Fri, 25 Feb 2022 09:14:13 -0800 (PST) Received: from UNIT-808.lan ([2a02:2698:6c2a:768f:813e:378d:5c94:9b97]) by smtp.gmail.com with ESMTPSA id bq5-20020a056512150500b004433c791651sm252024lfb.69.2022.02.25.09.14.11 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 25 Feb 2022 09:14:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jetbrains.com; s=googleapps; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=v7no45Cg1W0LRKhNzoQg5XczUdm3gvdwwe9l+1jYHe4=; b=GoBlbKKvQY6cKzRhzC2TcwFqbIdEgeDd6TlKJ7bwZ00KhfJcTAgNfdybb10s6Ywwuz hWLGWgDIKbcK5LsKQ1hu2Tls8h2+UpX+fy4ZkcLD8oKCOwk/Br4xp9bzq1APDQpG4udo Rdfx+0nLG0pUsaBk1GTXn0ksP00zvrvv0Yj3Y= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=v7no45Cg1W0LRKhNzoQg5XczUdm3gvdwwe9l+1jYHe4=; b=4HIC1vvZuKUVYI5OXZ5tyzODU6P0s6PZGvF+K9BvDn5MEbkddQkarsP1qIyYq/oE66 C46/uJh2R8epu/HZhhpFkpqjwFIM8zfES+E3lroJ+mqqHmSzRnPdH0AjDSNsKWjlp+pf bcKjLotORnX/EjweNC7wAkmBWteWueK3mYe+emt69t8kU7PgKOjClzh2R7ijqm/W42IG QmZXUgq0hPEmsY+/gZYTM4U1Lq9MQ3awiCRXhADx93VOZekgFlbq2e5Q2ekqbQDys99D q1oTZmOOXZ+gSgm5kOTegkgUgCFce0eIuwilTkr04JLV2nh5SELIB6uXhMD2lDP9845P j5yw== X-Gm-Message-State: AOAM533POP2wqFxQXD2V6ohlTCv8uHYP0fRHSPvkPG2YhaYDstHKV7ie FxzBNmoP77vRoiOqpUhkFpr8vq1T08COlQ== X-Google-Smtp-Source: ABdhPJxX82wAs9t3/VtB9LrJP+az4nAa9g3u4WQciy9PgSDt/ByX1iZ1YM1UmL+EDgwHQxdt5oztCA== X-Received: by 2002:a2e:6e14:0:b0:244:cbbe:c690 with SMTP id j20-20020a2e6e14000000b00244cbbec690mr5896314ljc.169.1645809252053; Fri, 25 Feb 2022 09:14:12 -0800 (PST) From: Vladislav Yaroshchuk X-Google-Original-From: Vladislav Yaroshchuk To: qemu-devel@nongnu.org Cc: jasowang@redhat.com, r.bolshakov@yadro.com, eblake@redhat.com, phillip.ennen@gmail.com, phillip@axleos.com, akihiko.odaki@gmail.com, armbru@redhat.com, hsp.cat7@gmail.com, hello@adns.io, roman@roolebo.dev, peter.maydell@linaro.org, dirty@apple.com, f4bug@amsat.org, agraf@csgraf.de, kraxel@redhat.com, alex.bennee@linaro.org, qemu_oss@crudebyte.com, Vladislav Yaroshchuk Subject: [PATCH v15 4/8] net/vmnet: implement host mode (vmnet-host) Date: Fri, 25 Feb 2022 20:13:58 +0300 Message-Id: <20220225171402.64861-5-Vladislav.Yaroshchuk@jetbrains.com> X-Mailer: git-send-email 2.34.1.vfs.0.0 In-Reply-To: <20220225171402.64861-1-Vladislav.Yaroshchuk@jetbrains.com> References: <20220225171402.64861-1-Vladislav.Yaroshchuk@jetbrains.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a00:1450:4864:20::234 (failed) 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=2a00:1450:4864:20::234; envelope-from=vladislav.yaroshchuk@jetbrains.com; helo=mail-lj1-x234.google.com X-Spam_score_int: -6 X-Spam_score: -0.7 X-Spam_bar: / X-Spam_report: (-0.7 / 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, PDS_HP_HELO_NORDNS=0.659, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Fri, 25 Feb 2022 12:16:18 -0500 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @jetbrains.com) X-ZM-MESSAGEID: 1645812061747100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladislav Yaroshchuk --- net/vmnet-host.c | 115 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 109 insertions(+), 6 deletions(-) diff --git a/net/vmnet-host.c b/net/vmnet-host.c index 32dc437037..2a711400e7 100644 --- a/net/vmnet-host.c +++ b/net/vmnet-host.c @@ -9,16 +9,119 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/uuid.h" #include "qapi/qapi-types-net.h" -#include "vmnet_int.h" -#include "clients.h" -#include "qemu/error-report.h" #include "qapi/error.h" +#include "clients.h" +#include "vmnet_int.h" =20 #include =20 +typedef struct VmnetHostState { + VmnetCommonState cs; + QemuUUID network_uuid; +} VmnetHostState; + +static bool validate_options(const Netdev *netdev, Error **errp) +{ + const NetdevVmnetHostOptions *options =3D &(netdev->u.vmnet_host); + QemuUUID uuid; + +#if defined(MAC_OS_VERSION_11_0) && \ + MAC_OS_X_VERSION_MIN_REQUIRED >=3D MAC_OS_VERSION_11_0 + + if (options->has_net_uuid && + qemu_uuid_parse(options->net_uuid, &uuid) < 0) { + error_setg(errp, "Invalid UUID provided in 'net-uuid'"); + return false; + } +#else + if (options->has_isolated) { + error_setg(errp, + "vmnet-host.isolated feature is " + "unavailable: outdated vmnet.framework API"); + return false; + } + + if (options->has_net_uuid) { + error_setg(errp, + "vmnet-host.net-uuid feature is " + "unavailable: outdated vmnet.framework API"); + return false; + } +#endif + + if ((options->has_start_address || + options->has_end_address || + options->has_subnet_mask) && + !(options->has_start_address && + options->has_end_address && + options->has_subnet_mask)) { + error_setg(errp, + "'start-address', 'end-address', 'subnet-mask' " + "should be provided together"); + return false; + } + + return true; +} + +static xpc_object_t build_if_desc(const Netdev *netdev, + NetClientState *nc) +{ + const NetdevVmnetHostOptions *options =3D &(netdev->u.vmnet_host); + VmnetCommonState *cs =3D DO_UPCAST(VmnetCommonState, nc, nc); + VmnetHostState *hs =3D DO_UPCAST(VmnetHostState, cs, cs); + xpc_object_t if_desc =3D xpc_dictionary_create(NULL, NULL, 0); + + xpc_dictionary_set_uint64(if_desc, + vmnet_operation_mode_key, + VMNET_HOST_MODE); + +#if defined(MAC_OS_VERSION_11_0) && \ + MAC_OS_X_VERSION_MIN_REQUIRED >=3D MAC_OS_VERSION_11_0 + + xpc_dictionary_set_bool(if_desc, + vmnet_enable_isolation_key, + options->isolated); + + if (options->has_net_uuid) { + qemu_uuid_parse(options->net_uuid, &hs->network_uuid); + xpc_dictionary_set_uuid(if_desc, + vmnet_network_identifier_key, + hs->network_uuid.data); + } +#endif + + if (options->has_start_address) { + xpc_dictionary_set_string(if_desc, + vmnet_start_address_key, + options->start_address); + xpc_dictionary_set_string(if_desc, + vmnet_end_address_key, + options->end_address); + xpc_dictionary_set_string(if_desc, + vmnet_subnet_mask_key, + options->subnet_mask); + } + + return if_desc; +} + +static NetClientInfo net_vmnet_host_info =3D { + .type =3D NET_CLIENT_DRIVER_VMNET_HOST, + .size =3D sizeof(VmnetHostState), + .receive =3D vmnet_receive_common, + .cleanup =3D vmnet_cleanup_common, +}; + int net_init_vmnet_host(const Netdev *netdev, const char *name, - NetClientState *peer, Error **errp) { - error_setg(errp, "vmnet-host is not implemented yet"); - return -1; + NetClientState *peer, Error **errp) +{ + NetClientState *nc =3D qemu_new_net_client(&net_vmnet_host_info, + peer, "vmnet-host", name); + if (!validate_options(netdev, errp)) { + g_assert_not_reached(); + } + return vmnet_if_create(nc, build_if_desc(netdev, nc), errp); } --=20 2.34.1.vfs.0.0 From nobody Mon Feb 9 18:21:56 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=quarantine dis=none) header.from=jetbrains.com ARC-Seal: i=1; a=rsa-sha256; t=1645810377; cv=none; d=zohomail.com; s=zohoarc; b=OsVsofYJug2vLuOa4VCblo3dDfsl6FhPArKcyC8/GuTbvjGKuqAViM5UpN1UjNGBhgOsJjpT7AJcPeGsKgPQ9o8eaTEHM4JFu5RGA/HZ6z1HM9JPldo0eODH4rhuA/m30c3TaVNK0twRQWiBtIVdxAxYN0KpgTbydtCsn1zIc7k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1645810377; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=5ajCMN7Hf38FdTOUp33VX671rn7l1LNMVvJ339CBG5c=; b=JYvemyO6JLyahy+QsyKzY6xS4SlFqWHg0r9sF5fvshOX/8pl3fs6Ie9VZide31j/yjh8fhTBPnUj4c66NYvi72XUwPz97479QDSOFRJCiIwnqMxNq9MzjHDqZ9noLyKO9r5HvlhSli59Lqp8+O1cG2vpsih7cgJR09c9ued4vbA= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1645810377839569.6981370898874; Fri, 25 Feb 2022 09:32:57 -0800 (PST) Received: from localhost ([::1]:49408 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nNeSe-0001gD-MH for importer@patchew.org; Fri, 25 Feb 2022 12:32:56 -0500 Received: from eggs.gnu.org ([209.51.188.92]:37694) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nNeAc-0007ID-HO for qemu-devel@nongnu.org; Fri, 25 Feb 2022 12:14:18 -0500 Received: from [2a00:1450:4864:20::12d] (port=44899 helo=mail-lf1-x12d.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nNeAZ-0000SZ-2T for qemu-devel@nongnu.org; Fri, 25 Feb 2022 12:14:18 -0500 Received: by mail-lf1-x12d.google.com with SMTP id j15so10482479lfe.11 for ; Fri, 25 Feb 2022 09:14:14 -0800 (PST) Received: from UNIT-808.lan ([2a02:2698:6c2a:768f:813e:378d:5c94:9b97]) by smtp.gmail.com with ESMTPSA id bq5-20020a056512150500b004433c791651sm252024lfb.69.2022.02.25.09.14.12 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 25 Feb 2022 09:14:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jetbrains.com; s=googleapps; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=5ajCMN7Hf38FdTOUp33VX671rn7l1LNMVvJ339CBG5c=; b=dGenMnmdPOO8mih1bd/45PesGYWFlX1x0pw1xIEciAinIJhpmGBAyV15LfB2Px9zU7 4qnzVe2VZ5NFdVEf99nHd/sHpD7UmSTgk17ZAF+HYGeUvxzihymoOmfK5MgGJnkf2p86 Ee2Npdu+vKlZblxYBBgOZHlQvyJyyxSOJczIw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=5ajCMN7Hf38FdTOUp33VX671rn7l1LNMVvJ339CBG5c=; b=TIzjQLrDFyM0sts9Zp5X05aXfqlw932gjFyJA/UPoE8vLtYv8C5EVdvsLJ80rKY2hV JFvyyvCc4yPgkYKOXX5fgE5THRyq6ArGkboGSTARCNuqtMpIVkSTpjE6xzCxDjeQxLFH YwIyamxc2UeZWFXDEdUDDIh7prjPleV11dkR49PTe6YtbC+piUCGGA3hvAi2adosdGTh hAQbOFPtoPys4nd9LDJX49/C/jKiYI3eo9U/atclJtAil2yPI3hRGgXpQ+ch3mdenNp5 4PMYW3SIS+pxvJ6qHKNNheWxL+JQpXHjLAmBqzGEHdf6NX06uLUzC3VFbtTNPN3N6PQl fZAQ== X-Gm-Message-State: AOAM530FIM5IXaGMryOmLjsIT1CqCfqhloGnS7ZydCJn/61PdmAwE+EC 5IdT2cOCcr3p/tjvtU+c38imdeUFHf9oTQ== X-Google-Smtp-Source: ABdhPJz1a+YtwKdrCF6j+DQKm3Wr0XuiJ/FoKY3Q05Hzd3s7ddvDkwqoTEPvLIHRZgEjlp8gz/1jTA== X-Received: by 2002:a05:6512:1103:b0:443:31e0:508c with SMTP id l3-20020a056512110300b0044331e0508cmr5599648lfg.129.1645809252966; Fri, 25 Feb 2022 09:14:12 -0800 (PST) From: Vladislav Yaroshchuk X-Google-Original-From: Vladislav Yaroshchuk To: qemu-devel@nongnu.org Cc: jasowang@redhat.com, r.bolshakov@yadro.com, eblake@redhat.com, phillip.ennen@gmail.com, phillip@axleos.com, akihiko.odaki@gmail.com, armbru@redhat.com, hsp.cat7@gmail.com, hello@adns.io, roman@roolebo.dev, peter.maydell@linaro.org, dirty@apple.com, f4bug@amsat.org, agraf@csgraf.de, kraxel@redhat.com, alex.bennee@linaro.org, qemu_oss@crudebyte.com, Vladislav Yaroshchuk Subject: [PATCH v15 5/8] net/vmnet: implement bridged mode (vmnet-bridged) Date: Fri, 25 Feb 2022 20:13:59 +0300 Message-Id: <20220225171402.64861-6-Vladislav.Yaroshchuk@jetbrains.com> X-Mailer: git-send-email 2.34.1.vfs.0.0 In-Reply-To: <20220225171402.64861-1-Vladislav.Yaroshchuk@jetbrains.com> References: <20220225171402.64861-1-Vladislav.Yaroshchuk@jetbrains.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a00:1450:4864:20::12d (failed) 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=2a00:1450:4864:20::12d; envelope-from=vladislav.yaroshchuk@jetbrains.com; helo=mail-lf1-x12d.google.com X-Spam_score_int: -6 X-Spam_score: -0.7 X-Spam_bar: / X-Spam_report: (-0.7 / 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, PDS_HP_HELO_NORDNS=0.659, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Fri, 25 Feb 2022 12:16:18 -0500 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @jetbrains.com) X-ZM-MESSAGEID: 1645810378937100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladislav Yaroshchuk --- net/vmnet-bridged.m | 129 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 124 insertions(+), 5 deletions(-) diff --git a/net/vmnet-bridged.m b/net/vmnet-bridged.m index c735901666..a19b10909e 100644 --- a/net/vmnet-bridged.m +++ b/net/vmnet-bridged.m @@ -10,16 +10,135 @@ =20 #include "qemu/osdep.h" #include "qapi/qapi-types-net.h" -#include "vmnet_int.h" -#include "clients.h" -#include "qemu/error-report.h" #include "qapi/error.h" +#include "clients.h" +#include "vmnet_int.h" =20 #include =20 +typedef struct VmnetBridgedState { + VmnetCommonState cs; +} VmnetBridgedState; + + +static bool validate_ifname(const char *ifname) +{ + xpc_object_t shared_if_list =3D vmnet_copy_shared_interface_list(); + bool match =3D false; + if (!xpc_array_get_count(shared_if_list)) { + goto done; + } + + match =3D !xpc_array_apply( + shared_if_list, + ^bool(size_t index, xpc_object_t value) { + return strcmp(xpc_string_get_string_ptr(value), ifname) !=3D 0; + }); + +done: + xpc_release(shared_if_list); + return match; +} + + +static bool get_valid_ifnames(char *output_buf) +{ + xpc_object_t shared_if_list =3D vmnet_copy_shared_interface_list(); + __block const char *ifname =3D NULL; + __block int str_offset =3D 0; + bool interfaces_available =3D true; + + if (!xpc_array_get_count(shared_if_list)) { + interfaces_available =3D false; + goto done; + } + + xpc_array_apply( + shared_if_list, + ^bool(size_t index, xpc_object_t value) { + /* build list of strings like "en0 en1 en2 " */ + ifname =3D xpc_string_get_string_ptr(value); + strcpy(output_buf + str_offset, ifname); + strcpy(output_buf + str_offset + strlen(ifname), " "); + str_offset +=3D strlen(ifname) + 1; + return true; + }); + +done: + xpc_release(shared_if_list); + return interfaces_available; +} + +static bool validate_options(const Netdev *netdev, Error **errp) +{ + const NetdevVmnetBridgedOptions *options =3D &(netdev->u.vmnet_bridged= ); + char ifnames[256]; + + if (!validate_ifname(options->ifname)) { + if (get_valid_ifnames(ifnames)) { + error_setg(errp, + "unsupported ifname '%s', expected one of [ %s]", + options->ifname, + ifnames); + return false; + } + error_setg(errp, + "unsupported ifname '%s', no supported " + "interfaces available", + options->ifname); + return false; + } + +#if !defined(MAC_OS_VERSION_11_0) || \ + MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_VERSION_11_0 + if (options->has_isolated) { + error_setg(errp, + "vmnet-bridged.isolated feature is " + "unavailable: outdated vmnet.framework API"); + return false; + } +#endif + return true; +} + +static xpc_object_t build_if_desc(const Netdev *netdev) +{ + const NetdevVmnetBridgedOptions *options =3D &(netdev->u.vmnet_bridged= ); + xpc_object_t if_desc =3D xpc_dictionary_create(NULL, NULL, 0); + + xpc_dictionary_set_uint64(if_desc, + vmnet_operation_mode_key, + VMNET_BRIDGED_MODE + ); + + xpc_dictionary_set_string(if_desc, + vmnet_shared_interface_name_key, + options->ifname); + +#if defined(MAC_OS_VERSION_11_0) && \ + MAC_OS_X_VERSION_MIN_REQUIRED >=3D MAC_OS_VERSION_11_0 + xpc_dictionary_set_bool(if_desc, + vmnet_enable_isolation_key, + options->isolated); +#endif + return if_desc; +} + +static NetClientInfo net_vmnet_bridged_info =3D { + .type =3D NET_CLIENT_DRIVER_VMNET_BRIDGED, + .size =3D sizeof(VmnetBridgedState), + .receive =3D vmnet_receive_common, + .cleanup =3D vmnet_cleanup_common, +}; + + int net_init_vmnet_bridged(const Netdev *netdev, const char *name, NetClientState *peer, Error **errp) { - error_setg(errp, "vmnet-bridged is not implemented yet"); - return -1; + NetClientState *nc =3D qemu_new_net_client(&net_vmnet_bridged_info, + peer, "vmnet-bridged", name); + if (!validate_options(netdev, errp)) { + g_assert_not_reached(); + } + return vmnet_if_create(nc, build_if_desc(netdev), errp); } --=20 2.34.1.vfs.0.0 From nobody Mon Feb 9 18:21:56 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=quarantine dis=none) header.from=jetbrains.com ARC-Seal: i=1; a=rsa-sha256; t=1645810314; cv=none; d=zohomail.com; s=zohoarc; b=ibo4KnAA0mXFuta2ZdNpHvzkIeGiTBJq/Ka05EJtMutd9dHOz80NUKjIqkJows7/9ncsWQXxciBYSAxnH5X3mhZ9DuG22+XbJhMBp39Q6tEAfpkm6NUWgqhZp0R4YNYfrJSCBOmn4GB64HVJbYyjG4HO5LR52hLbqz41zo7uGPE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1645810314; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=rDzQ2Diu2otCXp2wF525auspdXUMMmhNmu89vlZY+2w=; b=ZeFRuLctPebpqfjqufXC+I7FYVDJbAxpBBNv77gdHCPnuzrp71uHfMl+EuMElESPsmC8C9Ndtik9LDfv8gmUemBShwm7mBl3/lGGH61OfgvBz7GbGG+MwbK8i2LxHpymIhbeEcm9alwum0xAh5T4znsUOn4/B575R4lztJI1f+8= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1645810314512125.45748615501066; Fri, 25 Feb 2022 09:31:54 -0800 (PST) Received: from localhost ([::1]:46932 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nNeRd-0008Sr-EE for importer@patchew.org; Fri, 25 Feb 2022 12:31:53 -0500 Received: from eggs.gnu.org ([209.51.188.92]:37680) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nNeAc-0007HN-12 for qemu-devel@nongnu.org; Fri, 25 Feb 2022 12:14:18 -0500 Received: from [2a00:1450:4864:20::233] (port=45569 helo=mail-lj1-x233.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nNeAZ-0000Sc-N9 for qemu-devel@nongnu.org; Fri, 25 Feb 2022 12:14:17 -0500 Received: by mail-lj1-x233.google.com with SMTP id e2so8246041ljq.12 for ; Fri, 25 Feb 2022 09:14:15 -0800 (PST) Received: from UNIT-808.lan ([2a02:2698:6c2a:768f:813e:378d:5c94:9b97]) by smtp.gmail.com with ESMTPSA id bq5-20020a056512150500b004433c791651sm252024lfb.69.2022.02.25.09.14.13 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 25 Feb 2022 09:14:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jetbrains.com; s=googleapps; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=rDzQ2Diu2otCXp2wF525auspdXUMMmhNmu89vlZY+2w=; b=HVNEyzDayo1C7xy1KBR6MNcIkjHoZoMFgLkcthZwAaAPHRYIEWtFSxFREPHhALAVcH EbYS063YlZ9JD2wzFxaF6czwOc3Nf2+z8GIiJ0L7aMPpanx5lZi4w1ig7l+LNHIIi32C Uj7cui8Am+be69Uma94BQUQizmBQP9KqLywQ4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=rDzQ2Diu2otCXp2wF525auspdXUMMmhNmu89vlZY+2w=; b=rwOkFoCVeRyAKtaTjbs595OP9v48mPOjzFvCry2kjRatQ97edo3PG3eXUHrmlYiOI5 D0oaW4CwjklgOgO0x9IEi6dGqRVH46rkpHSJHEtTURbpl/IldmuCRmJk3+RXjtXFnleN scD6vqxifVXKBQiUblj5tyrI0mcSd0M+pSvHHeQyK6kH/15yu8zWo3SxKNktHJ1cbR4/ MHbGCEgArJ31QWwHp/5gvsx0wlRAgvsl4Z34xIuX0g8AyWR7ZyPOSkXy1MUHhfXPJ/6j 08TiOsCs9K0C0yAIRVk31O8K1DWos+q1GcE3amxoAfIHsurnLm0iSCKLyt5iI2fpr9K/ hKzg== X-Gm-Message-State: AOAM533p7dN6oUiwDn7C2rwza+cV1yBBhFj57eMsTKlBB0M6FHj1KY1+ LalEWPvZXq0EC1D8Uk+Wz6jA1K+Vbq7Cvg== X-Google-Smtp-Source: ABdhPJwWfx2DR6bWusD392Oq9SycW36MSuQdjkKQmHuPtQSSyrypp4O6LxfHTaMZp9fjaxrnKh2kBw== X-Received: by 2002:a2e:3c0b:0:b0:245:f5f8:3f4a with SMTP id j11-20020a2e3c0b000000b00245f5f83f4amr5871912lja.483.1645809253944; Fri, 25 Feb 2022 09:14:13 -0800 (PST) From: Vladislav Yaroshchuk X-Google-Original-From: Vladislav Yaroshchuk To: qemu-devel@nongnu.org Cc: jasowang@redhat.com, r.bolshakov@yadro.com, eblake@redhat.com, phillip.ennen@gmail.com, phillip@axleos.com, akihiko.odaki@gmail.com, armbru@redhat.com, hsp.cat7@gmail.com, hello@adns.io, roman@roolebo.dev, peter.maydell@linaro.org, dirty@apple.com, f4bug@amsat.org, agraf@csgraf.de, kraxel@redhat.com, alex.bennee@linaro.org, qemu_oss@crudebyte.com, Vladislav Yaroshchuk Subject: [PATCH v15 6/8] net/vmnet: update qemu-options.hx Date: Fri, 25 Feb 2022 20:14:00 +0300 Message-Id: <20220225171402.64861-7-Vladislav.Yaroshchuk@jetbrains.com> X-Mailer: git-send-email 2.34.1.vfs.0.0 In-Reply-To: <20220225171402.64861-1-Vladislav.Yaroshchuk@jetbrains.com> References: <20220225171402.64861-1-Vladislav.Yaroshchuk@jetbrains.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a00:1450:4864:20::233 (failed) 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=2a00:1450:4864:20::233; envelope-from=vladislav.yaroshchuk@jetbrains.com; helo=mail-lj1-x233.google.com X-Spam_score_int: -6 X-Spam_score: -0.7 X-Spam_bar: / X-Spam_report: (-0.7 / 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, PDS_HP_HELO_NORDNS=0.659, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Fri, 25 Feb 2022 12:16:18 -0500 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @jetbrains.com) X-ZM-MESSAGEID: 1645810316896100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladislav Yaroshchuk --- qemu-options.hx | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/qemu-options.hx b/qemu-options.hx index 094a6c1d7c..d2deab95d0 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -2742,6 +2742,25 @@ DEF("netdev", HAS_ARG, QEMU_OPTION_netdev, #ifdef __linux__ "-netdev vhost-vdpa,id=3Dstr,vhostdev=3D/path/to/dev\n" " configure a vhost-vdpa network,Establish a vhost-vdpa= netdev\n" +#endif +#ifdef CONFIG_VMNET + "-netdev vmnet-host,id=3Dstr[,isolated=3Don|off][,net-uuid=3Duuid]\n" + " [,start-address=3Daddr,end-address=3Daddr,subnet-mask=3Dmask= ]\n" + " configure a vmnet network backend in host mode with I= D 'str',\n" + " isolate this interface from others with 'isolated',\n" + " configure the address range and choose a subnet mask,= \n" + " specify network UUID 'uuid' to disable DHCP and inter= act with\n" + " vmnet-host interfaces within this isolated network\n" + "-netdev vmnet-shared,id=3Dstr[,isolated=3Don|off][,nat66-prefix=3Dadd= r]\n" + " [,start-address=3Daddr,end-address=3Daddr,subnet-mask=3Dmask= ]\n" + " configure a vmnet network backend in shared mode with= ID 'str',\n" + " configure the address range and choose a subnet mask,= \n" + " set IPv6 ULA prefix (of length 64) to use for interna= l network,\n" + " isolate this interface from others with 'isolated'\n" + "-netdev vmnet-bridged,id=3Dstr,ifname=3Dname[,isolated=3Don|off]\n" + " configure a vmnet network backend in bridged mode wit= h ID 'str',\n" + " use 'ifname=3Dname' to select a physical network inte= rface to be bridged,\n" + " isolate this interface from others with 'isolated'\n" #endif "-netdev hubport,id=3Dstr,hubid=3Dn[,netdev=3Dnd]\n" " configure a hub port on the hub with ID 'n'\n", QEMU_= ARCH_ALL) @@ -2761,6 +2780,9 @@ DEF("nic", HAS_ARG, QEMU_OPTION_nic, #endif #ifdef CONFIG_POSIX "vhost-user|" +#endif +#ifdef CONFIG_VMNET + "vmnet-host|vmnet-shared|vmnet-bridged|" #endif "socket][,option][,...][mac=3Dmacaddr]\n" " initialize an on-board / default host NIC (using MAC = address\n" @@ -2783,6 +2805,9 @@ DEF("net", HAS_ARG, QEMU_OPTION_net, #endif #ifdef CONFIG_NETMAP "netmap|" +#endif +#ifdef CONFIG_VMNET + "vmnet-host|vmnet-shared|vmnet-bridged|" #endif "socket][,option][,option][,...]\n" " old way to initialize a host network interface\n" --=20 2.34.1.vfs.0.0 From nobody Mon Feb 9 18:21:56 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=quarantine dis=none) header.from=jetbrains.com ARC-Seal: i=1; a=rsa-sha256; t=1645810493; cv=none; d=zohomail.com; s=zohoarc; b=BloVRrV8cmI+6h5n/DsCw+Xfm2qt5Jj13MUVGZVFF/i1H9tnzhGoztF+kkw8AIzKHCnsBvPJpwGy/qwrWposaZLqpi66yogWSnnBvF+tcfrOO1Pm3UdDhlv/KIygL0tNjnDOp04b/xvLJgyKJmZT9tCK0Zq5j+8CXkvNrSE/0VY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1645810493; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=2AKFcugkOOM4INBFZwwvV6ls8yH3+XJfod5pstppv9o=; b=jRfh2yEPEXVZZDZTUZL+7Yhsy0t2KYuqgDTowmrTdXJYCmefyfvq0P6n2iCFOPA5uUfVL+U03KYfczV/ImfXHSErKEywxy7Dq2TJY88CYq4bzW2WGYzHGq27QQc65uc6WCEfx/hlZ7OBDin0Q4Yf0ygPDzC6klEr0HV2Iyigmp4= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1645810493974954.5899559671541; Fri, 25 Feb 2022 09:34:53 -0800 (PST) Received: from localhost ([::1]:54104 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nNeUX-0004gO-4L for importer@patchew.org; Fri, 25 Feb 2022 12:34:53 -0500 Received: from eggs.gnu.org ([209.51.188.92]:37706) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nNeAd-0007K0-9T for qemu-devel@nongnu.org; Fri, 25 Feb 2022 12:14:19 -0500 Received: from [2a00:1450:4864:20::131] (port=36373 helo=mail-lf1-x131.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nNeAb-0000Sr-N7 for qemu-devel@nongnu.org; Fri, 25 Feb 2022 12:14:18 -0500 Received: by mail-lf1-x131.google.com with SMTP id i11so10547766lfu.3 for ; Fri, 25 Feb 2022 09:14:16 -0800 (PST) Received: from UNIT-808.lan ([2a02:2698:6c2a:768f:813e:378d:5c94:9b97]) by smtp.gmail.com with ESMTPSA id bq5-20020a056512150500b004433c791651sm252024lfb.69.2022.02.25.09.14.14 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 25 Feb 2022 09:14:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jetbrains.com; s=googleapps; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=2AKFcugkOOM4INBFZwwvV6ls8yH3+XJfod5pstppv9o=; b=e2EapxkUybIuugvWag4yQYlB3WX6jJKSR7LAscpTO0jcRjORipWTdF3Fu6uOcBWO/c txBtMwjOKLd/yxBeDR0DLB7R2/fDpFxVoWl7FZaAX0oNG6tQ8cXd/ZX/npM63uE1FYqG HaFneE1+O2QwAL5CvoeuC+yw/1Cm/y1oHxyLM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=2AKFcugkOOM4INBFZwwvV6ls8yH3+XJfod5pstppv9o=; b=T7GxyMMZTDZYCpLg0F39rA0rT6Vfvdzo9RQ/UGyaeaGLO0UBRTxsVkWzzOyqGENJjm F6dFPXMELY1VEpVTcgLHK1YFjsODFCWIXjJcOM9/VNgMJXxuAySqecIualqxQDLp0Tfp wZNIuaiLEZCS/0Zx6nk0VFJyMWYfEXRjgaZPpPW3N06AMOV2KvUBRmVnYWDT5VnpuQGl SxldtMRubL7wNAB2w55XXx2jGoHHgQTSxJC2Zy7rT4LingV102zrFxAmVHvGGNTFYuFJ UFOvkTSk7qzt4CR2fsZc8k8zDtHdJkgTCiyL1ZKm+i3OjruuATkO26ZPdRZOE7PYEPQ9 If8A== X-Gm-Message-State: AOAM530HcnVm9Vng+XbKxd1FTi3haE88Pm34fu//W6MnrkcHTxA59wO4 3/FvLMtSsoR0Bm0WkcOtbE8mrZlGPWcZeA== X-Google-Smtp-Source: ABdhPJyCEJIDSpTGph6TTc8+dNWapLcUULbYdYm0ojDpbWJeWQpHdcX6vd1lZRFFcrluaArxfCQq5Q== X-Received: by 2002:ac2:58cc:0:b0:443:fbed:4613 with SMTP id u12-20020ac258cc000000b00443fbed4613mr5549842lfo.317.1645809254919; Fri, 25 Feb 2022 09:14:14 -0800 (PST) From: Vladislav Yaroshchuk X-Google-Original-From: Vladislav Yaroshchuk To: qemu-devel@nongnu.org Cc: jasowang@redhat.com, r.bolshakov@yadro.com, eblake@redhat.com, phillip.ennen@gmail.com, phillip@axleos.com, akihiko.odaki@gmail.com, armbru@redhat.com, hsp.cat7@gmail.com, hello@adns.io, roman@roolebo.dev, peter.maydell@linaro.org, dirty@apple.com, f4bug@amsat.org, agraf@csgraf.de, kraxel@redhat.com, alex.bennee@linaro.org, qemu_oss@crudebyte.com, Vladislav Yaroshchuk Subject: [PATCH v15 7/8] net/vmnet: update hmp-commands.hx Date: Fri, 25 Feb 2022 20:14:01 +0300 Message-Id: <20220225171402.64861-8-Vladislav.Yaroshchuk@jetbrains.com> X-Mailer: git-send-email 2.34.1.vfs.0.0 In-Reply-To: <20220225171402.64861-1-Vladislav.Yaroshchuk@jetbrains.com> References: <20220225171402.64861-1-Vladislav.Yaroshchuk@jetbrains.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a00:1450:4864:20::131 (failed) 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=2a00:1450:4864:20::131; envelope-from=vladislav.yaroshchuk@jetbrains.com; helo=mail-lf1-x131.google.com X-Spam_score_int: -6 X-Spam_score: -0.7 X-Spam_bar: / X-Spam_report: (-0.7 / 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, PDS_HP_HELO_NORDNS=0.659, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Fri, 25 Feb 2022 12:16:18 -0500 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @jetbrains.com) X-ZM-MESSAGEID: 1645810495710100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladislav Yaroshchuk --- hmp-commands.hx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/hmp-commands.hx b/hmp-commands.hx index 70a9136ac2..406ac4bba8 100644 --- a/hmp-commands.hx +++ b/hmp-commands.hx @@ -1265,7 +1265,11 @@ ERST { .name =3D "netdev_add", .args_type =3D "netdev:O", - .params =3D "[user|tap|socket|vde|bridge|hubport|netmap|vhost-= user],id=3Dstr[,prop=3Dvalue][,...]", + .params =3D "[user|tap|socket|vde|bridge|hubport|netmap|vhost-= user" +#ifdef CONFIG_VMNET + "|vmnet-host|vmnet-shared|vmnet-bridged" +#endif + "],id=3Dstr[,prop=3Dvalue][,...]", .help =3D "add host network device", .cmd =3D hmp_netdev_add, .command_completion =3D netdev_add_completion, --=20 2.34.1.vfs.0.0 From nobody Mon Feb 9 18:21:56 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=quarantine dis=none) header.from=jetbrains.com ARC-Seal: i=1; a=rsa-sha256; t=1645810712; cv=none; d=zohomail.com; s=zohoarc; b=NFLZ1CvvV0K3XflDerPSn8W4uaoxYcW/y2c7BV1pcRnsSaTKFqpTiahVrx+Zz8qjGQFNoujES9h1YsIEbHi6WlcGc+jkKI5uDqOXGtD0nYVLlbfrqq52J9q6Qafe9i1mLMnGx0yah9dm1sjON2/8AIASTsZnermkM+reLRNQwL4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1645810712; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=YstO8c/wi7wKCMMPFRxPRV+xcuZLJVUVOkzkg14rFYA=; b=naFmwGiZY67M0MXmzABQm2b7+SRQOh0/QLZYoXlqmgByFsnTXxmgWT1XwAB+ey2czmyVFKGiMY6rj+Xo3XtpcVd7t6HvvNH3wHq5gWTS/QWfnYPReGwtnayqaKfSKtXsmBb87vGYjQ2aJPDLlDkSl9/jGZbhxOSglEAPXq5kDnY= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1645810712900311.0547984823427; Fri, 25 Feb 2022 09:38:32 -0800 (PST) Received: from localhost ([::1]:32830 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nNeY3-0000eV-3o for importer@patchew.org; Fri, 25 Feb 2022 12:38:31 -0500 Received: from eggs.gnu.org ([209.51.188.92]:37712) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nNeAd-0007Ku-ML for qemu-devel@nongnu.org; Fri, 25 Feb 2022 12:14:19 -0500 Received: from [2a00:1450:4864:20::133] (port=40620 helo=mail-lf1-x133.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nNeAb-0000TF-Jn for qemu-devel@nongnu.org; Fri, 25 Feb 2022 12:14:19 -0500 Received: by mail-lf1-x133.google.com with SMTP id b9so10525851lfv.7 for ; Fri, 25 Feb 2022 09:14:17 -0800 (PST) Received: from UNIT-808.lan ([2a02:2698:6c2a:768f:813e:378d:5c94:9b97]) by smtp.gmail.com with ESMTPSA id bq5-20020a056512150500b004433c791651sm252024lfb.69.2022.02.25.09.14.15 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 25 Feb 2022 09:14:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jetbrains.com; s=googleapps; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=YstO8c/wi7wKCMMPFRxPRV+xcuZLJVUVOkzkg14rFYA=; b=dAJkRNaAUS9TBZp2cSgj5lhJNiaOCFG0aH3iV/VXgLVi2osCEYyXp4wo1/RB92svuz aAKtlgpz9k0ZubiU9MYVq8EOVKTgPfs0Bq7GhoJH9pT2r7ru0AChJZTpB1yYTKLmN03C EfTvmhdZ+KMdvKZbvtO17pTq9Z69v0D7YMVP0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=YstO8c/wi7wKCMMPFRxPRV+xcuZLJVUVOkzkg14rFYA=; b=CS4KgGg/dhihR2qIo/652QELAD2hRTnnaQWIrxmRtvgcBx7Bp14VykOg+OOLYUA5kJ uTS/Cnwigati359WAsiKwi+175kc2d2NSGZHv5C5ulGyJx58MOFIugNlrWLV24l+skJU R7NSouwYlsIEoeJ16w68N/oX6tUnRkUS/dhDnkTa4oof3hoec+D5ysrHMwYDTDNxlK15 DE//AYJcAEn3iu7dv85EggyjYgd1D/7kpcHVm0GydCnquzTTKxaVlnIU2QfbKLmJMox/ qI0G2EIwE1owx47qhLe+emXuA2+Dcvc8/7iy4187aSqHAq3v2alrq0P8ykwOP9gtsoSd I+ig== X-Gm-Message-State: AOAM532A66OQbqDTf+Xj/b7tv2gSps1bYbLLbyKCD8WfUjvX0Wmfdf+1 UK5PC8CSCjw3IEzq4XznCsBMEp1+Gdw5kg== X-Google-Smtp-Source: ABdhPJzC0p9wAL55THxi2xTX7/dfzjzZkcMwFXYPhhBWr8hc/mnzMiKtKThGn6ivgtDYg/2RFkZ2QQ== X-Received: by 2002:ac2:4ac5:0:b0:442:c5c5:14b6 with SMTP id m5-20020ac24ac5000000b00442c5c514b6mr5269956lfp.19.1645809255823; Fri, 25 Feb 2022 09:14:15 -0800 (PST) From: Vladislav Yaroshchuk X-Google-Original-From: Vladislav Yaroshchuk To: qemu-devel@nongnu.org Cc: jasowang@redhat.com, r.bolshakov@yadro.com, eblake@redhat.com, phillip.ennen@gmail.com, phillip@axleos.com, akihiko.odaki@gmail.com, armbru@redhat.com, hsp.cat7@gmail.com, hello@adns.io, roman@roolebo.dev, peter.maydell@linaro.org, dirty@apple.com, f4bug@amsat.org, agraf@csgraf.de, kraxel@redhat.com, alex.bennee@linaro.org, qemu_oss@crudebyte.com, Vladislav Yaroshchuk Subject: [PATCH v15 8/8] net/vmnet: update MAINTAINERS list Date: Fri, 25 Feb 2022 20:14:02 +0300 Message-Id: <20220225171402.64861-9-Vladislav.Yaroshchuk@jetbrains.com> X-Mailer: git-send-email 2.34.1.vfs.0.0 In-Reply-To: <20220225171402.64861-1-Vladislav.Yaroshchuk@jetbrains.com> References: <20220225171402.64861-1-Vladislav.Yaroshchuk@jetbrains.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a00:1450:4864:20::133 (failed) 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=2a00:1450:4864:20::133; envelope-from=vladislav.yaroshchuk@jetbrains.com; helo=mail-lf1-x133.google.com X-Spam_score_int: -6 X-Spam_score: -0.7 X-Spam_bar: / X-Spam_report: (-0.7 / 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, PDS_HP_HELO_NORDNS=0.659, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Fri, 25 Feb 2022 12:16:18 -0500 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @jetbrains.com) X-ZM-MESSAGEID: 1645810715563100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladislav Yaroshchuk --- MAINTAINERS | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index fa8adc2618..8e0fa7a2bf 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2730,6 +2730,11 @@ W: http://info.iet.unipi.it/~luigi/netmap/ S: Maintained F: net/netmap.c =20 +Apple vmnet network backends +M: Vladislav Yaroshchuk +S: Maintained +F: net/vmnet* + Host Memory Backends M: David Hildenbrand M: Igor Mammedov --=20 2.34.1.vfs.0.0