Thank you Laine and thanks Michal for the detailed explanation.

To add some (missing) context from my side:

I was attempting to virtualize Raspberry Pi on qemu via libvirt, where my host machine is macOS (both qemu and libvirt installed via Homebrew) and I while trying to set up the network I stumbled upon this:

$ virsh -c qemu:///system?socket=/usr/local/var/run/libvirt/libvirt-sock net-list --all
error: Failed to get the number of active networks
error: this function is not supported by the connection driver: virConnectNumOfNetworks
This error in combination with the compatibility matrix made me think it's just not supported.
What is the right way of interpreting this error/state? Does the host OS play a role in the compatibility?

Are there any known limitations on macOS, or is this likely just a broken/misconfigured installation on my side?

Radek Simko


On Mon, Mar 29, 2021 at 10:29 AM Michal Privoznik <mprivozn@redhat.com> wrote:
On 3/27/21 1:39 PM, Radek Simko wrote:
> Hi,
> According to this support matrix
> https://libvirt.org/hvsupport.html#virNetworkDriver
> <https://libvirt.org/hvsupport.html#virNetworkDriver>
> there is no support for any APIs other than hypervisor ones for qemu.
> For example virConnectNumOfNetworks is not supported.
>
> Is there any particular reason this is not supported? Has any
> development in that area been attempted in the past? Would contributions
> adding support be welcomed?

To extend Laine's reply:

Libvirt has two set of drivers: statefull (where libvirt keeps the state
of resources like domains, networks, ...) and stateless (where libvirt
merely translates from/to APIs exposed by hypervisor).

QEMU can be an example of a statefull driver, ESX or hyperv are examples
of stateless drivers. Stateless drivers also implement network APIs
(again, by translating from/to APIs exposed by the underlying hypervisor
- ESX or hypverv in this example), whereas statefull drivers use bridge
driver. Therefore, QEMU doesn't implement any network APIs.


This is even more visible with split daemons (where monolithic libvirtd
is broken into smaller daemons) - if virnetworkd is not running then
things like 'virsh net-list' return an error [*].


Is there any particular problem you're facing?

Michal


* - except not really, because these split daemons are socket activated,
so virnetworkd is stared automatically when needed.