VIF Types

VIF Types

In os-vif, a VIF type refers to a particular approach for configuring the backend of a guest virtual network interface. There is a small, finite set of ways that a VIF backend can be configured for any given hypervisor and a limited amount of metadata is associated with each approach.

VIF objects

Each distinct type of VIF configuration is represented by a versioned object in os-vif, subclassed from os_vif.objects.VIFBase. The VIFBase class defines some fields that are common to all types of VIF, and provides an association to a versioned object describing the network the VIF is plugged into.

VIFGeneric

This class provides a totally generic type of configuration, where the guest is simply associated with an arbitrary TAP device (or equivalent). The way the TAP device is connected to the host network stack is explicitly left undefined and entirely up to the plugin to decide.

VIFBridge

This class provides a configuration where the guest is connected directly to an explicit host bridge device. This provides ethernet layer bridging, typically to the LAN.

VIFOpenVSwitch

This class provides a configuration where the guest is connected to an Open vSwitch port.

VIFDirect

This class provides a configuration where the guest is connected to a physical network device. The connection to the device may operate in one of a number of different modes, VEPA (either 802.1Qbg or 802.1Qbh), passthrough (exclusive assignment of the host NIC) or bridge (ethernet layer bridging of traffic). The passthrough mode would be used when there is a network device which needs to have a MAC address or VLAN configuration. For passthrough of network devices without MAC/VLAN configuration, the VIFHostDevice should be used instead.

VIFVHostUser

This class provides another totally generic type of configuration, where the guest is exposing a UNIX socket for its control plane, allowing an external userspace service to provide the backend data plane via a mapped memory region. The process must implement the virtio-net vhost protocol on this socket in whatever means is most suitable.

VIFHostDevice

This class provides a way to pass a physical device to the guest. Either an entire physical device, or an SR-IOV PCI device virtual function, are permitted.

VIFNestedDPDK

This class provides a configuration, where kuryr-kuberentes is used to provide accelerated DPDK datapath for nested Kubernetes pods running inside the VM. Port is first attached to the virtual machine, bound to the userspace driver (e.g. uio_pci_generic, igb_uio or vfio-pci) and then consumed by Kubernetes pod via kuryr-kubernetes CNI plugin.

VIF port profile objects

Each VIF instance can optionally be associated with a port profile object. This provides a set of metadata attributes that serve to identify the guest virtual interface to the host. Different types of host connectivity will require different port profile object metadata. Each port profile type is associated with a versioned object, subclassing VIFPortProfileBase.

VIFPortProfileOpenVSwitch

This profile provides the metadata required to associate a VIF with an Open vSwitch host port.

VIFPortProfile8021Qbg

This profile provides the metadata required to associate a VIF with a VEPA host device supporting the 802.1Qbg spec.

VIFPortProfile8021Qbh

This profile provides the metadata required to associate a VIF with a VEPA host device supporting the 802.1Qbh spec.

VIFPortProfileFPOpenVSwitch

This profile provides the metadata required to associate a fast path vhost-user VIF with an Open vSwitch port.

VIFPortProfileOVSRepresentor

This profile provides the metadata required to associate a VIF with a VF representor and Open vSwitch port. If representor_name is specified, it indicates a desire to rename the representor to the given name on plugging.

Note

This port profile is provided for backwards compatibility only.

This interface has been superceded by the one provided by the DatapathOffloadRepresentor class, which is now a field element of the VIFPortProfileBase class.

VIFPortProfileFPBridge

This profile provides the metadata required to associate a fast path vhost-user VIF with a Linux bridge port.

VIFPortProfileFPTap

This profile provides the metadata required to associate a fast path vhost-user VIF with a Calico port.

VIFPortProfileK8sDPDK

This profile provides the metadata required to associate nested DPDK VIF with a Kubernetes pod.

Datapath Offload type object

Port profiles can be associated with a datapath_offload object. This provides a set of metadata attributes that serve to identify the datapath offload parameters of a VIF. Each different type of datapath offload is associated with a versioned object, subclassing DatapathOffloadBase.

DatapathOffloadRepresentor

This object provides the metadata required to associate a VIF with a VF representor conforming to the switchdev kernel model. If representor_name is specified, it indicates a desire to rename the representor to the given name on plugging.

VIF network objects

Each VIF instance is associated with a set of objects which describe the logical network that the guest will be plugged into. This information is again represented by a set of versioned objects

TODO :-(

Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.