MB 原始 IP 封包處理支援
在傳送/接收資料路徑中支援原始 IP 封包框架的 MB 迷你埠驅動程式應該遵守下列指導方針:
網路緩衝區清單(NBL)旗標,用於原始IP封包處理
針對 IPv4 封包:
NblFlagsNET_BUFFER_LIST 結構的成員必須設定為 NDIS_NBL_FLAGS_IS_IPV4。
NET_BUFFER_LIST 結構中的 NetBufferListFrameType 成員必須以網路位元組順序設定為 0x0800(即乙太網類型 IPv4)。
針對 IPv6 封包:
NET_BUFFER_LIST結構的 NblFlags 成員必須設定為 NDIS_NBL_FLAGS_IS_IPV6。
NetBufferListFrameType NET_BUFFER_LIST 結構的成員必須設定為 0x86dd(以網路位元組順序表示,Ethertype 是 IPv6)。
迷你埠驅動程式可以使用 NdisSetNblFlag 巨集,在網路緩衝區列表中設定旗標。 下列程式代碼列示範如何在 net buffer 清單中設定 IPv4 封包旗標:
NdisSetNblFlag(pNbl, NDIS_NBL_FLAGS_IS_IPV4);
迷你埠驅動程式可以使用 NET_BUFFER_LIST_INFO,在 net 緩衝區清單中取得和設定資訊。 下列程式代碼行示範如何在 IPV4 封包的網路緩衝區清單中修改 NetBufferListFrameType OOB:
Value = ConvertToNetworkByteOrder(0x0800);
NET_BUFFER_LIST_INFO(pNbl, NetBufferListFrameType) = Value;
傳送路徑處理
MB 服務會在 NBL 中設定這些旗標,再將清單傳遞至迷你埠驅動程式,以透過網路傳送。 迷你埠驅動程式可以驗證輸入 NBL 中的旗標。
接收路徑處理
迷你埠驅動程序應該先在 NBL 中設定旗標,再將 NBL 傳遞給已接收封包的 MB 服務。
如果您的迷你埠驅動程式在其驅動程式開發階段實作原始IP封包處理,但仍啟用 DHCP 伺服器詐騙功能(EnableDhcp = 1),您的迷你埠驅動程式應確保下列事項:
在 miniport 驅動程式的 DHCP 回應中設定的硬體位址及其長度,應符合 CurrentMacAddress 和 MacAddressLength NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES 結構中迷你埠驅動程式所指定成員的值。
來自迷你埠驅動程式之 DHCP 回應的交易識別碼(xid 成員)應該完全符合來自用戶端之 DHCP 要求訊息中設定的交易識別碼。