專利名稱:一種在Windows CE操作系統(tǒng)下更改MTU的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種更改MTU的方法,具體地說(shuō)是一種在Windows CE操作系 統(tǒng)下更改MTU的方法。
背景技術(shù):
Windows CE是微軟公司專門為嵌入設(shè)備推出的一款嵌入式操作系統(tǒng)。它具 有高可靠性、高實(shí)時(shí)性、功能強(qiáng)大、界面友好的特點(diǎn),已經(jīng)廣泛應(yīng)川于軍事、 工控、民用等領(lǐng)域。
MTU是Maximum Transmission Unit的縮寫,意思是網(wǎng)絡(luò)上傳送的最大數(shù) 據(jù)包。MTU的單位是字節(jié)。如果本機(jī)的MTU比網(wǎng)關(guān)的MTU大,大的數(shù)據(jù)包就會(huì) 被拆開來(lái)傳送,這樣會(huì)產(chǎn)生很多數(shù)據(jù)包碎片,增加丟包率,降低網(wǎng)絡(luò)速度。把 本機(jī)的MTU修改為比網(wǎng)關(guān)的MTU小或相同,就可以減少丟包。
以往在Windows CE下修改MTU的方法, 一般傾向于采用編譯內(nèi)核源代碼 的方式。但由于微軟提供的源代碼并不完整,所以一般很難完成MTU模塊的重 新編譯操作。
發(fā)明內(nèi)容
本發(fā)明的技術(shù)任務(wù)是提供一種對(duì)微軟源代碼依賴性小,可靠性高的一種在 Windows CE操作系統(tǒng)下更改MTU的方法。
本發(fā)明的技術(shù)任務(wù)是按以下方式實(shí)現(xiàn)的,包括計(jì)算機(jī),在計(jì)算機(jī)內(nèi)的 Windows CE操作系統(tǒng)下更改MTU,首先要確定影響MTU的動(dòng)態(tài)鏈接庫(kù)文件,然 后通過(guò)修改這個(gè)動(dòng)態(tài)鏈接庫(kù)文件中的MTU的二進(jìn)制數(shù)值,來(lái)修改MTU。
確定影響MTU的動(dòng)態(tài)鏈接庫(kù)文件的具體步驟為
6(1) 、首先新建Platform [程(PlatformBuilder), BSP中選腦LATOR —Mobile handheld,編譯環(huán)境選EMULATOR:x86—Debug,編譯并生成NK文件;
(2) 、然/i:i選擇f ileview選項(xiàng)卡,在private\wince()s\ppp2\ppp\APP\ ip一]ntf. c中找到SLIP 一Default—MTU的位置并打上斷點(diǎn),啟動(dòng)Debug;
(3) 、系統(tǒng)啟動(dòng)后建立SL.iP連接,Debug會(huì)停在MTU的位置,讀MTU當(dāng) 前在內(nèi)存中的數(shù)值(默認(rèn)為1006),將其修改其為296;
(4) 、最后,如果能夠建立連接成功,則斷點(diǎn)設(shè)置成功,確定其作用域?yàn)?PPP. DLL文件;
修改動(dòng)態(tài)鏈接庫(kù)文件中的MTU的二進(jìn)制數(shù)值的具體步驟為
(1) 、首先,使用UltraEdit打開上面建立的Platform工程里RelDir \Emulator—x86J)ebu目錄下的PPP. DLL文件,進(jìn)行分析;
(2) 、然后查找0xEE03(程序代碼1006的小端模式),經(jīng)過(guò)進(jìn)行上位機(jī)和 下位機(jī)的聯(lián)調(diào),來(lái)確定是否需要修改,需要修改的修改位置為0x2801 (程序代 碼296的小端模式);
(3) 、然后,在Platform工程中build OS中選Make進(jìn)-time Image, 生成新的NK文件;
(4) 、最后,進(jìn)行EMULATOR調(diào)試,直接建立SLIP連接后,若發(fā)現(xiàn)數(shù)據(jù)已 按296自動(dòng)分包,即MTU的值己成功被修改為296;若不能按296自動(dòng)分包, 則返回PPP.DLL文件,進(jìn)行分析。
工p一intf. c中的關(guān)鍵代碼如下 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-〉A(chǔ)dapterName )); 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-〉A(chǔ)dapterName)); // Request 1XP terminate link
9pppLcp—Close (lcp_p, NULL' NULL);
DEBUGMSG(ZONE—FUNCTION, (TEXT(〃PPP:-LinkUpIndication( %s )\n〃)pppContext-〉A(chǔ)d邵terName ));
其中,BSP為板級(jí)支持包(board support package),是介于主板硬件和操作系統(tǒng)中驅(qū)動(dòng)層程序之間的一層,-一般認(rèn)為它屬于操作系統(tǒng)一部分,主要是實(shí)現(xiàn)對(duì)操作系統(tǒng)的支持,為上層的驅(qū)動(dòng)程序提供訪問(wèn)硬件設(shè)備寄存器的函數(shù)包,使之能夠更好的運(yùn)行與硬件主板。
EMULATOR為模擬器,是一種在計(jì)算機(jī)平臺(tái)上,基于計(jì)算機(jī)語(yǔ)言編譯的,
可模擬執(zhí)行特定之硬件平臺(tái)及其程序的軟件程序。
SLIP,英文原義Serial Line Internet Protocol,中文禾畢義串行
線路網(wǎng)際協(xié)議。
Debug為一種調(diào)試程序,它是可用于測(cè)試和調(diào)試MS-DOS可執(zhí)行文件的程序。
UltraEdit是一套功能強(qiáng)大的文本編輯器,可以編輯文本、十六進(jìn)制、ASCII碼,完全可以取代記事本,內(nèi)建英文單字檢查、C++及VB指令突顯,可同時(shí)編輯多個(gè)文件,而且即使開啟很大的文件速度也不會(huì)慢。軟件附有HTML標(biāo)簽顏色顯示、搜尋替換以及無(wú)限制的還原功能, 一般用其來(lái)修改EXE或DLL文件。
本發(fā)明的一種在Windows CE操作系統(tǒng)下更改MTU的方法具有以下優(yōu)點(diǎn)
1、 將本機(jī)的MTU修改為比網(wǎng)關(guān)的MTU小或相同,這樣在數(shù)據(jù)傳送中就可以減少丟包;且提高了傳輸速度;
2、 本發(fā)明減少對(duì)微軟源代碼的依賴,不再需要微軟提供全部源代碼,就可以對(duì)MTU進(jìn)行修改,提高了產(chǎn)品的自主可控性;和指導(dǎo)作用;
因而,具有很好的推廣使用價(jià)仿。
下面結(jié)合附圖對(duì)本發(fā)明進(jìn)- -歩說(shuō)明。
附圖1為一種在Windows CE操作系統(tǒng)下更改MTU的方法的流程示意圖。
具體實(shí)施例方式
參照說(shuō)明書附圖和具體實(shí)施例對(duì)本發(fā)明的一種在Windows CE操作系統(tǒng)下更改MTU的方法作以下詳細(xì)地說(shuō)明。實(shí)施例
.本發(fā)明的一種在Windows CE操作系統(tǒng)下更改MTU的方法,包括計(jì)算機(jī),在計(jì)算機(jī)內(nèi)的Windows CE操作系統(tǒng)下更改MTU,首先要確定影響MTU的動(dòng)態(tài)鏈接庫(kù)文件,然后通過(guò)修改這個(gè)動(dòng)態(tài)鏈接庫(kù)文件中的MTU的二進(jìn)制數(shù)值,來(lái)達(dá)到修改MTU的目的。
確定影響MTU的動(dòng)態(tài)鏈接庫(kù)文件的具體步驟為
(1) 、首先新建Platform工程(Platform Builder), BSP中選EMULATOR—Mobile handheld,編譯環(huán)境選EMULATOR:x86J)ebug,編譯并生成NK文件;
(2) 、然后選擇f ileview選項(xiàng)卡,在private\winceos\ppp2\ppp\APP\ip—intf. c中找到SLIP —Default—MTU的位置并打上斷點(diǎn),啟動(dòng)Debug;
(3) 、系統(tǒng)啟動(dòng)后建立SLIP連接,Debug會(huì)停在MTU的位置,讀MTU當(dāng)前在內(nèi)存中的數(shù)值(默認(rèn)為1006),將其修改其為296;
(4) 、最后,如果能夠建立連接成功,則斷點(diǎn)設(shè)置成功,確定其作用域?yàn)镻PP.DLL文件;
修改動(dòng)態(tài)鏈接庫(kù)文件中的MTU的二進(jìn)制數(shù)值的具體步驟為(1)、首先,使用UltraEdit打開上面建立的Platform工程里RelDir\Emulator—x86—Debu目錄下的PPP. DLL文件,進(jìn)行分析;(2) 、然后査找0xEE03(程序代碼1006的小端模式),發(fā)現(xiàn)一共6個(gè)位置,經(jīng)過(guò)進(jìn)行上位機(jī)和下位機(jī)的聯(lián)調(diào),來(lái)確定是否需要修改,發(fā)現(xiàn)前2個(gè)不用修改,修改后面的4個(gè)位置為0x2801 (程序代碼296的小端模式);
(3) 、然后,在Platform工程中build 0S中選Make run-time Image,生成新的NK文件;
(4) 、最后,進(jìn)行EMULATOR調(diào)試,直接建立SLIP連接后,若發(fā)現(xiàn)數(shù)據(jù)已按296自動(dòng)分包,即MTU的值已成功被修改為296;若不能按296自動(dòng)分包,則返回PPP. DLL文件,進(jìn)行分析。
Ip一intf. c中的關(guān)鍵代碼如下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-〉A(chǔ)dapterName ));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-〉A(chǔ)dapterName)); // Request IXP terminate link PPpLcp—Close (lcp—p, NULL, NULL);
DEBUGMSG(Z0NE—FTJNCTI0N, (TEXT(〃PPP:-Linkliplndication( %s ) \n〃) pppContext->AdapterName ));}。
除說(shuō)明書所述的技術(shù)特征外,均為本專業(yè)技術(shù)人員的已知技術(shù)。
1權(quán)利要求
1、一種在Windows CE操作系統(tǒng)下更改MTU的方法,包括計(jì)算機(jī),其特征在于在計(jì)算機(jī)內(nèi)的Windows CE操作系統(tǒng)下更改MTU,首先要確定影響MTU的動(dòng)態(tài)鏈接庫(kù)文件,然后通過(guò)修改這個(gè)動(dòng)態(tài)鏈接庫(kù)文件中的MTU的二進(jìn)制數(shù)值,來(lái)修改MTU。
2、 根據(jù)權(quán)利要求1所述的一種在Windows CE操作系統(tǒng)下更改MTU的方法, 其特征在于確定影響MTU的動(dòng)態(tài)鏈接庫(kù)文件的具體步驟為(1) 、首先新建Platform工程,BSP中選EMULATOR—Mobile handheld, 編譯環(huán)境選EMULATOR :x86一Debug,編譯并生成NK文件;(2) 、然后選擇f ileview選項(xiàng)卡,在private\winceos\ppp2\ppp\APP\ ip—intf. c 「|-'找至lj SLIP —Default—MTU的位置并打上斷點(diǎn),啟動(dòng)Debug;(3) 、系統(tǒng)啟動(dòng)后建立SLIP連接,Debug會(huì)停在MTU的位置,讀MTU當(dāng) 前在內(nèi)存中的數(shù)值,將其修改其為296;(4) 、最后,如果能夠建立連接成功,則斷點(diǎn)設(shè)置成功,確定其作用域?yàn)?PPP. DLL文件;修改動(dòng)態(tài)鏈接庫(kù)文件中的MTU的二進(jìn)制數(shù)值的具體步驟為(1) 、首先,使用UltmEdit打開上面建立的Platform工程里RelDir \Emulator_x86_Debu目錄下的PPP. DLL文件,進(jìn)行分析;(2) 、然后查找0xEE03,經(jīng)過(guò)進(jìn)行上位機(jī)和下位機(jī)的聯(lián)調(diào),來(lái)確定是否 需要修改,需要修改的修改位置為0x2801;(3) 、然后,在Platform工程中build OS中選Make run—time Image, 生成新的NK文件;(4) 、最后,進(jìn)行EMULATOR調(diào)試,直接建立SLIP連接后,若發(fā)現(xiàn)數(shù)據(jù)已 按296自動(dòng)分包,即MTU的值已成功被修改為296;若不能按296自動(dòng)分包, 則返回PPP.DLL文件,進(jìn)行分析。
3、根據(jù)權(quán)利要求2所述的-'種在Windows CE操作系統(tǒng)下更改MTU的方法, 其特征在于]:p一intf. c中的關(guān)鍵代碼如下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-〉A(chǔ)dapterName));/7 Request LXP terminate linkpppLcp—Close(lcp—p, NULL, NULL);DEBUGMSG(ZONE—FUNCTION, (TEXT(〃PPP:-LinkUpIndication( %s )\n〃)pppContext-〉A(chǔ)dapterName ));}。
全文摘要
本發(fā)明公開了一種在Windows CE操作系統(tǒng)下更改MTU的方法,屬于一種更改MTU的方法,在計(jì)算機(jī)內(nèi)的Windows CE操作系統(tǒng)下更改MTU,首先要確定影響MTU的動(dòng)態(tài)鏈接庫(kù)文件,然后通過(guò)修改這個(gè)動(dòng)態(tài)鏈接庫(kù)文件中的MTU的二進(jìn)制數(shù)值,來(lái)達(dá)到修改MTU的目的。本發(fā)明的一種在Windows CE操作系統(tǒng)下更改MTU的方法和現(xiàn)有技術(shù)相比,使用本方法更改MTU后,在數(shù)據(jù)傳送中就可以減少丟包,且提高了傳輸速度;本發(fā)明減少對(duì)微軟源代碼的依賴,不再需要微軟提供全部源代碼,就可以對(duì)MTU進(jìn)行修改,提高了產(chǎn)品的自主可控性。
文檔編號(hào)G06F11/36GK101661426SQ200910018990
公開日2010年3月3日 申請(qǐng)日期2009年9月22日 優(yōu)先權(quán)日2009年9月22日
發(fā)明者中 孫, 凱 崔, 牛玉峰, 邊守華, 陳乃闊 申請(qǐng)人:山東超越數(shù)控電子有限公司