Bestimmen der NIC Switch-Funktionen

In diesem Thema wird beschrieben, wie NDIS und übergeordnete Treiber die NIC-Switchfunktionen 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:

Melden von NIC-Switch-Funktionen während MiniportInitializeEx

Abfragen von NIC-Switch-Funktionen durch Overlying-Treiber

Hinweis Nur der Miniporttreiber für die PHYSISCHE FUNKTION (PCIe) eines SR-IOV-Netzwerkadapters kann NIC-Switchfunktionen melden. Miniporttreiber für PCIe Virtual Functions (VFs) dürfen die NIC-Switch-Funktionen des SR-IOV-Adapters nicht melden.

Weitere Informationen zu NIC-Switches finden Sie unter NIC-Switches.

Melden von NIC-Switch-Funktionen während MiniportInitializeEx

Wenn NDIS die MiniportInitializeEx-Funktion des Miniporttreibers aufruft, stellt der Treiber die folgenden NIC-Switchfunktionen bereit:

  • Der vollständige Satz von Hardwarefunktionen für einen NIC-Switch, den der Netzwerkadapter unterstützen kann.

    Hinweis Ab NDIS 6.30 wird nur ein NIC-Switch auf dem Netzwerkadapter erstellt. Dieser Switch wird als Standard-NIC-Switch bezeichnet.

  • Die NIC-Switchfunktionen, die derzeit auf dem Netzwerkadapter aktiviert sind.

Der Miniporttreiber meldet die Hardwarefunktionen des NIC-Switches des zugrunde liegenden Netzwerkadapters über eine NDIS_NIC_SWITCH_CAPABILITIES-Struktur , die wie folgt initialisiert wird:

  1. 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_NIC_SWITCH_CAPABILITIES_REVISION_2 und das Element Größe auf NDIS_SIZEOF_NIC_SWITCH_CAPABILITIES_REVISION_2 fest.

  2. Der Miniporttreiber legt die entsprechenden Flags im NicSwitchCapabilities-Member der NDIS_NIC_SWITCH_CAPABILITIES-Struktur auf die NIC-Switchfunktionen des SR-IOV-Netzwerkadapters fest. Der Miniporttreiber legt beispielsweise das flag NDIS_NIC_SWITCH_CAPS_PER_VPORT_INTERRUPT_MODERATION_SUPPORTED fest, wenn der NIC-Switch die Interruptmoderation für jeden virtuellen Port (VPort) unterstützt, der auf dem Switch erstellt wird.

  3. Der Miniporttreiber legt die anderen Member der NDIS_NIC_SWITCH_CAPABILITIES-Struktur auf den Wertebereich für die NIC-Switchfunktionen des SR-IOV-Netzwerkadapters fest. Der Miniporttreiber legt beispielsweise die MaxNumVFs - und MaxNumVPorts-Member auf die maximale Anzahl von VFs und VPorts fest, die der Adapter unterstützen kann.

    Hinweis Abhängig von den verfügbaren Hardwareressourcen auf dem Netzwerkadapter kann der Miniporttreiber den MaxNumVFs-Member auf einen Wert festlegen, der kleiner als seine *NumVFs-Schlüsselwort (keyword) ist. Weitere Informationen zu diesem Schlüsselwort (keyword) finden Sie unter Standardisierte INF-Schlüsselwörter für SR-IOV.

Wenn NDIS die MiniportInitializeEx-Funktion des Miniporttreibers aufruft, registriert der Treiber die NIC-Switchfunktionen des Netzwerkadapters, indem er die folgenden Schritte ausführt:

  1. Der Miniporttreiber initialisiert eine NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES-Struktur .

    Der Miniporttreiber legt den HardwareNicSwitchCapabilities-Member auf einen Zeiger auf eine zuvor initialisierte NDIS_NIC_SWITCH_CAPABILITIES-Struktur fest.

    Wenn die Registrierungseinstellung für die *SRIOV INF-Schlüsselwort (keyword) den Wert 1 aufweist, ist der Netzwerkadapter derzeit für die Erstellung und Konfiguration des NIC-Switches aktiviert. Der Miniporttreiber legt die CurrentNicSwitchCapabilities-Member auf einen Zeiger auf dieselbe NDIS_NIC_SWITCH_CAPABILITIES-Struktur fest.

    Wenn die Registrierungseinstellung für die *SRIOV INF-Schlüsselwort (keyword) den Wert 0 (null) aufweist, ist der Netzwerkadapter derzeit nicht für die Erstellung und Konfiguration des NIC-Switches aktiviert. Der Miniporttreiber muss das CurrentNicSwitchCapabilities-Element auf NULL festlegen.

    Weitere Informationen zum *SRIOV INF-Schlüsselwort (keyword) finden Sie unter Standardisierte INF-Schlüsselwörter für SR-IOV.

  2. 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.

Erstellen eines NIC-Switches ohne SR-IOV

Miniport-Treiber in NDIS 6.60 und höher müssen die folgenden Anforderungen für die Koexistenz von NIC-Switch und VMQ-Funktionen erfüllen, wenn SR-IOV nicht aktiviert ist. Wenn SR-IOV aktiviert ist, sollte der Miniporttreiber die im vorherigen Abschnitt vorhandenen Anforderungen erfüllen.

  • Der Miniporttreiber kündigt sowohl NIC-Switch- als auch VMQ-Funktionen an.
  • Die NIC kann ohne NIC-Neustart zwischen dem NIC-Switch und dem VMQ-Modus umschalten.
    • Wenn die NIC anfangs gestartet wird, kann sie sich in einem der beiden Modi befinden (entweder einen NIC-Switch erstellen oder VMQ-Warteschlangen erstellen).
      • Wenn ein NIC-Switch erstellt wird, schlägt der Miniport alle nachfolgenden VMQ-Warteschlangenzuordnungsrückrufe fehl.
      • Wenn zuerst eine VMQ-Warteschlange erstellt wird, ist der Miniporttreiber erfolgreich bei der VMQ-Warteschlangenzuordnung und schlägt alle NIC-Switchzuordnungsaufrufe fehl.
    • Wenn der NIC-Switch gelöscht oder alle VMQ-Warteschlangen gelöscht werden, kehrt der Miniporttreiber in den Anfangszustand zurück und kann wieder in einen dieser Modi wechseln.

Um anzukündigen, dass ein NIC-Switch ohne die Verwendung von SR-IOV erstellt werden kann, legt der Miniporttreiber das flag NDIS_NIC_SWITCH_CAPS_NIC_SWITCH_WITHOUT_IOV_SUPPORTED im NicSwitchCapabilities-Member der NDIS_NIC_SWITCH_CAPABILITIES-Struktur fest.

Abfragen von NIC-Switch-Funktionen durch Overlying-Treiber

NDIS übergibt die derzeit aktivierten NIC-Switchfunktionen des Netzwerkadapters an überlastende Treiber, die auf folgende Weise an den Netzwerkadapter gebunden sind:

NDIS gibt auch die NDIS_NIC_SWITCH_CAPABILITIES-Struktur zurück, wenn OID-Abfrageanforderungen (Object Identifier, Objektbezeichner) von OID_NIC_SWITCH_HARDWARE_CAPABILITIES und OID_NIC_SWITCH_CURRENT_CAPABILITIES verarbeitet werden, die von übergeordneten Protokoll- oder Filtertreibern ausgegeben werden.