In an effort to improve the out-of-the-box experience with FreeBSD kernels for
VMware users, VMware intends to include the Virtual Machine Communication
Interface (VMCI) kernel module in FreeBSD kernel.
VMCI allows virtual machines to communicate with host kernel modules and the
VMware hypervisors. User level applications in a virtual machine can use VMCI
through vSockets (also known as VMCI Sockets and not included in this kernel
module), a socket address family designed to be compatible with UDP and TCP at
the interface level. Today, VMCI and vSockets are used by various VMware Tools
components inside the guest for zero-config, network-less access to VMware
host services. In addition to this, VMware's users are using vSockets for
various applications, where network access of the virtual machine is restricted
or non-existent. Examples of this are VMs communicating with device proxies for
proprietary hardware running as host applications and automated testing of
applications running within virtual machines.
In a virtual machine, VMCI is exposed as a regular PCI device. The primary
communication mechanisms supported are a point-to-point bidirectional transport
based on a pair of memory-mapped queues, and asynchronous notifications in the
form of datagrams and doorbells. These features are available to kernel level
components such as vSockets through the VMCI kernel API. In addition to
this, the VMCI kernel API provides support for receiving events related to the
state of the VMCI communication channels, and the virtual machine itself.
For additional information about the use of VMCI and in particular vSockets,
please refer to the vSocket Programming Guide available at
https://www.vmware.com/support/developer/vmci-sdk/.