Net ring 元素管理
請遵循本主題中的指引,在網路資料傳輸期間管理 您的NET_RING 結構和其元素。 本主題中的規則描述哪些 net ring 元素用戶端驅動程式的成員可以根據資料路徑案例修改和何時修改,以及這些結構的一般資訊用戶端驅動程式應該牢記在心。
重要
在開發的所有階段,用戶端驅動程式都應該遵守這些指示。 如果在使用 驅動程式驗證器進行測試時,用戶端驅動程式未遵守這些指示,驅動程式驗證程式會報告違規,並觸發受測裝置上的錯誤檢查。
NET_RING
當 NET_RING的父封包佇列啟動時,通道中的所有索引都會初始化為 0。
下表說明用戶端驅動程式可以修改的 net 通道成員。
欄位 | 允許用戶端驅動程式修改 |
---|---|
OSReserved1 | 否 |
ElementStride | 否 |
NumberOfElements | 否 |
ElementIndexMask | 否 |
EndIndex | 否 |
OSReserved0 | 否 |
OSReserved2 | 否 |
BeginIndex | 是 (必要) |
NextIndex | 是 (選擇性) 注意:架構永遠不會讀取 NextIndex。 |
臨時 | 是 (選擇性) 注意:架構永遠不會讀取 臨時。 |
Buffer | 否 |
用戶端驅動程式不得修改此結構的任何唯讀成員,也不應該在呼叫EvtPacketQueueAdvance期間遞增BeginIndex超過EndIndex。
如需有關 net 通道中索引擁有權的詳細資訊,請參閱 net 通道簡介。
NET_PACKET
NET_PACKET中的欄位會區分資料路徑運作的不同內容。 是否設定封包的 [忽略] 欄位,以及驅動程式是否接收 (Rx) 或傳輸 (Tx,) 封包變更套用至封包的規則集。
下表提供每個案例中驅動程式的指示。
Rx 或 Tx | [忽略] 欄位設定為... | 注意 |
---|---|---|
Rx | 用戶端驅動程式 |
|
Tx | NetAdapterCx |
|
NET_PACKET_LAYOUT
在 Rx 作業期間,NET_PACKET的[版面配置] 欄位受限於下列規則:
- 除了 Reserved0 以外的所有欄位,都必須由用戶端驅動程式初始化。
- 如果 Layer2Type 設定為 NetPacketLayer2TypeEthernet, 則 Layer2HeaderLength 必須為 14 或更新版本。
- 如果 Layer2Type 設定為 NetPacketLayer2TypeNull, 則 Layer2HeaderLength 必須設定為 0。
- 如果 Layer3Type 是 IPv4 類型, 則 Layer3HeaderLength 必須為 20 或更新版本。
- 如果 Layer3Type 是 IPv6 類型, 則 Layer3HeaderLength 必須為 40 或更新版本。
- 如果 Layer4Type 設定為 Tcp, 則 Layer4HeaderLength 必須為 40 或更新版本。
- 如果 Layer4Type 設定為 Udp, 則 Layer4HeaderLength 必須為 8 或更新版本。
- 圖層類型欄位必須位於適當的列舉範圍內。
Tx 期間不會使用版面配置。
NET_FRAGMENT
NET_FRAGMENT 欄位規則取決於驅動程式是否正在接收或傳輸,以及片段緩衝區是否由驅動程式或架構附加至封包。
Rx 或 Tx | 注意 |
---|---|
Rx |
|
Tx |
|