判斷接收篩選功能
本主題描述 NDIS 和過度載入驅動程式如何決定網路介面卡的接收篩選功能,以支援單一根目錄 I/O 虛擬化 (SR-IOV) 。 本主題包含下列資訊:
報告在 MiniportInitializeEx期間接收篩選功能
注意 只有 PCI Express (PCIe 的迷你埠驅動程式) 實體函式 (SR-IOV 網路介面卡的 PF) 可以報告接收篩選功能。 PCIe 虛擬函式的迷你埠驅動程式 (VFs) 不得報告 SR-IOV 介面卡的接收篩選功能。
報告在 MiniportInitializeEx期間接收篩選功能
當 NDIS 呼叫 PF 迷你埠驅動程式的 MiniportInitializeEx 函式時,驅動程式會提供下列接收篩選功能:
完整的硬體會接收網路介面卡可支援的篩選功能。
目前在網路介面卡上啟用之介面的接收篩選功能。
迷你埠驅動程式會透過下列方式初始化 的NDIS_RECEIVE_FILTER_CAPABILITIES 結構,報告基礎網路介面卡的完整硬體接收篩選功能:
迷你埠驅動程式會初始化 Header 成員。 驅動程式會將Header的Type成員設定為 NDIS_OBJECT_TYPE_DEFAULT。
從 NDIS 6.30 開始,迷你埠驅動程式會將Header的Revision成員設定為 NDIS_RECEIVE_FILTER_CAPABILITIES_REVISION_2,並將Size成員設定為 NDIS_SIZEOF_RECEIVE_FILTER_CAPABILITIES_REVISION_2。
迷你埠驅動程式會將 NDIS_RECEIVE_FILTER_CAPABILITIES 結構的其他成員設定為 SR-IOV 網路介面卡接收篩選功能的值範圍。 例如,迷你埠驅動程式會在 SupportedFilterTests 中設定適當的旗標,以指定迷你埠驅動程式支援的篩選測試作業。
除了 SR-IOV 之外,接收篩選也會用於下列介面:
NDIS 封包聯合。 如需有關如何在此介面中使用接收篩選器的詳細資訊,請參閱 管理封包聯合接收篩選器。
虛擬機器佇列 (VMQ)。 如需有關如何在此介面中使用接收篩選器的詳細資訊,請參閱 設定和清除 VMQ 篩選器。
如果迷你埠驅動程式支援上述任何介面,它也必須將 NDIS_RECEIVE_FILTER_CAPABILITIES 結構的成員設定為介面特定的接收篩選功能值範圍。 例如,如果驅動程式支援 NDIS 封包聯合和 SR-IOV,則必須在 SupportedQueueProperties 成員中設定NDIS_RECEIVE_FILTER_PACKET_COALESCING_SUPPORTED_ON_DEFAULT_QUEUE旗標。
迷你埠驅動程式會透過下列方式初始化 的NDIS_RECEIVE_FILTER_CAPABILITIES 結構,報告目前啟用的基礎網路介面卡接收篩選功能:
迷你埠驅動程式會初始化 Header 成員。 驅動程式會將Header的Type成員設定為 NDIS_OBJECT_TYPE_DEFAULT。
從 NDIS 6.30 開始,迷你埠驅動程式會將Header的Revision成員設定為 NDIS_RECEIVE_FILTER_CAPABILITIES_REVISION_2,並將Size成員設定為 NDIS_SIZEOF_RECEIVE_FILTER_CAPABILITIES_REVISION_2。
迷你埠驅動程式會將 NDIS_RECEIVE_FILTER_CAPABILITIES 結構的其他成員設定為目前啟用之介面接收篩選功能的值範圍。 例如,如果已啟用 NDIS 封包聯合,驅動程式必須只設定這項技術特有的成員。
使用接收篩選的介面會透過標準化 INF 關鍵字啟用或停用。 如需如何啟用 NDIS 封包聯合的詳細資訊,請參閱 封包聯合的標準化 INF 關鍵字。 如需如何啟用 SR-IOV 和 VMQ 的詳細資訊,請參閱 處理 SR-IOV、VMQ 和 RSS 標準化 INF 關鍵字。
當 NDIS 呼叫迷你埠驅動程式的 MiniportInitializeEx 函式時,驅動程式會遵循下列步驟來註冊網路介面卡的接收篩選功能:
迷你埠驅動程式會初始化 NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 結構。
迷你埠驅動程式會將 HardwareReceiveFilterCapabilities 成員設定為 NDIS_RECEIVE_FILTER_CAPABILITIES 結構的位址。 此結構先前已使用網路介面卡的完整硬體接收篩選功能初始化。
如果網路介面卡上目前已停用 VMQ、SR-IOV 和 NDIS 封包聯合,迷你埠驅動程式會將 CurrentReceiveFilterCapabilities 成員設定為 Null。
如果網路介面卡上目前已啟用 VMQ、SR-IOV 或 NDIS 封包聯合,迷你埠驅動程式必須執行下列動作:
迷你埠驅動程式必須使用目前在網路介面卡上啟用之介面的目前接收篩選功能,初始化另一個 NDIS_RECEIVE_FILTER_CAPABILITIES 結構。
如果已啟用 SR-IOV 介面,在某些情況下,迷你埠驅動程式必須將 NDIS_RECEIVE_FILTER_CAPABILITIES 結構的成員設定為相同或不同的值。 這是因為 SR-IOV 介面提供與 VMQ 類似的佇列機制,但會使用虛擬埠 (VPorts) ,而不是 VM 接收佇列。
例如,如果已啟用 VMQ 或 SR-IOV 介面,迷你埠驅動程式必須在 EnabledFilterTypes 成員中設定 NDIS_RECEIVE_FILTER_VMQ_FILTERS_ENABLED 旗標。 不過,如果已啟用 SR-IOV 介面,迷你埠驅動程式必須將 NumQueues 成員設定為零,如果已啟用 VMQ 介面,則為非零值。
迷你埠驅動程式會將 CurrentReceiveFilterCapabilities 成員設定為包含目前啟用介面之目前接收篩選功能的 NDIS_RECEIVE_FILTER_CAPABILITIES 結構位址。
如果網路介面卡上目前已啟用 VMQ、SR-IOV 或 NDIS 封包聯合,迷你埠驅動程式會將 HardwareReceiveFilterCapabilities 成員設定為 NDIS_RECEIVE_FILTER_CAPABILITIES 結構的位址。 此結構先前已使用目前啟用的網路介面卡接收篩選功能初始化。
驅動程式會呼叫 NdisMSetMiniportAttributes ,並將 MiniportAttributes 參數設定為 NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 結構的指標。
如需配接器初始化程式的詳細資訊,請參閱 初始化 Miniport 配接器。
透過過度處理驅動程式來查詢接收篩選功能
NDIS 會傳遞網路介面卡目前啟用的接收篩選功能,以下列方式將系結至網路介面卡的過度驅動程式傳遞:
當 NDIS 呼叫過度篩選驅動程式的 FilterAttach 函式時,NDIS 會透過 AttachParameters 參數傳遞網路介面卡的 NIC 交換器功能。 此參數包含 NDIS_FILTER_ATTACH_PARAMETERS 結構的指標。 這個 結構的 ReceiveFilterCapabilities 成員包含 NDIS_RECEIVE_FILTER_CAPABILITIES 結構的指標。
當 NDIS 呼叫超載通訊協定驅動程式的 ProtocolBindAdapterEx 函式時,NDIS 會透過 BindParameters 參數傳遞網路介面卡的 NIC 交換器功能。 此參數包含 NDIS_FILTER_ATTACH_PARAMETERS 結構的指標。 這個 結構的 ReceiveFilterCapabilities 成員包含 NDIS_RECEIVE_FILTER_CAPABILITIES 結構的指標。
當 NDIS 處理物件識別碼 (OID) 過度通訊協定或篩選驅動程式所發出的OID_RECEIVE_FILTER_CURRENT_CAPABILITIES和OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES查詢要求時,NDIS 也會傳回NDIS_RECEIVE_FILTER_CAPABILITIES結構。