Linux网络驱动程序-在哪里测试收到的数据包并在必要时将其丢弃?

时间:2019-05-02 16:27:56

标签: linux-device-driver

我正在使用网络设备。该设备模拟以太网设备。它使用某些硬件接收数据包,然后使用某些硬件发送数据包。问题在于,设备可以在一个小的窗口时间内多接收一次“相同”的数据包(准确地说,最多可以接收3次),并且需要根据某些标准来决定哪个副本是最佳副本,然后将其仅发送给他。

我的问题是执行此检查的正确位置在哪里,正确的方法是什么?

数据包以设备ID(32位数字)和消息计数器(12位数字)到达,速率为每秒几百条消息。 dev_id和msg_counter对可以用作唯一键,因此可以使用简单的哈希表查找和比较接收到的数据包(这是我目前的想法)。

在预定义的时间后,设备将传输接收到的数据包,我们可以从该记录中释放哈希表。

这是我第一次编写网络设备,我不确定在哪里放置负责检查数据包,存储“最佳”数据的代码并丢弃其余代码。

我也不确定在内核或用户空间中的哪里执行检查?我认为内核更好,因为我拥有内核空间中的所有信息,并且不需要调用任何特殊功能来执行数据包检查。它将节省我从内核空间到用户空间的过渡和复制。

由于数据包的高传输率,我还考虑将NAPI接口用于我的驱动程序。

0 个答案:

没有答案