summaryrefslogtreecommitdiffstats
path: root/doc/guides/howto
diff options
context:
space:
mode:
authorRicardo Salveti <ricardo.salveti@linaro.org>2016-07-25 13:22:22 -0300
committerRicardo Salveti <ricardo.salveti@linaro.org>2016-07-25 13:23:50 -0300
commit7b53c036e6bf56623b8273018ff1c8cc62847857 (patch)
tree4af0da8c150bbebd7d1d252d6ac801a7efef0d23 /doc/guides/howto
parent5d4e5dcd8a186778b3d78e27c81550d07a288fd2 (diff)
Imported Upstream version 16.07-rc4
Change-Id: Ic57f6a3726f2dbd1682223648d91310f45705327 Signed-off-by: Ricardo Salveti <ricardo.salveti@linaro.org>
Diffstat (limited to 'doc/guides/howto')
-rw-r--r--doc/guides/howto/flow_bifurcation.rst299
-rw-r--r--doc/guides/howto/img/flow_bifurcation_overview.svg544
-rw-r--r--doc/guides/howto/img/ixgbe_bifu_queue_idx.svg101
-rw-r--r--doc/guides/howto/img/lm_bond_virtio_sriov.svg666
-rw-r--r--doc/guides/howto/img/lm_vhost_user.svg644
-rw-r--r--doc/guides/howto/index.rst40
-rw-r--r--doc/guides/howto/lm_bond_virtio_sriov.rst713
-rw-r--r--doc/guides/howto/lm_virtio_vhost_user.rst469
8 files changed, 3476 insertions, 0 deletions
diff --git a/doc/guides/howto/flow_bifurcation.rst b/doc/guides/howto/flow_bifurcation.rst
new file mode 100644
index 00000000..a1c6262b
--- /dev/null
+++ b/doc/guides/howto/flow_bifurcation.rst
@@ -0,0 +1,299 @@
+.. BSD LICENSE
+ Copyright(c) 2016 Intel Corporation. All rights reserved.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of Intel Corporation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+Flow Bifurcation How-to Guide
+=============================
+
+Flow Bifurcation is a mechanism which uses hardware capable Ethernet devices
+to split traffic between Linux user space and kernel space. Since it is a
+hardware assisted feature this approach can provide line rate processing
+capability. Other than :ref:`KNI <kni>`, the software is just required to
+enable device configuration, there is no need to take care of the packet
+movement during the traffic split. This can yield better performance with
+less CPU overhead.
+
+The Flow Bifurcation splits the incoming data traffic to user space
+applications (such as DPDK applications) and/or kernel space programs (such as
+the Linux kernel stack). It can direct some traffic, for example data plane
+traffic, to DPDK, while directing some other traffic, for example control
+plane traffic, to the traditional Linux networking stack.
+
+There are a number of technical options to achieve this. A typical example is
+to combine the technology of SR-IOV and packet classification filtering.
+
+SR-IOV is a PCI standard that allows the same physical adapter to be split as
+multiple virtual functions. Each virtual function (VF) has separated queues
+with physical functions (PF). The network adapter will direct traffic to a
+virtual function with a matching destination MAC address. In a sense, SR-IOV
+has the capability for queue division.
+
+Packet classification filtering is a hardware capability available on most
+network adapters. Filters can be configured to direct specific flows to a
+given receive queue by hardware. Different NICs may have different filter
+types to direct flows to a Virtual Function or a queue that belong to it.
+
+In this way the Linux networking stack can receive specific traffic through
+the kernel driver while a DPDK application can receive specific traffic
+bypassing the Linux kernel by using drivers like VFIO or the DPDK ``igb_uio``
+module.
+
+.. _figure_flow_bifurcation_overview:
+
+.. figure:: img/flow_bifurcation_overview.*
+
+ Flow Bifurcation Overview
+
+
+Using Flow Bifurcation on IXGBE in Linux
+----------------------------------------
+
+On Intel 82599 10 Gigabit Ethernet Controller series NICs Flow Bifurcation can
+be achieved by SR-IOV and Intel Flow Director technologies. Traffic can be
+directed to queues by the Flow Director capability, typically by matching
+5-tuple of UDP/TCP packets.
+
+The typical procedure to achieve this is as follows:
+
+#. Boot the system without iommu, or with ``iommu=pt``.
+
+#. Create Virtual Functions:
+
+ .. code-block:: console
+
+ echo 2 > /sys/bus/pci/devices/0000:01:00.0/sriov_numvfs
+
+#. Enable and set flow filters:
+
+ .. code-block:: console
+
+ ethtool -K eth1 ntuple on
+ ethtool -N eth1 flow-type udp4 src-ip 192.0.2.2 dst-ip 198.51.100.2 \
+ action $queue_index_in_VF0
+ ethtool -N eth1 flow-type udp4 src-ip 198.51.100.2 dst-ip 192.0.2.2 \
+ action $queue_index_in_VF1
+
+ Where:
+
+ * ``$queue_index_in_VFn``: Bits 39:32 of the variable defines VF id + 1; the lower 32 bits indicates the queue index of the VF. Thus:
+
+ * ``$queue_index_in_VF0`` = ``(0x1 & 0xFF) << 32 + [queue index]``.
+
+ * ``$queue_index_in_VF1`` = ``(0x2 & 0xFF) << 32 + [queue index]``.
+
+ .. _figure_ixgbe_bifu_queue_idx:
+
+ .. figure:: img/ixgbe_bifu_queue_idx.*
+
+#. Compile the DPDK application and insert ``igb_uio`` or probe the ``vfio-pci`` kernel modules as normal.
+
+#. Bind the virtual functions:
+
+ .. code-block:: console
+
+ modprobe vfio-pci
+ dpdk_nic_bind.py -b vfio-pci 01:10.0
+ dpdk_nic_bind.py -b vfio-pci 01:10.1
+
+#. Run a DPDK application on the VFs:
+
+ .. code-block:: console
+
+ testpmd -c 0xff -n 4 -- -i -w 01:10.0 -w 01:10.1 --forward-mode=mac
+
+In this example, traffic matching the rules will go through the VF by matching
+the filter rule. All other traffic, not matching the rules, will go through
+the default queue or scaling on queues in the PF. That is to say UDP packets
+with the specified IP source and destination addresses will go through the
+DPDK application. All other traffic, with different hosts or different
+protocols, will go through the Linux networking stack.
+
+.. note::
+
+ * The above steps work on the Linux kernel v4.2.
+
+ * The Flow Bifurcation is implemented in Linux kernel and ixgbe kernel driver using the following patches:
+
+ * `ethtool: Add helper routines to pass vf to rx_flow_spec <https://patchwork.ozlabs.org/patch/476511/>`_
+
+ * `ixgbe: Allow flow director to use entire queue space <https://patchwork.ozlabs.org/patch/476516/>`_
+
+ * The Ethtool version used in this example is 3.18.
+
+
+Using Flow Bifurcation on I40E in Linux
+---------------------------------------
+
+On Intel X710/XL710 series Ethernet Controllers Flow Bifurcation can be
+achieved by SR-IOV, Cloud Filter and L3 VEB switch. The traffic can be
+directed to queues by the Cloud Filter and L3 VEB switch's matching rule.
+
+* L3 VEB filters work for non-tunneled packets. It can direct a packet just by
+ the Destination IP address to a queue in a VF.
+
+* Cloud filters work for the following types of tunneled packets.
+
+ * Inner mac.
+
+ * Inner mac + VNI.
+
+ * Outer mac + Inner mac + VNI.
+
+ * Inner mac + Inner vlan + VNI.
+
+ * Inner mac + Inner vlan.
+
+The typical procedure to achieve this is as follows:
+
+#. Boot the system without iommu, or with ``iommu=pt``.
+
+#. Build and insert the ``i40e.ko`` module.
+
+#. Create Virtual Functions:
+
+ .. code-block:: console
+
+ echo 2 > /sys/bus/pci/devices/0000:01:00.0/sriov_numvfs
+
+#. Add udp port offload to the NIC if using cloud filter:
+
+ .. code-block:: console
+
+ ip li add vxlan0 type vxlan id 42 group 239.1.1.1 local 10.16.43.214 dev <name>
+ ifconfig vxlan0 up
+ ip -d li show vxlan0
+
+ .. note::
+
+ Output such as ``add vxlan port 8472, index 0 success`` should be
+ found in the system log.
+
+#. Examples of enabling and setting flow filters:
+
+ * L3 VEB filter, for a route whose destination IP is 192.168.50.108 to VF
+ 0's queue 2.
+
+ .. code-block:: console
+
+ ethtool -N <dev_name> flow-type ip4 dst-ip 192.168.50.108 \
+ user-def 0xffffffff00000000 action 2 loc 8
+
+ * Inner mac, for a route whose inner destination mac is 0:0:0:0:9:0 to
+ PF's queue 6.
+
+ .. code-block:: console
+
+ ethtool -N <dev_name> flow-type ether dst 00:00:00:00:00:00 \
+ m ff:ff:ff:ff:ff:ff src 00:00:00:00:09:00 m 00:00:00:00:00:00 \
+ user-def 0xffffffff00000003 action 6 loc 1
+
+ * Inner mac + VNI, for a route whose inner destination mac is 0:0:0:0:9:0
+ and VNI is 8 to PF's queue 4.
+
+ .. code-block:: console
+
+ ethtool -N <dev_name> flow-type ether dst 00:00:00:00:00:00 \
+ m ff:ff:ff:ff:ff:ff src 00:00:00:00:09:00 m 00:00:00:00:00:00 \
+ user-def 0x800000003 action 4 loc 4
+
+ * Outer mac + Inner mac + VNI, for a route whose outer mac is
+ 68:05:ca:24:03:8b, inner destination mac is c2:1a:e1:53:bc:57, and VNI
+ is 8 to PF's queue 2.
+
+ .. code-block:: console
+
+ ethtool -N <dev_name> flow-type ether dst 68:05:ca:24:03:8b \
+ m 00:00:00:00:00:00 src c2:1a:e1:53:bc:57 m 00:00:00:00:00:00 \
+ user-def 0x800000003 action 2 loc 2
+
+ * Inner mac + Inner vlan + VNI, for a route whose inner destination mac is
+ 00:00:00:00:20:00, inner vlan is 10, and VNI is 8 to VF 0's queue 1.
+
+ .. code-block:: console
+
+ ethtool -N <dev_name> flow-type ether dst 00:00:00:00:01:00 \
+ m ff:ff:ff:ff:ff:ff src 00:00:00:00:20:00 m 00:00:00:00:00:00 \
+ vlan 10 user-def 0x800000000 action 1 loc 5
+
+ * Inner mac + Inner vlan, for a route whose inner destination mac is
+ 00:00:00:00:20:00, and inner vlan is 10 to VF 0's queue 1.
+
+ .. code-block:: console
+
+ ethtool -N <dev_name> flow-type ether dst 00:00:00:00:01:00 \
+ m ff:ff:ff:ff:ff:ff src 00:00:00:00:20:00 m 00:00:00:00:00:00 \
+ vlan 10 user-def 0xffffffff00000000 action 1 loc 5
+
+ .. note::
+
+ * If the upper 32 bits of 'user-def' are ``0xffffffff``, then the
+ filter can be used for programming an L3 VEB filter, otherwise the
+ upper 32 bits of 'user-def' can carry the tenant ID/VNI if
+ specified/required.
+
+ * Cloud filters can be defined with inner mac, outer mac, inner ip,
+ inner vlan and VNI as part of the cloud tuple. It is always the
+ destination (not source) mac/ip that these filters use. For all
+ these examples dst and src mac address fields are overloaded dst ==
+ outer, src == inner.
+
+ * The filter will direct a packet matching the rule to a vf id
+ specified in the lower 32 bit of user-def to the queue specified by
+ 'action'.
+
+ * If the vf id specified by the lower 32 bit of user-def is greater
+ than or equal to ``max_vfs``, then the filter is for the PF queues.
+
+#. Compile the DPDK application and insert ``igb_uio`` or probe the ``vfio-pci``
+ kernel modules as normal.
+
+#. Bind the virtual function:
+
+ .. code-block:: console
+
+ modprobe vfio-pci
+ dpdk_nic_bind.py -b vfio-pci 01:10.0
+ dpdk_nic_bind.py -b vfio-pci 01:10.1
+
+#. run DPDK application on VFs:
+
+ .. code-block:: console
+
+ testpmd -c 0xff -n 4 -- -i -w 01:10.0 -w 01:10.1 --forward-mode=mac
+
+.. note::
+
+ * The above steps work on the i40e Linux kernel driver v1.5.16.
+
+ * The Ethtool version used in this example is 3.18. The mask ``ff`` means
+ 'not involved', while ``00`` or no mask means 'involved'.
+
+ * For more details of the configuration, refer to the
+ `cloud filter test plan <http://dpdk.org/browse/tools/dts/tree/test_plans/cloud_filter_test_plan.rst>`_
diff --git a/doc/guides/howto/img/flow_bifurcation_overview.svg b/doc/guides/howto/img/flow_bifurcation_overview.svg
new file mode 100644
index 00000000..4fa27648
--- /dev/null
+++ b/doc/guides/howto/img/flow_bifurcation_overview.svg
@@ -0,0 +1,544 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generated by Microsoft Visio, SVG Export bifurcated_driver_overview.svg Page-1 -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="6.71874in"
+ height="4.83839in"
+ viewBox="0 0 483.75 348.364"
+ xml:space="preserve"
+ color-interpolation-filters="sRGB"
+ class="st28"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="bifurcated_driver_overview.svg"><metadata
+ id="metadata240"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1600"
+ inkscape:window-height="837"
+ id="namedview238"
+ showgrid="false"
+ inkscape:zoom="1.0517845"
+ inkscape:cx="215.35622"
+ inkscape:cy="200.74714"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="g44" /><style
+ type="text/css"
+ id="style4"><![CDATA[
+ .st1 {visibility:visible}
+ .st2 {fill:none;filter:url(#filter_2);stroke:#5b9bd5;stroke-opacity:0.22}
+ .st3 {fill:#5b9bd5;filter:url(#filter_2);font-family:Calibri;font-size:1.16666em;font-weight:bold;opacity:0.219608}
+ .st4 {fill:none;stroke:#c7c8c8;stroke-width:0.5}
+ .st5 {fill:#000000;font-family:Calibri;font-size:1.16666em;font-weight:bold}
+ .st6 {fill:#5b9bd5;filter:url(#filter_2);font-family:Calibri;font-size:1.5em;opacity:0.219608}
+ .st7 {fill:#000000;font-family:Calibri;font-size:1.5em}
+ .st8 {fill:#a8d08d;stroke:#4f87bb;stroke-width:0.75}
+ .st9 {fill:#000000;font-family:Calibri;font-size:0.833336em}
+ .st10 {fill:#5b9bd5;fill-opacity:0.22;filter:url(#filter_2);stroke:#5b9bd5;stroke-opacity:0.22}
+ .st11 {fill:#c00000;stroke:#c7c8c8;stroke-width:0.25}
+ .st12 {fill:#feffff;font-family:Calibri;font-size:0.833336em}
+ .st13 {font-size:1em}
+ .st14 {fill:#ff0000;font-size:1em;font-weight:bold}
+ .st15 {fill:#2e75b5;stroke:#c7c8c8;stroke-width:0.25}
+ .st16 {fill:url(#grad4-50);stroke:#c7c8c8;stroke-width:0.25}
+ .st17 {fill:#feffff;font-family:Calibri;font-size:0.666664em}
+ .st18 {fill:#5b9bd5;stroke:#c7c8c8;stroke-width:0.25}
+ .st19 {fill:#000000;font-family:Calibri;font-size:1.16666em}
+ .st20 {marker-end:url(#mrkr13-84);marker-start:url(#mrkr13-82);stroke:#c00000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
+ .st21 {fill:#c00000;fill-opacity:1;stroke:#c00000;stroke-opacity:1;stroke-width:0.28409090909091}
+ .st22 {marker-end:url(#mrkr4-90);stroke:#c00000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
+ .st23 {marker-start:url(#mrkr13-106);stroke:#538135;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.75}
+ .st24 {fill:#538135;fill-opacity:1;stroke:#538135;stroke-opacity:1;stroke-width:0.40983606557377}
+ .st25 {marker-start:url(#mrkr13-112);stroke:#5b9bd5;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.75}
+ .st26 {fill:#5b9bd5;fill-opacity:1;stroke:#5b9bd5;stroke-opacity:1;stroke-width:0.40983606557377}
+ .st27 {fill:none;stroke:none;stroke-width:0.25}
+ .st28 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+ ]]></style><defs
+ id="Patterns_And_Gradients"><radialGradient
+ id="grad4-50"
+ cx="0.5"
+ cy="0"
+ r="1.1"><stop
+ offset="0"
+ stop-color="#a8d08d"
+ stop-opacity="1"
+ id="stop8" /><stop
+ offset="0.24"
+ stop-color="#bedcaa"
+ stop-opacity="1"
+ id="stop10" /><stop
+ offset="0.59"
+ stop-color="#3374af"
+ stop-opacity="1"
+ id="stop12" /><stop
+ offset="0.75"
+ stop-color="#41719c"
+ stop-opacity="1"
+ id="stop14" /><stop
+ offset="1"
+ stop-color="#c5e0b3"
+ stop-opacity="1"
+ id="stop16" /></radialGradient></defs><defs
+ id="Markers"><g
+ id="lend13"><path
+ d="M 3 1 L 0 0 L 3 -1 L 3 1 "
+ style="stroke:none"
+ id="path20" /></g><marker
+ id="mrkr13-82"
+ class="st21"
+ refX="10.2"
+ orient="auto"
+ markerUnits="strokeWidth"
+ overflow="visible"><use
+ xlink:href="#lend13"
+ transform="scale(3.52) "
+ id="use23" /></marker><marker
+ id="mrkr13-84"
+ class="st21"
+ refX="-10.56"
+ orient="auto"
+ markerUnits="strokeWidth"
+ overflow="visible"><use
+ xlink:href="#lend13"
+ transform="scale(-3.52,-3.52) "
+ id="use26" /></marker><g
+ id="lend4"><path
+ d="M 2 1 L 0 0 L 2 -1 L 2 1 "
+ style="stroke:none"
+ id="path29" /></g><marker
+ id="mrkr4-90"
+ class="st21"
+ refX="-7.04"
+ orient="auto"
+ markerUnits="strokeWidth"
+ overflow="visible"><use
+ xlink:href="#lend4"
+ transform="scale(-3.52,-3.52) "
+ id="use32" /></marker><marker
+ id="mrkr13-106"
+ class="st24"
+ refX="7.1142857142857"
+ orient="auto"
+ markerUnits="strokeWidth"
+ overflow="visible"><use
+ xlink:href="#lend13"
+ transform="scale(2.44) "
+ id="use35" /></marker><marker
+ id="mrkr13-112"
+ class="st26"
+ refX="7.1142857142857"
+ orient="auto"
+ markerUnits="strokeWidth"
+ overflow="visible"><use
+ xlink:href="#lend13"
+ transform="scale(2.44) "
+ id="use38" /></marker></defs><defs
+ id="Filters"><filter
+ id="filter_2"><feGaussianBlur
+ stdDeviation="2"
+ id="feGaussianBlur42" /></filter></defs><g
+ id="g44"><title
+ id="title46">Page-1</title><g
+ id="shape85-1"
+ transform="translate(133.887,-26.1478)"><title
+ id="title49">Sheet.85</title><desc
+ id="desc51">NIC</desc><g
+ id="shadow85-2"
+ transform="matrix(1,0,0,1,0.345598,1.97279)"
+ class="st1"><rect
+ x="0"
+ y="255.497"
+ width="346.142"
+ height="92.8673"
+ class="st2"
+ id="rect54" /><text
+ x="162.89"
+ y="349.33"
+ class="st3"
+ id="text56">NIC</text>
+</g><rect
+ x="0"
+ y="255.497"
+ width="346.142"
+ height="92.8673"
+ class="st4"
+ id="rect58"
+ style="stroke-width:0.50000076;stroke-miterlimit:3;stroke-dasharray:none" /><text
+ x="162.89"
+ y="349.33"
+ class="st5"
+ id="text60">NIC</text>
+</g><g
+ id="shape20-9"
+ transform="translate(3.0289,-127.458)"><title
+ id="title63">Rounded Rectangle.20</title><desc
+ id="desc65">LINUX</desc><g
+ id="shadow20-10"
+ transform="matrix(1,0,0,1,0.345598,1.97279)"
+ class="st1"><path
+ d="M30.39 348.36 L273.54 348.36 A30.3924 30.3924 -180 0 0 303.93 317.97 L303.93 235.23 A30.3924 30.3924 -180 0 0 273.54 204.84 L30.39 204.84 A30.3924 30.3924 -180 0 0 0 235.23 L0 317.97 A30.3924 30.3924 -180 0 0 30.39 348.36 Z"
+ class="st2"
+ id="path68" /><text
+ x="255.32"
+ y="238.8"
+ class="st6"
+ id="text70">LINUX</text>
+</g><path
+ d="M30.39 348.36 L273.54 348.36 A30.3924 30.3924 -180 0 0 303.93 317.97 L303.93 235.23 A30.3924 30.3924 -180 0 0 273.54 204.84 L30.39 204.84 A30.3924 30.3924 -180 0 0 0 235.23 L0 317.97 A30.3924 30.3924 -180 0 0 30.39 348.36 Z"
+ class="st4"
+ id="path72" /><text
+ x="255.32"
+ y="238.8"
+ class="st7"
+ id="text74">LINUX</text>
+</g><g
+ id="shape8-17"
+ transform="translate(95.8962,-140.079)"><title
+ id="title77">Rounded Rectangle.8</title><desc
+ id="desc79">Kernel pf driver</desc><path
+ d="M18.57 348.36 L167.16 348.36 A18.5731 18.5731 -180 0 0 185.73 329.79 L185.73 303.58 A18.5731 18.5731 -180 0 0 167.16 285 L18.57 285 A18.5731 18.5731 -180 0 0 0 303.58 L0 329.79 A18.5731 18.5731 -180 0 0 18.57 348.36 Z"
+ class="st8"
+ id="path81" /><text
+ x="118.71"
+ y="319.68"
+ class="st9"
+ id="text83">Kernel pf driver </text>
+</g><g
+ id="shape1-20"
+ transform="translate(103.263,-156.88)"><title
+ id="title86">Rounded Rectangle</title><desc
+ id="desc88">Filters support traffic steering to VF</desc><g
+ id="shadow1-21"
+ transform="matrix(1,0,0,1,0.345598,1.97279)"
+ class="st1"><path
+ d="M10.55 348.36 L94.98 348.36 A10.5529 10.5529 -180 0 0 105.53 337.81 L105.53 324.98 A10.5529 10.5529 -180 0 0 94.98 314.43 L10.55 314.43 A10.5529 10.5529 -180 0 0 0 324.98 L0 337.81 A10.5529 10.5529 -180 0 0 10.55 348.36 Z"
+ class="st10"
+ id="path91" /></g><path
+ d="M10.55 348.36 L94.98 348.36 A10.5529 10.5529 -180 0 0 105.53 337.81 L105.53 324.98 A10.5529 10.5529 -180 0 0 94.98 314.43 L10.55 314.43 A10.5529 10.5529 -180 0 0 0 324.98 L0 337.81 A10.5529 10.5529 -180 0 0 10.55 348.36 Z"
+ class="st11"
+ id="path93" /><text
+ x="10.03"
+ y="328.39"
+ class="st12"
+ id="text95"
+ style="-inkscape-font-specification:'Calibri, Normal';font-family:Calibri;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:10.00001526px;text-anchor:start;text-align:start;writing-mode:lr;line-height:125%;"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4475">Filters support traffic</tspan></text>
+<text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#feffff"
+ x="11.048484"
+ y="340.46152"
+ class="st12"
+ id="text95-1"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4477"
+ x="11.048484"
+ y="340.46152">steering to VF</tspan></text>
+</g><g
+ id="shape3-27"
+ transform="translate(192.985,-73.088)"><title
+ id="title100">Rectangle.3</title><desc
+ id="desc102">Rx Queues (0-N) PF</desc><rect
+ x="0"
+ y="314.425"
+ width="75.9823"
+ height="33.9388"
+ class="st8"
+ id="rect104" /><text
+ x="16.43"
+ y="322.39"
+ class="st9"
+ id="text106"
+ style="-inkscape-font-specification:'Calibri, Normal';font-family:Calibri;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:10.00001526px;text-anchor:start;text-align:start;writing-mode:lr;line-height:125%;"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4512">Rx Queues</tspan></text>
+<text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000"
+ x="23.187859"
+ y="333.70471"
+ class="st9"
+ id="text106-2"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4514"
+ x="23.187859"
+ y="333.70471">( 0-N )</tspan></text>
+<text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1"
+ x="27.490538"
+ y="345.52356"
+ class="st9"
+ id="text106-9"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4516"
+ x="27.490538"
+ y="345.52356"> PF</tspan></text>
+</g><g
+ id="shape4-32"
+ transform="translate(344.949,-73.088)"><title
+ id="title113">Rectangle.4</title><desc
+ id="desc115">Rx Queues (0-M) VF(vf 0)</desc><g
+ id="shadow4-33"
+ transform="matrix(1,0,0,1,0.345598,1.97279)"
+ class="st1"><rect
+ x="0"
+ y="314.425"
+ width="75.9823"
+ height="33.9388"
+ class="st10"
+ id="rect118" /></g><rect
+ x="0"
+ y="314.425"
+ width="75.9823"
+ height="33.9388"
+ class="st15"
+ id="rect120" /><text
+ x="16.43"
+ y="322.39"
+ class="st9"
+ id="text122"
+ style="-inkscape-font-specification:'Calibri, Normal';font-family:Calibri;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:10.00001526px;text-anchor:start;text-align:start;writing-mode:lr;line-height:125%;"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4571">Rx Queues</tspan></text>
+<text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000"
+ x="21.777092"
+ y="333.69595"
+ class="st9"
+ id="text122-8"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4569"
+ x="21.777092"
+ y="333.69595">( 0-M )</tspan></text>
+<text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1"
+ x="21.79059"
+ y="343.91479"
+ class="st9"
+ id="text122-0"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4573"
+ x="21.79059"
+ y="343.91479">VF(vf0)</tspan></text>
+</g><g
+ id="shape5-44"
+ transform="translate(154.994,-43.0328)"><title
+ id="title137">Rectangle.5</title><desc
+ id="desc139">filters</desc><g
+ id="shadow5-45"
+ transform="matrix(1,0,0,1,0.345598,1.97279)"
+ class="st1"><rect
+ x="0"
+ y="331.479"
+ width="303.929"
+ height="16.885"
+ class="st10"
+ id="rect142" /></g><rect
+ x="0"
+ y="331.479"
+ width="303.929"
+ height="16.885"
+ class="st16"
+ id="rect144" /><text
+ x="140.28"
+ y="342.92"
+ class="st9"
+ id="text146">filters</text>
+</g><g
+ id="shape6-52"
+ transform="translate(95.8962,-224.377)"><title
+ id="title149">Rounded Rectangle.6</title><desc
+ id="desc151">Tools to program filters</desc><path
+ d="m 7.6,347.29783 60.78,0 a 7.59811,7.59811 0 0 0 7.6,-7.59 l 0,-18.58 a 7.59811,7.59811 0 0 0 -7.6,-7.6 l -60.78,0 a 7.59811,7.59811 0 0 0 -7.6,7.6 l 0,18.58 a 7.59811,7.59811 0 0 0 7.6,7.59 z"
+ class="st8"
+ id="path153"
+ inkscape:connector-curvature="0"
+ style="fill:#a8d08d;stroke:#4f87bb;stroke-width:0.75" /><text
+ x="21.74"
+ y="328.48001"
+ class="st9"
+ id="text155"
+ style="font-size:10.00003242px;font-family:Calibri;fill:#000000">Tools to <tspan
+ x="7.6900001"
+ class="st13"
+ id="tspan157"
+ style="font-size:10.00003242px" /></text>
+<text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000"
+ x="23.40806"
+ y="340.79666"
+ class="st9"
+ id="text155-1"
+ sodipodi:linespacing="125%"><tspan
+ x="9.358057"
+ class="st13"
+ id="tspan157-9"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">program filters</tspan></text>
+</g><g
+ id="shape22-56"
+ transform="translate(11.4714,-156.88)"><title
+ id="title160">2-D word balloon</title><desc
+ id="desc162">Director flows to queue index in specified VF</desc><text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.0000124px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#feffff"
+ x="8.0559683"
+ y="346.97244"
+ class="st17"
+ id="text169-3-4"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4471"
+ x="8.0559683"
+ y="346.97244">inspecified VF</tspan></text>
+<g
+ id="shadow22-57"
+ transform="matrix(1,0,0,1,0.345598,1.97279)"
+ class="st1"><path
+ d="M0 327.15 L0 314.43 L28.49 314.43 L37.99 314.43 L47.49 314.43 L75.98 314.43 L75.98 327.15 L91.79 331.39 L75.98 335.64 L75.98 348.36 L47.49 348.36 L37.99 348.36 L28.49 348.36 L0 348.36 L0 335.64 L0 331.39 L0 327.15 Z"
+ class="st10"
+ id="path165" /></g><path
+ d="m 0.53783484,327.68783 0,-12.72 28.49000016,0 9.5,0 9.5,0 28.49,0 0,12.72 15.81,4.24 -15.81,4.25 0,12.72 -28.49,0 -9.5,0 -9.5,0 -28.49000016,0 0,-12.72 0,-4.25 0,-4.24 z"
+ class="st11"
+ id="path167"
+ inkscape:connector-curvature="0"
+ style="fill:#c00000;stroke:#c7c8c8;stroke-width:0.25" /><text
+ x="7.5599966"
+ y="324.19"
+ class="st17"
+ id="text169"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.0000124px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#feffff"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4446"
+ x="7.5599966"
+ y="324.19">Director flows</tspan></text>
+<text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.0000124px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#feffff"
+ x="8.1099777"
+ y="334.57529"
+ class="st17"
+ id="text169-3"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4469"
+ x="8.1099777"
+ y="334.57529">to queue index</tspan></text>
+<text
+ x="8.5350533"
+ y="345.4624"
+ class="st17"
+ id="text169-5"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.00001221px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr;text-anchor:start;fill:#feffff;"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4479">in specified VF</tspan></text>
+</g><g
+ id="shape24-64"
+ transform="translate(323.843,-285.05)"><title
+ id="title176">Rounded Rectangle.24</title><desc
+ id="desc178">DPDK</desc><g
+ id="shadow24-65"
+ transform="matrix(1,0,0,1,0.345598,1.97279)"
+ class="st1"><path
+ d="M9.29 348.36 L83.58 348.36 A9.28657 9.28657 -180 0 0 92.87 339.08 L92.87 295.74 A9.28657 9.28657 -180 0 0 83.58 286.45 L9.29 286.45 A9.28657 9.28657 -180 0 0 0 295.74 L0 339.08 A9.28657 9.28657 -180 0 0 9.29 348.36 Z"
+ class="st10"
+ id="path181" /></g><path
+ d="M9.29 348.36 L83.58 348.36 A9.28657 9.28657 -180 0 0 92.87 339.08 L92.87 295.74 A9.28657 9.28657 -180 0 0 83.58 286.45 L9.29 286.45 A9.28657 9.28657 -180 0 0 0 295.74 L0 339.08 A9.28657 9.28657 -180 0 0 9.29 348.36 Z"
+ class="st18"
+ id="path183" /><text
+ x="30.57"
+ y="321.61"
+ class="st19"
+ id="text185">DPDK</text>
+</g><g
+ id="shape25-70"
+ transform="translate(192.985,-285.05)"><title
+ id="title188">Rounded Rectangle.25</title><desc
+ id="desc190">Socket</desc><path
+ d="M9.29 348.36 L83.58 348.36 A9.28657 9.28657 -180 0 0 92.87 339.08 L92.87 295.74 A9.28657 9.28657 -180 0 0 83.58 286.45 L9.29 286.45 A9.28657 9.28657 -180 0 0 0 295.74 L0 339.08 A9.28657 9.28657 -180 0 0 9.29 348.36 Z"
+ class="st8"
+ id="path192" /><text
+ x="27.56"
+ y="321.61"
+ class="st19"
+ id="text194">Socket</text>
+</g><g
+ id="shape44-73"
+ transform="translate(154.994,569.271) rotate(180)"><title
+ id="title197">Simple Arrow.44</title><g
+ id="shadow44-74"
+ transform="matrix(1,0,0,1,-0.345598,-1.97279)"
+ class="st1" /></g><g
+ id="shape52-75"
+ transform="translate(154.994,-127.458)"><title
+ id="title201">Single arrowhead</title></g><g
+ id="shape70-76"
+ transform="translate(221.976,-107.027)"><title
+ id="title204">Dynamic connector.70</title><path
+ d="M9 338.16 L9 337.8 L9 325.87"
+ class="st20"
+ id="path206" /></g><g
+ id="shape81-85"
+ transform="translate(124.887,-224.377)"><title
+ id="title209">Dynamic connector.81</title><path
+ d="M9 348.36 L9 362.26"
+ class="st22"
+ id="path211" /></g><g
+ id="shape83-91"
+ transform="translate(240.398,-57.5029)"><title
+ id="title214">Dynamic connector.83</title><path
+ d="M-8.58 345.95 L-8.97 339.8"
+ class="st22"
+ id="path216" /></g><g
+ id="shape84-96"
+ transform="translate(373.94,-57.5029)"><title
+ id="title219">Dynamic connector.84</title><path
+ d="M9 345.95 L9 339.82"
+ class="st22"
+ id="path221" /></g><g
+ id="shape98-101"
+ transform="translate(539.29,6.22333) rotate(79.2209)"><title
+ id="title224">Sheet.98</title><path
+ d="M11.39 310.28 L11.72 310.42 C54.22 328.18 100.77 337.63 149.11 345.35 C162.41 347.48 175.84 349.47 187.65 347.74 C201.36 345.74 212.87 338.71 218.42 327.59 C222.66 319.09 223.42 308.2 229.69 303.23 C239.2 295.7 261.37 301.76 275.96 305.26"
+ class="st23"
+ id="path226" /></g><g
+ id="shape109-107"
+ transform="translate(712.298,124.855) rotate(100.2)"><title
+ id="title229">Sheet.109</title><path
+ d="M12.03 344.31 L12.38 344.21 C55.98 332.05 99.42 314.86 144.33 309.38 C167.01 306.62 190.06 306.85 204.84 318.11 C212.98 324.32 218.61 333.88 226.49 339.83 C238.38 348.81 255.38 349.56 275.91 347.51"
+ class="st25"
+ id="path231" /></g><g
+ id="shape110-113"
+ transform="translate(108.779,-175.962)"><title
+ id="title234">Sheet.110</title><rect
+ x="0"
+ y="341.614"
+ width="94.5"
+ height="6.75"
+ class="st27"
+ id="rect236" /></g></g></svg> \ No newline at end of file
diff --git a/doc/guides/howto/img/ixgbe_bifu_queue_idx.svg b/doc/guides/howto/img/ixgbe_bifu_queue_idx.svg
new file mode 100644
index 00000000..f7e2bd80
--- /dev/null
+++ b/doc/guides/howto/img/ixgbe_bifu_queue_idx.svg
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by Microsoft Visio, SVG Export ixgbe_bifu_queue_idx.svg Page-1 -->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
+ xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="4.59375in" height="0.535375in"
+ viewBox="0 0 330.75 38.547" xml:space="preserve" color-interpolation-filters="sRGB" class="st8">
+ <v:documentProperties v:langID="1033" v:viewMarkup="false"/>
+
+ <style type="text/css">
+ <![CDATA[
+ .st1 {visibility:visible}
+ .st2 {fill:#5b9bd5;fill-opacity:0.22;filter:url(#filter_2);stroke:#5b9bd5;stroke-opacity:0.22}
+ .st3 {fill:#ffffff;stroke:#c7c8c8;stroke-width:0.25}
+ .st4 {fill:#000000;font-family:Calibri;font-size:0.833336em}
+ .st5 {fill:#c5e0b3;stroke:#c7c8c8;stroke-width:0.25}
+ .st6 {fill:#f4b183;stroke:#c7c8c8;stroke-width:0.25}
+ .st7 {fill:none;stroke:none;stroke-width:0.25}
+ .st8 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+ ]]>
+ </style>
+
+ <defs id="Filters">
+ <filter id="filter_2">
+ <feGaussianBlur stdDeviation="2"/>
+ </filter>
+ </defs>
+ <g v:mID="0" v:index="1" v:groupContext="foregroundPage">
+ <title>Page-1</title>
+ <v:pageProperties v:drawingScale="1" v:pageScale="1" v:drawingUnits="0" v:shadowOffsetX="9" v:shadowOffsetY="-9"/>
+ <g id="shape1-1" v:mID="1" v:groupContext="shape" transform="translate(3.0294,-5.34781)">
+ <title>Rectangle</title>
+ <desc>0x000000</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="52.1695" cy="30.3097" width="104.34" height="16.4746"/>
+ <g id="shadow1-2" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+ transform="matrix(1,0,0,1,0.345598,1.97279)" class="st1">
+ <rect x="0" y="22.0724" width="104.339" height="16.4746" class="st2"/>
+ </g>
+ <rect x="0" y="22.0724" width="104.339" height="16.4746" class="st3"/>
+ <text x="32.27" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>0x000000</text> </g>
+ <g id="shape2-7" v:mID="2" v:groupContext="shape" transform="translate(107.368,-5.34781)">
+ <title>Rectangle.2</title>
+ <desc>VF ID + 1</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="30.2034" cy="30.3097" width="60.41" height="16.4746"/>
+ <g id="shadow2-8" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+ transform="matrix(1,0,0,1,0.345598,1.97279)" class="st1">
+ <rect x="0" y="22.0724" width="60.4068" height="16.4746" class="st2"/>
+ </g>
+ <rect x="0" y="22.0724" width="60.4068" height="16.4746" class="st5"/>
+ <text x="12.32" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>VF ID + 1</text> </g>
+ <g id="shape3-13" v:mID="3" v:groupContext="shape" transform="translate(167.775,-5.34781)">
+ <title>Rectangle.3</title>
+ <desc>Queue Index</desc>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="79.6271" cy="30.3097" width="159.26" height="16.4746"/>
+ <g id="shadow3-14" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+ transform="matrix(1,0,0,1,0.345598,1.97279)" class="st1">
+ <rect x="0" y="22.0724" width="159.254" height="16.4746" class="st2"/>
+ </g>
+ <rect x="0" y="22.0724" width="159.254" height="16.4746" class="st6"/>
+ <text x="53.74" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>Queue Index</text> </g>
+ <g id="shape4-19" v:mID="4" v:groupContext="shape" transform="translate(305.063,-21.8224)">
+ <title>Sheet.4</title>
+ <desc>0</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="10.9831" cy="30.3097" width="21.97" height="16.4746"/>
+ <rect x="0" y="22.0724" width="21.9661" height="16.4746" class="st7"/>
+ <text x="8.45" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>0</text> </g>
+ <g id="shape6-22" v:mID="6" v:groupContext="shape" transform="translate(165.029,-21.8224)">
+ <title>Sheet.6</title>
+ <desc>31</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="10.9831" cy="30.3097" width="21.97" height="16.4746"/>
+ <rect x="0" y="22.0724" width="21.9661" height="16.4746" class="st7"/>
+ <text x="5.91" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>31</text> </g>
+ <g id="shape7-25" v:mID="7" v:groupContext="shape" transform="translate(104.623,-21.8224)">
+ <title>Sheet.7</title>
+ <desc>39</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="10.9831" cy="30.3097" width="21.97" height="16.4746"/>
+ <rect x="0" y="22.0724" width="21.9661" height="16.4746" class="st7"/>
+ <text x="5.91" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>39</text> </g>
+ <g id="shape8-28" v:mID="8" v:groupContext="shape" transform="translate(3.0294,-21.8224)">
+ <title>Sheet.8</title>
+ <desc>63</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="10.9831" cy="30.3097" width="21.97" height="16.4746"/>
+ <rect x="0" y="22.0724" width="21.9661" height="16.4746" class="st7"/>
+ <text x="5.91" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>63</text> </g>
+ </g>
+</svg>
diff --git a/doc/guides/howto/img/lm_bond_virtio_sriov.svg b/doc/guides/howto/img/lm_bond_virtio_sriov.svg
new file mode 100644
index 00000000..d913ae01
--- /dev/null
+++ b/doc/guides/howto/img/lm_bond_virtio_sriov.svg
@@ -0,0 +1,666 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="1052.8693"
+ height="762.99158"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="lm_overview.svg">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 372.04724 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1052.3622 : 372.04724 : 1"
+ inkscape:persp3d-origin="526.18109 : 248.03149 : 1"
+ id="perspective3886" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.70710678"
+ inkscape:cx="201.38434"
+ inkscape:cy="397.3839"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1432"
+ inkscape:window-height="1000"
+ inkscape:window-x="137"
+ inkscape:window-y="20"
+ inkscape:window-maximized="0"
+ inkscape:snap-page="false"
+ inkscape:snap-grids="false"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ fit-margin-top="0.1"
+ fit-margin-left="0.1"
+ fit-margin-right="0.1"
+ fit-margin-bottom="0.3">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3174"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true"
+ spacingx="0.5px"
+ spacingy="0.5px"
+ originx="1780.3521px"
+ originy="-176.4939px" />
+ <sodipodi:guide
+ position="1780.3521,-176.4939"
+ orientation="0,744.09448"
+ id="guide3176" />
+ <sodipodi:guide
+ position="2524.4467,-176.4939"
+ orientation="-1052.3622,0"
+ id="guide3178" />
+ <sodipodi:guide
+ position="3103.2093,1429.2206"
+ orientation="0,-744.09448"
+ id="guide3180" />
+ <sodipodi:guide
+ position="826.06645,1429.2206"
+ orientation="1052.3622,0"
+ id="guide3182" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="2524.4467,565.50611"
+ id="guide3079" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="2494.3521,579.00611"
+ id="guide3081" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="2437.3521,579.00611"
+ id="guide3083" />
+ <sodipodi:guide
+ position="-8.2192466,-76.99225"
+ orientation="0,4077.6428"
+ id="guide3649" />
+ <sodipodi:guide
+ position="4069.4236,-76.99225"
+ orientation="-1720.5,0"
+ id="guide3651" />
+ <sodipodi:guide
+ position="4069.4236,1643.5079"
+ orientation="0,-4077.6428"
+ id="guide3653" />
+ <sodipodi:guide
+ position="-8.2192466,1643.5079"
+ orientation="1720.5,0"
+ id="guide3655" />
+ <sodipodi:guide
+ position="-8.2192466,-76.99225"
+ orientation="0,4077.6428"
+ id="guide3657" />
+ <sodipodi:guide
+ position="4069.4236,-76.99225"
+ orientation="-1720.5,0"
+ id="guide3659" />
+ <sodipodi:guide
+ position="4069.4236,1643.5079"
+ orientation="0,-4077.6428"
+ id="guide3661" />
+ <sodipodi:guide
+ position="-8.2192466,1643.5079"
+ orientation="1720.5,0"
+ id="guide3663" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(1780.3522,-112.87834)">
+ <rect
+ style="fill:#0000ff;fill-rule:evenodd;stroke:#000000;stroke-width:0.36521944px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="rect2985"
+ width="349.80563"
+ height="212.77235"
+ x="-1780.0696"
+ y="115.28934"
+ ry="38.183765" />
+ <rect
+ style="fill:#0000ff;fill-rule:evenodd;stroke:#000000;stroke-width:1.5459187px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="rect3755"
+ width="0"
+ height="0"
+ x="-629.48682"
+ y="1001.1993" />
+ <rect
+ style="fill:#0000ff;fill-opacity:1"
+ id="rect3191"
+ width="358.58792"
+ height="214.06038"
+ x="-1087.5042"
+ y="112.97834"
+ ry="38.183765" />
+ <rect
+ style="fill:#a000ff;fill-opacity:1"
+ id="rect3195"
+ width="350.58966"
+ height="174.45921"
+ x="-1779.1808"
+ y="349.60342"
+ ry="39.59798" />
+ <rect
+ style="fill:#a000ff;fill-opacity:1"
+ id="rect3197"
+ width="357.25491"
+ height="170.35497"
+ x="-1084.8379"
+ y="353.79617"
+ ry="38.183765" />
+ <rect
+ style="fill:#a000ff;fill-opacity:1"
+ id="rect3199"
+ width="687.849"
+ height="55.655697"
+ x="-1603.3909"
+ y="687.73035"
+ ry="24.04163" />
+ <rect
+ style="fill:#a000ff;fill-opacity:1"
+ id="rect3201"
+ width="447.90167"
+ height="50.114544"
+ x="-1488.6338"
+ y="825.45538"
+ ry="19.658308" />
+ <rect
+ style="opacity:0.60399996;fill:#0000ff;fill-opacity:1"
+ id="rect3046"
+ width="135.97015"
+ height="38.530865"
+ x="-1679.87"
+ y="524.00964" />
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1565.7183"
+ y="170.28043"
+ id="text3052"
+ sodipodi:linespacing="125%"
+ inkscape:transform-center-x="-310.5984"
+ inkscape:transform-center-y="14.984243"
+ transform="scale(1.1160112,0.89604834)"><tspan
+ sodipodi:role="line"
+ id="tspan3054"
+ x="-1565.7183"
+ y="170.28043">VM 1 </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1268.2957"
+ y="803.349"
+ id="text3056"
+ sodipodi:linespacing="125%"
+ inkscape:transform-center-x="-645.19167"
+ inkscape:transform-center-y="8.043534"
+ transform="scale(1.1160112,0.89604834)"><tspan
+ sodipodi:role="line"
+ id="tspan3058"
+ x="-1268.2957"
+ y="803.349">Switch with 10Gb ports</tspan><tspan
+ sodipodi:role="line"
+ x="-1268.2957"
+ y="826.53778"
+ id="tspan3060" /></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1573.7157"
+ y="433.78815"
+ id="text3062"
+ sodipodi:linespacing="125%"
+ transform="scale(1.1160112,0.89604835)"><tspan
+ sodipodi:role="line"
+ id="tspan3064"
+ x="-1573.7157"
+ y="433.78815">Server 1</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-947.12897"
+ y="434.55573"
+ id="text3066"
+ sodipodi:linespacing="125%"
+ transform="scale(1.1160112,0.89604835)"><tspan
+ sodipodi:role="line"
+ id="tspan3068"
+ x="-947.12897"
+ y="434.55573">Server 2</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1251.1786"
+ y="957.94836"
+ id="text3070"
+ sodipodi:linespacing="125%"
+ transform="scale(1.1160112,0.89604835)"><tspan
+ sodipodi:role="line"
+ id="tspan3072"
+ x="-1251.1786"
+ y="957.94836"> 10 Gb Traffic Generator</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20.1229248px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1016.8596"
+ y="162.4848"
+ id="text3074"
+ sodipodi:linespacing="125%"
+ transform="scale(1.0288342,0.97197394)"
+ inkscape:transform-center-x="-374.58424"
+ inkscape:transform-center-y="19.26541"><tspan
+ sodipodi:role="line"
+ id="tspan3076"
+ x="-1016.8596"
+ y="162.4848">VM 2 </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1576.4685"
+ y="479.5618"
+ id="text3078"
+ sodipodi:linespacing="125%"
+ inkscape:transform-center-x="-405.24435"
+ transform="scale(1.1160112,0.89604835)"
+ inkscape:transform-center-y="-3.0408919e-05"><tspan
+ sodipodi:role="line"
+ id="tspan3080"
+ x="-1576.4685"
+ y="479.5618">Linux, KVM, QEMU </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-947.05627"
+ y="476.78903"
+ id="text3082"
+ sodipodi:linespacing="125%"
+ transform="scale(1.1160112,0.89604835)"><tspan
+ sodipodi:role="line"
+ id="tspan3084"
+ x="-947.05627"
+ y="476.78903">Linux, KVM, QEMU </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.93562508px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1574.15"
+ y="575.35333"
+ id="text3086"
+ sodipodi:linespacing="125%"
+ inkscape:transform-center-x="-152.77712"
+ inkscape:transform-center-y="6.9586675"
+ transform="scale(1.052991,0.94967575)"><tspan
+ sodipodi:role="line"
+ id="tspan3088"
+ x="-1574.15"
+ y="575.35333">10 Gb NIC</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-855.08612"
+ y="613.58636"
+ id="text3090"
+ sodipodi:linespacing="125%"
+ inkscape:transform-center-x="-174.62846"
+ transform="scale(1.1160112,0.89604834)"
+ inkscape:transform-center-y="2.3462468e-05"><tspan
+ sodipodi:role="line"
+ id="tspan3092"
+ x="-855.08612"
+ y="613.58636">10 Gb NIC</tspan></text>
+ <rect
+ style="opacity:0.60199998;fill:#0000ff;fill-opacity:1"
+ id="rect3094"
+ width="125.30582"
+ height="38.530865"
+ x="-1427.5106"
+ y="437.27979" />
+ <rect
+ style="opacity:0.60799997;fill:#0000ff;fill-opacity:1"
+ id="rect3096"
+ width="111.97541"
+ height="41.741772"
+ x="-1196.8135"
+ y="437.27979" />
+ <text
+ xml:space="preserve"
+ style="font-size:19.30730629px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1322.4871"
+ y="491.82611"
+ id="text3098"
+ sodipodi:linespacing="125%"
+ transform="scale(1.0722964,0.93257795)"
+ inkscape:transform-center-x="-27.993731"
+ inkscape:transform-center-y="-6.9674825"><tspan
+ sodipodi:role="line"
+ id="tspan3100"
+ x="-1322.4871"
+ y="491.82611">10 Gb NIC</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1071.2081"
+ y="513.09308"
+ id="text3102"
+ sodipodi:linespacing="125%"
+ inkscape:transform-center-x="-670.51946"
+ inkscape:transform-center-y="150.91262"
+ transform="scale(1.1160112,0.89604834)"><tspan
+ sodipodi:role="line"
+ id="tspan3104"
+ x="-1071.2081"
+ y="513.09308">10 Gb NIC</tspan></text>
+ <rect
+ style="fill:#7878ff;fill-opacity:1"
+ id="rect3106"
+ width="257.27686"
+ height="100.60838"
+ x="-1043.5138"
+ y="187.8994" />
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-912.34381"
+ y="232.86263"
+ id="text3108"
+ sodipodi:linespacing="125%"
+ transform="scale(1.1160112,0.89604835)"><tspan
+ sodipodi:role="line"
+ id="tspan3110"
+ x="-912.34381"
+ y="232.86263">DPDK Testpmd App.</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-912.34381"
+ y="274.9668"
+ id="text3880"
+ sodipodi:linespacing="125%"
+ transform="scale(1.1160112,0.89604835)"><tspan
+ sodipodi:role="line"
+ id="tspan3882"
+ x="-912.34381"
+ y="274.9668">bonded device with</tspan><tspan
+ sodipodi:role="line"
+ x="-912.34381"
+ y="298.15558"
+ id="tspan3884">virtio and VF slaves</tspan></text>
+ <rect
+ style="fill:#7878ff;fill-opacity:1"
+ id="rect3106-4"
+ width="257.27686"
+ height="100.60838"
+ x="-1748.0256"
+ y="184.68852" />
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1541.4333"
+ y="233.58643"
+ id="text3108-9"
+ sodipodi:linespacing="125%"
+ transform="scale(1.1160112,0.89604835)"><tspan
+ sodipodi:role="line"
+ id="tspan3110-5"
+ x="-1541.4333"
+ y="233.58643">DPDK Testpmd App.</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1541.4845"
+ y="274.63931"
+ id="text3880-7"
+ sodipodi:linespacing="125%"
+ transform="scale(1.1160112,0.89604835)"><tspan
+ sodipodi:role="line"
+ id="tspan3882-9"
+ x="-1541.4845"
+ y="274.63931">bonded device with</tspan><tspan
+ sodipodi:role="line"
+ x="-1541.4845"
+ y="297.82809"
+ id="tspan3884-8">virtio and VF slaves</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1576.4685"
+ y="504.73169"
+ id="text3951"
+ sodipodi:linespacing="125%"
+ transform="scale(1.1160112,0.89604834)"><tspan
+ sodipodi:role="line"
+ id="tspan3953"
+ x="-1576.4685"
+ y="504.73169">Kernel PF driver</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-947.43506"
+ y="500.51361"
+ id="text3951-4"
+ sodipodi:linespacing="125%"
+ transform="scale(1.1160112,0.89604835)"><tspan
+ sodipodi:role="line"
+ id="tspan3953-0"
+ x="-947.43506"
+ y="500.51361">Kernel PF driver</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1575.308"
+ y="548.3703"
+ id="text3976-9"
+ sodipodi:linespacing="125%"
+ transform="scale(1.1160112,0.89604835)"><tspan
+ sodipodi:role="line"
+ id="tspan3978-3"
+ x="-1575.308"
+ y="548.3703">SW bridge with Tap</tspan><tspan
+ sodipodi:role="line"
+ x="-1575.308"
+ y="571.55908"
+ id="tspan3075">and PF connected </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1203.7942"
+ y="195.3643"
+ id="text4007"
+ sodipodi:linespacing="125%"
+ transform="scale(1.1160112,0.89604834)"><tspan
+ sodipodi:role="line"
+ id="tspan4009"
+ x="-1203.7942"
+ y="195.3643">NFS Server</tspan><tspan
+ sodipodi:role="line"
+ x="-1203.7942"
+ y="218.55309"
+ id="tspan4011">VM disk image</tspan><tspan
+ sodipodi:role="line"
+ x="-1203.7942"
+ y="241.74187"
+ id="tspan4013" /></text>
+ <rect
+ style="opacity:0.45833333;fill:#a000ff;fill-opacity:1"
+ id="rect4015"
+ width="193.29091"
+ height="94.186569"
+ x="-1353.4641"
+ y="134.34897"
+ ry="22.627417" />
+ <rect
+ style="opacity:0.45833333;fill:#a000ff;fill-opacity:1"
+ id="rect3070"
+ width="17.329529"
+ height="11.773321"
+ x="-1278.1288"
+ y="744.45654" />
+ <rect
+ style="opacity:0.45833333;fill:#a000ff;fill-opacity:1"
+ id="rect3070-3"
+ width="19.995611"
+ height="11.773321"
+ x="-1280.1283"
+ y="813.47321" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:2.44584394px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m -1270.1392,756.51119 0.5585,54.21449"
+ id="path3090"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="3" />
+ <rect
+ style="opacity:0.61458333;fill:#0000ff;fill-opacity:1"
+ id="rect3046-7"
+ width="135.97015"
+ height="38.530865"
+ x="-978.67279"
+ y="523.78949" />
+ <rect
+ style="opacity:0.59375;fill:#a000ff;fill-opacity:1"
+ id="rect3880"
+ width="14.663447"
+ height="11.773321"
+ x="-1622.0532"
+ y="563.57544" />
+ <rect
+ style="opacity:0.59375;fill:#a000ff;fill-opacity:1"
+ id="rect3880-8"
+ width="14.663447"
+ height="11.773321"
+ x="-914.96075"
+ y="564.21674" />
+ <rect
+ style="opacity:0.59375;fill:#a000ff;fill-opacity:1"
+ id="rect3880-6"
+ width="14.663447"
+ height="11.773321"
+ x="-1482.7505"
+ y="674.35162" />
+ <rect
+ style="opacity:0.59375;fill:#a000ff;fill-opacity:1"
+ id="rect3880-9"
+ width="14.663447"
+ height="11.773321"
+ x="-1198.8129"
+ y="720.37451" />
+ <rect
+ style="opacity:0.59375;fill:#a000ff;fill-opacity:1"
+ id="rect3880-99"
+ width="14.663447"
+ height="11.773321"
+ x="-1085.5045"
+ y="674.35175" />
+ <rect
+ style="opacity:0.59375;fill:#a000ff;fill-opacity:1"
+ id="rect3880-82"
+ width="14.663447"
+ height="11.773321"
+ x="-1301.4569"
+ y="452.79913" />
+ <rect
+ style="opacity:0.59375;fill:#a000ff;fill-opacity:1"
+ id="rect3880-0"
+ width="14.663447"
+ height="11.773321"
+ x="-1210.8103"
+ y="452.79922" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.49161923px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m -1612.063,574.09703 136.6956,98.10634"
+ id="path3946"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="3" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.62650716px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m -906.09206,573.4328 -171.08524,98.7457"
+ id="path3948"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="3" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.54592061px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m -1291.5381,459.322 88.4734,2e-5"
+ id="path3950"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="3" />
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-947.30841"
+ y="544.97314"
+ id="text3976-9-5"
+ sodipodi:linespacing="125%"
+ transform="scale(1.1160112,0.89604835)"><tspan
+ sodipodi:role="line"
+ id="tspan3978-3-7"
+ x="-947.30841"
+ y="544.97314">SW bridge with Tap</tspan><tspan
+ sodipodi:role="line"
+ x="-947.30841"
+ y="568.16193"
+ id="tspan3075-1">and PF connected </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1220.5167"
+ y="460.53635"
+ id="text3101"
+ sodipodi:linespacing="125%"
+ transform="scale(1.1160112,0.89604834)"><tspan
+ sodipodi:role="line"
+ id="tspan3103"
+ x="-1220.5167"
+ y="460.53635">10 Gb Migration Link</tspan></text>
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot3085"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ transform="matrix(1.7252629,0,0,1.3852181,-1778.0192,-314.07213)"><flowRegion
+ id="flowRegion3087"><rect
+ id="rect3089"
+ width="1"
+ height="41.5"
+ x="-1"
+ y="701.59448" /></flowRegion><flowPara
+ id="flowPara3091" /></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot3093"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ transform="matrix(1.7252629,0,0,1.3852181,-1778.0192,-314.07213)"><flowRegion
+ id="flowRegion3095"><rect
+ id="rect3097"
+ width="1"
+ height="41"
+ x="-1.5"
+ y="700.59448" /></flowRegion><flowPara
+ id="flowPara3099" /></flowRoot> </g>
+</svg>
diff --git a/doc/guides/howto/img/lm_vhost_user.svg b/doc/guides/howto/img/lm_vhost_user.svg
new file mode 100644
index 00000000..3601cf11
--- /dev/null
+++ b/doc/guides/howto/img/lm_vhost_user.svg
@@ -0,0 +1,644 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="1052.8693"
+ height="762.99158"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="lm_vhost_user.svg">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 372.04724 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1052.3622 : 372.04724 : 1"
+ inkscape:persp3d-origin="526.18109 : 248.03149 : 1"
+ id="perspective3886" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.70710678"
+ inkscape:cx="201.38434"
+ inkscape:cy="401.97681"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1515"
+ inkscape:window-height="1092"
+ inkscape:window-x="141"
+ inkscape:window-y="0"
+ inkscape:window-maximized="0"
+ inkscape:snap-page="false"
+ inkscape:snap-grids="false"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ fit-margin-top="0.1"
+ fit-margin-left="0.1"
+ fit-margin-right="0.1"
+ fit-margin-bottom="0.3">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3174"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true"
+ spacingx="0.5px"
+ spacingy="0.5px"
+ originx="1780.3521px"
+ originy="-176.4939px" />
+ <sodipodi:guide
+ position="1780.3521,-176.4939"
+ orientation="0,744.09448"
+ id="guide3176" />
+ <sodipodi:guide
+ position="2524.4467,-176.4939"
+ orientation="-1052.3622,0"
+ id="guide3178" />
+ <sodipodi:guide
+ position="3103.2093,1429.2206"
+ orientation="0,-744.09448"
+ id="guide3180" />
+ <sodipodi:guide
+ position="826.06645,1429.2206"
+ orientation="1052.3622,0"
+ id="guide3182" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="2524.4467,565.50611"
+ id="guide3079" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="2494.3521,579.00611"
+ id="guide3081" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="2437.3521,579.00611"
+ id="guide3083" />
+ <sodipodi:guide
+ position="-8.2192466,-76.99225"
+ orientation="0,4077.6428"
+ id="guide3649" />
+ <sodipodi:guide
+ position="4069.4236,-76.99225"
+ orientation="-1720.5,0"
+ id="guide3651" />
+ <sodipodi:guide
+ position="4069.4236,1643.5079"
+ orientation="0,-4077.6428"
+ id="guide3653" />
+ <sodipodi:guide
+ position="-8.2192466,1643.5079"
+ orientation="1720.5,0"
+ id="guide3655" />
+ <sodipodi:guide
+ position="-8.2192466,-76.99225"
+ orientation="0,4077.6428"
+ id="guide3657" />
+ <sodipodi:guide
+ position="4069.4236,-76.99225"
+ orientation="-1720.5,0"
+ id="guide3659" />
+ <sodipodi:guide
+ position="4069.4236,1643.5079"
+ orientation="0,-4077.6428"
+ id="guide3661" />
+ <sodipodi:guide
+ position="-8.2192466,1643.5079"
+ orientation="1720.5,0"
+ id="guide3663" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(1780.3522,-112.87834)">
+ <rect
+ style="fill:#0000ff;fill-rule:evenodd;stroke:#000000;stroke-width:0.36521944px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="rect2985"
+ width="349.80563"
+ height="212.77235"
+ x="-1780.0696"
+ y="115.28934"
+ ry="38.183765" />
+ <rect
+ style="fill:#0000ff;fill-rule:evenodd;stroke:#000000;stroke-width:1.5459187px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="rect3755"
+ width="0"
+ height="0"
+ x="-629.48682"
+ y="1001.1993" />
+ <rect
+ style="fill:#0000ff;fill-opacity:1"
+ id="rect3191"
+ width="358.58792"
+ height="214.06038"
+ x="-1087.5042"
+ y="112.97834"
+ ry="38.183765" />
+ <rect
+ style="fill:#a000ff;fill-opacity:1"
+ id="rect3195"
+ width="350.58966"
+ height="174.45921"
+ x="-1779.1808"
+ y="349.60342"
+ ry="39.59798" />
+ <rect
+ style="fill:#a000ff;fill-opacity:1"
+ id="rect3197"
+ width="357.25491"
+ height="170.35497"
+ x="-1084.8379"
+ y="353.79617"
+ ry="38.183765" />
+ <rect
+ style="fill:#a000ff;fill-opacity:1"
+ id="rect3199"
+ width="687.849"
+ height="55.655697"
+ x="-1603.3909"
+ y="687.73035"
+ ry="24.04163" />
+ <rect
+ style="fill:#a000ff;fill-opacity:1"
+ id="rect3201"
+ width="447.90167"
+ height="50.114544"
+ x="-1488.6338"
+ y="825.45538"
+ ry="19.658308" />
+ <rect
+ style="opacity:0.60399996;fill:#0000ff;fill-opacity:1"
+ id="rect3046"
+ width="135.97015"
+ height="38.530865"
+ x="-1679.87"
+ y="524.00964" />
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1565.7183"
+ y="170.28043"
+ id="text3052"
+ sodipodi:linespacing="125%"
+ inkscape:transform-center-x="-310.5984"
+ inkscape:transform-center-y="14.984243"
+ transform="scale(1.1160112,0.89604834)"><tspan
+ sodipodi:role="line"
+ id="tspan3054"
+ x="-1565.7183"
+ y="170.28043">VM 1 </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1268.2957"
+ y="803.349"
+ id="text3056"
+ sodipodi:linespacing="125%"
+ inkscape:transform-center-x="-645.19167"
+ inkscape:transform-center-y="8.043534"
+ transform="scale(1.1160112,0.89604834)"><tspan
+ sodipodi:role="line"
+ id="tspan3058"
+ x="-1268.2957"
+ y="803.349">Switch with 10Gb ports</tspan><tspan
+ sodipodi:role="line"
+ x="-1268.2957"
+ y="826.53778"
+ id="tspan3060" /></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1573.7157"
+ y="433.78815"
+ id="text3062"
+ sodipodi:linespacing="125%"
+ transform="scale(1.1160112,0.89604835)"><tspan
+ sodipodi:role="line"
+ id="tspan3064"
+ x="-1573.7157"
+ y="433.78815">Server 1</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-947.12897"
+ y="434.55573"
+ id="text3066"
+ sodipodi:linespacing="125%"
+ transform="scale(1.1160112,0.89604835)"><tspan
+ sodipodi:role="line"
+ id="tspan3068"
+ x="-947.12897"
+ y="434.55573">Server 2</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1251.1786"
+ y="957.94836"
+ id="text3070"
+ sodipodi:linespacing="125%"
+ transform="scale(1.1160112,0.89604835)"><tspan
+ sodipodi:role="line"
+ id="tspan3072"
+ x="-1251.1786"
+ y="957.94836"> 10 Gb Traffic Generator</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20.1229248px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1016.8596"
+ y="162.4848"
+ id="text3074"
+ sodipodi:linespacing="125%"
+ transform="scale(1.0288342,0.97197394)"
+ inkscape:transform-center-x="-374.58424"
+ inkscape:transform-center-y="19.26541"><tspan
+ sodipodi:role="line"
+ id="tspan3076"
+ x="-1016.8596"
+ y="162.4848">VM 2 </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1575.2013"
+ y="479.56177"
+ id="text3078"
+ sodipodi:linespacing="125%"
+ inkscape:transform-center-x="-405.24435"
+ transform="scale(1.1160112,0.89604835)"
+ inkscape:transform-center-y="-3.0408919e-05"><tspan
+ sodipodi:role="line"
+ id="tspan3080"
+ x="-1575.2013"
+ y="479.56177">Linux, KVM, QEMU 2.5 </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.93562508px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-906.26202"
+ y="579.8208"
+ id="text3086"
+ sodipodi:linespacing="125%"
+ inkscape:transform-center-x="-152.77712"
+ inkscape:transform-center-y="6.9586675"
+ transform="scale(1.052991,0.94967574)"><tspan
+ sodipodi:role="line"
+ id="tspan3088"
+ x="-906.26202"
+ y="579.8208">10 Gb NIC</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1493.7568"
+ y="613.58636"
+ id="text3090"
+ sodipodi:linespacing="125%"
+ inkscape:transform-center-x="-174.62846"
+ transform="scale(1.1160112,0.89604835)"
+ inkscape:transform-center-y="2.3462468e-05"><tspan
+ sodipodi:role="line"
+ id="tspan3092"
+ x="-1493.7568"
+ y="613.58636">10 Gb NIC</tspan></text>
+ <rect
+ style="opacity:0.60199998;fill:#0000ff;fill-opacity:1"
+ id="rect3094"
+ width="125.30582"
+ height="38.530865"
+ x="-1427.5106"
+ y="437.27979" />
+ <rect
+ style="opacity:0.60799997;fill:#0000ff;fill-opacity:1"
+ id="rect3096"
+ width="111.97541"
+ height="41.741772"
+ x="-1196.8135"
+ y="437.27979" />
+ <text
+ xml:space="preserve"
+ style="font-size:19.30730629px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1322.4871"
+ y="491.82611"
+ id="text3098"
+ sodipodi:linespacing="125%"
+ transform="scale(1.0722964,0.93257795)"
+ inkscape:transform-center-x="-27.993731"
+ inkscape:transform-center-y="-6.9674825"><tspan
+ sodipodi:role="line"
+ id="tspan3100"
+ x="-1322.4871"
+ y="491.82611">10 Gb NIC</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1071.2081"
+ y="513.09308"
+ id="text3102"
+ sodipodi:linespacing="125%"
+ inkscape:transform-center-x="-670.51946"
+ inkscape:transform-center-y="150.91262"
+ transform="scale(1.1160112,0.89604834)"><tspan
+ sodipodi:role="line"
+ id="tspan3104"
+ x="-1071.2081"
+ y="513.09308">10 Gb NIC</tspan></text>
+ <rect
+ style="fill:#7878ff;fill-opacity:1"
+ id="rect3106"
+ width="277.07584"
+ height="86.466248"
+ x="-1043.5138"
+ y="187.8994" />
+ <rect
+ style="fill:#7878ff;fill-opacity:1"
+ id="rect3106-4"
+ width="268.59058"
+ height="85.052032"
+ x="-1748.0256"
+ y="184.68852" />
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1557.907"
+ y="233.58643"
+ id="text3108-9"
+ sodipodi:linespacing="125%"
+ transform="scale(1.1160112,0.89604835)"><tspan
+ sodipodi:role="line"
+ id="tspan3110-5"
+ x="-1557.907"
+ y="233.58643">DPDK Testpmd App</tspan><tspan
+ sodipodi:role="line"
+ x="-1557.907"
+ y="256.77521"
+ id="tspan3347" /></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1556.5636"
+ y="253.73872"
+ id="text3880-7"
+ sodipodi:linespacing="125%"
+ transform="scale(1.1160112,0.89604835)"><tspan
+ sodipodi:role="line"
+ id="tspan3882-9"
+ x="-1556.5636"
+ y="253.73872" /><tspan
+ sodipodi:role="line"
+ x="-1556.5636"
+ y="276.92749"
+ id="tspan3884-8">DPDK virtio PMD's </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1575.2013"
+ y="525.24933"
+ id="text3951"
+ sodipodi:linespacing="125%"
+ transform="scale(1.1160112,0.89604835)"><tspan
+ sodipodi:role="line"
+ id="tspan3953"
+ x="-1575.2013"
+ y="525.24933">DPDK PF PMD and vhost_user</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-948.70227"
+ y="524.18781"
+ id="text3951-4"
+ sodipodi:linespacing="125%"
+ transform="scale(1.1160112,0.89604835)"><tspan
+ sodipodi:role="line"
+ id="tspan3953-0"
+ x="-948.70227"
+ y="524.18781">DPDK PF PMD and vhost_user</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1203.7942"
+ y="195.3643"
+ id="text4007"
+ sodipodi:linespacing="125%"
+ transform="scale(1.1160112,0.89604834)"><tspan
+ sodipodi:role="line"
+ id="tspan4009"
+ x="-1203.7942"
+ y="195.3643">NFS Server</tspan><tspan
+ sodipodi:role="line"
+ x="-1203.7942"
+ y="218.55309"
+ id="tspan4011">VM disk image</tspan><tspan
+ sodipodi:role="line"
+ x="-1203.7942"
+ y="241.74187"
+ id="tspan4013" /></text>
+ <rect
+ style="opacity:0.45833333;fill:#a000ff;fill-opacity:1"
+ id="rect4015"
+ width="193.29091"
+ height="94.186569"
+ x="-1353.4641"
+ y="134.34897"
+ ry="22.627417" />
+ <rect
+ style="opacity:0.45833333;fill:#a000ff;fill-opacity:1"
+ id="rect3070"
+ width="17.329529"
+ height="11.773321"
+ x="-1278.1288"
+ y="744.45654" />
+ <rect
+ style="opacity:0.45833333;fill:#a000ff;fill-opacity:1"
+ id="rect3070-3"
+ width="19.995611"
+ height="11.773321"
+ x="-1280.1283"
+ y="813.47321" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:2.44584394px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m -1270.1392,756.51119 0.5585,54.21449"
+ id="path3090"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="3" />
+ <rect
+ style="opacity:0.59895833;fill:#0000ff;fill-opacity:1"
+ id="rect3046-7"
+ width="135.97015"
+ height="38.530865"
+ x="-981.50122"
+ y="523.78949" />
+ <rect
+ style="opacity:0.59375;fill:#a000ff;fill-opacity:1"
+ id="rect3880"
+ width="14.663447"
+ height="11.773321"
+ x="-1622.0532"
+ y="563.57544" />
+ <rect
+ style="opacity:0.59375;fill:#a000ff;fill-opacity:1"
+ id="rect3880-8"
+ width="14.663447"
+ height="11.773321"
+ x="-914.96075"
+ y="564.21674" />
+ <rect
+ style="opacity:0.59375;fill:#a000ff;fill-opacity:1"
+ id="rect3880-6"
+ width="14.663447"
+ height="11.773321"
+ x="-1482.7505"
+ y="674.35162" />
+ <rect
+ style="opacity:0.59375;fill:#a000ff;fill-opacity:1"
+ id="rect3880-9"
+ width="14.663447"
+ height="11.773321"
+ x="-1198.8129"
+ y="720.37451" />
+ <rect
+ style="opacity:0.59375;fill:#a000ff;fill-opacity:1"
+ id="rect3880-99"
+ width="14.663447"
+ height="11.773321"
+ x="-1085.5045"
+ y="674.35175" />
+ <rect
+ style="opacity:0.59375;fill:#a000ff;fill-opacity:1"
+ id="rect3880-82"
+ width="14.663447"
+ height="11.773321"
+ x="-1301.4569"
+ y="452.79913" />
+ <rect
+ style="opacity:0.59375;fill:#a000ff;fill-opacity:1"
+ id="rect3880-0"
+ width="14.663447"
+ height="11.773321"
+ x="-1210.8103"
+ y="452.79922" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.49161923px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m -1612.063,574.09703 136.6956,98.10634"
+ id="path3946"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="3" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.62650716px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m -906.09206,573.4328 -171.08524,98.7457"
+ id="path3948"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="3" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.54592061px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m -1291.5381,459.322 88.4734,2e-5"
+ id="path3950"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="3" />
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-1220.5167"
+ y="460.53635"
+ id="text3101"
+ sodipodi:linespacing="125%"
+ transform="scale(1.1160112,0.89604834)"><tspan
+ sodipodi:role="line"
+ id="tspan3103"
+ x="-1220.5167"
+ y="460.53635">10 Gb Migration Link</tspan></text>
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot3085"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ transform="matrix(1.7252629,0,0,1.3852181,-1778.0192,-314.07213)"><flowRegion
+ id="flowRegion3087"><rect
+ id="rect3089"
+ width="1"
+ height="41.5"
+ x="-1"
+ y="701.59448" /></flowRegion><flowPara
+ id="flowPara3091" /></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot3093"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ transform="matrix(1.7252629,0,0,1.3852181,-1778.0192,-314.07213)"><flowRegion
+ id="flowRegion3095"><rect
+ id="rect3097"
+ width="1"
+ height="41"
+ x="-1.5"
+ y="700.59448" /></flowRegion><flowPara
+ id="flowPara3099" /></flowRoot> <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-927.84314"
+ y="233.94818"
+ id="text3108-9-3"
+ sodipodi:linespacing="125%"
+ transform="scale(1.1160112,0.89604835)"><tspan
+ sodipodi:role="line"
+ id="tspan3110-5-6"
+ x="-927.84314"
+ y="233.94818">DPDK Testpmd App</tspan><tspan
+ sodipodi:role="line"
+ x="-927.84314"
+ y="257.13696"
+ id="tspan3347-7" /></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-928.51379"
+ y="255.71736"
+ id="text3880-7-5"
+ sodipodi:linespacing="125%"
+ transform="scale(1.1160112,0.89604835)"><tspan
+ sodipodi:role="line"
+ id="tspan3882-9-3"
+ x="-928.51379"
+ y="255.71736" /><tspan
+ sodipodi:role="line"
+ x="-928.51379"
+ y="278.90616"
+ id="tspan3884-8-5">DPDK virtio PMD's </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="-947.67664"
+ y="476.70486"
+ id="text3078-6"
+ sodipodi:linespacing="125%"
+ inkscape:transform-center-x="-405.24435"
+ transform="scale(1.1160112,0.89604835)"
+ inkscape:transform-center-y="-3.0408919e-05"><tspan
+ sodipodi:role="line"
+ id="tspan3080-2"
+ x="-947.67664"
+ y="476.70486">Linux, KVM, QEMU 2.5 </tspan></text>
+ </g>
+</svg>
diff --git a/doc/guides/howto/index.rst b/doc/guides/howto/index.rst
new file mode 100644
index 00000000..aa6d3e2b
--- /dev/null
+++ b/doc/guides/howto/index.rst
@@ -0,0 +1,40 @@
+.. BSD LICENSE
+ Copyright(c) 2016 Intel Corporation. All rights reserved.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of Intel Corporation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+How To User Guides
+==================
+
+.. toctree::
+ :maxdepth: 2
+ :numbered:
+
+ lm_bond_virtio_sriov
+ lm_virtio_vhost_user
+ flow_bifurcation
diff --git a/doc/guides/howto/lm_bond_virtio_sriov.rst b/doc/guides/howto/lm_bond_virtio_sriov.rst
new file mode 100644
index 00000000..49666f13
--- /dev/null
+++ b/doc/guides/howto/lm_bond_virtio_sriov.rst
@@ -0,0 +1,713 @@
+.. BSD LICENSE
+ Copyright(c) 2016 Intel Corporation. All rights reserved.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of Intel Corporation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Live Migration of VM with SR-IOV VF
+===================================
+
+Overview
+--------
+
+It is not possible to migrate a Virtual Machine which has an SR-IOV Virtual Function (VF).
+
+To get around this problem the bonding PMD is used.
+
+The following sections show an example of how to do this.
+
+Test Setup
+----------
+
+A bonded device is created in the VM.
+The virtio and VF PMD's are added as slaves to the bonded device.
+The VF is set as the primary slave of the bonded device.
+
+A bridge must be set up on the Host connecting the tap device, which is the
+backend of the Virtio device and the Physical Function (PF) device.
+
+To test the Live Migration two servers with identical operating systems installed are used.
+KVM and Qemu 2.3 is also required on the servers.
+
+In this example, the servers have Niantic and or Fortville NIC's installed.
+The NIC's on both servers are connected to a switch
+which is also connected to the traffic generator.
+
+The switch is configured to broadcast traffic on all the NIC ports.
+A :ref:`Sample switch configuration <lm_bond_virtio_sriov_switch_conf>`
+can be found in this section.
+
+The host is running the Kernel PF driver (ixgbe or i40e).
+
+The ip address of host_server_1 is 10.237.212.46
+
+The ip address of host_server_2 is 10.237.212.131
+
+.. _figure_lm_bond_virtio_sriov:
+
+.. figure:: img/lm_bond_virtio_sriov.*
+
+Live Migration steps
+--------------------
+
+The sample scripts mentioned in the steps below can be found in the
+:ref:`Sample host scripts <lm_bond_virtio_sriov_host_scripts>` and
+:ref:`Sample VM scripts <lm_bond_virtio_sriov_vm_scripts>` sections.
+
+On host_server_1: Terminal 1
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. code-block:: console
+
+ cd /root/dpdk/host_scripts
+ ./setup_vf_on_212_46.sh
+
+For Fortville NIC
+
+.. code-block:: console
+
+ ./vm_virtio_vf_i40e_212_46.sh
+
+For Niantic NIC
+
+.. code-block:: console
+
+ ./vm_virtio_vf_one_212_46.sh
+
+On host_server_1: Terminal 2
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. code-block:: console
+
+ cd /root/dpdk/host_scripts
+ ./setup_bridge_on_212_46.sh
+ ./connect_to_qemu_mon_on_host.sh
+ (qemu)
+
+On host_server_1: Terminal 1
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+**In VM on host_server_1:**
+
+.. code-block:: console
+
+ cd /root/dpdk/vm_scripts
+ ./setup_dpdk_in_vm.sh
+ ./run_testpmd_bonding_in_vm.sh
+
+ testpmd> show port info all
+
+The ``mac_addr`` command only works with kernel PF for Niantic
+
+.. code-block:: console
+
+ testpmd> mac_addr add port 1 vf 0 AA:BB:CC:DD:EE:FF
+
+The syntax of the ``testpmd`` command is:
+
+Create bonded device (mode) (socket).
+
+Mode 1 is active backup.
+
+Virtio is port 0 (P0).
+
+VF is port 1 (P1).
+
+Bonding is port 2 (P2).
+
+.. code-block:: console
+
+ testpmd> create bonded device 1 0
+ Created new bonded device eth_bond_testpmd_0 on (port 2).
+ testpmd> add bonding slave 0 2
+ testpmd> add bonding slave 1 2
+ testpmd> show bonding config 2
+
+The syntax of the ``testpmd`` command is:
+
+set bonding primary (slave id) (port id)
+
+Set primary to P1 before starting bonding port.
+
+.. code-block:: console
+
+ testpmd> set bonding primary 1 2
+ testpmd> show bonding config 2
+ testpmd> port start 2
+ Port 2: 02:09:C0:68:99:A5
+ Checking link statuses...
+ Port 0 Link Up - speed 10000 Mbps - full-duplex
+ Port 1 Link Up - speed 10000 Mbps - full-duplex
+ Port 2 Link Up - speed 10000 Mbps - full-duplex
+
+ testpmd> show bonding config 2
+
+Primary is now P1. There are 2 active slaves.
+
+Use P2 only for forwarding.
+
+.. code-block:: console
+
+ testpmd> set portlist 2
+ testpmd> show config fwd
+ testpmd> set fwd mac
+ testpmd> start
+ testpmd> show bonding config 2
+
+Primary is now P1. There are 2 active slaves.
+
+.. code-block:: console
+
+ testpmd> show port stats all
+
+VF traffic is seen at P1 and P2.
+
+.. code-block:: console
+
+ testpmd> clear port stats all
+ testpmd> set bonding primary 0 2
+ testpmd> remove bonding slave 1 2
+ testpmd> show bonding config 2
+
+Primary is now P0. There is 1 active slave.
+
+.. code-block:: console
+
+ testpmd> clear port stats all
+ testpmd> show port stats all
+
+No VF traffic is seen at P0 and P2, VF MAC address still present.
+
+.. code-block:: console
+
+ testpmd> port stop 1
+ testpmd> port close 1
+
+Port close should remove VF MAC address, it does not remove perm_addr.
+
+The ``mac_addr`` command only works with the kernel PF for Niantic.
+
+.. code-block:: console
+
+ testpmd> mac_addr remove 1 AA:BB:CC:DD:EE:FF
+ testpmd> port detach 1
+ Port '0000:00:04.0' is detached. Now total ports is 2
+ testpmd> show port stats all
+
+No VF traffic is seen at P0 and P2.
+
+On host_server_1: Terminal 2
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. code-block:: console
+
+ (qemu) device_del vf1
+
+
+On host_server_1: Terminal 1
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+**In VM on host_server_1:**
+
+.. code-block:: console
+
+ testpmd> show bonding config 2
+
+Primary is now P0. There is 1 active slave.
+
+.. code-block:: console
+
+ testpmd> show port info all
+ testpmd> show port stats all
+
+On host_server_2: Terminal 1
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. code-block:: console
+
+ cd /root/dpdk/host_scripts
+ ./setup_vf_on_212_131.sh
+ ./vm_virtio_one_migrate.sh
+
+On host_server_2: Terminal 2
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. code-block:: console
+
+ ./setup_bridge_on_212_131.sh
+ ./connect_to_qemu_mon_on_host.sh
+ (qemu) info status
+ VM status: paused (inmigrate)
+ (qemu)
+
+On host_server_1: Terminal 2
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Check that the switch is up before migrating.
+
+.. code-block:: console
+
+ (qemu) migrate tcp:10.237.212.131:5555
+ (qemu) info status
+ VM status: paused (postmigrate)
+
+For the Niantic NIC.
+
+.. code-block:: console
+
+ (qemu) info migrate
+ capabilities: xbzrle: off rdma-pin-all: off auto-converge: off zero-blocks: off
+ Migration status: completed
+ total time: 11834 milliseconds
+ downtime: 18 milliseconds
+ setup: 3 milliseconds
+ transferred ram: 389137 kbytes
+ throughput: 269.49 mbps
+ remaining ram: 0 kbytes
+ total ram: 1590088 kbytes
+ duplicate: 301620 pages
+ skipped: 0 pages
+ normal: 96433 pages
+ normal bytes: 385732 kbytes
+ dirty sync count: 2
+ (qemu) quit
+
+For the Fortville NIC.
+
+.. code-block:: console
+
+ (qemu) info migrate
+ capabilities: xbzrle: off rdma-pin-all: off auto-converge: off zero-blocks: off
+ Migration status: completed
+ total time: 11619 milliseconds
+ downtime: 5 milliseconds
+ setup: 7 milliseconds
+ transferred ram: 379699 kbytes
+ throughput: 267.82 mbps
+ remaining ram: 0 kbytes
+ total ram: 1590088 kbytes
+ duplicate: 303985 pages
+ skipped: 0 pages
+ normal: 94073 pages
+ normal bytes: 376292 kbytes
+ dirty sync count: 2
+ (qemu) quit
+
+On host_server_2: Terminal 1
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+**In VM on host_server_2:**
+
+ Hit Enter key. This brings the user to the testpmd prompt.
+
+.. code-block:: console
+
+ testpmd>
+
+On host_server_2: Terminal 2
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. code-block:: console
+
+ (qemu) info status
+ VM status: running
+
+For the Niantic NIC.
+
+.. code-block:: console
+
+ (qemu) device_add pci-assign,host=06:10.0,id=vf1
+
+For the Fortville NIC.
+
+.. code-block:: console
+
+ (qemu) device_add pci-assign,host=03:02.0,id=vf1
+
+On host_server_2: Terminal 1
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+**In VM on host_server_2:**
+
+.. code-block:: console
+
+ testomd> show port info all
+ testpmd> show port stats all
+ testpmd> show bonding config 2
+ testpmd> port attach 0000:00:04.0
+ Port 1 is attached.
+ Now total ports is 3
+ Done
+
+ testpmd> port start 1
+
+The ``mac_addr`` command only works with the Kernel PF for Niantic.
+
+.. code-block:: console
+
+ testpmd> mac_addr add port 1 vf 0 AA:BB:CC:DD:EE:FF
+ testpmd> show port stats all.
+ testpmd> show config fwd
+ testpmd> show bonding config 2
+ testpmd> add bonding slave 1 2
+ testpmd> set bonding primary 1 2
+ testpmd> show bonding config 2
+ testpmd> show port stats all
+
+VF traffic is seen at P1 (VF) and P2 (Bonded device).
+
+.. code-block:: console
+
+ testpmd> remove bonding slave 0 2
+ testpmd> show bonding config 2
+ testpmd> port stop 0
+ testpmd> port close 0
+ testpmd> port detach 0
+ Port '0000:00:03.0' is detached. Now total ports is 2
+
+ testpmd> show port info all
+ testpmd> show config fwd
+ testpmd> show port stats all
+
+VF traffic is seen at P1 (VF) and P2 (Bonded device).
+
+.. _lm_bond_virtio_sriov_host_scripts:
+
+Sample host scripts
+-------------------
+
+setup_vf_on_212_46.sh
+~~~~~~~~~~~~~~~~~~~~~
+Set up Virtual Functions on host_server_1
+
+.. code-block:: sh
+
+ #!/bin/sh
+ # This script is run on the host 10.237.212.46 to setup the VF
+
+ # set up Niantic VF
+ cat /sys/bus/pci/devices/0000\:09\:00.0/sriov_numvfs
+ echo 1 > /sys/bus/pci/devices/0000\:09\:00.0/sriov_numvfs
+ cat /sys/bus/pci/devices/0000\:09\:00.0/sriov_numvfs
+ rmmod ixgbevf
+
+ # set up Fortville VF
+ cat /sys/bus/pci/devices/0000\:02\:00.0/sriov_numvfs
+ echo 1 > /sys/bus/pci/devices/0000\:02\:00.0/sriov_numvfs
+ cat /sys/bus/pci/devices/0000\:02\:00.0/sriov_numvfs
+ rmmod i40evf
+
+vm_virtio_vf_one_212_46.sh
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Setup Virtual Machine on host_server_1
+
+.. code-block:: sh
+
+ #!/bin/sh
+
+ # Path to KVM tool
+ KVM_PATH="/usr/bin/qemu-system-x86_64"
+
+ # Guest Disk image
+ DISK_IMG="/home/username/disk_image/virt1_sml.disk"
+
+ # Number of guest cpus
+ VCPUS_NR="4"
+
+ # Memory
+ MEM=1536
+
+ taskset -c 1-5 $KVM_PATH \
+ -enable-kvm \
+ -m $MEM \
+ -smp $VCPUS_NR \
+ -cpu host \
+ -name VM1 \
+ -no-reboot \
+ -net none \
+ -vnc none -nographic \
+ -hda $DISK_IMG \
+ -netdev type=tap,id=net1,script=no,downscript=no,ifname=tap1 \
+ -device virtio-net-pci,netdev=net1,mac=CC:BB:BB:BB:BB:BB \
+ -device pci-assign,host=09:10.0,id=vf1 \
+ -monitor telnet::3333,server,nowait
+
+setup_bridge_on_212_46.sh
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Setup bridge on host_server_1
+
+.. code-block:: sh
+
+ #!/bin/sh
+ # This script is run on the host 10.237.212.46 to setup the bridge
+ # for the Tap device and the PF device.
+ # This enables traffic to go from the PF to the Tap to the Virtio PMD in the VM.
+
+ # ens3f0 is the Niantic NIC
+ # ens6f0 is the Fortville NIC
+
+ ifconfig ens3f0 down
+ ifconfig tap1 down
+ ifconfig ens6f0 down
+ ifconfig virbr0 down
+
+ brctl show virbr0
+ brctl addif virbr0 ens3f0
+ brctl addif virbr0 ens6f0
+ brctl addif virbr0 tap1
+ brctl show virbr0
+
+ ifconfig ens3f0 up
+ ifconfig tap1 up
+ ifconfig ens6f0 up
+ ifconfig virbr0 up
+
+connect_to_qemu_mon_on_host.sh
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. code-block:: sh
+
+ #!/bin/sh
+ # This script is run on both hosts when the VM is up,
+ # to connect to the Qemu Monitor.
+
+ telnet 0 3333
+
+setup_vf_on_212_131.sh
+~~~~~~~~~~~~~~~~~~~~~~
+
+Set up Virtual Functions on host_server_2
+
+.. code-block:: sh
+
+ #!/bin/sh
+ # This script is run on the host 10.237.212.131 to setup the VF
+
+ # set up Niantic VF
+ cat /sys/bus/pci/devices/0000\:06\:00.0/sriov_numvfs
+ echo 1 > /sys/bus/pci/devices/0000\:06\:00.0/sriov_numvfs
+ cat /sys/bus/pci/devices/0000\:06\:00.0/sriov_numvfs
+ rmmod ixgbevf
+
+ # set up Fortville VF
+ cat /sys/bus/pci/devices/0000\:03\:00.0/sriov_numvfs
+ echo 1 > /sys/bus/pci/devices/0000\:03\:00.0/sriov_numvfs
+ cat /sys/bus/pci/devices/0000\:03\:00.0/sriov_numvfs
+ rmmod i40evf
+
+vm_virtio_one_migrate.sh
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+Setup Virtual Machine on host_server_2
+
+.. code-block:: sh
+
+ #!/bin/sh
+ # Start the VM on host_server_2 with the same parameters except without the VF
+ # parameters, as the VM on host_server_1, in migration-listen mode
+ # (-incoming tcp:0:5555)
+
+ # Path to KVM tool
+ KVM_PATH="/usr/bin/qemu-system-x86_64"
+
+ # Guest Disk image
+ DISK_IMG="/home/username/disk_image/virt1_sml.disk"
+
+ # Number of guest cpus
+ VCPUS_NR="4"
+
+ # Memory
+ MEM=1536
+
+ taskset -c 1-5 $KVM_PATH \
+ -enable-kvm \
+ -m $MEM \
+ -smp $VCPUS_NR \
+ -cpu host \
+ -name VM1 \
+ -no-reboot \
+ -net none \
+ -vnc none -nographic \
+ -hda $DISK_IMG \
+ -netdev type=tap,id=net1,script=no,downscript=no,ifname=tap1 \
+ -device virtio-net-pci,netdev=net1,mac=CC:BB:BB:BB:BB:BB \
+ -incoming tcp:0:5555 \
+ -monitor telnet::3333,server,nowait
+
+setup_bridge_on_212_131.sh
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Setup bridge on host_server_2
+
+.. code-block:: sh
+
+ #!/bin/sh
+ # This script is run on the host to setup the bridge
+ # for the Tap device and the PF device.
+ # This enables traffic to go from the PF to the Tap to the Virtio PMD in the VM.
+
+ # ens4f0 is the Niantic NIC
+ # ens5f0 is the Fortville NIC
+
+ ifconfig ens4f0 down
+ ifconfig tap1 down
+ ifconfig ens5f0 down
+ ifconfig virbr0 down
+
+ brctl show virbr0
+ brctl addif virbr0 ens4f0
+ brctl addif virbr0 ens5f0
+ brctl addif virbr0 tap1
+ brctl show virbr0
+
+ ifconfig ens4f0 up
+ ifconfig tap1 up
+ ifconfig ens5f0 up
+ ifconfig virbr0 up
+
+.. _lm_bond_virtio_sriov_vm_scripts:
+
+Sample VM scripts
+-----------------
+
+setup_dpdk_in_vm.sh
+~~~~~~~~~~~~~~~~~~~
+
+Set up DPDK in the Virtual Machine
+
+.. code-block:: sh
+
+ #!/bin/sh
+ # this script matches the vm_virtio_vf_one script
+ # virtio port is 03
+ # vf port is 04
+
+ cat /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
+ echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
+ cat /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
+
+ ifconfig -a
+ /root/dpdk/tools/dpdk_nic_bind.py --status
+
+ rmmod virtio-pci ixgbevf
+
+ modprobe uio
+ insmod /root/dpdk/x86_64-default-linuxapp-gcc/kmod/igb_uio.ko
+
+ /root/dpdk/tools/dpdk_nic_bind.py -b igb_uio 0000:00:03.0
+ /root/dpdk/tools/dpdk_nic_bind.py -b igb_uio 0000:00:04.0
+
+ /root/dpdk/tools/dpdk_nic_bind.py --status
+
+run_testpmd_bonding_in_vm.sh
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Run testpmd in the Virtual Machine.
+
+.. code-block:: sh
+
+ #!/bin/sh
+ # Run testpmd in the VM
+
+ # The test system has 8 cpus (0-7), use cpus 2-7 for VM
+ # Use taskset -pc <core number> <thread_id>
+
+ # use for bonding of virtio and vf tests in VM
+
+ /root/dpdk/x86_64-default-linuxapp-gcc/app/testpmd \
+ -c f -n 4 --socket-mem 350 -- --i --port-topology=chained
+
+.. _lm_bond_virtio_sriov_switch_conf:
+
+Sample switch configuration
+---------------------------
+
+The Intel switch is used to connect the traffic generator to the
+NIC's on host_server_1 and host_server_2.
+
+In order to run the switch configuration two console windows are required.
+
+Log in as root in both windows.
+
+TestPointShared, run_switch.sh and load /root/switch_config must be executed
+in the sequence below.
+
+On Switch: Terminal 1
+~~~~~~~~~~~~~~~~~~~~~
+
+run TestPointShared
+
+.. code-block:: console
+
+ /usr/bin/TestPointShared
+
+On Switch: Terminal 2
+~~~~~~~~~~~~~~~~~~~~~
+
+execute run_switch.sh
+
+.. code-block:: console
+
+ /root/run_switch.sh
+
+On Switch: Terminal 1
+~~~~~~~~~~~~~~~~~~~~~
+
+load switch configuration
+
+.. code-block:: console
+
+ load /root/switch_config
+
+Sample switch configuration script
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The ``/root/switch_config`` script:
+
+.. code-block:: sh
+
+ # TestPoint History
+ show port 1,5,9,13,17,21,25
+ set port 1,5,9,13,17,21,25 up
+ show port 1,5,9,13,17,21,25
+ del acl 1
+ create acl 1
+ create acl-port-set
+ create acl-port-set
+ add port port-set 1 0
+ add port port-set 5,9,13,17,21,25 1
+ create acl-rule 1 1
+ add acl-rule condition 1 1 port-set 1
+ add acl-rule action 1 1 redirect 1
+ apply acl
+ create vlan 1000
+ add vlan port 1000 1,5,9,13,17,21,25
+ set vlan tagging 1000 1,5,9,13,17,21,25 tag
+ set switch config flood_ucast fwd
+ show port stats all 1,5,9,13,17,21,25
diff --git a/doc/guides/howto/lm_virtio_vhost_user.rst b/doc/guides/howto/lm_virtio_vhost_user.rst
new file mode 100644
index 00000000..fad1f2a8
--- /dev/null
+++ b/doc/guides/howto/lm_virtio_vhost_user.rst
@@ -0,0 +1,469 @@
+.. BSD LICENSE
+ Copyright(c) 2016 Intel Corporation. All rights reserved.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of Intel Corporation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+Live Migration of VM with Virtio on host running vhost_user
+===========================================================
+
+Overview
+--------
+
+Live Migration of a VM with DPDK Virtio PMD on a host which is
+running the Vhost sample application (vhost-switch) and using the DPDK PMD (ixgbe or i40e).
+
+The Vhost sample application uses VMDQ so SRIOV must be disabled on the NIC's.
+
+The following sections show an example of how to do this migration.
+
+Test Setup
+----------
+
+To test the Live Migration two servers with identical operating systems installed are used.
+KVM and QEMU is also required on the servers.
+
+QEMU 2.5 is required for Live Migration of a VM with vhost_user running on the hosts.
+
+In this example, the servers have Niantic and or Fortville NIC's installed.
+The NIC's on both servers are connected to a switch
+which is also connected to the traffic generator.
+
+The switch is configured to broadcast traffic on all the NIC ports.
+
+The ip address of host_server_1 is 10.237.212.46
+
+The ip address of host_server_2 is 10.237.212.131
+
+.. _figure_lm_vhost_user:
+
+.. figure:: img/lm_vhost_user.*
+
+Live Migration steps
+--------------------
+
+The sample scripts mentioned in the steps below can be found in the
+:ref:`Sample host scripts <lm_virtio_vhost_user_host_scripts>` and
+:ref:`Sample VM scripts <lm_virtio_vhost_user_vm_scripts>` sections.
+
+On host_server_1: Terminal 1
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Setup DPDK on host_server_1
+
+.. code-block:: console
+
+ cd /root/dpdk/host_scripts
+ ./setup_dpdk_on_host.sh
+
+On host_server_1: Terminal 2
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Bind the Niantic or Fortville NIC to igb_uio on host_server_1.
+
+For Fortville NIC.
+
+.. code-block:: console
+
+ cd /root/dpdk/tools
+ ./dpdk_nic_bind.py -b igb_uio 0000:02:00.0
+
+For Niantic NIC.
+
+.. code-block:: console
+
+ cd /root/dpdk/tools
+ ./dpdk_nic_bind.py -b igb_uio 0000:09:00.0
+
+On host_server_1: Terminal 3
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+For Fortville and Niantic NIC's reset SRIOV and run the
+vhost_user sample application (vhost-switch) on host_server_1.
+
+.. code-block:: console
+
+ cd /root/dpdk/host_scripts
+ ./reset_vf_on_212_46.sh
+ ./run_vhost_switch_on_host.sh
+
+On host_server_1: Terminal 1
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Start the VM on host_server_1
+
+.. code-block:: console
+
+ ./vm_virtio_vhost_user.sh
+
+On host_server_1: Terminal 4
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Connect to the QEMU monitor on host_server_1.
+
+.. code-block:: console
+
+ cd /root/dpdk/host_scripts
+ ./connect_to_qemu_mon_on_host.sh
+ (qemu)
+
+On host_server_1: Terminal 1
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+**In VM on host_server_1:**
+
+Setup DPDK in the VM and run testpmd in the VM.
+
+.. code-block:: console
+
+ cd /root/dpdk/vm_scripts
+ ./setup_dpdk_in_vm.sh
+ ./run_testpmd_in_vm.sh
+
+ testpmd> show port info all
+ testpmd> set fwd mac retry
+ testpmd> start tx_first
+ testpmd> show port stats all
+
+Virtio traffic is seen at P1 and P2.
+
+On host_server_2: Terminal 1
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Set up DPDK on the host_server_2.
+
+.. code-block:: console
+
+ cd /root/dpdk/host_scripts
+ ./setup_dpdk_on_host.sh
+
+On host_server_2: Terminal 2
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Bind the Niantic or Fortville NIC to igb_uio on host_server_2.
+
+For Fortville NIC.
+
+.. code-block:: console
+
+ cd /root/dpdk/tools
+ ./dpdk_nic_bind.py -b igb_uio 0000:03:00.0
+
+For Niantic NIC.
+
+.. code-block:: console
+
+ cd /root/dpdk/tools
+ ./dpdk_nic_bind.py -b igb_uio 0000:06:00.0
+
+On host_server_2: Terminal 3
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+For Fortville and Niantic NIC's reset SRIOV, and run
+the vhost_user sample application on host_server_2.
+
+.. code-block:: console
+
+ cd /root/dpdk/host_scripts
+ ./reset_vf_on_212_131.sh
+ ./run_vhost_switch_on_host.sh
+
+On host_server_2: Terminal 1
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Start the VM on host_server_2.
+
+.. code-block:: console
+
+ ./vm_virtio_vhost_user_migrate.sh
+
+On host_server_2: Terminal 4
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Connect to the QEMU monitor on host_server_2.
+
+.. code-block:: console
+
+ cd /root/dpdk/host_scripts
+ ./connect_to_qemu_mon_on_host.sh
+ (qemu) info status
+ VM status: paused (inmigrate)
+ (qemu)
+
+On host_server_1: Terminal 4
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Check that switch is up before migrating the VM.
+
+.. code-block:: console
+
+ (qemu) migrate tcp:10.237.212.131:5555
+ (qemu) info status
+ VM status: paused (postmigrate)
+
+ (qemu) info migrate
+ capabilities: xbzrle: off rdma-pin-all: off auto-converge: off zero-blocks: off
+ Migration status: completed
+ total time: 11619 milliseconds
+ downtime: 5 milliseconds
+ setup: 7 milliseconds
+ transferred ram: 379699 kbytes
+ throughput: 267.82 mbps
+ remaining ram: 0 kbytes
+ total ram: 1590088 kbytes
+ duplicate: 303985 pages
+ skipped: 0 pages
+ normal: 94073 pages
+ normal bytes: 376292 kbytes
+ dirty sync count: 2
+ (qemu) quit
+
+On host_server_2: Terminal 1
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+**In VM on host_server_2:**
+
+ Hit Enter key. This brings the user to the testpmd prompt.
+
+.. code-block:: console
+
+ testpmd>
+
+On host_server_2: Terminal 4
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+**In QEMU monitor on host_server_2**
+
+.. code-block:: console
+
+ (qemu) info status
+ VM status: running
+
+On host_server_2: Terminal 1
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+**In VM on host_server_2:**
+
+.. code-block:: console
+
+ testomd> show port info all
+ testpmd> show port stats all
+
+Virtio traffic is seen at P0 and P1.
+
+
+.. _lm_virtio_vhost_user_host_scripts:
+
+Sample host scripts
+-------------------
+
+reset_vf_on_212_46.sh
+~~~~~~~~~~~~~~~~~~~~~
+
+.. code-block:: sh
+
+ #!/bin/sh
+ # This script is run on the host 10.237.212.46 to reset SRIOV
+
+ # BDF for Fortville NIC is 0000:02:00.0
+ cat /sys/bus/pci/devices/0000\:02\:00.0/max_vfs
+ echo 0 > /sys/bus/pci/devices/0000\:02\:00.0/max_vfs
+ cat /sys/bus/pci/devices/0000\:02\:00.0/max_vfs
+
+ # BDF for Niantic NIC is 0000:09:00.0
+ cat /sys/bus/pci/devices/0000\:09\:00.0/max_vfs
+ echo 0 > /sys/bus/pci/devices/0000\:09\:00.0/max_vfs
+ cat /sys/bus/pci/devices/0000\:09\:00.0/max_vfs
+
+vm_virtio_vhost_user.sh
+~~~~~~~~~~~~~~~~~~~~~~~
+
+.. code-block:: sh
+
+ #/bin/sh
+ # Script for use with vhost_user sample application
+ # The host system has 8 cpu's (0-7)
+
+ # Path to KVM tool
+ KVM_PATH="/usr/bin/qemu-system-x86_64"
+
+ # Guest Disk image
+ DISK_IMG="/home/user/disk_image/virt1_sml.disk"
+
+ # Number of guest cpus
+ VCPUS_NR="6"
+
+ # Memory
+ MEM=1024
+
+ VIRTIO_OPTIONS="csum=off,gso=off,guest_tso4=off,guest_tso6=off,guest_ecn=off"
+
+ # Socket Path
+ SOCKET_PATH="/root/dpdk/host_scripts/usvhost"
+
+ taskset -c 2-7 $KVM_PATH \
+ -enable-kvm \
+ -m $MEM \
+ -smp $VCPUS_NR \
+ -object memory-backend-file,id=mem,size=1024M,mem-path=/mnt/huge,share=on \
+ -numa node,memdev=mem,nodeid=0 \
+ -cpu host \
+ -name VM1 \
+ -no-reboot \
+ -net none \
+ -vnc none \
+ -nographic \
+ -hda $DISK_IMG \
+ -chardev socket,id=chr0,path=$SOCKET_PATH \
+ -netdev type=vhost-user,id=net1,chardev=chr0,vhostforce \
+ -device virtio-net-pci,netdev=net1,mac=CC:BB:BB:BB:BB:BB,$VIRTIO_OPTIONS \
+ -chardev socket,id=chr1,path=$SOCKET_PATH \
+ -netdev type=vhost-user,id=net2,chardev=chr1,vhostforce \
+ -device virtio-net-pci,netdev=net2,mac=DD:BB:BB:BB:BB:BB,$VIRTIO_OPTIONS \
+ -monitor telnet::3333,server,nowait
+
+connect_to_qemu_mon_on_host.sh
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. code-block:: sh
+
+ #!/bin/sh
+ # This script is run on both hosts when the VM is up,
+ # to connect to the Qemu Monitor.
+
+ telnet 0 3333
+
+reset_vf_on_212_131.sh
+~~~~~~~~~~~~~~~~~~~~~~
+
+.. code-block:: sh
+
+ #!/bin/sh
+ # This script is run on the host 10.237.212.131 to reset SRIOV
+
+ # BDF for Ninatic NIC is 0000:06:00.0
+ cat /sys/bus/pci/devices/0000\:06\:00.0/max_vfs
+ echo 0 > /sys/bus/pci/devices/0000\:06\:00.0/max_vfs
+ cat /sys/bus/pci/devices/0000\:06\:00.0/max_vfs
+
+ # BDF for Fortville NIC is 0000:03:00.0
+ cat /sys/bus/pci/devices/0000\:03\:00.0/max_vfs
+ echo 0 > /sys/bus/pci/devices/0000\:03\:00.0/max_vfs
+ cat /sys/bus/pci/devices/0000\:03\:00.0/max_vfs
+
+vm_virtio_vhost_user_migrate.sh
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. code-block:: sh
+
+ #/bin/sh
+ # Script for use with vhost user sample application
+ # The host system has 8 cpu's (0-7)
+
+ # Path to KVM tool
+ KVM_PATH="/usr/bin/qemu-system-x86_64"
+
+ # Guest Disk image
+ DISK_IMG="/home/user/disk_image/virt1_sml.disk"
+
+ # Number of guest cpus
+ VCPUS_NR="6"
+
+ # Memory
+ MEM=1024
+
+ VIRTIO_OPTIONS="csum=off,gso=off,guest_tso4=off,guest_tso6=off,guest_ecn=off"
+
+ # Socket Path
+ SOCKET_PATH="/root/dpdk/host_scripts/usvhost"
+
+ taskset -c 2-7 $KVM_PATH \
+ -enable-kvm \
+ -m $MEM \
+ -smp $VCPUS_NR \
+ -object memory-backend-file,id=mem,size=1024M,mem-path=/mnt/huge,share=on \
+ -numa node,memdev=mem,nodeid=0 \
+ -cpu host \
+ -name VM1 \
+ -no-reboot \
+ -net none \
+ -vnc none \
+ -nographic \
+ -hda $DISK_IMG \
+ -chardev socket,id=chr0,path=$SOCKET_PATH \
+ -netdev type=vhost-user,id=net1,chardev=chr0,vhostforce \
+ -device virtio-net-pci,netdev=net1,mac=CC:BB:BB:BB:BB:BB,$VIRTIO_OPTIONS \
+ -chardev socket,id=chr1,path=$SOCKET_PATH \
+ -netdev type=vhost-user,id=net2,chardev=chr1,vhostforce \
+ -device virtio-net-pci,netdev=net2,mac=DD:BB:BB:BB:BB:BB,$VIRTIO_OPTIONS \
+ -incoming tcp:0:5555 \
+ -monitor telnet::3333,server,nowait
+
+.. _lm_virtio_vhost_user_vm_scripts:
+
+Sample VM scripts
+-----------------
+
+setup_dpdk_virtio_in_vm.sh
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. code-block:: sh
+
+ #!/bin/sh
+ # this script matches the vm_virtio_vhost_user script
+ # virtio port is 03
+ # virtio port is 04
+
+ cat /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
+ echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
+ cat /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
+
+ ifconfig -a
+ /root/dpdk/tools/dpdk_nic_bind.py --status
+
+ rmmod virtio-pci
+
+ modprobe uio
+ insmod /root/dpdk/x86_64-default-linuxapp-gcc/kmod/igb_uio.ko
+
+ /root/dpdk/tools/dpdk_nic_bind.py -b igb_uio 0000:00:03.0
+ /root/dpdk/tools/dpdk_nic_bind.py -b igb_uio 0000:00:04.0
+
+ /root/dpdk/tools/dpdk_nic_bind.py --status
+
+run_testpmd_in_vm.sh
+~~~~~~~~~~~~~~~~~~~~
+
+.. code-block:: sh
+
+ #!/bin/sh
+ # Run testpmd for use with vhost_user sample app.
+ # test system has 8 cpus (0-7), use cpus 2-7 for VM
+
+ /root/dpdk/x86_64-default-linuxapp-gcc/app/testpmd \
+ -c 3f -n 4 --socket-mem 350 -- --burst=64 --i --disable-hw-vlan-filter