From nobody Tue Feb 10 03:16:13 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=1647285808; cv=none; d=zohomail.com; s=zohoarc; b=YPuZj56a9DyiX1zMGbQGzG2svZFB44c87wnizrlwgawQzJmwU9I93L7YIyGsd4S8cYyCl69bgV6NZ74JwASq3I+l+qI+kzh0VdfxVOR/domUO1Zf+dZYm1emPeVmGZUDZFNnq00PJDAOjawmSY5WeDUVkfmAsjbj7hv4Cul7WuI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1647285808; 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=vARqejL8LnbOLfCnG++vZFyfxvSG5M6FwTrsjDnZZOM=; b=lM3zVRvDm0NHuKsSKmEWPDidSHJ4XbN9DEBi1V72upDrqvUexbcs3hTemU9AhuTiCznKlTTF7jgHf5lb+yqZSbOJfZEsFeD6CuNnOxKoPLlWy2WvglCEsgydYp7qkvYCn04TtLmaXsVe+kXoNFoUirySWx0m8osoE7ufIj/oI0Y= 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 1647285808087803.6336245327276; Mon, 14 Mar 2022 12:23:28 -0700 (PDT) Received: from localhost ([::1]:54758 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nTqHv-00088T-CX for importer@patchew.org; Mon, 14 Mar 2022 15:23:27 -0400 Received: from eggs.gnu.org ([209.51.188.92]:34234) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nTqEw-0002Bo-P9 for qemu-devel@nongnu.org; Mon, 14 Mar 2022 15:20:24 -0400 Received: from [2a00:1450:4864:20::12a] (port=38709 helo=mail-lf1-x12a.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nTqEo-0007Rn-Mx for qemu-devel@nongnu.org; Mon, 14 Mar 2022 15:20:16 -0400 Received: by mail-lf1-x12a.google.com with SMTP id w27so29049454lfa.5 for ; Mon, 14 Mar 2022 12:20:14 -0700 (PDT) Received: from UNIT-808.labs.intellij.net ([91.132.204.20]) by smtp.gmail.com with ESMTPSA id j15-20020a196e0f000000b0044827945789sm3414454lfc.155.2022.03.14.12.20.09 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 14 Mar 2022 12:20:11 -0700 (PDT) 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=vARqejL8LnbOLfCnG++vZFyfxvSG5M6FwTrsjDnZZOM=; b=gFi9dZocOR3nuG5XeD+pe6pTTOYzdafFkIFOx+dmYRiXOE9PKBNLKs2HXJaB+nrM9G j5D9jl5h7AqYcnaMnkuocmNt38DwdQ1CrC+DkN6lMPxUlbiAJ8d/tr3Myv76KfytsYj7 hR8XLkXyQUEntKHfEVWOTIhUHCR29n7OztLqs= 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=vARqejL8LnbOLfCnG++vZFyfxvSG5M6FwTrsjDnZZOM=; b=s5/ddzCT6ukxdTLkbbYQYrLZXlXoeX8HdbIetye4apdXwwQ7icE4yVkKNbfyJkr6tU QvdtTKpOyPh1p3bIylVOFeL9C93oW4OdcKEaRNHTmNKsPe6KmbD/ed06lq/J7jk03fdX FgUlJbUx5MK4NC110UvEFdZBhdrZpACYVHwfoh5Z14NajMQawTyi0Gv2xG/fvb6LLSax V98rN/BE/klGphIB4WjHIQhgrFJjkcB5eWOP0pIVv1xCEnTTGmcmi7HDAT4XWzuGt6ii koeqiBfcGZMGlaH6o7L0edTGudlufDZ/lTXoRkW538noLED9Tko7Qic7SHZu+Kj83c3U 8XsQ== X-Gm-Message-State: AOAM530cr71WFh5z8S0dKf0iB9/+6Di0nkTkWeT4X5Y4it++HrpnwRca VWYAP3uYuC6xjWSXit9W2qmK4bTQYv3hcnbm X-Google-Smtp-Source: ABdhPJxrtqeOp2scLtabAM7hBTOkcLOA03TORk/IQgJTgb+OruDY5y/vuqpDhyxp0cwesDCD3Y449A== X-Received: by 2002:ac2:4d3c:0:b0:448:1ee1:fd with SMTP id h28-20020ac24d3c000000b004481ee100fdmr14237616lfk.433.1647285611897; Mon, 14 Mar 2022 12:20:11 -0700 (PDT) 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 v16 1/7] net/vmnet: add vmnet dependency and customizable option Date: Mon, 14 Mar 2022 22:15:39 +0300 Message-Id: <20220314191545.81861-2-Vladislav.Yaroshchuk@jetbrains.com> X-Mailer: git-send-email 2.34.1.vfs.0.0 In-Reply-To: <20220314191545.81861-1-Vladislav.Yaroshchuk@jetbrains.com> References: <20220314191545.81861-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::12a (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::12a; envelope-from=vladislav.yaroshchuk@jetbrains.com; helo=mail-lf1-x12a.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-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: 1647285809652100001 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 2d6601467f..806f3869f9 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', @@ -1550,6 +1562,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()) @@ -3588,7 +3601,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 Tue Feb 10 03:16:13 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=1647285997; cv=none; d=zohomail.com; s=zohoarc; b=AxJfgj2jE3eY/cIh4JM8Co1IR0AJ98exj73Y+W6BfsaJDaiAn/dt7qBVoDi5/HMmcSfGlpMyiDNL49nAHR4wlM+KxJi/G+p5EsS8pv/a1Owz/FG+68urrcKYdEm59cEVwqyV7GtkaBBJ/EjhbI+GoJQFIlI6M9e7KZ15e1NYyQ4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1647285997; 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=bultV2A3G1FPzqamI7XY3I7WuaUyFWEWEKvR6RlQ07w=; b=NXkGrcy4zMJAJYZJWcT7r3kVZS5F/S77smz+OTQ0Sgk04m1bIQVV98XT1MVJANAb6YT66liZ/or6VqVQQsPjXaI9QIvsHOjlkWXHV5/Cp9E3trSHE4aKeLonjbzpoKiMWrYMXBlVbzTHXEhImffr0iThs99ZdKuu8wArr/W2QxE= 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 16472859974171016.124557051038; Mon, 14 Mar 2022 12:26:37 -0700 (PDT) Received: from localhost ([::1]:38462 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nTqKx-0007fO-Ar for importer@patchew.org; Mon, 14 Mar 2022 15:26:35 -0400 Received: from eggs.gnu.org ([209.51.188.92]:34290) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nTqEz-0002CU-7m for qemu-devel@nongnu.org; Mon, 14 Mar 2022 15:20:25 -0400 Received: from [2a00:1450:4864:20::12e] (port=42739 helo=mail-lf1-x12e.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nTqEv-0007TW-Rr for qemu-devel@nongnu.org; Mon, 14 Mar 2022 15:20:24 -0400 Received: by mail-lf1-x12e.google.com with SMTP id w12so28972051lfr.9 for ; Mon, 14 Mar 2022 12:20:16 -0700 (PDT) Received: from UNIT-808.labs.intellij.net ([91.132.204.20]) by smtp.gmail.com with ESMTPSA id j15-20020a196e0f000000b0044827945789sm3414454lfc.155.2022.03.14.12.20.12 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 14 Mar 2022 12:20:14 -0700 (PDT) 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=bultV2A3G1FPzqamI7XY3I7WuaUyFWEWEKvR6RlQ07w=; b=YEpNP5MOwM+oHWzZVvMzOnzl6hT9zLxTLFQ5a7bOxwsHCPNlNGKInPf6y3AQRlIT6w GsBLxhPAWXeFm2bOaC2wklCtLVCKrraL106Zv3XnzxrROWyPHCK6gK8N6WXRseXzxeAo AiGWcxKRffkAlhTJfbwSrpfCbiyJB3VNXzEX4= 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=bultV2A3G1FPzqamI7XY3I7WuaUyFWEWEKvR6RlQ07w=; b=S2+DNsMXKk+SLHlzwZWw2mtgNYSHaB8lq99zPFUJkPRIhV7z1Q7Qp6JwyTuV0yszuY jW48HVuXSZpFZ5s9wA6wb4OveBhuVHlEmmRDJ4Sjy7vSzm81DfK2eOXw7abE+UmGmXrm trvgpgSxhDiuVaCnhWcgyJelwC7B+zENL0jGXKIV/r/pyE7QvGULrVFFN55UIIiq7iGO EGv1PD2i4anAgmjPNQAmAzac6ODIOoL3zDYBu6fpgt5q6IHQ2/LLRKX5+Kt/Gj9ZqqYC ths6IjXv3s5XjeTPkqHBn5ZnQyqCW34ZT8uM+RnzAmypWN0cBI4iSIXcqsjXive0ytsN Tk6A== X-Gm-Message-State: AOAM533GBCPd8PSo3dDbu0NmnOLtznFwNdCwtT8yG7+6/Irfa5n9YWHQ fO7TIRwEc2ME/84t1Ib8MvgvdQHes6G/ALG8 X-Google-Smtp-Source: ABdhPJywevgaSVKZBKVQf2rqpvurk/0SkUKQC8A+9OCKHy6KFD9s5FlnabF6GTDnYDfWb5aYn8za8w== X-Received: by 2002:ac2:5183:0:b0:448:870a:6537 with SMTP id u3-20020ac25183000000b00448870a6537mr6952096lfi.598.1647285614482; Mon, 14 Mar 2022 12:20:14 -0700 (PDT) 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 v16 2/7] net/vmnet: add vmnet backends to qapi/net Date: Mon, 14 Mar 2022 22:15:40 +0300 Message-Id: <20220314191545.81861-3-Vladislav.Yaroshchuk@jetbrains.com> X-Mailer: git-send-email 2.34.1.vfs.0.0 In-Reply-To: <20220314191545.81861-1-Vladislav.Yaroshchuk@jetbrains.com> References: <20220314191545.81861-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::12e (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::12e; envelope-from=vladislav.yaroshchuk@jetbrains.com; helo=mail-lf1-x12e.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-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: 1647286004518100001 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 --- 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..4bff1c4e37 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. Requires at least 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. Requires +# at least macOS Big Sur 11.0. +# +# Since: 7.1 +## +{ '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. Requires at least 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.1 +## +{ '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. Requires at least macOS Big Sur 11.0. +# +# Since: 7.1 +## +{ '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.1 +# @vmnet-shared since 7.1 +# @vmnet-bridged since 7.1 ## { '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.1 +# 'vmnet-shared' - since 7.1 +# 'vmnet-bridged' - since 7.1 ## { '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 Tue Feb 10 03:16:13 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=1647285748; cv=none; d=zohomail.com; s=zohoarc; b=ZmWjQfp4OXYxsoYxFDU3BZNJVGaJ+W/6Zark28bPiFkbkNX05UZwusdRTERy3qZ0eij2UyEGAXl6l38MbLr6bNR4xgNEeojK5v8jVEHi6KufYMuwstsqxAukvkx2/nAtgXEgBOxg9sCtacUWrJqT+GWoDsdC2gqEkJYkUUpIoCo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1647285748; 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=mAscQV86RBjBoWMOsMQp2j+4P9RWpkWj6yMu79BeBO0=; b=dk9p91ZODhjl4hc85lRYA35TFG/LL9kTs/YAenkUCCUZGpKAaQy47B0wImzyFvseaTeI5JUDCFbhSPZIL/JZRpBD7jhTDsmkSdnOJhF4AD/uaggtCR2zaroVOnS0/Q/kuWqpvqnjQSt5BYw/B9O55Gni94iPtRnCV24v1YrXPCw= 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 16472857485561011.6565524442454; Mon, 14 Mar 2022 12:22:28 -0700 (PDT) Received: from localhost ([::1]:50136 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nTqGx-000547-Nd for importer@patchew.org; Mon, 14 Mar 2022 15:22:27 -0400 Received: from eggs.gnu.org ([209.51.188.92]:34302) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nTqEz-0002Cg-JC for qemu-devel@nongnu.org; Mon, 14 Mar 2022 15:20:25 -0400 Received: from [2a00:1450:4864:20::12c] (port=46887 helo=mail-lf1-x12c.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nTqEv-0007VV-Sd for qemu-devel@nongnu.org; Mon, 14 Mar 2022 15:20:25 -0400 Received: by mail-lf1-x12c.google.com with SMTP id s29so7633254lfb.13 for ; Mon, 14 Mar 2022 12:20:19 -0700 (PDT) Received: from UNIT-808.labs.intellij.net ([91.132.204.20]) by smtp.gmail.com with ESMTPSA id j15-20020a196e0f000000b0044827945789sm3414454lfc.155.2022.03.14.12.20.14 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 14 Mar 2022 12:20:16 -0700 (PDT) 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=mAscQV86RBjBoWMOsMQp2j+4P9RWpkWj6yMu79BeBO0=; b=ZGoRG93yDlAyGjO4+aaAm7nhrHle+cDP+Ehwkw6mg/WlnNCXHEuX8wOorfVBV0upoT 9BP+lMM/z/Ikb1nwEewM4SGg/7M/kZNdCEJYIWq/K6wDQ9vX2S6HeRMdmjzrY1G6/wUu RdxAnPWE3MAscDe34jnEiMpjcU8VwiJS1uw0w= 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=mAscQV86RBjBoWMOsMQp2j+4P9RWpkWj6yMu79BeBO0=; b=v1GKzpbY0TH2WGkg0Kaa1nzKlBeK0j1APQMG9pFDseZjkbG/+lgJ72jM8rsCwaYEH8 mdGgFjA5lI/76yYenvp4qTTv1PQAiM/vbt6edRK3+++JiBZX6DZGU5JAo8cFoUoMTmjT YLvmF0L+6Mk2gcYZ6I/MiXb7cGzafLeUcyq0y13BZm4P+NkRxgKEWTMW+VB7cFnXEDpp gu30z478ROxks+sOrGKojA/e/Ho90ZgC/rnMMRWDKy26ERJdp1lDmhAEIRHlnj8l+Fe+ Mdj3pgTnYFXm+f390eEjDPL9ZtpMh3z2oWFwLsOB406eRoXBJINnBdFcb5i1WgFtw3wa O+bg== X-Gm-Message-State: AOAM533HJcl66/DjbgeITyAmSUdx99dfgEkHXQdt3LnEKUDlY/GzPix2 dF/K5zFH+OPH6lZ3hRNVq9uRcwBnrm+aRQks X-Google-Smtp-Source: ABdhPJywpUEVCWpN/fP5zHVw+H2teegOdQiEJnY8qd43vFsgKQUNbEsXROMaCNAoRB8xJUFojbz/Eg== X-Received: by 2002:a05:6512:104a:b0:448:67ce:d718 with SMTP id c10-20020a056512104a00b0044867ced718mr12885077lfb.26.1647285617176; Mon, 14 Mar 2022 12:20:17 -0700 (PDT) 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 v16 3/7] net/vmnet: implement shared mode (vmnet-shared) Date: Mon, 14 Mar 2022 22:15:41 +0300 Message-Id: <20220314191545.81861-4-Vladislav.Yaroshchuk@jetbrains.com> X-Mailer: git-send-email 2.34.1.vfs.0.0 In-Reply-To: <20220314191545.81861-1-Vladislav.Yaroshchuk@jetbrains.com> References: <20220314191545.81861-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::12c (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::12c; envelope-from=vladislav.yaroshchuk@jetbrains.com; helo=mail-lf1-x12c.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-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: 1647285751623100003 Content-Type: text/plain; charset="utf-8" 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. Signed-off-by: Phillip Tennen Signed-off-by: Vladislav Yaroshchuk --- net/vmnet-common.m | 298 +++++++++++++++++++++++++++++++++++++++++++++ net/vmnet-shared.c | 95 ++++++++++++++- net/vmnet_int.h | 41 ++++++- 3 files changed, 429 insertions(+), 5 deletions(-) diff --git a/net/vmnet-common.m b/net/vmnet-common.m index 56612c72ce..20a33d2591 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,300 @@ #include "qapi/error.h" =20 #include +#include =20 +static bool vmnet_qemu_send_wrapper(VmnetCommonState *s); + + +static void vmnet_send_completed(NetClientState *nc, ssize_t len) +{ + VmnetCommonState *s =3D DO_UPCAST(VmnetCommonState, nc, nc); + /* Complete sending packets left in VmnetCommonState buffers */ + s->send_enabled =3D vmnet_qemu_send_wrapper(s); +} + + +static bool vmnet_qemu_send_wrapper(VmnetCommonState *s) { + ssize_t size; + + /* + * Packets to send lay in [current_pos..end_pos) + * (including current_pos, excluding end_pos) + */ + while (s->packets_send_current_pos < s->packets_send_end_pos) { + size =3D qemu_send_packet_async(&s->nc, + s->iov_buf[s->packets_send_current_p= os].iov_base, + s->packets_buf[s->packets_send_curre= nt_pos].vm_pkt_size, + vmnet_send_completed); + ++s->packets_send_current_pos; + if (size =3D=3D 0) { + /* QEMU is not ready - wait for completion callback call */ + return false; + } + } + return true; +} + + +static void vmnet_send_bh(void *opaque) +{ + NetClientState *nc =3D (NetClientState *) opaque; + VmnetCommonState *s =3D DO_UPCAST(VmnetCommonState, nc, nc); + struct vmpktdesc *packets =3D s->packets_buf; + vmnet_return_t status; + int i; + + /* + * Do nothing if QEMU is not ready - wait + * for completion callback invocation + */ + if (!s->send_enabled) { + return; + } + + /* Read as many packets as present */ + s->packets_send_current_pos =3D 0; + s->packets_send_end_pos =3D VMNET_PACKETS_LIMIT; + for (i =3D 0; i < s->packets_send_end_pos; ++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, &s->packets_send_end_pos); + if (status !=3D VMNET_SUCCESS) { + error_printf("vmnet: read failed: %s\n", + vmnet_status_map_str(status)); + s->packets_send_current_pos =3D 0; + s->packets_send_end_pos =3D 0; + return; + } + + /* Send packets to QEMU */ + s->send_enabled =3D vmnet_qemu_send_wrapper(s); +} + + +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) { + dispatch_release(s->if_queue); + dispatch_release(if_created_sem); + error_setg(errp, + "unable to create interface with requested params"); + return -1; + } + + dispatch_semaphore_wait(if_created_sem, DISPATCH_TIME_FOREVER); + dispatch_release(if_created_sem); + + if (if_status !=3D VMNET_SUCCESS) { + dispatch_release(s->if_queue); + 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); + s->send_enabled =3D true; + vmnet_bufs_init(s); + + 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 completion + * handling from vmnet_send_bh() which runs in a qemu context. + */ + qemu_bh_schedule(s->send_bh); + }); + + 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 > %" PRIu64, + 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)); + return -1; + } + + 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_stopped_sem; + + if (s->vmnet_if =3D=3D NULL) { + return; + } + + vmnet_interface_set_event_callback( + s->vmnet_if, + VMNET_INTERFACE_PACKETS_AVAILABLE, + NULL, + NULL); + + qemu_purge_queued_packets(nc); + + if_stopped_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_stopped_sem); + }); + dispatch_semaphore_wait(if_stopped_sem, DISPATCH_TIME_FOREVER); + + qemu_bh_delete(s->send_bh); + dispatch_release(if_stopped_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..2f4eb1db2d 100644 --- a/net/vmnet-shared.c +++ b/net/vmnet-shared.c @@ -10,16 +10,103 @@ =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 -1; + } + return vmnet_if_create(nc, build_if_desc(netdev), errp); } diff --git a/net/vmnet_int.h b/net/vmnet_int.h index aac4d5af64..8f3321ef3e 100644 --- a/net/vmnet_int.h +++ b/net/vmnet_int.h @@ -15,11 +15,50 @@ #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; + + uint64_t mtu; + uint64_t max_packet_size; =20 + dispatch_queue_t if_queue; + + QEMUBH *send_bh; + bool send_enabled; + + struct vmpktdesc packets_buf[VMNET_PACKETS_LIMIT]; + int packets_send_current_pos; + int packets_send_end_pos; + + struct iovec iov_buf[VMNET_PACKETS_LIMIT]; } 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 Tue Feb 10 03:16:13 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=1647285853; cv=none; d=zohomail.com; s=zohoarc; b=MtVZfc11i4JpqgjO0lSkMXJ2JRaXStlioYhu2tZxQiWLXhwCqv/6iQKFAw29tJMNBdixxBzeWpy6x8skQEkLv3G08xN3LbLUPRY7Ifgp2OCykUCrKD+FJ3Z5LXXU5/zH5AkmTHUKdaHgNk5iVplA19oohRRmDniOWzCIz3t9IKY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1647285853; 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=bldcpQT+sy+effbJSIiwZFeRHg8UnTp+AnEmVA8W8PU=; b=hdOdJO8mSRqC5aPxEAAATRxULsnFY48PGxa5IAKWP7IJgLmKkrJq1561DKJDi+lxiC25YRS8nNFQpNMGcXq/1FyuoSD3l2yDn4OCmU4heYolo36LHtt99CM5l72msDVFcyAJrwcrxGzVkQ6yP53tO5x3SG6/+sfKVmvwwqm8VgM= 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 1647285853271428.174110096259; Mon, 14 Mar 2022 12:24:13 -0700 (PDT) Received: from localhost ([::1]:58106 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nTqIe-0001xb-IR for importer@patchew.org; Mon, 14 Mar 2022 15:24:12 -0400 Received: from eggs.gnu.org ([209.51.188.92]:34282) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nTqEy-0002CS-P0 for qemu-devel@nongnu.org; Mon, 14 Mar 2022 15:20:25 -0400 Received: from [2a00:1450:4864:20::135] (port=42746 helo=mail-lf1-x135.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nTqEw-0007YZ-DW for qemu-devel@nongnu.org; Mon, 14 Mar 2022 15:20:24 -0400 Received: by mail-lf1-x135.google.com with SMTP id w12so28972417lfr.9 for ; Mon, 14 Mar 2022 12:20:21 -0700 (PDT) Received: from UNIT-808.labs.intellij.net ([91.132.204.20]) by smtp.gmail.com with ESMTPSA id j15-20020a196e0f000000b0044827945789sm3414454lfc.155.2022.03.14.12.20.17 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 14 Mar 2022 12:20:19 -0700 (PDT) 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=bldcpQT+sy+effbJSIiwZFeRHg8UnTp+AnEmVA8W8PU=; b=dFOhrluP3tQ5+i1KZDF9vsU5bymUbWN33LB4/KT6stLXjZZxq7buZRD2FBXFoAVpvH SQSOD+61o1/lwFyzHbGyP/LmwB+vLfnH505FwMMDqfCi/ePQJfTg/seQc8rPn7jzZCwR tgZd12TkdFX2QO3o6mtjrgvCppXHhlEFYKSCc= 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=bldcpQT+sy+effbJSIiwZFeRHg8UnTp+AnEmVA8W8PU=; b=YmqcMwYKlkTq8DFz8UH8yCDhtCK43rkiZjDXvs2ZBVshbs+9FutRJ7RkntPsCo0wqN UQLrufLNGKZ0L4N+BkTKzRlZ3QZ0wrveGpCu2fDSGrJptaCV1whf0QoyWKyrvSoBtnVn sRDv7EkGcJjK8nsFi7qaC1IhG8LWrWBZqYqkdNfqdJqiqAZCBjoC+TPjuPoBFBTiiA/E zt2xsl3y7Udfiqtyww4s1AuZbFy8BkGv28rYVQppYI3sMDOyy2ykvGzZaj16Zy22EpIO UKihrnJOCO452P4Rcca3OQ6Xd6fTKDUhbHdQEgP2BMo2OCYxSGKG/1caa2im9Rpf93nd 0Trg== X-Gm-Message-State: AOAM5331nPYsS4MU2y5GyRZOMU3SNvqjVogA/kj1nAsbHZunPMyj/U47 VRR2bSX5oeX4L546/QKNq3gMnYz8VbJb5JxT X-Google-Smtp-Source: ABdhPJwKENEBEG9m8fRZ70+P7wYIeDjb5wD0AGlulBBaX10n7SHaHHvo8DdlQgd6xOZzvkRDQeC4kg== X-Received: by 2002:a19:430a:0:b0:445:b7f5:de35 with SMTP id q10-20020a19430a000000b00445b7f5de35mr13957276lfa.41.1647285619407; Mon, 14 Mar 2022 12:20:19 -0700 (PDT) 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 v16 4/7] net/vmnet: implement host mode (vmnet-host) Date: Mon, 14 Mar 2022 22:15:42 +0300 Message-Id: <20220314191545.81861-5-Vladislav.Yaroshchuk@jetbrains.com> X-Mailer: git-send-email 2.34.1.vfs.0.0 In-Reply-To: <20220314191545.81861-1-Vladislav.Yaroshchuk@jetbrains.com> References: <20220314191545.81861-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::135 (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::135; envelope-from=vladislav.yaroshchuk@jetbrains.com; helo=mail-lf1-x135.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-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: 1647285856281100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladislav Yaroshchuk --- net/vmnet-host.c | 116 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 110 insertions(+), 6 deletions(-) diff --git a/net/vmnet-host.c b/net/vmnet-host.c index 32dc437037..15a832701a 100644 --- a/net/vmnet-host.c +++ b/net/vmnet-host.c @@ -9,16 +9,120 @@ */ =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 -1; + } + return vmnet_if_create(nc, build_if_desc(netdev, nc), errp); } --=20 2.34.1.vfs.0.0 From nobody Tue Feb 10 03:16:13 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=1647285859; cv=none; d=zohomail.com; s=zohoarc; b=BDWRedmIi98NwidA9wc3tFVv9xZdBCrUHjQbaNiURvOY15WVlkOS+MYmjVYTTKbwIdsswLHgQTI+pDMF13e3VxmRKO0CUaOGT+JmGt9HBsmfAOarTO4QDtlXAgXQp51GvUMHnbNs6b3SEKu8SplsCYwHSPBwycajn+cBA9zQErU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1647285859; 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=WfURjTKvckDt0EqFCV3JW/0UskElrmRV9YIUix/mkOY=; b=ZmzPJ7hzVRU7Ar3/TChkuCGFqhv0c1ZL17d6gphxvrwtMUJir7kEU4cgVO4XbaguN4y0TsczhUAODxLZGz4zPrFqiR//HP8fb+Yhy4gqSM9fuvWfgsl0DxUuBOznukROqvCwbPBIMvtA9fiLlYaE2EPjw52K3M6I95mBzB5x+zY= 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 164728585968276.48942254329143; Mon, 14 Mar 2022 12:24:19 -0700 (PDT) Received: from localhost ([::1]:58816 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nTqIk-0002Qd-Vk for importer@patchew.org; Mon, 14 Mar 2022 15:24:19 -0400 Received: from eggs.gnu.org ([209.51.188.92]:34320) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nTqF1-0002EO-95 for qemu-devel@nongnu.org; Mon, 14 Mar 2022 15:20:28 -0400 Received: from [2a00:1450:4864:20::22a] (port=42984 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 1nTqEz-0007bG-E0 for qemu-devel@nongnu.org; Mon, 14 Mar 2022 15:20:26 -0400 Received: by mail-lj1-x22a.google.com with SMTP id c15so6813617ljr.9 for ; Mon, 14 Mar 2022 12:20:24 -0700 (PDT) Received: from UNIT-808.labs.intellij.net ([91.132.204.20]) by smtp.gmail.com with ESMTPSA id j15-20020a196e0f000000b0044827945789sm3414454lfc.155.2022.03.14.12.20.19 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 14 Mar 2022 12:20:22 -0700 (PDT) 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=WfURjTKvckDt0EqFCV3JW/0UskElrmRV9YIUix/mkOY=; b=bDiVhsB3AG2MHpcHDnsCHBGyXVZ1t2CAM8x/0bRTs36F/Zig0XtuCE5kZaOSGvDfdJ EjoxiET787NugtlzHkqeY+r0TtQGkKAA6xVoqjiqysUpF4QcKHKKJ4Xs0xmtyqU4MBB5 uTHbtNlCpxvf4tpFwVmzpdBiJK1yJNMwVRneQ= 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=WfURjTKvckDt0EqFCV3JW/0UskElrmRV9YIUix/mkOY=; b=wuKpR2aTqdk8O7Wyh6I5tKhvgqj4UgCAWgqtxmHSFC5LJZKgn9qlXw1Xa9Qbst0xKR k94sBNLAnljCqzbvx8U5g5jt3rLUNd8LMxMB0XbzkNkMoa11kX/nVgn1DSgP2iMTeun/ j06jRgRopsyxTZWQQjsDHpeaDnOsXOuXKEhy7+iu3X8j1iFRxltZ54OfHHwda3ds7vyD XoD3Bx/yJEmkpIzXdVZioSohwJWu88/qi+jdUw8u9WTfTbzrjkxhd5d3Eca0idZD1Luy JScf10MManESfdGc950d69gOPF3BnXw1KwOZxhHtq8Q7boppx3f3QETcdApNE6z/X2xQ aazw== X-Gm-Message-State: AOAM532PeuSBtjnIKIfp+aoz4y7Otwgg1Zphn/YB9O5EySpB8/X/TDDg gsWwv7rxVhqbklFIMk1ph1GuDJtkXqZcdO+Z X-Google-Smtp-Source: ABdhPJzEDac1ArRdGShKaZoEhwHUmxMhJ4eGOLXy3Vb0Q4qOy+oybq2xS7JrDjmHjIdTbRG6kUPXCQ== X-Received: by 2002:a2e:a7cb:0:b0:249:257b:b4e0 with SMTP id x11-20020a2ea7cb000000b00249257bb4e0mr8019661ljp.503.1647285622509; Mon, 14 Mar 2022 12:20:22 -0700 (PDT) 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 v16 5/7] net/vmnet: implement bridged mode (vmnet-bridged) Date: Mon, 14 Mar 2022 22:15:43 +0300 Message-Id: <20220314191545.81861-6-Vladislav.Yaroshchuk@jetbrains.com> X-Mailer: git-send-email 2.34.1.vfs.0.0 In-Reply-To: <20220314191545.81861-1-Vladislav.Yaroshchuk@jetbrains.com> References: <20220314191545.81861-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-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: 1647285862505100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladislav Yaroshchuk --- net/vmnet-bridged.m | 134 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 129 insertions(+), 5 deletions(-) diff --git a/net/vmnet-bridged.m b/net/vmnet-bridged.m index c735901666..a23e03c40d 100644 --- a/net/vmnet-bridged.m +++ b/net/vmnet-bridged.m @@ -10,16 +10,140 @@ =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[1024]; + + 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 -1; + } + return vmnet_if_create(nc, build_if_desc(netdev), errp); } --=20 2.34.1.vfs.0.0 From nobody Tue Feb 10 03:16:13 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=1647285931; cv=none; d=zohomail.com; s=zohoarc; b=i2mJID8ZhsESkMnptMlQbl+QX+Jnj70n5kej+4gKxvaottTEh9F+mIwlQ19FYV9a167NtyiyGuuY+cfKg8zLLTS8uAtDW1VrbJiiwXuypL3tXPpWq02G1gJJvjlpIjq+IvuU+dDTRJV4JhpTqioNveV0FOIN9ESk5p+3bvcUhcY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1647285931; 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=TocqvUgt8oYqDt7ijO5+PrJ/oIA8D+p+ZMbp4ehOtYs=; b=B0dTz7/CTBNicXPCLaC4lmoSxbwmSCA1G4GcUVNMfDi3Zdc/fQeo+mxMFe/aFl54iDFQegO3JwyiB2N5pBP6EutAc+kji9QCPqDsEwVdCg7CVnUaCTHUIKt4GfM6GU0cWIhGWgz3GzcocSWq1dIzdP1DbIzCDXLt00zpAhvJxa4= 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 1647285931828930.6401469628863; Mon, 14 Mar 2022 12:25:31 -0700 (PDT) Received: from localhost ([::1]:35220 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nTqJu-0005VG-Hs for importer@patchew.org; Mon, 14 Mar 2022 15:25:30 -0400 Received: from eggs.gnu.org ([209.51.188.92]:34334) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nTqFA-0002Mn-2Q for qemu-devel@nongnu.org; Mon, 14 Mar 2022 15:20:37 -0400 Received: from [2a00:1450:4864:20::12f] (port=40846 helo=mail-lf1-x12f.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nTqF5-0007dT-IF for qemu-devel@nongnu.org; Mon, 14 Mar 2022 15:20:35 -0400 Received: by mail-lf1-x12f.google.com with SMTP id 3so29013759lfr.7 for ; Mon, 14 Mar 2022 12:20:31 -0700 (PDT) Received: from UNIT-808.labs.intellij.net ([91.132.204.20]) by smtp.gmail.com with ESMTPSA id j15-20020a196e0f000000b0044827945789sm3414454lfc.155.2022.03.14.12.20.22 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 14 Mar 2022 12:20:27 -0700 (PDT) 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=TocqvUgt8oYqDt7ijO5+PrJ/oIA8D+p+ZMbp4ehOtYs=; b=LwMTvyvKnV7go2Nh4NkDhwtxl9LPiSFlyfMGdn8xv3qaW3TxCv4yPzynf+Q/Zi6qQ2 N0JarO2CkubgR7KGjst1sn73F5iAGRkpkxTRbr/qAK1+70ATxoiLhWANckOf8XYNiBgK Py5jpfK3ik6v8iwgJ6jrlQorIXqw78ywSDiZ8= 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=TocqvUgt8oYqDt7ijO5+PrJ/oIA8D+p+ZMbp4ehOtYs=; b=mVJ/CXDp7/ZbBQY+QAGFeE/iWsCcgm7ptM5GCElkBN1h5xHKjNObqk2aDwjen81vc5 vXfDyxHz4QWyMj7Ib7ZuGes/ZerSLoS8ZKgqonJG16AJ6OGrFqPd+m+azbWZPZPpzmU6 Rn12bwOr6yjcwT9QgxiW5GxSq6kwTTXKiSQ3LHIPeei/SEdp1jlVBAcJ/aX2V3wrOQkl /so4jMjCK7uCXfGBG7S7R2CTHw86XjT0cXAxvU3WsVh6KlARP0Usvs3NN7Ya0Q8OrxCe IkuFsg9u/2NGtBiCBI0mYxudHDVy5b6+3qRl8M+/ZKUm2IcCCJXOTvKodK73px8wonU7 SHPQ== X-Gm-Message-State: AOAM530tQD9+hQuUzGmyW9fRlwDbqwTD3Sa4Zq10yGVCnzl+US1EjvWT tAarPiT9U3J9kkkVatjEF6WqhMEe1KXIKdOv X-Google-Smtp-Source: ABdhPJylA+7di+oxKakJSkAGr1BX3uyh5OMSbh3rQFINqVFP2EtKZ8lYOMjtP4Hn53/lsAOf4FObFA== X-Received: by 2002:ac2:4e52:0:b0:443:b1a0:1c2 with SMTP id f18-20020ac24e52000000b00443b1a001c2mr14810265lfr.444.1647285628100; Mon, 14 Mar 2022 12:20:28 -0700 (PDT) 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 v16 6/7] net/vmnet: update qemu-options.hx Date: Mon, 14 Mar 2022 22:15:44 +0300 Message-Id: <20220314191545.81861-7-Vladislav.Yaroshchuk@jetbrains.com> X-Mailer: git-send-email 2.34.1.vfs.0.0 In-Reply-To: <20220314191545.81861-1-Vladislav.Yaroshchuk@jetbrains.com> References: <20220314191545.81861-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::12f (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::12f; envelope-from=vladislav.yaroshchuk@jetbrains.com; helo=mail-lf1-x12f.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-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: 1647285936003100001 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 5ce0ada75e..ea00d0eeb6 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -2743,6 +2743,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) @@ -2762,6 +2781,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" @@ -2784,6 +2806,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 Tue Feb 10 03:16:13 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=1647286078; cv=none; d=zohomail.com; s=zohoarc; b=i8kMijB+giv8fxgQb0als3jdLrgg3gRwezg0/luAr2kwXuzo4eiHiQ9W1OLhQSu+ppfYflwbrwWJqVehII1+vtWRkAcrq62MzAoBpNCn2suxyjq/sGrI1M3B/PdpUsfANB71LnHb9l36+uW60+u6a7CzyzNZ/aL4RpnTLBIiDvM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1647286078; 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=v0RH9VmCWPcsPrNitBQ5880IrTspVYz6x+t+QgkXXVo=; b=OLzVOXHdI1dFFbRt4YKZAAxpojgyFwmGfOR6a7jtoTS8BWcEGoYhFFnQbrPisXvqb5jSwmRn3Tp50gRwInaR33nVqEWd5t+/UP/iUJw+bNcOURbNWsQaTTSYOZ+LOEZ04FlbteLXxWgLAA28l8hOBIHyKXA42uGxJHCytX4AnBI= 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 1647286078174887.8432869256674; Mon, 14 Mar 2022 12:27:58 -0700 (PDT) Received: from localhost ([::1]:42620 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nTqMG-0002H1-Rf for importer@patchew.org; Mon, 14 Mar 2022 15:27:56 -0400 Received: from eggs.gnu.org ([209.51.188.92]:34358) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nTqFF-0002TL-MX for qemu-devel@nongnu.org; Mon, 14 Mar 2022 15:20:41 -0400 Received: from [2a00:1450:4864:20::22f] (port=45578 helo=mail-lj1-x22f.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nTqFD-0007el-0s for qemu-devel@nongnu.org; Mon, 14 Mar 2022 15:20:40 -0400 Received: by mail-lj1-x22f.google.com with SMTP id y17so6289370ljd.12 for ; Mon, 14 Mar 2022 12:20:37 -0700 (PDT) Received: from UNIT-808.labs.intellij.net ([91.132.204.20]) by smtp.gmail.com with ESMTPSA id j15-20020a196e0f000000b0044827945789sm3414454lfc.155.2022.03.14.12.20.28 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 14 Mar 2022 12:20:35 -0700 (PDT) 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=v0RH9VmCWPcsPrNitBQ5880IrTspVYz6x+t+QgkXXVo=; b=Tx1XktYbwU++mr0IuJlbD7kNHOPq8ljSSgm1zp7G6Od8M3le/wyOXVWuSDD3fBeoZU 1Bgp7ywW51Wtk5ZUyu+4I3cwvxh2bcjWvt3MH1pYQxBl9m6NuSYhkS7PA1n7kRanXZ0q SiIwN+skz/nja4X26T8qyzp/ciVQpl/mX/r9A= 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=v0RH9VmCWPcsPrNitBQ5880IrTspVYz6x+t+QgkXXVo=; b=hnm6+0oOwXShoZ/841pMx1bn/zT0VKn6LknSBcje+pwKQkdZiXncEJhymiVEl6a0aY r0pNZrC07eHL9rq3+fWdw7oO2nb0QMUQLK4X2EvBwsXGFGG8FqfCa9jTn6mBkvwgQhaw P5gASQw7TK4LrAkcGMVV+M7y67zKdx70dsvEvzogDgmhm2Ubc7AY2e2bzFU1kyaD7n+7 4EcDehBwRjlhneN5PIrYu85sU1qNDcRzdtL+pQl+Izbvd1CBbRZMJ96J6+/c5xgttjDw qolwQxEBcgTcAsb44zJ35WUv1raWzEz1fskEe/OjkhtoRNTjwpyQXniRPXL3bzdizKI8 d3EQ== X-Gm-Message-State: AOAM53091VEW53EKZhmqB26P0wQTmTf4gjyu7+xkPWFh8Sozn2imgNmW t7+I8u3PBQ3X0koPeu4t7mm72+7Nr5iSM9IJ X-Google-Smtp-Source: ABdhPJxwdReDEXMbFJJ2ZY98NhjqAoYTGOMJdsqlxFhjUmR3UdLOKRHGJgRx1nYkUL+MLTYMbadOnQ== X-Received: by 2002:a2e:9119:0:b0:247:e306:1379 with SMTP id m25-20020a2e9119000000b00247e3061379mr14424776ljg.361.1647285636233; Mon, 14 Mar 2022 12:20:36 -0700 (PDT) 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 v16 7/7] net/vmnet: update hmp-commands.hx Date: Mon, 14 Mar 2022 22:15:45 +0300 Message-Id: <20220314191545.81861-8-Vladislav.Yaroshchuk@jetbrains.com> X-Mailer: git-send-email 2.34.1.vfs.0.0 In-Reply-To: <20220314191545.81861-1-Vladislav.Yaroshchuk@jetbrains.com> References: <20220314191545.81861-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::22f (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::22f; envelope-from=vladislav.yaroshchuk@jetbrains.com; helo=mail-lj1-x22f.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-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: 1647286085156100001 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 8476277aa9..8f3d78f177 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