當在WinCE系統中添加一個網卡時,操作系統會自動生成相關的路由信息,利用CE系統自帶的route命令可以查看系統當前所有的路由記錄。下圖是預裝WEC7的ESM6802工控主板的路由表,其中Destination和Netmask為0.0.0.0的記錄表明這是系統缺省路由,缺省路由的意思是當要發送數據包的目標網絡地址不在系統的路由記錄中時,系統會將該數據包通過缺省路由對應的接口(網卡)發送出去。
路由記錄中的Metric為躍點數,當系統中有多個缺省路由時,數據包會通過Metric更低的接口傳輸。如果系統中有多個網絡接口,則可利用Metric來選擇網絡數據的優先傳輸路徑。使用WinCE系統自帶route命令即可修改路由記錄的Metric值,但通過命令行執行route命令相對來講不夠直觀,因此我們實現了一個帶界面的路由表編輯程序GRoute,如下圖是在ESM6802上運行GRoute后,程序顯示的系統路由表,路由表中同時指明了每條記錄對應的網絡接口名稱。GRoute程序支持添加、修改和刪除路由記錄等功能。
上圖GRoute程序顯示的路由表中,網絡目標和網絡掩碼為0.0.0.0的缺省路由ENET1和ENET2是ESM6802的兩個以太網接口,除此之前還有3條缺省路由:
COM1:當WinCE主板通過ActiveSync與電腦連接時生成的虛擬網絡連接,實際使用時可忽略。
HUAWEI EM770W MODEM:華為EM770W 3G模塊撥號上網后生成的路由記錄。
ETA6210 WIFI MODEM:ETA6210 WiFi模塊連接到網絡后生成的路由路由記錄。
上面的缺省路由記錄中,有線以太網NENT1、NENT2和Metric分別為21和31,WiFi連接和EM770W 3G撥號連接的Metric為11。基于當前的路由表,網絡數據會優先選擇3G撥號連接或WiFi網絡路徑。在實際應用中,通常希望數據優先從有線以太網接口傳輸,然后是WiFi,最后才走4G/3G網絡,此時就需要手動修改路由表以實現選路需求。為了方便用戶使用, GRoute程序直接提供了網絡優先級配置功能,如下圖,一旦勾選了“配置網絡優先級”,GRoute程序會自動修改WiFi和PPP撥號連接的Metric值,實現網絡優先級的配置。
當網絡狀態發生變化時(比如PPP撥號斷線重連),系統會重新生成新的路由記錄,可以在勾選GRoute程序“配置網絡優先級”的同時勾選“定時刷新”功能,GRoute程序就會每隔幾秒檢查一下路由表并配置網絡優先級。
GRoute也可以作為控制臺程序啟動運行,當通過命令行執行GRoute程序并帶上刷新時間參數時, GRoute啟動后不顯示界面,保持在后臺每隔一定時間檢查/設置網絡優先級。
在應用程序中可以通過CreateProcess啟動GRoute程序,此時同樣需要帶上刷新時間參數,如果用戶不希望GRoute在屏幕上顯示任何信息,可以增加/d或-d參數,相關的信息就會從系統的COM_DBG口輸出。應用程序中調用GRoute方法比下:
PROCESS_INFORMATION procInfo;
TCHAR szCmdLine[20] = L"5 -d"; // 注意參數之間需要至少一個空格分隔
if( !CreateProcess( L"\\edisk\\groute.exe", szCmdLine, NULL, NULL, FALSE, 0, NULL, NULL, NULL, &procInfo ) )
TRACE( L"CreateProcess failure!" );
WinCE自帶的tracer命令用于跟蹤網絡數據的傳輸路徑,可以驗證上面設置Metric值選路的方法是否有效,感興趣的用戶可以自行測試。
成都英創信息技術有限公司 028-8618 0660