Bestimmen der Funktionen für die Empfangsfilterung
In diesem Thema wird beschrieben, wie NDIS und übergeordnete Treiber die Empfangsfilterfunktionen eines Netzwerkadapters bestimmen, der die Single Root-E/A-Virtualisierung (Single Root I/O Virtualization, SR-IOV) unterstützt. Dieses Thema enthält folgende Informationen:
Berichterstellungsfunktionen für die Empfangsfilterung während MiniportInitializeEx
Abfragen von Empfangsfilterfunktionen durch Überlastung von Treibern
Hinweis Nur der Miniporttreiber für die PHYSISCHE FUNKTION (PCIe) eines SR-IOV-Netzwerkadapters kann Empfangsfilterfunktionen melden. Miniporttreiber für PCIe Virtual Functions (VFs) dürfen die Empfangsfilterfunktionen des SR-IOV-Adapters nicht melden.
Berichterstellungsfunktionen für die Empfangsfilterung während MiniportInitializeEx
Wenn NDIS die MiniportInitializeEx-Funktion des PF-Miniporttreibers aufruft, stellt der Treiber die folgenden Empfangsfilterfunktionen bereit:
Die vollständigen Hardware empfangen Filterfunktionen, die der Netzwerkadapter unterstützen kann.
Die Empfangsfilterfunktionen für die Schnittstellen, die derzeit auf dem Netzwerkadapter aktiviert sind.
Der Miniporttreiber meldet die vollständigen Hardware-Empfangsfilterfunktionen des zugrunde liegenden Netzwerkadapters über eine NDIS_RECEIVE_FILTER_CAPABILITIES-Struktur , die wie folgt initialisiert wird:
Der Miniporttreiber initialisiert das Headerelement . Der Treiber legt den Typmember von Header auf NDIS_OBJECT_TYPE_DEFAULT fest.
Ab NDIS 6.30 legt der Miniporttreiber das Revisionselement von Header auf NDIS_RECEIVE_FILTER_CAPABILITIES_REVISION_2 und das Element Größe auf NDIS_SIZEOF_RECEIVE_FILTER_CAPABILITIES_REVISION_2 fest.
Der Miniporttreiber legt die anderen Member der NDIS_RECEIVE_FILTER_CAPABILITIES-Struktur auf den Wertebereich für die Empfangsfilterfunktionen des SR-IOV-Netzwerkadapters fest. Der Miniporttreiber legt beispielsweise die entsprechenden Flags in SupportedFilterTests fest, um Filtertestvorgänge anzugeben, die vom Miniporttreiber unterstützt werden.
Neben SR-IOV wird die Empfangsfilterung auch in den folgenden Schnittstellen verwendet:
NDIS Packet Coalescing. Weitere Informationen zur Verwendung von Empfangsfiltern in dieser Schnittstelle finden Sie unter Managing Packet Coalescing Receive Filters.For more information about how to use receive filters in this interface, see Managing Packet Coalescing Receive Filters.
Virtual Machine Queue (VMQ). Weitere Informationen zur Verwendung von Empfangsfiltern in dieser Schnittstelle finden Sie unter Festlegen und Löschen von VMQ-Filtern.
Wenn der Miniporttreiber eine dieser Schnittstellen unterstützt, muss er auch die Member der NDIS_RECEIVE_FILTER_CAPABILITIES-Struktur auf den Bereich der Werte der Empfangsfilterfunktion festlegen, die für die Schnittstelle spezifisch sind. Wenn der Treiber z. B. NDIS-Paketkopplung und SR-IOV unterstützt, muss er das flag NDIS_RECEIVE_FILTER_PACKET_COALESCING_SUPPORTED_ON_DEFAULT_QUEUE im SupportedQueueProperties-Element festlegen.
Der Miniporttreiber meldet die derzeit aktivierten Empfangsfilterfunktionen des zugrunde liegenden Netzwerkadapters über eine NDIS_RECEIVE_FILTER_CAPABILITIES-Struktur , die wie folgt initialisiert wird:
Der Miniporttreiber initialisiert das Headerelement . Der Treiber legt den Typmember von Header auf NDIS_OBJECT_TYPE_DEFAULT fest.
Ab NDIS 6.30 legt der Miniporttreiber das Revisionselement von Header auf NDIS_RECEIVE_FILTER_CAPABILITIES_REVISION_2 und das Element Größe auf NDIS_SIZEOF_RECEIVE_FILTER_CAPABILITIES_REVISION_2 fest.
Der Miniporttreiber legt die anderen Member der NDIS_RECEIVE_FILTER_CAPABILITIES-Struktur auf den Wertebereich für die Empfangsfilterfunktionen der derzeit aktivierten Schnittstellen fest. Wenn z. B. die NDIS-Paketkopplung aktiviert ist, darf der Treiber nur die Elemente festlegen, die für diese Technologie spezifisch sind.
Schnittstellen, die die Empfangsfilterung verwenden, werden über standardisierte INF-Schlüsselwörter aktiviert oder deaktiviert. Weitere Informationen dazu, wie die NDIS-Paketkopplung aktiviert ist, finden Sie unter Standardisierte INF-Schlüsselwörter für paketverknend. Weitere Informationen zur Aktivierung von SR-IOV und VMQ finden Sie unter Behandeln standardisierter INF-Schlüsselwörter sr-IOV, VMQ und RSS.
Wenn NDIS die MiniportInitializeEx-Funktion des Miniporttreibers aufruft, registriert der Treiber die Empfangsfilterfunktionen des Netzwerkadapters, indem er die folgenden Schritte ausführt:
Der Miniporttreiber initialisiert eine NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES-Struktur .
Der Miniporttreiber legt den HardwareReceiveFilterCapabilities-Member auf die Adresse einer NDIS_RECEIVE_FILTER_CAPABILITIES-Struktur fest. Diese Struktur wurde zuvor mit den vollständigen Hardware-Empfangsfilterfunktionen des Netzwerkadapters initialisiert.
Wenn das Zusammenfügen von VMQ-, SR-IOV- und NDIS-Paketen auf dem Netzwerkadapter derzeit deaktiviert ist, legt der Miniporttreiber das CurrentReceiveFilterCapabilities-Element auf NULL fest.
Wenn die Zusammenführung von VMQ-, SR-IOV- oder NDIS-Paketen derzeit auf dem Netzwerkadapter aktiviert ist, muss der Miniporttreiber die folgenden Aktionen ausführen:
Der Miniporttreiber muss eine weitere NDIS_RECEIVE_FILTER_CAPABILITIES-Struktur mit den aktuellen Empfangsfilterfunktionen für die Schnittstellen initialisieren, die derzeit auf dem Netzwerkadapter aktiviert sind.
Wenn die SR-IOV-Schnittstelle aktiviert ist, gibt es Situationen, in denen der Miniporttreiber die Member der NDIS_RECEIVE_FILTER_CAPABILITIES-Struktur auf dieselben oder andere Werte festlegen muss. Dies liegt daran, dass die SR-IOV-Schnittstelle einen ähnlichen Warteschlangenmechanismus wie VMQ bereitstellt, aber virtuelle Ports (VPorts) anstelle von VM-Empfangswarteschlangen verwendet.
Der Miniporttreiber muss beispielsweise das flag NDIS_RECEIVE_FILTER_VMQ_FILTERS_ENABLED im EnabledFilterTypes-Element festlegen, wenn entweder die VMQ- oder SR-IOV-Schnittstelle aktiviert ist. Der Miniporttreiber muss jedoch den NumQueues-Member auf 0 festlegen, wenn die SR-IOV-Schnittstelle aktiviert ist, und ein Wert ungleich null, wenn die VMQ-Schnittstelle aktiviert ist.
Der Miniporttreiber legt den CurrentReceiveFilterCapabilities-Member auf die Adresse der NDIS_RECEIVE_FILTER_CAPABILITIES-Struktur fest, die die aktuellen Empfangsfilterfunktionen für die derzeit aktivierte Schnittstelle enthält.
Wenn die Zusammenführung von VMQ-, SR-IOV- oder NDIS-Paketen derzeit auf dem Netzwerkadapter aktiviert ist, legt der Miniporttreiber den HardwareReceiveFilterCapabilities-Member auf die Adresse einer NDIS_RECEIVE_FILTER_CAPABILITIES-Struktur fest. Diese Struktur wurde zuvor mit den derzeit aktivierten Empfangsfilterfunktionen des Netzwerkadapters initialisiert.
Der Treiber ruft NdisMSetMiniportAttributes auf und legt den MiniportAttributes-Parameter auf einen Zeiger auf die NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES-Struktur fest.
Weitere Informationen zum Adapterinitialisierungsprozess finden Sie unter Initialisieren eines Miniportadapters.
Abfragen von Empfangsfilterfunktionen durch Überlastung von Treibern
NDIS übergibt die derzeit aktivierten Empfangsfilterfunktionen des Netzwerkadapters auf folgende Weise an überlastende Treiber, die an den Netzwerkadapter gebunden sind:
Wenn NDIS die FilterAttach-Funktion eines übergeordneten Filtertreibers aufruft, übergibt NDIS die NIC-Switchfunktionen des Netzwerkadapters über den AttachParameters-Parameter . Dieser Parameter enthält einen Zeiger auf eine NDIS_FILTER_ATTACH_PARAMETERS-Struktur . Der ReceiveFilterCapabilities-Member dieser Struktur enthält einen Zeiger auf eine NDIS_RECEIVE_FILTER_CAPABILITIES-Struktur .
Wenn NDIS die ProtocolBindAdapterEx-Funktion eines übergeordneten Protokolltreibers aufruft, übergibt NDIS die NIC-Switchfunktionen des Netzwerkadapters über den BindParameters-Parameter . Dieser Parameter enthält einen Zeiger auf eine NDIS_FILTER_ATTACH_PARAMETERS-Struktur . Der ReceiveFilterCapabilities-Member dieser Struktur enthält einen Zeiger auf eine NDIS_RECEIVE_FILTER_CAPABILITIES-Struktur .
NDIS gibt auch die NDIS_RECEIVE_FILTER_CAPABILITIES-Struktur zurück, wenn OID-Abfrageanforderungen (Object Identifier, Objektbezeichner) von OID_RECEIVE_FILTER_CURRENT_CAPABILITIES und OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES verarbeitet werden, die von übergeordneten Protokoll- oder Filtertreibern ausgegeben werden.