qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v8 0/7] Add vmnet.framework based network backend
@ 2021-12-11 10:44 Vladislav Yaroshchuk
  2021-12-11 10:44 ` [PATCH v8 1/7] net/vmnet: add vmnet dependency and customizable option Vladislav Yaroshchuk
                   ` (8 more replies)
  0 siblings, 9 replies; 15+ messages in thread
From: Vladislav Yaroshchuk @ 2021-12-11 10:44 UTC (permalink / raw)
  To: qemu-devel
  Cc: Vladislav Yaroshchuk, jasowang, phillip.ennen, armbru,
	r.bolshakov, phillip, akihiko.odaki, hsp.cat7, hello, eblake

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


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                 | 129 ++++++++++++-
 qemu-options.hx               |  25 +++
 scripts/meson-buildoptions.sh |   3 +
 14 files changed, 880 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



^ permalink raw reply	[flat|nested] 15+ messages in thread
* Re: [PATCH v8 5/7] net/vmnet: implement bridged mode (vmnet-bridged)
@ 2022-01-23  4:51 李士林
  2022-01-28 15:02 ` Vladislav Yaroshchuk
  0 siblings, 1 reply; 15+ messages in thread
From: 李士林 @ 2022-01-23  4:51 UTC (permalink / raw)
  To: yaroshchuk2000
  Cc: akihiko.odaki, armbru, eblake, hello, hsp.cat7, jasowang,
	phillip.ennen, phillip, qemu-devel, r.bolshakov

Hi:
    I develop a custom os use qemu and use macos as host, I use the net argument '-net nic,model=pcnet -net tap,ifname=tap0,script=no,downscript=no’ when run the qemu-system-i386,then I can get the network device in my custom os:

    pci_device_dump: vendor id:      0x1022
    pci_device_dump: device id:      0x2000
    pci_device_dump: class code:     0x20000
    pci_device_dump: revision id:    0x10
    pci_device_dump: multi function: 0
    pci_device_dump: card bus CIS pointer: 0
    pci_device_dump: subsystem vendor id: 0
    pci_device_dump: subsystem device id: 0
    pci_device_dump: expansion ROM base address: feb80000
    pci_device_dump: capability list pointer:  0
    pci_device_dump: irq line: 11
    pci_device_dump: irq pin:  1
    pci_device_dump: min Gnt: 6
    pci_device_dump: max Lat:  255
    pci_device_dump: bar 0:
    pci_device_bar_dump: type: io base address
    pci_device_bar_dump: base address: c000
    pci_device_bar_dump: len: 20
    pci_device_dump: bar 1:
    pci_device_bar_dump: type: mem base address
    pci_device_bar_dump: base address: febd1000
    pci_device_bar_dump: len: 20

I can send a message to the host from my custom os in qemu, but can’t receive a message from the host.

so I rebuild the qemu use this patch, then I use the argument '-netdev vmnet-bridged,id=vmnet,ifname=en0’ run the qemu-system-i386 again, this time, I can’t get the network device either, I don’t know why, how to use vmnet-bridged to send message to host from my custom os and receive a message from the host, what should I do? thanks a lot!

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

end of thread, other threads:[~2022-01-28 15:49 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-12-11 10:44 [PATCH v8 0/7] Add vmnet.framework based network backend Vladislav Yaroshchuk
2021-12-11 10:44 ` [PATCH v8 1/7] net/vmnet: add vmnet dependency and customizable option Vladislav Yaroshchuk
2021-12-11 10:44 ` [PATCH v8 2/7] net/vmnet: add vmnet backends to qapi/net Vladislav Yaroshchuk
2021-12-13  5:19   ` Markus Armbruster
2021-12-11 10:44 ` [PATCH v8 3/7] net/vmnet: implement shared mode (vmnet-shared) Vladislav Yaroshchuk
2021-12-11 10:44 ` [PATCH v8 4/7] net/vmnet: implement host mode (vmnet-host) Vladislav Yaroshchuk
2021-12-11 10:44 ` [PATCH v8 5/7] net/vmnet: implement bridged mode (vmnet-bridged) Vladislav Yaroshchuk
2021-12-11 10:44 ` [PATCH v8 6/7] net/vmnet: update qemu-options.hx Vladislav Yaroshchuk
2021-12-11 10:44 ` [PATCH v8 7/7] net/vmnet: update MAINTAINERS list Vladislav Yaroshchuk
2021-12-31  3:30 ` [PATCH v8 0/7] Add vmnet.framework based network backend Vladislav Yaroshchuk
2022-01-06  4:18 ` Jason Wang
2022-01-07  5:02   ` Jason Wang
2022-01-07 10:30     ` Vladislav Yaroshchuk
  -- strict thread matches above, loose matches on Subject: below --
2022-01-23  4:51 [PATCH v8 5/7] net/vmnet: implement bridged mode (vmnet-bridged) 李士林
2022-01-28 15:02 ` Vladislav Yaroshchuk

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).