PVBUS(4) - Device Drivers Manual

PVBUS(4) - Device Drivers Manual #

PVBUS(4) - Device Drivers Manual

NAME #

pvbus - paravirtual device tree root

SYNOPSIS #

pvbus0 at mainbus0

#include <sys/types.h>
#include <sys/ioctl.h>
#include <dev/pv/pvvar.h>

DESCRIPTION #

pvbus is used on virtual machines that are running on hypervisors. It provides a pseudo-bus for all paravirtual devices that do not attach to a well-known bus like pci(4). The pvbus driver is responsible for detecting the hypervisor interface, checking the capabilities, attaching the paravirtual devices, and providing access to supported information stores.

Supported hypervisors #

KVM

Kernel-based Virtual Machine

Hyper-V

Microsoft Hyper-V

OpenBSD

OpenBSD vmm(4)

VMware

VMware vSphere Hypervisor and ESXi

Xen

Xen VMM

Note that a hypervisor can attempt to emulate other hypervisors, so multiple hypervisor interfaces may be available on the same host.

VMware paravirtual devices #

vmt(4)

VMware Tools driver and “guestinfo” information store

Hyper-V paravirtual devices #

hvn(4)

Hyper-V virtual networking interface

hvs(4)

Hyper-V virtual disk

hyperv(4)

Hyper-V guest nexus device

Xen paravirtual devices #

xbf(4)

Xen Blkfront virtual disk

xen(4)

Xen domU nexus device and XenStore information store

xnf(4)

Xen Netfront virtual networking interface

IOCTL INTERFACE #

pvbus supports ioctl(2) commands to exchange information with the hypervisor interface, as implemented in the hostctl(8) program. Each detected hypervisor interface is available as a character special device file, /dev/pvbus0, /dev/pvbus1, etc. All available commands use the same pvbus_req structure:

struct pvbus_req {
	size_t			 pvr_keylen;
	char			*pvr_key;
	size_t			 pvr_valuelen;
	char			*pvr_value;
};

The caller is responsible for attaching character buffers to the pvr_key and pvr_value fields and to set their length in pvr_keylen and pvr_valuelen accordingly. All keys and values are nul-terminated strings.

The following ioctl(2) commands are available:

PVBUSIOC_KVREAD

Read the value from pvr_key and return it in pvr_value. If pvr_valuelen is not enough for the value, the command will fail and errno(2) is set to ERANGE.

PVBUSIOC_KVTYPE

Return the type of the attached hypervisor interface as a string in pvr_key; see Supported hypervisors.

PVBUSIOC_KVWRITE

Write the new value pvr_value to the key pvr_key. This command requires write permissions on the device file.

FILES #

/dev/pvbusu

pvbus device unit u file.

SEE ALSO #

autoconf(4), intro(4), mainbus(4), vmm(4), hostctl(8)

HISTORY #

The pvbus pseudo-bus first appeared in OpenBSD 5.8.

AUTHORS #

The pvbus pseudo-bus was written by Reyk Floeter <reyk@openbsd.org>.

OpenBSD 7.5 - January 7, 2023