我正在测试我的虚拟驱动程序以获得HLK认证。在HLK中,他们有2c_priority测试,它将检查802.1p标记数据包的发送。
最初我不支持802.1p。为了支持802.1p,我在NDIS_MAC_OPTION_8021P_PRIORITY
OID查询中添加了NDIS_MAC_OPTION_8021Q_VLAN
和OID_GEN_MAC_OPTIONS
个选项。
在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标签 sendNetBufferList函数。 HLK本身会在里面添加这个标签 以太网领域?或者我应该手动添加到NetBufferList的以太网字段?
这就是为什么我在接收过程中看不到802.1p数据包的原因?但 为什么我在接收过程中看不到NetBufferList的任何NDIS_NET_BUFFER_LIST_8021Q_INFO值?
答案 0 :(得分:1)
微型端口驱动程序必须在Tx期间在实际数据包有效负载内插入802.1p标记。由于您正在构建虚拟驱动程序,因此您有两个选项:
完成上述任何一项后,您需要在Rx端执行相反的操作。从数据包有效负载中剥离802.1p标头,或从元数据中读取802.1p信息。然后将802.1p信息放入Rx NBL。