linux下tap的一種使用方法

http://www.ibm.com/developerworks/cn/linux/l-tuntap/

tap的介紹就不說了,請自行參考上面的引用


先說一下應用環境:

採用Tilera的平臺(一種衆核平臺,),三張網卡,兩個10G的xgbe網卡,用來進行數據的發送和接受;一個1G的普通網卡,用來做管理接口.


10G的xgbe工作在Tilera的特定sdk下,其中的數據包不經過內核協議棧,直接交付給用戶。這樣的好處是數據處理效率很高(普通的linux協議棧中需要兩次內存的拷貝,效率低),但是也因此帶來了一些問題,有些包需要交給標準的協議棧 ,比如ospf報文,zebra工作在用戶態,需要從標準的協議棧內獲取網絡數據包,而xgbe是不會直接把數據交付給標準協議棧的。


TAP虛擬網卡是Linux標準的虛擬網絡設備,在Tilera平臺上其編程也是一樣的。

擁有這樣的虛擬網卡後可以利用其通用linux協議棧的特性,並可以將數據包交付應用層的socket程序處理。ospfd程序就可以利用TAP進程收到ospf報文,併發布默認路由出去。


上圖是TAP網卡的收發包流程圖

左側紅色箭頭標示的爲從協議棧經TAP網卡發包標示,對從tap讀進來的包進行一下netio封裝,然後經過xbge發送出去

右側綠色箭頭標示的爲數據包經TAP網卡收至協議棧的流程,調用netio(tilera 特定的網絡編程api)從xgbe中收到發送給tap的報後,經過包處理進程將數據包交付給TAP進程,其實就是將收到的包寫進tap網卡中,這樣用戶進程就可以再內核協議棧中接受到通過xgbe發送來的包。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章