专利名称:一种在Windows CE操作系统下更改MTU的方法
技术领域:
本发明涉及一种更改MTU的方法,具体地说是一种在Windows CE操作系 统下更改MTU的方法。
背景技术:
Windows CE是微软公司专门为嵌入设备推出的一款嵌入式操作系统。它具 有高可靠性、高实时性、功能强大、界面友好的特点,已经广泛应川于军事、 工控、民用等领域。
MTU是Maximum Transmission Unit的縮写,意思是网络上传送的最大数 据包。MTU的单位是字节。如果本机的MTU比网关的MTU大,大的数据包就会 被拆开来传送,这样会产生很多数据包碎片,增加丢包率,降低网络速度。把 本机的MTU修改为比网关的MTU小或相同,就可以减少丢包。
以往在Windows CE下修改MTU的方法, 一般倾向于采用编译内核源代码 的方式。但由于微软提供的源代码并不完整,所以一般很难完成MTU模块的重 新编译操作。
发明内容
本发明的技术任务是提供一种对微软源代码依赖性小,可靠性高的一种在 Windows CE操作系统下更改MTU的方法。
本发明的技术任务是按以下方式实现的,包括计算机,在计算机内的 Windows CE操作系统下更改MTU,首先要确定影响MTU的动态链接库文件,然 后通过修改这个动态链接库文件中的MTU的二进制数值,来修改MTU。
确定影响MTU的动态链接库文件的具体步骤为
6(1) 、首先新建Platform [程(PlatformBuilder), BSP中选腦LATOR —Mobile handheld,编译环境选EMULATOR:x86—Debug,编译并生成NK文件;
(2) 、然/i:i选择f ileview选项卡,在private\wince()s\ppp2\ppp\APP\ ip一]ntf. c中找到SLIP 一Default—MTU的位置并打上断点,启动Debug;
(3) 、系统启动后建立SL.iP连接,Debug会停在MTU的位置,读MTU当 前在内存中的数值(默认为1006),将其修改其为296;
(4) 、最后,如果能够建立连接成功,则断点设置成功,确定其作用域为 PPP. DLL文件;
修改动态链接库文件中的MTU的二进制数值的具体步骤为
(1) 、首先,使用UltraEdit打开上面建立的Platform工程里RelDir \Emulator—x86J)ebu目录下的PPP. DLL文件,进行分析;
(2) 、然后查找0xEE03(程序代码1006的小端模式),经过进行上位机和 下位机的联调,来确定是否需要修改,需要修改的修改位置为0x2801 (程序代 码296的小端模式);
(3) 、然后,在Platform工程中build OS中选Make進-time Image, 生成新的NK文件;
(4) 、最后,进行EMULATOR调试,直接建立SLIP连接后,若发现数据已 按296自动分包,即MTU的值己成功被修改为296;若不能按296自动分包, 则返回PPP.DLL文件,进行分析。
工p一intf. c中的关键代码如下 void
LinkUpIndication( PPP—CONTEXT *pppContext ) IXIPMTUChange mtuchange;
pppSession一t氺s一p 二 (pppSession一t氺)pppContext一〉Session;PLXPContext
lcp—p = (PIXPContext) s一p-"lcpCntxt;
B00i bAddWorked; DEB1:GMSG (ZONE—FUNCTION, (TEXT(〃PPP: LinkUpInch: cation ( %s ) \n" , pppContext-〉AdapterName )); ASSERT ( pppContext ); if (s—p-〉blsServer)
pppContext-〉f0pen 二 TRUE; // Unlock the session for calls into TCP/IP module pppUnLock( s—p );
DE跳CHK(s—p-〉SesCritSec. OwnerThread! =HANDLE)GetCurrentTh
// Register the new interface with IP bAddWorked 二 PPPAddlnterface (pppContext) , if (bAddWorked)
// Notify upper layer of MTU change according to Mode switch( s—p-〉Mode )
case PPPMODE—PPP:
SetPPPPeerIPAddress(pppContext);
// Use the negotiated peer MTU
mtuchange. lmc—mtu = lcp一p-〉peer. MRU;
break; case PPPMODE—SLIP: case PPPMODE CSLIP:
readld ());
8mtuchange. lmc—mtu = SLIP—DEFAULT—MTU; break; default: ASSERT( 0 );
// Indicate MTU change to IP
ii' (pppContext-〉f0pen && pppContext->IPContext)
IPStatus( pppContext->IPContext, LLIP—STATUS—MTU—CHANGE, &mtuchange,
sizeof( LLIPMTUChange ), NULL);
pppLock (s—p); if (!bAddWorked)
// Unable to register with IP!!!
// IP may be unable to register the interface because the IP address
// is invalid or in use, or there was insufficient memory. //If this happens, we need to terminate the PPP connection. DEBUGMSG(ZONE—ERROR, (TEXT("PPP: ERROR - Unable t。 register interface %s with IP\n"), pppContext-〉AdapterName)); // Request 1XP terminate link
9pppLcp—Close (lcp_p, NULL' NULL);
DEBUGMSG(ZONE—FUNCTION, (TEXT(〃PPP:-LinkUpIndication( %s )\n〃)pppContext-〉Ad邵terName ));
其中,BSP为板级支持包(board support package),是介于主板硬件和操作系统中驱动层程序之间的一层,-一般认为它属于操作系统一部分,主要是实现对操作系统的支持,为上层的驱动程序提供访问硬件设备寄存器的函数包,使之能够更好的运行与硬件主板。
EMULATOR为模拟器,是一种在计算机平台上,基于计算机语言编译的,
可模拟执行特定之硬件平台及其程序的软件程序。
SLIP,英文原义Serial Line Internet Protocol,中文禾畢义串行
线路网际协议。
Debug为一种调试程序,它是可用于测试和调试MS-DOS可执行文件的程序。
UltraEdit是一套功能强大的文本编辑器,可以编辑文本、十六进制、ASCII码,完全可以取代记事本,内建英文单字检查、C++及VB指令突显,可同时编辑多个文件,而且即使开启很大的文件速度也不会慢。软件附有HTML标签颜色显示、搜寻替换以及无限制的还原功能, 一般用其来修改EXE或DLL文件。
本发明的一种在Windows CE操作系统下更改MTU的方法具有以下优点
1、 将本机的MTU修改为比网关的MTU小或相同,这样在数据传送中就可以减少丢包;且提高了传输速度;
2、 本发明减少对微软源代码的依赖,不再需要微软提供全部源代码,就可以对MTU进行修改,提高了产品的自主可控性;和指导作用;
因而,具有很好的推广使用价仿。
下面结合附图对本发明进- -歩说明。
附图1为一种在Windows CE操作系统下更改MTU的方法的流程示意图。
具体实施例方式
参照说明书附图和具体实施例对本发明的一种在Windows CE操作系统下更改MTU的方法作以下详细地说明。实施例
.本发明的一种在Windows CE操作系统下更改MTU的方法,包括计算机,在计算机内的Windows CE操作系统下更改MTU,首先要确定影响MTU的动态链接库文件,然后通过修改这个动态链接库文件中的MTU的二进制数值,来达到修改MTU的目的。
确定影响MTU的动态链接库文件的具体步骤为
(1) 、首先新建Platform工程(Platform Builder), BSP中选EMULATOR—Mobile handheld,编译环境选EMULATOR:x86J)ebug,编译并生成NK文件;
(2) 、然后选择f ileview选项卡,在private\winceos\ppp2\ppp\APP\ip—intf. c中找到SLIP —Default—MTU的位置并打上断点,启动Debug;
(3) 、系统启动后建立SLIP连接,Debug会停在MTU的位置,读MTU当前在内存中的数值(默认为1006),将其修改其为296;
(4) 、最后,如果能够建立连接成功,则断点设置成功,确定其作用域为PPP.DLL文件;
修改动态链接库文件中的MTU的二进制数值的具体步骤为(1)、首先,使用UltraEdit打开上面建立的Platform工程里RelDir\Emulator—x86—Debu目录下的PPP. DLL文件,进行分析;(2) 、然后査找0xEE03(程序代码1006的小端模式),发现一共6个位置,经过进行上位机和下位机的联调,来确定是否需要修改,发现前2个不用修改,修改后面的4个位置为0x2801 (程序代码296的小端模式);
(3) 、然后,在Platform工程中build 0S中选Make run-time Image,生成新的NK文件;
(4) 、最后,进行EMULATOR调试,直接建立SLIP连接后,若发现数据已按296自动分包,即MTU的值已成功被修改为296;若不能按296自动分包,则返回PPP. DLL文件,进行分析。
Ip一intf. c中的关键代码如下void
LinkUpIndication( PPP—CONTEXT印ppContext )LLIPMTUChange mtuchange;
pppSession—t *s—p 二 (pppSession—t 氺)pppContext-〉Session;PIXPContextlcp—p = (PLXPContext) s—p-〉lcpCntxt;B00L bAddWorked;DEBUGMSG(ZONE—FUNCTION, (TEXT(〃PPP:LinkUpIndication( %s )\n"), pppContext-〉AdapterName ));ASSERT( pppContext );if (s—p->bIsServer)
pppContext-〉f0pen = TRUE;// Unlock the session for calls into TCP/IP modulepppUnLock ( s一p );
DEBUGCHK(s—p_〉SesCritSec. 0wnerThread!二HANDLE)GetCurrentTh
readld ());
12// Register the new interface w;i th IP bAddWorked = PPPAddlnterface(pppContext); if (bAddWorked)
// Notify upper layer of MTU change according to Mode switch( s—p-〉Mode )
case PPPMODE—PPP:
SetPPPPeerIPAddress(pppContext);
// Use the negotiated peer MTU mtuchange. Imc—mtu = lcp一p-〉peer. MRU;
break; case PPPMODE—SLIP: case PPPM0DE—CSLIP:
mtuchange. Imc—mtu 二 SLIP一DEFAULT—MTU;
break; default: ASSERT( 0 );
// Indicate MTU change to IP
if (pppContext->f0pen pppContext—>IPContext)
IPStatus( pppContext—>IPContext
LLIP STATUS MTU CHANGE
&mtuchange
sizeof( LLIPMTUChange )
13NULL);
pppLock (s_p); if (!bAddWorked)
// Unable to register with IP!!!
// IP may be unable to register the interface because the IP address
// is invalid or in use, or there was insufficient memory. //If this happens, we need to terminate the PPP cormection. DEBUGMSG(ZONE—ERROR, (TEXT("PPP: ERROR - Unable t。 register interface %s with IP\n〃), pppContext-〉AdapterName)); // Request IXP terminate link PPpLcp—Close (lcp—p, NULL, NULL);
DEBUGMSG(Z0NE—FTJNCTI0N, (TEXT(〃PPP:-Linkliplndication( %s ) \n〃) pppContext->AdapterName ));}。
除说明书所述的技术特征外,均为本专业技术人员的已知技术。
1权利要求
1、一种在Windows CE操作系统下更改MTU的方法,包括计算机,其特征在于在计算机内的Windows CE操作系统下更改MTU,首先要确定影响MTU的动态链接库文件,然后通过修改这个动态链接库文件中的MTU的二进制数值,来修改MTU。
2、 根据权利要求1所述的一种在Windows CE操作系统下更改MTU的方法, 其特征在于确定影响MTU的动态链接库文件的具体步骤为(1) 、首先新建Platform工程,BSP中选EMULATOR—Mobile handheld, 编译环境选EMULATOR :x86一Debug,编译并生成NK文件;(2) 、然后选择f ileview选项卡,在private\winceos\ppp2\ppp\APP\ ip—intf. c 「|-'找至lj SLIP —Default—MTU的位置并打上断点,启动Debug;(3) 、系统启动后建立SLIP连接,Debug会停在MTU的位置,读MTU当 前在内存中的数值,将其修改其为296;(4) 、最后,如果能够建立连接成功,则断点设置成功,确定其作用域为 PPP. DLL文件;修改动态链接库文件中的MTU的二进制数值的具体步骤为(1) 、首先,使用UltmEdit打开上面建立的Platform工程里RelDir \Emulator_x86_Debu目录下的PPP. DLL文件,进行分析;(2) 、然后查找0xEE03,经过进行上位机和下位机的联调,来确定是否 需要修改,需要修改的修改位置为0x2801;(3) 、然后,在Platform工程中build OS中选Make run—time Image, 生成新的NK文件;(4) 、最后,进行EMULATOR调试,直接建立SLIP连接后,若发现数据已 按296自动分包,即MTU的值已成功被修改为296;若不能按296自动分包, 则返回PPP.DLL文件,进行分析。
3、根据权利要求2所述的-'种在Windows CE操作系统下更改MTU的方法, 其特征在于]:p一intf. c中的关键代码如下voidLinkUpIndication( PPP—CONTEXT *pppContext ) LLIPMTUChange mtuchange;pppSession—t 氺s—p = (pppSession—t PPpContext-〉Session; PLCPContextlcp—p = (PLCPContext)s—p-〉lcpCntxt; B00L bA諸orked; DEBUGMSG(ZONE—FUNCTION, (TEXT (〃PPP: LinkUpIndication( %s )\n"), pppContext_>AdapterName )); ASSERT( pppC。ntext ); if (s—p-〉blsServer)pppContext-〉f0pen 二 TRUE; // Unlock the session for calls into TCP/IP module pppUnLock ( s_p );DEBUGCHK(s—p-〉SesCritSec. OwnerThread!二HANDLE)GetCurrentThreadld 0);// Register the new interface with IP bAddWorked = PPPAddlnterface(pppContext); if (bAddWorked)// Notify upper layer of MTU change according to Modeswitch( s—p-〉Mode )case PPPMODE—PPP:SetPPPPeerIPAddress(pppContext);// Use the negotiated peer MTUmtuchange. lmc_mtu = lcp—p-〉peer. MRU;break; case PPPMODE—SLIP: case PPPMODE—CSLIP:mtuchange. lmc—mtu = SLIP一DEFAULT一MTU;break; default: ASSERT( 0 );// Indicate MTU change to IPif (pppContext-〉f0pen && pppContext-〉IPContext) IPStatus( pppContext-〉IPContext,LLIP STATUS MTU CHANGE&mtuchangesizeof ( LLIPMTUChange )NULL);pppl 0Ck (S一p);if 'bAddWorked)// Unable to register with IP!!!/■ / IP may be unable to register the interface because theIP address/7 is invalid or in use, or there was insufficient memory./■/ If this h即pens, we need to terminate th(:〕 PPP connection.DEBUG:VISG(ZONE—ERROR, (TEXT(〃PPP: ERROR - Unable to registerinterface %s with IP\n〃), pppContext-〉AdapterName));/7 Request LXP terminate linkpppLcp—Close(lcp—p, NULL, NULL);DEBUGMSG(ZONE—FUNCTION, (TEXT(〃PPP:-LinkUpIndication( %s )\n〃)pppContext-〉AdapterName ));}。
全文摘要
本发明公开了一种在Windows CE操作系统下更改MTU的方法,属于一种更改MTU的方法,在计算机内的Windows CE操作系统下更改MTU,首先要确定影响MTU的动态链接库文件,然后通过修改这个动态链接库文件中的MTU的二进制数值,来达到修改MTU的目的。本发明的一种在Windows CE操作系统下更改MTU的方法和现有技术相比,使用本方法更改MTU后,在数据传送中就可以减少丢包,且提高了传输速度;本发明减少对微软源代码的依赖,不再需要微软提供全部源代码,就可以对MTU进行修改,提高了产品的自主可控性。
文档编号G06F11/36GK101661426SQ200910018990
公开日2010年3月3日 申请日期2009年9月22日 优先权日2009年9月22日
发明者中 孙, 凯 崔, 牛玉峰, 边守华, 陈乃阔 申请人:山东超越数控电子有限公司