来自 NIC 的以太网帧

Ethernet frames from NIC

我正在为我最近工作的网络项目寻求帮助和意见建议。这需要 Linux 机器成为被动网络设备。

网络数据包从一个网络接口进来,从另一个接口出来(net--eth0-->LinuxPC--eth1-->net),数据没有做任何修改。

将要在 Linux 系统上 运行 的应用程序将仅更改数据包的顺序。这将是一个 "silly" 网络模拟器应用程序。

第一个实现是使用 RAW 套接字实现的,其中每次数据包到达用户时都会调用 read() space,而当以太网数据包应向下发送到 NIC 时会调用 write()。

我想知道是否有比 RAW 套接字更实用和直接的方法,绕过 Linux 的网络堆栈。

如果您想要绕过内核,Linux 中的 DPDK 和 FreeBSD 中的 NetMap 都是可以做到这一点的选项。

确实这可以在 Linux 中的 dpdk 中完成。在 dpdk 树的 examples 文件夹中有 l3fw 和 l2fwd 示例应用程序,它们可能会对您有所启发。还可以考虑使用 vpp,一个由 Linux Foundation 托管的 fd.io 项目,可以使用 dpdk。

拉米·罗森