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.
/* == Approach to solving the problem == */
/* (Details as to how you intend to approach the problem, if applicable. May include ideas as to how to break the problem down into smaller parts, or notes on research you need to do before settling on your final approach to solving the problem) */
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:
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:
bhyvectl --get-stats to get the vcpu total runtime, and monitor this. I would have to do some research as to what to set this total runtime in relation to, and how to best monitor it.bhyvectl --inject-nmibhyvectl --force-reset and then clean things up using bhyvectl --destroy; update bhyve monitor code to handle exit code 0 from bhyve(8) that’s corresponding to reset (0 - reset / reboot, 1 - shutdown, 2 - halt) to trigger re-starting of the VM.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
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:
/dev/vmm, so this call would have to read from that.vmm module is availableCurrently 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
I.e. the bhyve ... -s 7:0,passthru,4/0/0 thing. Probably that will involve the HAL nodedev driver modifications.
22 April - 23 May
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:
-l bootrom.27 June - 15 August
15 August - 23 August
Where possible, tests will be added to the libvirt tests.
Some testing ideas:
Tests have been implemented and/or updated for:
I have a Fork on GitHub of the libvirt project, where I am pushing my code.
The following branches are currently used
libvirt:
virt-manager
Ports:
I have also created a patch to bhyve_graphics:
The following contributions are related to my work: