Improving libvirt support for bhyve

Project description

The primary aim of this project is to implement missing calls and functionality in the libvirt bhyve driver. According to the libvirt API Support Matrix, there are a large number of calls not yet implemented. While some missing API calls are not applicable to bhyve, a number of them are, and these are aimed to be implemented in the scope of the project.


This is a list of ideas of implementable features, however it is by no means complete, nor is the goal to implement all of these. It should rather be considered a braindump of possibilities:

General calls

Connection calls

Most of these include some form of authentication handling and are therefore not applicable. However, the following do apply to bhyve and are easy to implement:

General Domain calls

Block-Device level calls

These would implement access to the vdev block storage layer. I plan to implement support for both file-backed and zvol-backed virtual machines for the following API calls:

Going further, since zvols support snapshotting, I plan to implement the following for zvol-backed storage

VirtFS layer

This is blocked by getting virtfs-9p merged upstream I would like to create patches to support specifying filesystems when creating the domain as well as the following calls to be merged at a later time when VirtFS-9p support for bhyve becomes ready:

Memory inspection

Networking support

Currently the bhyve’s libvirt driver (as well as libxl/FreeBSD driver) only supports L2 interface bridging. There’s no support for upper level schemas like NAT for example. This is a huge task that involves research of what firefall is more applicable (ipfw or pf), designing of the firewall rules and the actual implemtation

PCI passthrough support

I.e. the bhyve ... -s 7:0,passthru,4/0/0 thing. Probably that will involve the HAL nodedev driver modifications.


Communtiy Bonding Period

22 April - 23 May

First Work Period

23 May - 20 June

In this period I aim to better familiarize myself with the codebase and get a better overview of what features are realistic to implement within the scope of GSoC.

Goals for this period are:

Second Work Period

27 June - 15 August

Last Week

15 August - 23 August

Test Plan

Where possible, tests will be added to the libvirt tests.

Some testing ideas:

Tests have been implemented and/or updated for:

The Code


I have a Fork on GitHub of the libvirt project, where I am pushing my code.

The following branches are currently used




I have also created a patch to bhyve_graphics:


Connection Calls



The following contributions are related to my work:

SummerOfCode2016/ImprovingLibvirtSupportForBhyve (last edited 2016-07-17T03:27:59+0000 by FabianFreyer)