Files
yttrium-virtio-gpu/NetKVM/NotifyObject/Readme.md
T
Yuri Benditovich fccd454db4 Update Readme file of the Notify object project
Described how the failover feature works including latest
changes. Updated also list of supported adapters.

Signed-off-by: Yuri Benditovich <[email protected]>
2021-04-01 15:11:46 +03:00

98 lines
4.1 KiB
Markdown

# NETKVM support for 'failover' feature
If the virtio-net-pci device is configured with 'failover=on'
in the command line the virtio-net is not expected to be used
as a standalone device but in combination with Virtual function
(VF) of a SRIOV-capable host adapter. In this case the virtio-net
and the VF must have identical MAC addresses.
Unlike implementation of virtio-net failover feature in Linux
failover virtio-net device in Windows starts function only after
the VIOPROT protocol driver is installed:
1. System start without VIOPROT installed:
NETKVM driver **does not indicate link-up** until it recognizes
presence of respective VF with the same MAC address (for that
the VIOPROT is required)
2. Upon VIOPROT installation the NETKVM adapter **indicates link-up**
and starts working using VF data channel to its respective
SRIOV physical function (PF)
3. When the migration process is started the QEMU hides the VF
device on the PCI bus, VF adapter on the source VM disappears
and the NETKVM continues transferring data via TAP adapter
on the host it is configured to use (typically this TAP
adapter is attached to the same bridge as the PF.
4. Until the migration is completed the virtio-net/NETKVM is
the **fallback network adapter on the guest OS** (similar to Linux).
Note that on this stage of the migration the VF is not used
by the VM anymore. But because the VF is present and has the same
MAC address as the virtio-net device it is possible that the PF
will drop the traffic that comes from the virtio-net via its TAP
as the network patckets usually have the same source MAC address
as the VF. So, it is highly recommended to change the MAC address
of the VF as soon as it is hidden on the VM PCI bus.
5. When the migration is done QEMU attaches a new VF to the PCI bus
of the VM on the destination system. NETKVM recognizes it and switches
to the datapath of the new VF.
# Notify object of VIOPROT protocol supported by NETKVM
The notify object runs on protocol installation (it checks all the
existing adapters) and on installation of new adapter (it checks the
new adapter):
If the adapter's PnP ID matches the list of supported ones, the notify
object unbinds it from all the protocols and binds only to VIOPROT.
It there is NETKVM adapter with the MAC address identical to one of
checked netwrok adapter, these 2 adapters with the same MAC address
will be 'teamed' (subject to compatibility check) and the NETKVM uses
the teamed adapter for RX and TX.
## Protocol installation
(by admin, from the directory where vioprot.inf is located)
See: InstallProtocol.cmd
netcfg -v -l vioprot.inf -c p -i VIOPROT
## Protocol uninstallation (example of the batch):
See: UninstallProtocol.cmd
netcfg -v -u VIOPROT
timeout /t 3
for %%f in (c:\windows\inf\oem*.inf) do call :checkinf %%f
echo Done
timeout /t 3
goto :eof
:checkinf
type %1 | findstr /i vioprot.cat
if not errorlevel 1 goto :removeinf
echo %1 is not VIOPROT inf file
goto :eof
:removeinf
echo This is VIOPROT inf file
pnputil /d "%~nx1"
timeout /t 2
goto :eof
## Supported adapters
Built-in list at the moment of writing:
* "ven_8086&dev_1515" - Intel X540 Virtual Function
* "ven_8086&dev_10ca" - Intel 82576 Virtual Function
* "ven_8086&dev_15a8" - Intel Ethernet Connection X552
* "ven_8086&dev_154c" - Intel 700 Series VF
* "ven_8086&dev_10ed" - Intel 82599 VF
* "ven_15b3&dev_101a" - Mellanox MT28800 Family
* "ven_14e4&dev_16dc" - Broadcom NetXtreme-E Virtual Function
* "ven_14e4&dev_16af" - Broadcom NetXtreme II BCM57810 Virtual Function
* "...bdrv\\l2ndv&pci_16af14e4" - Broadcom NetXtreme II BCM57810 Virtual Function (QLogic miniport driver)
## Change the list of supported adapter without rebuilding the binary
Registry key: **HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\VioProt**
*Name* | *Type* | *Value* | *Note*
---------------|----------|---------|--------
**NoDefaults** | DWORD | 1 | Disables built-in list
**Supported** | MULTI_SZ | List | Substrings in format "ven_XXXX&dev_XXXX", for example: "ven_8086&dev_1520XXXX"
**Note: Never include PnP ID of NETKVM adapter!**