我正在使用网络设备。该设备模拟以太网设备。它使用某些硬件接收数据包,然后使用某些硬件发送数据包。问题在于,设备可以在一个小的窗口时间内多接收一次“相同”的数据包(准确地说,最多可以接收3次),并且需要根据某些标准来决定哪个副本是最佳副本,然后将其仅发送给他。
我的问题是执行此检查的正确位置在哪里,正确的方法是什么?
数据包以设备ID(32位数字)和消息计数器(12位数字)到达,速率为每秒几百条消息。 dev_id和msg_counter对可以用作唯一键,因此可以使用简单的哈希表查找和比较接收到的数据包(这是我目前的想法)。
在预定义的时间后,设备将传输接收到的数据包,我们可以从该记录中释放哈希表。
这是我第一次编写网络设备,我不确定在哪里放置负责检查数据包,存储“最佳”数据的代码并丢弃其余代码。
我也不确定在内核或用户空间中的哪里执行检查?我认为内核更好,因为我拥有内核空间中的所有信息,并且不需要调用任何特殊功能来执行数据包检查。它将节省我从内核空间到用户空间的过渡和复制。
由于数据包的高传输率,我还考虑将NAPI接口用于我的驱动程序。