NDIS NET_BUFFER LIST of Ethernet 字段中的8021q tagged frame 如何制作?
How 8021q tagged frame making in NDIS NET_BUFFER LIST of Ethernet field?
我正在测试我的虚拟驱动程序以获得 HLK 认证。在 HLK 中,他们有 2c_priority 测试将检查 802.1 p 标记数据包的发送。
最初我不支持 802.1p。为了支持 802.1p ,我在 OID_GEN_MAC_OPTIONS
OID 查询中添加了 NDIS_MAC_OPTION_8021P_PRIORITY
和 NDIS_MAC_OPTION_8021Q_VLAN
选项。
在 HLK 测试期间,我跟踪了所有 NetBufferList 以找到具有
的 802.1p 标记帧
NDIS_NET_BUFFER_LIST_8021Q_INFO NdisPacket8021qInfo;
NdisPacket8021qInfo.Value = NET_BUFFER_LIST_INFO(NetBufferList, Ieee8021QNetBufferListInfo);
使用这个,我可以看到
NdisPacket8021qInfo.TagHeader.VlanId = 0 ;
NdisPacket8021qInfo.TagHeader.UserPriority = 5
等..
我可以看到 NdisPacket8021qInfo.TagHeader.UserPriority
值在变化,例如 5、1、6、4 等。
现在我检查我的接收端以检查 Netbufferlist 是否具有相同的优先级。但是我没有看到任何值。
我的疑惑是:
我没有在以太网字段中插入这个 802.1p 标签
发送网络缓冲区列表函数。 HLK本身会在里面加这个标签吗
以太网领域?或者我应该手动添加到 NetBufferList 的以太网字段?
这就是我在接收过程中看不到 802.1p 数据包的原因吗?但
为什么我在接收过程中看不到 NetBufferList 的任何 NDIS_NET_BUFFER_LIST_8021Q_INFO 值?
微型端口 driver 必须在 Tx 期间在实际数据包负载中插入 802.1p 标记。由于您正在构建虚拟 driver,您有 2 个选择:
- 您的 driver 可以编辑以太网帧本身,以手动插入 802.1p 字段。实际上,您将在 14 字节以太网 header 之后插入 4 个字节(尽管要注意 SNAP-framing)。
- 不要编辑以太网帧。相反,将 802.1p 信息传递给您提供给虚拟连接另一端的任何元数据。您可能已经传递了包含数据包长度的元数据——如果可以添加额外的元数据,您可以为 802.1p 数据添加另一个字段。
完成上述其中一项后,您需要在 Rx 端执行相反的操作。要么从数据包负载中去除 802.1p header,要么从元数据中读取 802.1p 信息。然后将 802.1p 信息放入 Rx NBL。
我正在测试我的虚拟驱动程序以获得 HLK 认证。在 HLK 中,他们有 2c_priority 测试将检查 802.1 p 标记数据包的发送。
最初我不支持 802.1p。为了支持 802.1p ,我在 OID_GEN_MAC_OPTIONS
OID 查询中添加了 NDIS_MAC_OPTION_8021P_PRIORITY
和 NDIS_MAC_OPTION_8021Q_VLAN
选项。
在 HLK 测试期间,我跟踪了所有 NetBufferList 以找到具有
的 802.1p 标记帧NDIS_NET_BUFFER_LIST_8021Q_INFO NdisPacket8021qInfo;
NdisPacket8021qInfo.Value = NET_BUFFER_LIST_INFO(NetBufferList, Ieee8021QNetBufferListInfo);
使用这个,我可以看到
NdisPacket8021qInfo.TagHeader.VlanId = 0 ;
NdisPacket8021qInfo.TagHeader.UserPriority = 5
等..
我可以看到 NdisPacket8021qInfo.TagHeader.UserPriority
值在变化,例如 5、1、6、4 等。
现在我检查我的接收端以检查 Netbufferlist 是否具有相同的优先级。但是我没有看到任何值。
我的疑惑是:
我没有在以太网字段中插入这个 802.1p 标签 发送网络缓冲区列表函数。 HLK本身会在里面加这个标签吗 以太网领域?或者我应该手动添加到 NetBufferList 的以太网字段?
这就是我在接收过程中看不到 802.1p 数据包的原因吗?但 为什么我在接收过程中看不到 NetBufferList 的任何 NDIS_NET_BUFFER_LIST_8021Q_INFO 值?
微型端口 driver 必须在 Tx 期间在实际数据包负载中插入 802.1p 标记。由于您正在构建虚拟 driver,您有 2 个选择:
- 您的 driver 可以编辑以太网帧本身,以手动插入 802.1p 字段。实际上,您将在 14 字节以太网 header 之后插入 4 个字节(尽管要注意 SNAP-framing)。
- 不要编辑以太网帧。相反,将 802.1p 信息传递给您提供给虚拟连接另一端的任何元数据。您可能已经传递了包含数据包长度的元数据——如果可以添加额外的元数据,您可以为 802.1p 数据添加另一个字段。
完成上述其中一项后,您需要在 Rx 端执行相反的操作。要么从数据包负载中去除 802.1p header,要么从元数据中读取 802.1p 信息。然后将 802.1p 信息放入 Rx NBL。