All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v13 0/7] Add vmnet.framework based network backend
@ 2022-01-13 17:22 Vladislav Yaroshchuk
  2022-01-13 17:22 ` [PATCH v13 1/7] net/vmnet: add vmnet dependency and customizable option Vladislav Yaroshchuk
                   ` (6 more replies)
  0 siblings, 7 replies; 35+ messages in thread
From: Vladislav Yaroshchuk @ 2022-01-13 17:22 UTC (permalink / raw)
  To: qemu-devel
  Cc: peter.maydell, Vladislav Yaroshchuk, alex.bennee, jasowang,
	phillip.ennen, armbru, dirty, f4bug, roman, r.bolshakov, agraf,
	phillip, akihiko.odaki, hsp.cat7, hello, qemu_oss, eblake,
	kraxel

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
v7 -> v8
 - QAPI code style fixes
v8 -> v9
 - Fix building on Linux: add missing qapi
   `'if': 'CONFIG_VMNET'` statement to Netdev union
v9 -> v10
 - Disable vmnet feature for macOS < 11.0: add
   vmnet.framework API probe into meson.build.
   This fixes QEMU building on macOS < 11.0:
   https://patchew.org/QEMU/20220110034000.20221-1-jasowang@redhat.com/
v10 -> v11
 - Enable vmnet for macOS 10.15 with subset of available
   features. Disable vmnet for macOS < 10.15.
 - Fix typos
v11 -> v12
 - use more general macOS version check with
   MAC_OS_VERSION_11_0 instead of manual
   definition creating.
v12 -> v13
 - fix incorrect macOS version bound while
   'feature available since 11.0' check.
   Use MAC_OS_X_VERSION_MIN_REQUIRED instead of
   MAC_OS_X_VERSION_MAX_ALLOWED.

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                   |  16 +-
 meson_options.txt             |   2 +
 net/clients.h                 |  11 ++
 net/meson.build               |   7 +
 net/net.c                     |  10 +
 net/vmnet-bridged.m           | 120 ++++++++++++
 net/vmnet-common.m            | 333 ++++++++++++++++++++++++++++++++++
 net/vmnet-host.c              | 122 +++++++++++++
 net/vmnet-shared.c            | 100 ++++++++++
 net/vmnet_int.h               |  48 +++++
 qapi/net.json                 | 133 +++++++++++++-
 qemu-options.hx               |  25 +++
 scripts/meson-buildoptions.sh |   3 +
 14 files changed, 932 insertions(+), 3 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



^ permalink raw reply	[flat|nested] 35+ messages in thread

end of thread, other threads:[~2022-01-29 21:06 UTC | newest]

Thread overview: 35+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-13 17:22 [PATCH v13 0/7] Add vmnet.framework based network backend Vladislav Yaroshchuk
2022-01-13 17:22 ` [PATCH v13 1/7] net/vmnet: add vmnet dependency and customizable option Vladislav Yaroshchuk
2022-01-20  7:14   ` Roman Bolshakov
2022-01-21 11:58     ` Vladislav Yaroshchuk
2022-01-13 17:22 ` [PATCH v13 2/7] net/vmnet: add vmnet backends to qapi/net Vladislav Yaroshchuk
2022-01-14  8:43   ` Akihiko Odaki
2022-01-15 13:00     ` Vladislav Yaroshchuk
2022-01-18 15:00   ` Markus Armbruster
2022-01-18 16:16     ` Vladislav Yaroshchuk
2022-01-18 16:26       ` Markus Armbruster
2022-01-18 16:46         ` Vladislav Yaroshchuk
2022-01-20  8:32   ` Roman Bolshakov
2022-01-21 12:19     ` Vladislav Yaroshchuk
2022-01-21 13:03       ` Akihiko Odaki
2022-01-28 14:29         ` Vladislav Yaroshchuk
2022-01-28 23:00           ` Akihiko Odaki
2022-01-24  9:56   ` Roman Bolshakov
2022-01-24 11:27     ` Christian Schoenebeck
2022-01-24 17:49       ` Roman Bolshakov
2022-01-24 20:00         ` Christian Schoenebeck
2022-01-24 20:14         ` Peter Maydell
2022-01-24 23:00           ` Roman Bolshakov
2022-01-25  4:14             ` Akihiko Odaki
2022-01-25 10:32               ` Peter Maydell
2022-01-25 11:08                 ` Akihiko Odaki
2022-01-25 17:30                   ` Christian Schoenebeck
2022-01-29 21:03               ` Roman Bolshakov
2022-01-13 17:22 ` [PATCH v13 3/7] net/vmnet: implement shared mode (vmnet-shared) Vladislav Yaroshchuk
2022-01-14  8:43   ` Akihiko Odaki
2022-01-13 17:22 ` [PATCH v13 4/7] net/vmnet: implement host mode (vmnet-host) Vladislav Yaroshchuk
2022-01-13 17:22 ` [PATCH v13 5/7] net/vmnet: implement bridged mode (vmnet-bridged) Vladislav Yaroshchuk
2022-01-14  8:43   ` Akihiko Odaki
2022-01-13 17:22 ` [PATCH v13 6/7] net/vmnet: update qemu-options.hx Vladislav Yaroshchuk
2022-01-14  8:43   ` Akihiko Odaki
2022-01-13 17:22 ` [PATCH v13 7/7] net/vmnet: update MAINTAINERS list Vladislav Yaroshchuk

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.