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
29 sudo modprobe vfio-pci
32 2. (systems without IOMMU only) enable unsafe NOIOMMU mode
34 echo Y | sudo tee /sys/module/vfio/parameters/enable_unsafe_noiommu_mode
37 3. Create and bind SR-IOV virtual function(s)
39 Following script creates VF, assigns MAC address and binds VF to vfio-pci
43 if [ $USER != "root" ] ; then
44 echo "Restarting script with sudo..."
50 cd /sys/bus/pci/devices/${1}
51 driver=$(basename $(readlink driver))
52 if [ "${driver}" != "i40e" ]; then
53 echo ${1} | tee driver/unbind
54 echo ${1} | tee /sys/bus/pci/drivers/i40e/bind
56 ifname=$(basename net/*)
57 echo 0 | tee sriov_numvfs > /dev/null
58 echo 1 | tee sriov_numvfs > /dev/null
59 ip link set dev ${ifname} vf 0 mac ${2}
60 ip link show dev ${ifname}
61 vf=$(basename $(readlink virtfn0))
62 echo ${vf} | tee virtfn0/driver/unbind
63 echo vfio-pci | tee virtfn0/driver_override
64 echo ${vf} | sudo tee /sys/bus/pci/drivers/vfio-pci/bind
65 echo | tee virtfn0/driver_override
68 # Setup one VF on PF 0000:3b:00.0 and assign MAC address
69 setup 0000:3b:00.0 00:11:22:33:44:00
70 # Setup one VF on PF 0000:3b:00.1 and assign MAC address
71 setup 0000:3b:00.1 00:11:22:33:44:01
75 In cases when interface is used in the L2 mode or promisc mode is needed for some other reason,
76 trust needs to be set to "on" using the linux "ip link" utility.
78 ip link set dev <PF inteface name> vf <VF id> trust on
82 By default Virtual Function is not allowed to send ethernet frames which
83 have source MAC address different than address assigned to the VF.
84 In some cases it is expected that VPP will send such frames (e.g. L2 bridging,
85 bonding, l2 cross-connect) and in such cases spoof chack needs to be turned
86 off by issuing following command:
88 ip link set dev <PF inteface name> vf <VF id> spoofchk off
91 ### Interface Creation
92 Interfaces can be dynamically created by using following CLI:
94 create interface avf 0000:3b:02.0
95 set int state avf-0/3b/2/0 up
98 ### Interface Deletion
99 Interface can be deleted with following CLI:
101 delete interface avf <interface name>
104 ### Interface Statistics
105 Interface statistics can be displayed with `sh hardware-interface <if-name>`