網環元素管理
請遵循本主題中的指引,在網路數據傳輸期間管理您的 NET_RING 結構及其元素。 此主題中的規則描述了在什麼情況下用戶端驅動程式可以修改哪些 net ring 元素的成員,以及這些修改如何取決於數據路徑場景,同時也提供了用戶端驅動程式應記住的關於這些結構的一般資訊。
重要
在開發的所有階段,客戶端驅動程式都應該遵守這些指示。 如果客戶端驅動程式在測試時未遵循這些指示,驅動程式驗證器,驅動程式驗證器會回報違規,並在受測裝置上觸發錯誤檢查。
NET_RING
當啟動 NET_RING的父封包佇列時,通道中的所有索引都會初始化為 0。
下表說明客戶端驅動程式可以修改的網路環成員。
田 | 允許修改客戶端驅動程式 |
---|---|
OSReserved1 | 不 |
ElementStride | 不 |
元素數量 | 不 |
ElementIndexMask | 不 |
EndIndex | 不 |
OSReserved0 | 不 |
OSReserved2 | 不 |
BeginIndex | 是(必要) |
NextIndex | 是(選擇性)附註:架構永遠不會讀取 NextIndex。 |
刮 | 是(選擇性)附註:架構永遠不會讀取 Scratch。 |
緩衝區 | 不 |
客戶端驅動程式不得修改此結構中的任何只讀成員,也不應在呼叫 EvtPacketQueueAdvance期間,將 BeginIndex 增加至超過 EndIndex。
如需有關網狀環中索引擁有權的詳細資訊,請參閱 網狀環簡介。
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 或更大。
- 層類型欄位必須位於適當的列舉範圍內。
傳輸期間不會使用版面配置 。
網路片段
NET_FRAGMENT 欄位規則取決於驅動程式是接收還是傳輸,以及片段緩衝區是否由驅動程式或架構附加至封包。
Rx 或 Tx | 筆記 |
---|---|
Rx |
|
Tx |
|