處理封包聯合接收篩選
透過 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 集合要求卸載至介面卡的喚醒模式篩選 接收的封包。
當網路介面卡轉換為全電源狀態時,迷你埠驅動程式必須遵循下列步驟:
迷你埠驅動程式必須設定網路介面卡,以捨棄硬體聯合緩衝區內的任何聯合封包。 當網路介面卡轉換成低電源狀態時,網路介面卡可能會聯合這些封包。
迷你埠驅動程式必須在低電源轉換之前,使用一組封包聯合接收篩選器來設定網路介面卡。
迷你埠驅動程式必須清除聯合封包計數器。