對數(shù)據(jù)的讀寫過程主要是在虛擬驅(qū)動模塊、內(nèi)部通信模塊及上層控制軟件之間進(jìn)行。虛擬驅(qū)動模塊運行在內(nèi)核空間,而內(nèi)部通信模塊運行在用戶空間,因此,主要解決用戶空間與內(nèi)核空間的數(shù)據(jù)傳遞問題。通過memcpy_tofs()及memcpy_fromfs()系統(tǒng)調(diào)用用戶空間與內(nèi)核空間的數(shù)據(jù)交互。
在內(nèi)核中維護(hù)一個由各注冊設(shè)備名稱所組成的動態(tài)鏈表,每個鏈表節(jié)點維護(hù)一個收發(fā)報文的數(shù)據(jù)隊列,虛擬驅(qū)動與其他模塊的數(shù)據(jù)交互都通過該鏈表進(jìn)行。接收報文過程:內(nèi)部通信模塊將從接口單元接收的報文通過ioctl()調(diào)用傳給虛擬驅(qū)動。該函數(shù)通過struct net_device *dev結(jié)構(gòu)找到對應(yīng)的虛擬設(shè)備的dev_ioctl()功能函數(shù),調(diào)用memcpy_fromfs()將數(shù)據(jù)拷貝至內(nèi)核空間,經(jīng)過處理后通過netif_rx()函數(shù)通知上層協(xié)議有數(shù)據(jù)傳入。發(fā)送報文過程:虛擬驅(qū)動將從上層軟件取出的數(shù)據(jù)放至自身維護(hù)的通過虛擬接口設(shè)備名稱維護(hù)的數(shù)據(jù)隊列中,內(nèi)部通信模塊通過ioctl()論詢各接口設(shè)備數(shù)據(jù)隊列是否有數(shù)據(jù)可讀,如果有數(shù)據(jù),虛擬驅(qū)動通過memcpy_tofs()調(diào)用將數(shù)據(jù)拷貝至用戶空間提供的緩沖區(qū)中。
文中針對大規(guī)模用戶接入方式的特性,討論了一種基于ACR/Tbit路由器的硬件抽象層的通用性軟件結(jié)構(gòu)設(shè)計及實現(xiàn)方式,并研究了其關(guān)鍵技術(shù),包括基于UDP傳輸方式的內(nèi)部通信的可靠性實現(xiàn)及基于多用戶的動態(tài)模塊加載技術(shù),適用于路由器承載業(yè)務(wù)量的擴(kuò)展和多用戶接入特性,并且在上層軟件實現(xiàn)中,基本上可以不考慮底層硬件細(xì)節(jié),增強了路由器的開放性及可擴(kuò)展性。
參考文獻(xiàn)
1 S.Keshav, R.Sharma. Issues and trends in router design.
IEEE Communications Magazine[J], 1998;36(5):144~151
2 吳美娟,魏進(jìn)武,陳庶樵,岳 儉.高性能路由器硬件抽象層的設(shè)計與實現(xiàn)[J].計算機科學(xué),2004;31(7)
3 吳美娟,岳 儉.高性能路由器硬件抽象層關(guān)鍵技術(shù)研究[J].現(xiàn)代電子技術(shù),2004;(10)
4 T.Socolofsky,C. Kale.A TCP/IP Tutorial[S]. RFC1180,1991;1
5 Postel J. User Datagram Protocol[S]. RFC768.1980;8
6 ALESSANDRO RUBINI著,LISOLEG譯. LINUX設(shè)備驅(qū)動程序[M],北京:中國電力出版社,2000.4
7 徐 恪,吳建平,江 勇等. 通用路由器軟件體系結(jié)構(gòu)研究綜述[J]. 小型微型計算機系統(tǒng),2001;(4)





