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





