On Thu, Jun 17, 2021 at 05:32:39PM +0300, Vladislav Yaroshchuk wrote: > macOS provides networking API for VMs called vmnet.framework. > I tried to add it as a network backend. All three modes are supported: > > -shared: > allows the guest to comminicate with other guests in shared mode and > also with external network (Internet) via NAT > > -host: > allows the guest to communicate with other guests in host mode > > -bridged: > bridges the guest with a physical network interface > > Separate netdev for each vmnet mode was created because they use quite > different settings, especially since macOS 11.0 when vmnet.framework > gets a lot of updates. > > Not sure that I use qemu_mutex_lock_iothread() and > qemu_mutex_unlock_iothread() in correct way while sending packet > from vmnet interface to QEMU. I'll be happy to receive > recomendations how to make this thing better if I done sth wrong. > > Also vmnet.framework requires com.apple.vm.networking entitlement to > run without root priveledges. Ad-hoc signing does not fit there, > so I didn't touch anything related to signing. As a result we should > run qemu-system by a priviledged user: > `$ sudo qemu-system-x86_64 -nic vmnet-shared` > otherwise vmnet fails with 'general failure'. > > But in any way it seems working now, > I tested it within qemu-system-x86-64 on macOS 10.15.7 host, with nic > models: > - e1000-82545em > - virtio-net-pci > > and having such guests: > - macOS 10.15.7 > - Ubuntu Bionic (server cloudimg) >
Hi Vladislav, I appreciate the efforts and I'm sorry I didn't look into it yet, lack of time :( To all: earlier this year another series was sent by Phillip Tennen to add vmnet.framework and some comments were provided: https://mail.gnu.org/archive/html/qemu-devel/2021-02/msg05874.html I'm not sure how to proceed with arbitration which of the series is preferred. FIFO or LIFO? Regards, Roman > Vladislav Yaroshchuk (7): > net/vmnet: dependencies setup, initial preparations > net/vmnet: add new netdevs to qapi/net > net/vmnet: create common netdev state structure > 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 > > configure | 31 +++++ > meson.build | 5 + > net/clients.h | 11 ++ > net/meson.build | 7 ++ > net/net.c | 10 ++ > net/vmnet-bridged.m | 123 ++++++++++++++++++ > net/vmnet-common.m | 294 ++++++++++++++++++++++++++++++++++++++++++++ > net/vmnet-host.c | 93 ++++++++++++++ > net/vmnet-shared.c | 94 ++++++++++++++ > net/vmnet_int.h | 48 ++++++++ > qapi/net.json | 99 ++++++++++++++- > qemu-options.hx | 17 +++ > 12 files changed, 830 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 >