On 1/18/2018 1:51 PM, Matan Azrad wrote:
> Virtual machines hosted by Hyper-V/Azure platforms are fitted with simplified
> virtual network devices named NetVSC that are used for fast communication
> between VM to VM, VM to hypervisor, and the outside.
>
> They appear as standard system netdevices to user-land applications, the main
> difference being they are implemented on top of VMBUS instead of emulated PCI
> devices.
>
> While this reads like a case for a standard DPDK PMD, there is more to it.
>
> To accelerate outside communication, NetVSC devices as they appear in a VM
> can be paired with physical SR-IOV virtual function (VF) devices owned by
> that same VM. Both netdevices share the same MAC address in that case.
>
> When paired, egress and most of the ingress traffic flow through the VF
> device, while part of it (e.g. multicasts, hypervisor control data) still
> flows through NetVSC. Moreover VF devices are not retained and disappear
> during VM migration; from a VM standpoint, they can be hot-plugged anytime
> with NetVSC acting as a fallback.
>
> Running DPDK applications in such a context involves driving VF devices using
> their dedicated PMDs in a vendor-independent fashion (to benefit from maximum
> performance without writing dedicated code) while simultaneously listening to
> NetVSC and handling the related hot-plug events.
>
> This new virtual driver (referred to as "vdev_netvsc" from this point on)
> automatically coordinates the Hyper-V/Azure-specific management part
> described above by relying on vendor-specific, failsafe and tap PMDs to
> expose a single consolidated Ethernet device usable directly by existing
> applications.
>
> .------------------.
> | DPDK application |
> `--------+---------'
> |
> .------+------.
> | DPDK ethdev |
> `------+------' Control
> | |
> .------------+------------. v .--------------------.
> | failsafe PMD +---------+ vdev_netvsc driver |
> `--+-------------------+--' `--------------------'
> | |
> | .........|.........
> | : | :
> .----+----. : .----+----. :
> | tap PMD | : | any PMD | :
> `----+----' : `----+----' : <-- Hot-pluggable
> | : | :
> .------+-------. : .-----+-----. :
> | NetVSC-based | : | SR-IOV VF | :
> | netdevice | : | device | :
> `--------------' : `-----------' :
> :.................:
>
>
>
> v2 changes(Adrien):
>
> - Renamed driver from "hyperv" to "vdev_netvsc". This change covers
> documentation and symbols prefix.
> - Driver is now tagged EXPERIMENTAL.
> - Replaced ether_addr_from_str() with a basic sscanf() call.
> - Removed debugging code (memset() poisoning).
> - Fixed hyperv_iface_is_netvsc()'s buffer allocation according to comments.
> - Removed hyperv_basename().
> - Discarded unused variables through __rte_unused.
> - Added separate but necessary free() bugfix for failsafe PMD.
> - Added file descriptor input support to failsafe PMD.
> - Replaced temporary bash execution; failsafe now reads device definitions
> directly through a pipe without an intermediate bash one-liner.
> - Expanded DEBUG/INFO/WARN/ERROR() macros as PMD_DRV_LOG().
> - Added dynamic log type (pmd.vdev_netvsc).
> - Modified initialization code to probe devices immediately during startup.
> - Fixed several snprintf() return value checks ("ret >= sizeof(foo)" is more
> appropriate than "ret >= sizeof(foo) - 1").
>
> v3 changes(Matan):
> - Fixed clang compilation in V2.
> - Removed hotplug remove code from the new driver.
> - Supported probed sub-devices getting in fail-safe.
> - Added automatic probing for HyperV VM systems.
> - Added option to ignore the automatic probing.
> - Skiped routed NetVSC devices probing.
> - Adjusted documentation and semantics.
> - Replaced maintainer.
>
> v4 changes(Matan):
> - Align descriptions of context struct(Stephen suggestion).
> - Skip non-ethernet devices in netdev loop(Stephen suggestion).
> - Use different variable names in "add fd parameter"(Gaetan suggestion).
> - Change name of get port id function in "add automatic probing"(Gaetan
> suggestion).
> - Update internal fail-safe devargs in case of probed device(Gaetan
> suggestion).
> - use deferent commit title instead of "support probed sub-devices
> getting"(Gaetan suggestion).
>
> v5 changes(Matan):
> - Improve fail-safe documentation as Gaetan suggested.
> - Fix fcntl paramenter.
>
> v6 changes:
> - fp!=NULL => fp==NULL in "add fd parameter".
>
> Adrien Mazarguil (1):
> net/failsafe: fix invalid free
>
> Matan Azrad (7):
> net/failsafe: add "fd" parameter
> net/failsafe: add probed etherdev capture
> net/vdev_netvsc: introduce Hyper-V platform driver
> net/vdev_netvsc: implement core functionality
> net/vdev_netvsc: skip routed netvsc probing
> net/vdev_netvsc: add "force" parameter
> net/vdev_netvsc: add automatic probing
Series applied to dpdk-next-net/master, thanks.