Ausgehender Paketdatenverkehr
In diesem Thema wird beschrieben, wie Hyper-V-Erweiterungen neue Pakete erstellen und in den erweiterbaren Switchdatenpfad einfügen.
Hinweis Auf dieser Seite wird davon ausgegangen, dass Sie mit den Informationen und Diagrammen unter Übersicht über den Hyper-V-Erweiterbaren Switch und die Hybridweiterleitung vertraut sind.
Hinweis In der erweiterbaren Switch-Schnittstelle werden NDIS-Filtertreiber als erweiterbare Switcherweiterungen bezeichnet, und der Treiberstapel wird als erweiterbarer Switchtreiberstapel bezeichnet. Weitere Informationen zu den Erweiterungen finden Sie unter Hyper-V Extensible Switch Extensions.
Erweiterbare Switcherweiterungen können nur neue Pakete in den erweiterbaren Switch-Eingangsdatenpfad einfügen. Dadurch wird sichergestellt, dass die erweiterbare Switchschnittstelle diese Pakete richtig filtern und weiterleiten kann. Erweiterungen müssen die folgenden Richtlinien zum Einfügen neuer Pakete in den Eingangsdatenpfad befolgen:
Die Erweiterung muss zunächst eine NET_BUFFER_LIST-Struktur für ein neues Paket zuweisen.
Nachdem die Erweiterung eine NET_BUFFER_LIST-Struktur für ein neues Paket zugewiesen hat, muss sie die AllocateNetBufferListForwardingContext-Handlerfunktion aufrufen, um den erweiterbaren Switchweiterleitungskontext für das Paket zuzuweisen.
Der Weiterleitungskontext befindet sich in den Out-of-Band-Daten (OOB) des Pakets. Sie enthält Weiterleitungsinformationen für das Paket, z. B. den Quellport und ein Array mit mindestens einem Zielport.
Weitere Informationen zum Weiterleitungskontext finden Sie unter Hyper-V Extensible Switch Forwarding Context.
Nachdem die Erweiterung AllocateNetBufferListForwardingContext aufgerufen hat, wird der Quellport für das Paket auf NDIS_SWITCH_DEFAULT_PORT_ID festgelegt. Ein Paket mit einem Quellportbezeichner von NDIS_SWITCH_DEFAULT_PORT_ID ist vertrauenswürdig und umgeht die erweiterbaren Switchportrichtlinien, z. B. Zugriffssteuerungslisten (Access Control Lists, ACLs) und Quality of Service (QoS).
Die Erweiterung möchte möglicherweise, dass das Paket so behandelt wird, als ob es von einem bestimmten Port stammt. Dadurch können die Richtlinien für diesen Port auf das Paket angewendet werden. Die Erweiterung ruft SetNetBufferListSource auf, um den Quellport für das Paket zu ändern.
Es kann jedoch vorkommen, dass die Erweiterung den Quellportbezeichner des Pakets NDIS_SWITCH_DEFAULT_PORT_ID zuweisen möchte. Beispielsweise kann die Erweiterung den Quellportbezeichner auf NDIS_SWITCH_DEFAULT_PORT_ID für proprietäre Steuerungspakete festlegen, die an ein Gerät im externen Netzwerk gesendet werden.
Wenn die Weiterleitungserweiterung ein neues Paket im Eingangsdatenpfad sendet, muss sie die Zielports für das Paket bestimmen. Weitere Informationen zu diesem Verfahren finden Sie unter Hinzufügen von Extensible Switch-Zielportdaten zu einem Paket.
Hinweis Eine Erfassungs- oder Filtererweiterung kann dem neuen Paket keine neuen Zielports hinzufügen.
Wenn die Erweiterung ein neues Paket erstellt, befinden sich die Paketdaten im lokalen oder vertrauenswürdigen Arbeitsspeicher im übergeordneten Betriebssystem der übergeordneten Hyper-V-Partition. Auf diesen Arbeitsspeicher kann die untergeordnete Partition nicht zugreifen. Daher gilt es als "sicher" vor nicht synchronisierten Updates durch das Gastbetriebssystem, das in dieser Partition ausgeführt wird.
Die Erweiterung muss die NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO Union für das neue Paket mithilfe des makros NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL abrufen. Die Erweiterung muss das IsPacketDataSafe-Element auf TRUE festlegen. Dies gibt an, dass sich alle Paketdaten im vertrauenswürdigen Arbeitsspeicher befinden.
Wenn die Erweiterung NdisFSendNetBufferLists aufruft , um das Paket in den Eingangsdatenpfad einzuschleusen, muss sie den Flags-Parameter mit den entsprechenden erweiterbaren Switchflagseinstellungen festlegen. Weitere Informationen zu diesen Flageinstellungen finden Sie unter Hyper-V Extensible Switch Send and Receive Flags.
Wenn NDIS die FilterSendNetBufferListsComplete-Funktion der Erweiterung aufruft , um die Sendeanforderung des neuen Pakets abzuschließen, muss die Erweiterung FreeNetBufferListForwardingContext aufrufen, um den zugeordneten Weiterleitungskontext freizustellen. Die Erweiterung muss dies tun, bevor sie die NET_BUFFER_LIST-Struktur für das Paket freigibt oder wiederverwendet.
Weitere Informationen zu den erweiterbaren Ein- und Ausgehenden Switch-Datenpfaden finden Sie unter Hyper-V Extensible Switch Data Path.