MB 原始 IP 数据包处理支持

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

用于 RAW IP 数据包 (NBL) 标志的缓冲区列表

  • 对于 IPv4 数据包:

    结构中的 NblFlagsNET_BUFFER_LIST 必须设置为 NDIS_NBL_FLAGS_IS_IPV4。

    必须按网络字节NET_BUFFER_LIST将 0x0800 (Ethertype IPv4) 的 NetBufferListFrameType 成员。

  • 对于 IPv6 数据包:

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

    必须按网络字节NET_BUFFER_LIST将 0x86dd (Ethertype IPv6) 的 NetBufferListFrameType 成员。

微型端口驱动程序可以使用 NdisSetNblFlag 宏在 net 缓冲区列表中设置标志。 以下行演示如何在 net buffer 列表中设置 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 传递到 MB 服务以接收数据包之前,微型端口驱动程序应在 NBL 中设置标志。

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

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

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