Verschieben eines Empfangsfilters an einen virtuellen Port
Der überlagernde Treiber stellt eine OID-Set-Anforderung (Object Identifier) von OID_RECEIVE_FILTER_MOVE_FILTER aus, um einen Empfangsfilter von einem virtuellen Port (VPort) auf einen anderen VPort auf dem NIC-Switch zu verschieben. In der Regel gibt der überlastende Treiber, z. B. der Virtualisierungsstapel, diese OID-Anforderung aus, wenn eine der folgenden Bedingungen zutrifft:
Der Virtualisierungsstapel legt einen Empfangsfilter für den Standard-VPort fest. Dieser Filter enthält die MAC-Adresse (Media Access Control) und VLAN-Parameter (Virtual LAN) für den Netzwerkadapter des virtuellen Computers (VM), der in der untergeordneten Hyper-V-Partition verfügbar gemacht wird. Dadurch können Pakete zwischen dem VM-Netzwerkadapter und dem zugrunde liegenden Netzwerkadapter über den softwarebasierten synthetischen Datenpfad weitergeleitet werden.
Nachdem Ressourcen für eine PCI Express (PCIe) Virtual Function (VF) zugewiesen und die VF an eine untergeordnete Partition angefügt ist, erstellt der Virtualisierungsstapel einen nicht standardmäßigen VPort auf dem VF. Der Virtualisierungsstapel verschiebt dann den Empfangsfilter für den VM-Netzwerkadapter vom Standard-VPort auf den nicht standardmäßigen VPort, der an den VF angefügt ist. Dadurch können Pakete zwischen dem VM-Netzwerkadapter und dem zugrunde liegenden Netzwerkadapter über den hardwarebasierten VF-Datenpfad weitergeleitet werden.
Weitere Informationen zu diesen Datenpfaden finden Sie unter SR-IOV-Datenpfade.
Eine VF wurde von einer untergeordneten Hyper-V-Partition getrennt, in der das Gastbetriebssystem noch ausgeführt wird. In diesem Fall gibt der überlagernde Treiber die OID-Set-Anforderung aus, um den Empfangsfilter für den VM-Netzwerkadapter vom nicht standardmäßigen VPort auf den an die PF angefügten Standard-VPort zu verschieben. In diesem Fall wird der Paketdatenverkehr in den synthetischen Datenpfad zurückgesetzt.
Um einen Empfangsfilter von einem VPort zu einem anderen VPort zu verschieben, stellt ein überlagernder Treiber eine OID-Set-Anforderung von OID_RECEIVE_FILTER_MOVE_FILTER aus. Das InformationBuffer-Element der NDIS_OID_REQUEST-Struktur enthält einen Zeiger auf eine NDIS_RECEIVE_FILTER_MOVE_FILTER_PARAMETERS-Struktur .
Bevor der überlastende Treiber die OID_RECEIVE_FILTER_MOVE_FILTER-Anforderung ausgibt, muss er eine NDIS_RECEIVE_FILTER_MOVE_FILTER_PARAMETERS-Struktur wie folgt initialisieren:
Der Treiber legt den FilterId-Member auf den Bezeichner des zuvor zugewiesenen Empfangsfilters fest.
Hinweis Der überlastende Treiber hat den Filterbezeichner aus einer früheren OID-Methodenanforderung von OID_RECEIVE_FILTER_SET_FILTER oder OID_RECEIVE_FILTER_ENUM_FILTERS abgerufen.
Der Treiber legt das Element SourceQueueId auf NDIS_DEFAULT_RECEIVE_QUEUE_ID fest.
Der Treiber legt den SourceVPortId-Member auf den Bezeichner des VPort fest, für den dieser Filter zuvor festgelegt wurde.
Der Treiber legt das DestQueueId-Element auf NDIS_DEFAULT_RECEIVE_QUEUE_ID fest.
Der Treiber legt den DestVPortId-Member auf den Bezeichner des VPorts fest, auf dem dieser Filter verschoben werden soll.
NDIS überprüft die Elemente des NDIS_RECEIVE_FILTER_MOVE_FILTER_PARAMETERS , bevor die OID-Setanforderung an den PF-Miniporttreiber weitergeleitet wird.
Wenn der PF-Miniporttreiber diese Anforderung für den OID-Satz verarbeitet, muss er den Empfangsfilter in einem atomaren Vorgang verschieben. Der Treiber muss in der Lage sein, den Netzwerkadapter so zu konfigurieren, dass der Filter gleichzeitig aus einer Empfangswarteschlange und einem VPort entfernt und auf eine andere Empfangswarteschlange und einen anderen VPort festgelegt wird.