處理封包合併接收篩選器
透過 OID_RECEIVE_FILTER_SET_FILTER的 OID 方法要求,將多個接收篩選器下載至迷你埠驅動程式。 每個過濾器可以指定一個或多個測試(標頭欄位測試),網路介面卡使用這些測試來判斷接收到的封包是否應該被合併在介面卡上的硬體合併緩衝區中。
在迷你埠驅動程式使用接收篩選器設定網路適配器之前,驅動程式應根據適配卡的硬體功能優化接收篩選器。 例如,所有接收篩選都需要對 MAC 標頭的欄位進行測試。 因此,驅動程式可以根據此測試結果來優化篩選規則。 這可讓適配器判斷接下來要執行哪一個開放式系統互連(OSI)第 3 層(L3)和第 4 層(L4)的標頭欄位測試。
一旦網路適配器設定為接收篩選器,就必須執行下列動作:
特定篩選的所有標頭欄位測試參數都必須符合所接收封包,才能將封包聯合在聯合緩衝區中。
網路適配器會結合接收篩選器之所有標頭字段測試的結果與邏輯 AND 作業。 也就是說,如果接收篩選器的 NDIS_RECEIVE_FILTER_FIELD_PARAMETERS 結構陣列中包含的任何標頭字段測試失敗,則接收的封包不符合指定的篩選準則,且不得合併。
網路配接器只會根據指定的標頭字段測試參數來檢查封包數據。 配接器必須忽略封包中未指定標頭欄位測試的所有標頭欄位。
如果接收到的封包符合任何接收篩選器的所有標頭欄位測試條件,網路卡必須在硬體合併緩衝區內整合該封包。 一旦第一個封包合併,網路適配器就必須啟動硬體計時器,並且必須將到期時間設為相符的接收篩選器中 NDIS_RECEIVE_FILTER_PARAMETERS 結構的 成員 MaxCoalescingDelay 的值。
當收到更多符合封包聯合接收篩選器的封包時,網路適配器會將它們放入聯合緩衝區。
如果硬體定時器已在執行中,配接器不得停止或重新啟動相符接收篩選器的定時器。 不過,配接器可以使用符合接收篩選器的最小到期值來設定硬體定時器。 例如,當驅動程式收到符合接收篩選 X的封包時,配接器會以該接收篩選的指定到期值啟動定時器。 如果適配卡接著收到符合接收篩選 Y的封包,配接器可以使用該接收篩選的指定到期值重新設定硬體定時器。
附註 如果定時器上剩餘的時間小於接收篩選器的到期時間,網路適配器不得重新設定硬體定時器。
一旦收到封包合併,網路適配器就會在發生下列任何事件時產生中斷:
如果硬體合併緩衝區內的可用空間達到硬體特定的低水標,網路卡必須產生接收中斷,讓小型埠驅動程式可以處理合併接收封包。
如果用於硬體聯合緩衝區的硬體定時器過期,網路適配器必須產生接收中斷,讓迷你埠驅動程式可以處理聯合接收封包。
如果已清除接收篩選器,且封包已與該篩選條件相符,網路適配器必須產生接收中斷,讓迷你埠驅動程式可以處理聯合接收封包。
如果接收的封包不符合任何接收篩選器,網路適配器必須產生接收中斷,讓迷你埠驅動程式可以處理接收的封包。 如果有任何封包已合併,網卡驅動程式也必須處理這些封包。
如果網路適配器為接收中斷以外的任何其他中斷狀態產生中斷,網路適配器也必須發出接收中斷狀態的訊號,讓迷你埠驅動程式可以處理已聯合接收的封包。
一旦產生中斷,網路適配器就必須在硬體定時器尚未過期時停止,而且必須清除硬體聯合緩衝區。
迷你埠驅動程式必須維護聯合封包計數器,其中包含已接收封包數目的值,這些封包符合封包聯合篩選條件。 NDIS 會透過 OID_PACKET_COALESCING_FILTER_MATCH_COUNT的 OID 查詢要求來查詢此計數器。
網路介面卡只有在硬體處於全功率狀態時才會執行封包合併。 雖然硬體處於低電源狀態,但網路介面卡只能根據已透過 OID_PNP_ENABLE_WAKE_UP的 OID 集合請求卸載到網路介面卡的喚醒模式範本來篩選接收的封包。
當網路配接器轉換為全電源狀態時,迷你埠驅動程序必須遵循下列步驟:
迷你埠驅動程序必須設定網路適配器,以捨棄硬體聯合緩衝區內的任何聯合封包。 網路適配器在轉換成低功率狀態時,可能會聯合這些封包。
迷你埠驅動程式必須設定網路適配器,其中包含在轉入低功耗模式之前已下載到驅動程式的一組封包匯聚接收篩選器。
迷你埠驅動程式必須清除合併封包計數器。