2016-11-24 130 views
0

我正在爲最近工作的網絡項目尋求幫助和意見建議。這需要Linux機器成爲被動網絡設備。來自NIC的以太網幀

網絡數據包從一個網絡接口進來並從另一個接口(net-eth0 - > Linux PC - eth1 - > net)出來,而不對數據進行任何修改。

即將在Linux系統上運行的應用程序將僅更改數據包的順序。這將是一個「愚蠢的」網絡模擬器應用程序。

第一個實現是使用RAW套接字進行的,每當數據包到達用戶空間時調用read(),並且在將以太網數據包發送到NIC時調用write()。

我想知道是否有比RAW套接字更實用,更直接的方式,繞過Linux的網絡堆棧。

+0

你不能繞過Linux網絡堆棧,他們這樣做的方式可能是最簡單的方法。 你是什麼意思的實際? –

+0

實用的方法是實現的技術部分。套接字的實現需要一個具有非阻塞IO的tx-rx機制,這是我在第一個地方利用select()和pthreads實現的。是否有更好的設計理念? 此外我正在尋找一種方式,中間系統不會處理所有的網絡流量。只有仿真應用程序應該在兩個接口之間運行。 – cyberrobot

+0

你可以做的是創建一個'netfilter'鉤子並讓它接收你的數據包,然後立即發送它們。這樣你的數據包就不必傳送到用戶空間,你可以在內核空間內進行更快的處理。 –

回答

0

如果你想要繞過內核,Linux中的DPDK和FreeBSD中的NetMap都可以做到這一點。

0

事實上,這可以在Linux的dpdk中完成。在dpdk樹的examples文件夾中有l3fw和l2fwd示例應用程序,這可能會激勵你。另請考慮使用vpp,一個由Linux Foundation託管的fd.io項目,它可以使用dpdk。

Rami Rosen