From: phillip.ennen@gmail.com
To: qemu-devel@nongnu.org
Cc: stefanha@gmail.com, jasowang@redhat.com, phillip@axleos.com
Subject: [PATCH 0/2] net/macos: implement vmnet-based network device
Date: Thu, 4 Feb 2021 17:25:42 +0100 [thread overview]
Message-ID: <20210204162544.65439-1-phillip.ennen@gmail.com> (raw)
From: Phillip Tennen <phillip@axleos.com>
This patch series implements a new netdev device, reachable via -netdev
vmnet-macos, that’s backed by macOS’s vmnet framework.
The vmnet framework provides native bridging support, and its usage in
this patch is intended as a replacement for attempts to use a tap device
via the tuntaposx kernel extension. Notably, the tap/tuntaposx approach
never would have worked in the first place, as QEMU interacts with the
tap device via poll(), and macOS does not support polling device files.
vmnet requires either a special entitlement, granted via a provisioning
profile, or root access. Otherwise attempts to create the virtual
interface will fail with a “generic error” status code. QEMU may not
currently be signed with an entitlement granted in a provisioning
profile, as this would necessitate pre-signed binary build distribution,
rather than source-code distribution. As such, using this netdev
currently requires that qemu be run with root access. I’ve opened a
feedback report with Apple to allow the use of the relevant entitlement
with this use case:
https://openradar.appspot.com/radar?id=5007417364447232
vmnet offers three operating modes, all of which are supported by this
patch via the “mode=host|shared|bridge” option:
* "Host" mode: Allows the vmnet interface to communicate with other vmnet
interfaces that are in host mode and also with the native host.
* "Shared" mode: Allows traffic originating from the vmnet interface to
reach the Internet through a NAT. The vmnet interface can also
communicate with the native host.
* "Bridged" mode: Bridges the vmnet interface with a physical network
interface.
Each of these modes also provide some extra configuration that’s
supported by this patch:
* "Bridged" mode: The user may specify the physical interface to bridge
with. Defaults to en0.
* "Host" mode / "Shared" mode: The user may specify the DHCP range and
subnet. Allocated by vmnet if not provided.
vmnet also offers some extra configuration options that are not
supported by this patch:
* Enable isolation from other VMs using vmnet
* Port forwarding rules
* Enabling TCP segmentation offload
* Only applicable in "shared" mode: specifying the NAT IPv6 prefix
* Only available in "host" mode: specifying the IP address for the VM
within an isolated network
Note that this patch requires macOS 10.15 as a minimum, as this is when
bridging support was implemented in vmnet.framework.
This is my first QEMU contribution, so please feel free to let me know
what I’ve missed or what needs improving. Thanks very much for taking a
look =)
Phillip Tennen (2):
build: add configure flag to indicate when the host is Darwin
net: implement vmnet-based netdev
configure | 6 +-
net/clients.h | 6 +
net/meson.build | 1 +
net/net.c | 3 +
net/vmnet-macos.c | 444 ++++++++++++++++++++++++++++++++++++++++++++++
qapi/net.json | 64 ++++++-
qemu-options.hx | 9 +
7 files changed, 530 insertions(+), 3 deletions(-)
create mode 100644 net/vmnet-macos.c
--
2.24.3 (Apple Git-128)
next reply other threads:[~2021-02-04 18:22 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-04 16:25 phillip.ennen [this message]
2021-02-04 16:25 ` [PATCH 1/2] build: add configure flag to indicate when the host is Darwin phillip.ennen
2021-02-05 5:56 ` Thomas Huth
2021-02-05 13:32 ` Phillip Tennen
2021-02-04 16:25 ` [PATCH 2/2] net: implement vmnet-based netdev phillip.ennen
2021-02-04 19:51 ` Eric Blake
2021-02-05 0:25 ` Phillip Tennen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210204162544.65439-1-phillip.ennen@gmail.com \
--to=phillip.ennen@gmail.com \
--cc=jasowang@redhat.com \
--cc=phillip@axleos.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).