当在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