2013-01-05 36 views
6

網卡接收的幀將由驅動程序處理,然後由Linux內核傳遞到協議棧的上層。如何防止內核傳遞數據包到網絡層?

有沒有一種簡單的方法來防止內核傳遞數據包到網絡層?這樣我就可以從數據鏈路層接收幀並自行處理所有數據包(也許應用層程序將被重寫)?

我認爲重新編譯內核是必要的,應該通過修改softirq中的代碼還是像netif_rx或每個cpu的列表隊列中的函數來完成代碼?

事實上,一些同學和我正試圖在用戶空間中實現一個簡化版的TCP/IP協議棧來進行練習,而我們剛剛開始。我正在閱讀一些書籍,如UNP,APUE2,TC​​P/IP插圖v1,v2,Linux網絡架構,linux源代碼等等。我還有其他一些問題,我是否需要發佈另一個問題?

+0

你想做什麼?改變內核可能並不那麼容易。 – prehistoricpenguin

+0

你真的應該描述你試圖解決的問題。下面的答案之一表明netfilter。另一種選擇可能是使用pcap庫直接獲取原始數據包。直到我們知道你真正想要解決什麼問題時,我們纔會知道你的正確答案。 – chetan

+0

我編輯了我的問題,真的期待一些進一步的建議。 –

回答

2

如果您只想自己處理數據包,則可以使用內核模塊netfilter並實現一些掛鉤。您可以輕鬆找到一些代碼示例。

在您的不同掛鉤中,您可以選擇處理數據包並將其返回給內核或將其丟棄。這只是一個要更改的返回碼。

第二十從而使該主題的一些代碼和說明:http://www.linuxjournal.com/article/7184

該解決方案將工作,並沒有太難以實現,但不知道它的到RESOLV你的問題的自然方式。

+0

是的,這個工程。這與我想要的有點不同,但實施起來更簡單。也許我需要找到一些防火牆,它可以丟棄ARP數據包,以便所有數據包都受到控制 –

0

DPDK聽起來像是你正在尋找的東西。