157 lines
4.9 KiB
ReStructuredText
157 lines
4.9 KiB
ReStructuredText
=========
|
|
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.
|
|
|
|
.. _vif-generic:
|
|
|
|
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.
|
|
|
|
.. _vif-bridge:
|
|
|
|
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.
|
|
|
|
.. _vif-openvswitch:
|
|
|
|
VIFOpenVSwitch
|
|
--------------
|
|
|
|
This class provides a configuration where the guest is connected to an Open
|
|
vSwitch port.
|
|
|
|
.. _vif-direct:
|
|
|
|
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, :term:`VEPA` (either :term:`802.1Qbg` or :term:`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.
|
|
|
|
.. _vif-vhostuser:
|
|
|
|
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 :term:`virtio-net` vhost protocol on this socket
|
|
in whatever means is most suitable.
|
|
|
|
.. _vif-hostdevice:
|
|
|
|
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.
|
|
|
|
.. _vif-nesteddpdk:
|
|
|
|
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 :term:`802.1Qbg` spec.
|
|
|
|
VIFPortProfile8021Qbh
|
|
---------------------
|
|
|
|
This profile provides the metadata required to associate a VIF with a VEPA host
|
|
device supporting the :term:`802.1Qbh` spec.
|
|
|
|
VIFPortProfileFPOpenVSwitch
|
|
---------------------------
|
|
|
|
This profile provides the metadata required to associate a fast path
|
|
:term:`vhost-user` VIF with an :term:`Open vSwitch` port.
|
|
|
|
VIFPortProfileOVSRepresentor
|
|
----------------------------
|
|
|
|
This profile provides the metadata required to associate a VIF with a
|
|
:term:`VF` representor and :term:`Open vSwitch` port. If `representor_name` is
|
|
specified, it indicates a desire to rename the representor to the given name
|
|
on plugging.
|
|
|
|
VIFPortProfileFPBridge
|
|
----------------------
|
|
|
|
This profile provides the metadata required to associate a fast path vhost-user
|
|
VIF with a :term:`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.
|
|
|
|
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 :-(
|