Mobile IPv6平臺移植步驟
在Mobile IPv6平臺移植過程中,我們通常使用C語言來編寫代碼,可以保持普遍的語言統一性。現在,我們來了解Mobile IPv6協議棧的主要部分,那么分為四個功能體: 通用功能體、內核功能體、適配層、安全機制。本文主要針對通用功能體進行說明,其余的內容將在《Mobile IPv6功能體實現》中進行說明。
MultiPlat Mobile IPv6三個部分的實現都采用大多數操作系統編譯器支持的標準C語言編寫,這樣可以保持語言的統一性。
通用功能體是協議棧的主要部分,它包含協議棧中絕大多數的代碼,該部分源代碼禁止直接調用基于平臺的系統函數,采用統一的適配層接口函數調用操作系統相關功能。它是在MultiPlat Mobile IPv6平臺移植過程中保持不變的部分。
內核功能體是移植過程的重要部分,移植的主要工作集中在重新編寫這一部分的代碼模塊,它的實現需要根據實際情況選擇具體的實現方式,我們選擇模塊安裝的方法插入操作系統核心。不建議修改操作系統內核源代碼,如修改操作系統源代碼,操作系統升級可能產生新的移植工作,而且大多數的操作系統為非開源系統,修改源代碼并不可行。
適配層起到連接通用功能體與內核功能體以及操作系統的橋梁作用,它直接關系到通用功能體通用性。適配層向通用功能體提供統一的通信接口函數、線程管理函數以及定時函數,避免通用功能體直接調用形式各異的操作系統API函數。
◆通用功能體實現
通用功能體集中了Mobile IPv6協議大多數邏輯處理過程,根據移動相關控制命令報文,觸發操作過程,并維護移動相關數據,是移動切換,路由優化,移動狀態數據產生和維護的管理過程。通用功能體是MultiPlat Mobile IPv6的核心部分,主要完成以下三個方面的功能:移動設備發生移動時根據相關網絡信息發現新的鏈路,在新的鏈路中注冊得到CoA地址,通知HA和CN并進行綁定,在MN和CN之間建立路由優化關系;產生并定期維護移動狀態信息(BC和BUL表);將最新的BC和BUL表信息通知內核功能體,保持準確的接收和發送狀態。
通用功能體啟動消息處理線程和定時器線程兩個關鍵線程。消息處理線程是一個循環監聽過程,通過適配層的通信接口得到Mobile IPv6需要處理的MH報文(MH報文是Mobile IPv6定義的移動相關命令報文)以及ICMP報文,根據具體報文類型和參數分別啟動移動切換、RR過程、家鄉注冊、CN注冊等過程、創建并管理BC、BUL表項;定時器線程根據定時器鏈表定期維護BC、BUL表,調度其它需要定時操作的過程。
MultiPlat Mobile IPv6不采用RAW SOCKET機制截獲Mobile IPv6需要處理的MH報文以及ICMP報文,而是采用內核功能體從NIC驅動程序上端直接截獲將其存入緩沖區,并通過適配層函數向通用功能體傳送的方法實現,這樣做的原因是不同操作系統RAW SOKET機制存在很多差異,不利于通用功能體代碼通用性,采取自己截獲的方法易于統一接口。
通用功能體代碼在MultiPlat Mobile IPv6中占絕大多數,是協議棧中最復雜的處理過程的集合。由于通用功能體需要啟動消息處理線程和定時線程進行管理,并由內核截獲的網絡控制報文驅動相關處理。這些過程必定調用操作系統相關函數(包括線程管理函數、定時函數以及內核通信函數),這些函數因操作系統不同而不同,為了使通用功能體程序代碼保持通用性,我們不直接調用系統相關函數。適配層為其定義一套類似的調用函數,這些函數對通用功能體保持統一的函數名稱和參數格式,以此屏蔽平臺差異。