1 # Intel AVF device plugin for VPP {#avf_plugin_doc}
4 This plugins provides native device support for intel Adaptive Virtual
5 Function (AVF). AVF is driver specification for current and future
6 Intel Virtual Function devices. AVF defines communication channel between
7 Physical Functions (PF) and VF.
8 In essence, today this driver can be used only with
9 Intel XL710 / X710 / XXV710 adapters.
12 * Driver requires newer i40e PF linux driver to be installed on the system,
13 which supports virtualchnl interface. This code is tested with i40e driver
16 * Driver requires MSI-X interrupt support, which is not supported by
17 uio_pci_generic driver, so vfio-pci needs to be used. On systems without IOMMU
18 vfio driver can still be used with recent kernels which support no-iommu mode.
21 This driver is still in experimental phase, however it shows very good
22 performance numbers. Following items are not implemented (yet).
33 sudo modprobe vfio-pci
36 2. (systems without IOMMU only) enable unsafe NOIOMMU mode
38 echo Y | sudo tee /sys/module/vfio/parameters/enable_unsafe_noiommu_mode
41 3. Create and bind SR-IOV virtual function(s)
43 Following script creates VF, assigns MAC address and binds VF to vfio-pci
47 if [ $USER != "root" ] ; then
48 echo "Restarting script with sudo..."
54 cd /sys/bus/pci/devices/${1}
55 driver=$(basename $(readlink driver))
56 if [ "${driver}" != "i40e" ]; then
57 echo ${1} | tee driver/unbind
58 echo ${1} | tee /sys/bus/pci/drivers/i40e/bind
60 ifname=$(basename net/*)
61 echo 0 | tee sriov_numvfs > /dev/null
62 echo 1 | tee sriov_numvfs > /dev/null
63 ip link set dev ${ifname} vf 0 mac ${2}
64 ip link show dev ${ifname}
65 vf=$(basename $(readlink virtfn0))
66 echo ${vf} | tee virtfn0/driver/unbind
67 echo vfio-pci | tee virtfn0/driver_override
68 echo ${vf} | sudo tee /sys/bus/pci/drivers/vfio-pci/bind
69 echo | tee virtfn0/driver_override
72 # Setup one VF on PF 0000:3b:00.0 and assign MAC address
73 setup 0000:3b:00.0 00:11:22:33:44:00
74 # Setup one VF on PF 0000:3b:00.1 and assign MAC address
75 setup 0000:3b:00.1 00:11:22:33:44:01
78 ### Interface Creation
79 Interfaces can be dynamically created by using following CLI:
81 create interface avf 0000:3b:02.0
82 set int state avf-0/3b/2/0 up
85 ### Interface Deletion
86 Interface can be deleted with following CLI:
88 delete interface avf <interface name>
91 ### Interface Statistics
92 Interface statistics can be displayed with `sh hardware-interface <if-name>`