From: Vladislav Yaroshchuk <yaroshchuk2000@gmail.com>
To: qemu-devel@nongnu.org
Cc: Vladislav Yaroshchuk <yaroshchuk2000@gmail.com>,
jasowang@redhat.com, phillip.ennen@gmail.com, armbru@redhat.com,
r.bolshakov@yadro.com, phillip@axleos.com,
akihiko.odaki@gmail.com, hsp.cat7@gmail.com, hello@adns.io,
eblake@redhat.com
Subject: [PATCH v7 0/7] Add vmnet.framework based network backend
Date: Tue, 7 Dec 2021 13:18:21 +0300 [thread overview]
Message-ID: <20211207101828.22033-1-yaroshchuk2000@gmail.com> (raw)
macOS provides networking API for VMs called 'vmnet.framework':
https://developer.apple.com/documentation/vmnet
We can provide its support as the new QEMU network backends which
represent three different vmnet.framework interface usage modes:
* `vmnet-shared`:
allows the guest to communicate with other guests in shared mode and
also with external network (Internet) via NAT. Has (macOS-provided)
DHCP server; subnet mask and IP range can be configured;
* `vmnet-host`:
allows the guest to communicate with other guests in host mode.
By default has enabled DHCP as `vmnet-shared`, but providing
network unique id (uuid) can make `vmnet-host` interfaces isolated
from each other and also disables DHCP.
* `vmnet-bridged`:
bridges the guest with a physical network interface.
This backends cannot work on macOS Catalina 10.15 cause we use
vmnet.framework API provided only with macOS 11 and newer. Seems
that it is not a problem, because QEMU guarantees to work on two most
recent versions of macOS which now are Big Sur (11) and Monterey (12).
Also, we have one inconvenient restriction: vmnet.framework interfaces
can create only privileged user:
`$ sudo qemu-system-x86_64 -nic vmnet-shared`
Attempt of `vmnet-*` netdev creation being unprivileged user fails with
vmnet's 'general failure'.
This happens because vmnet.framework requires `com.apple.vm.networking`
entitlement which is: "restricted to developers of virtualization software.
To request this entitlement, contact your Apple representative." as Apple
documentation says:
https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_vm_networking
One more note: we still have quite useful but not supported
'vmnet.framework' features as creating port forwarding rules, IPv6
NAT prefix specifying and so on.
Nevertheless, new backends work fine and tested within `qemu-system-x86-64`
on macOS Bir Sur 11.5.2 host with such nic models:
* e1000-82545em
* virtio-net-pci
* vmxnet3
The guests were:
* macOS 10.15.7
* Ubuntu Bionic (server cloudimg)
This series partially reuses patches by Phillip Tennen:
https://patchew.org/QEMU/20210218134947.1860-1-phillip.ennen@gmail.com/
So I included them signed-off line into one of the commit messages and
also here.
v1 -> v2:
Since v1 minor typos were fixed, patches rebased onto latest master,
redundant changes removed (small commits squashed)
v2 -> v3:
- QAPI style fixes
- Typos fixes in comments
- `#include`'s updated to be in sync with recent master
v3 -> v4:
- Support vmnet interfaces isolation feature
- Support vmnet-host network uuid setting feature
- Refactored sources a bit
v4 -> v5:
- Missed 6.2 boat, now 7.0 candidate
- Fix qapi netdev descriptions and styles
(@subnetmask -> @subnet-mask)
- Support vmnet-shared IPv6 prefix setting feature
v5 -> v6
- provide detailed commit messages for commits of
many changes
- rename properties @dhcpstart and @dhcpend to
@start-address and @end-address
- improve qapi documentation about isolation
features (@isolated, @net-uuid)
v6 -> v7:
- update MAINTAINERS list
Vladislav Yaroshchuk (7):
net/vmnet: add vmnet dependency and customizable option
net/vmnet: add vmnet backends to qapi/net
net/vmnet: implement shared mode (vmnet-shared)
net/vmnet: implement host mode (vmnet-host)
net/vmnet: implement bridged mode (vmnet-bridged)
net/vmnet: update qemu-options.hx
net/vmnet: update MAINTAINERS list
MAINTAINERS | 5 +
meson.build | 4 +
meson_options.txt | 2 +
net/clients.h | 11 ++
net/meson.build | 7 +
net/net.c | 10 ++
net/vmnet-bridged.m | 111 ++++++++++++
net/vmnet-common.m | 330 ++++++++++++++++++++++++++++++++++
net/vmnet-host.c | 105 +++++++++++
net/vmnet-shared.c | 92 ++++++++++
net/vmnet_int.h | 48 +++++
qapi/net.json | 132 +++++++++++++-
qemu-options.hx | 25 +++
scripts/meson-buildoptions.sh | 3 +
14 files changed, 883 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
--
2.23.0
next reply other threads:[~2021-12-07 10:22 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-07 10:18 Vladislav Yaroshchuk [this message]
2021-12-07 10:18 ` [PATCH v7 1/7] net/vmnet: add vmnet dependency and customizable option Vladislav Yaroshchuk
2021-12-07 14:12 ` Markus Armbruster
2021-12-07 17:39 ` Vladislav Yaroshchuk
2021-12-08 8:24 ` Markus Armbruster
2021-12-07 10:18 ` [PATCH v7 2/7] net/vmnet: add vmnet backends to qapi/net Vladislav Yaroshchuk
2021-12-10 6:23 ` Markus Armbruster
2021-12-07 10:18 ` [PATCH v7 3/7] net/vmnet: implement shared mode (vmnet-shared) Vladislav Yaroshchuk
2021-12-07 10:18 ` [PATCH v7 4/7] net/vmnet: implement host mode (vmnet-host) Vladislav Yaroshchuk
2021-12-07 10:18 ` [PATCH v7 5/7] net/vmnet: implement bridged mode (vmnet-bridged) Vladislav Yaroshchuk
2021-12-07 10:18 ` [PATCH v7 6/7] net/vmnet: update qemu-options.hx Vladislav Yaroshchuk
2021-12-07 10:18 ` [PATCH v7 7/7] net/vmnet: update MAINTAINERS list Vladislav Yaroshchuk
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=20211207101828.22033-1-yaroshchuk2000@gmail.com \
--to=yaroshchuk2000@gmail.com \
--cc=akihiko.odaki@gmail.com \
--cc=armbru@redhat.com \
--cc=eblake@redhat.com \
--cc=hello@adns.io \
--cc=hsp.cat7@gmail.com \
--cc=jasowang@redhat.com \
--cc=phillip.ennen@gmail.com \
--cc=phillip@axleos.com \
--cc=qemu-devel@nongnu.org \
--cc=r.bolshakov@yadro.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.