MB 原始 IP 数据包处理支持

在其发送/接收数据路径中支持原始 IP 数据包帧的 MB 微型端口驱动程序应遵循以下准则:

用于原始 IP 数据包处理的净缓冲区列表 (NBL) 标志

  • 对于 IPv4 数据包:

    NET_BUFFER_LIST 结构的 NblFlags 成员必须设置为 NDIS_NBL_FLAGS_IS_IPV4。

    NET_BUFFER_LIST 结构的 NetBufferListFrameType 成员必须设置为按网络字节顺序0x0800 (Ethertype IPv4) 。

  • 对于 IPv6 数据包:

    NET_BUFFER_LIST 结构的 NblFlags 成员必须设置为 NDIS_NBL_FLAGS_IS_IPV6。

    NET_BUFFER_LIST 结构的 NetBufferListFrameType 成员必须设置为按网络字节顺序0x86dd (Ethertype IPv6) 。

微型端口驱动程序可以使用 NdisSetNblFlag 宏在网络缓冲区列表中设置标志。 以下行演示如何在净缓冲区列表中设置 IPv4 数据包标志:

NdisSetNblFlag(pNbl, NDIS_NBL_FLAGS_IS_IPV4);

微型端口驱动程序可以使用 NET_BUFFER_LIST_INFO 获取和设置净缓冲区列表中的信息。 以下行演示如何修改 IPV4 数据包的网络缓冲区列表中的 NetBufferListFrameType OOB:

Value = ConvertToNetworkByteOrder(0x0800);
NET_BUFFER_LIST_INFO(pNbl, NetBufferListFrameType) = Value;

发送路径处理

MB 服务会在 NBL 中设置这些标志,然后再将列表传递给微型端口驱动程序以通过网络发送。 微型端口驱动程序可以验证输入 NBL 中的标志。

接收路径处理

微型端口驱动程序应在 NBL 中设置标志,然后再将 NBL 传递给接收的数据包的 MB 服务。

如果微型端口驱动程序在其驱动程序开发阶段实现了原始 IP 数据包处理,但仍启用了 DHCP 服务器欺骗 (EnableDhcp = 1) ,则微型端口驱动程序应确保以下内容:

  • 微型端口驱动程序的 DHCP 响应中设置的硬件地址及其长度应与NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES结构中微型端口驱动程序指定的 CurrentMacAddressMacAddressLength 成员的值匹配。

  • 事务 ID (来自微型端口驱动程序的 DHCP 响应的 xid 成员) 应与客户端的 DHCP 请求消息中设置的事务 ID 完全匹配。