從Cfgdemo項(xiàng)目來分析協(xié)議棧的啟動(dòng)_第1頁
從Cfgdemo項(xiàng)目來分析協(xié)議棧的啟動(dòng)_第2頁
從Cfgdemo項(xiàng)目來分析協(xié)議棧的啟動(dòng)_第3頁
從Cfgdemo項(xiàng)目來分析協(xié)議棧的啟動(dòng)_第4頁
從Cfgdemo項(xiàng)目來分析協(xié)議棧的啟動(dòng)_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、從Cfgdemo項(xiàng)目來分析協(xié)議棧的啟動(dòng)項(xiàng)目中靜態(tài)創(chuàng)建的任務(wù)有兩個(gè):一個(gè)是空閑任務(wù),一個(gè)是StackTest任務(wù),main函數(shù)是空的。任務(wù)StackTest的優(yōu)先級(jí)(5)比空閑任務(wù)高。整個(gè)程序的初始化部分執(zhí)行完之后,就會(huì)執(zhí)行StackTest任務(wù),從而執(zhí)行StackTest()函數(shù)。StackTest()函數(shù)首先調(diào)用了NC_SystemOpen()函數(shù),來完成協(xié)議棧系統(tǒng)的初始化工作。必須注意的是:在使用協(xié)議棧之前必須最先調(diào)用該函數(shù)。接下來調(diào)用函數(shù)CfgNew()來創(chuàng)建一個(gè)配置(Configuration)并獲得該配置的句柄,接下來的工作就是在配置中增添配置項(xiàng)(Configuration Entr

2、y),增添配置選項(xiàng)是通過調(diào)用CfgAddEntry()函數(shù)實(shí)現(xiàn)的。該項(xiàng)目中首先增添的配置項(xiàng)為Host name:從CFGGDEMMO項(xiàng)目目來分析析協(xié)議棧棧的啟動(dòng)動(dòng)接著增添添的配置置項(xiàng)為TTelnnet服服務(wù),那那么協(xié)議議棧系統(tǒng)統(tǒng)在啟動(dòng)動(dòng)之后會(huì)會(huì)啟動(dòng)TTelnnet服服務(wù)(創(chuàng)創(chuàng)建了一一個(gè)名為為tellnettd的任任務(wù)):接著通通過調(diào)用用efss_crreattefiile()創(chuàng)建建5個(gè)文文件,其其名字分分別為:inddex.htmml、ttibuug.ggif、cfggstaart.cgii、cffgpaass.cgii cffgdoone.cgii;這55個(gè)文件件中,前前兩個(gè)文文件的數(shù)數(shù)據(jù)分

3、別別存放在在數(shù)組DDEFAAULTT、TIBBUG中,而后三三個(gè)文件件實(shí)際是是cgii程序,這三個(gè)個(gè)cgii程序分分別完成成來之客客戶端的的命令請(qǐng)請(qǐng)求:VVieww coonfiigurratiion、Chaangee paasswwordd、Suubmiit cconffiguurattionn,與之之同時(shí),它們動(dòng)動(dòng)態(tài)修改改并發(fā)送送了兩個(gè)個(gè)網(wǎng)頁并并CONNFIGG、USSERMMSG。接著著增添的的配置項(xiàng)項(xiàng)為HTTTP服服務(wù),那那么協(xié)議議棧啟動(dòng)動(dòng)之后會(huì)會(huì)啟動(dòng)HHttpp服務(wù)(創(chuàng)建一一個(gè)名為為htttp sservver的的任務(wù)) 接接著的增增添的配配置項(xiàng)為為CFGGITEEM_OOS_DDB

4、GPPRINNTLEEVELL,來選選擇打印印的信息息內(nèi)容:接下來調(diào)調(diào)用函數(shù)數(shù)CfggSavve()來獲取取配置的的大小并并講配置置數(shù)據(jù)存存入一個(gè)個(gè)緩存中中去,并并釋放配配置。 接下下來調(diào)用用函數(shù)NNetBBoott()來來啟動(dòng)協(xié)協(xié)議棧。這個(gè)函函數(shù)是NNDK的的用戶自自己寫的的一個(gè)函函數(shù),在在這個(gè)函函數(shù)中,調(diào)用了了協(xié)議棧棧啟動(dòng)函函數(shù)NCC_NeetSttartt(),這個(gè)函函數(shù)屬于于Nettworrk CConttroll APPI,該該函數(shù)的的源代碼碼可以在在tiiNDDKssrcnettctrrlnnetcctrll.c中中找到。其函數(shù)數(shù)接口如如下:NetBBoott()在在調(diào)用NNC_N

5、NetSStarrt()之前調(diào)調(diào)用CffgNeew()來創(chuàng)建建一個(gè)新新的空的的配置,然后再再調(diào)用CCfgLLoadd()來來把之前前存入緩緩沖區(qū)中中的配置置好的配配置數(shù)據(jù)據(jù)載入新新的配置置中去,并把它它作為參參數(shù)傳入入NC_NettStaart()中去去,接著著就調(diào)用用NC_NettStaart()啟動(dòng)動(dòng)協(xié)議棧棧。 NCC_NeetSttartt()函函數(shù)首先先調(diào)用了了4個(gè)硬硬件抽象象層(HHAL)的四個(gè)個(gè)初始化化函數(shù),由它們們來完成成底層硬硬件的初初始化(具體細(xì)細(xì)節(jié)過程程等待進(jìn)進(jìn)一步研研究):接著該函函數(shù)調(diào)用用CfggSettDeffaullt()把傳入入NC_NettStaart()函數(shù)數(shù)

6、中構(gòu)建建好的配配置設(shè)置置為默認(rèn)認(rèn)配置。由于編編程方法法上的需需要,協(xié)協(xié)議棧就就使用配配置是統(tǒng)統(tǒng)一為一一個(gè)配置置句柄指指向的配配置。這這樣CffgSeetDeefauult()的本本質(zhì)就是是把該配配置句柄柄指向傳傳入NCC_NeetSttartt()函函數(shù)中構(gòu)構(gòu)建好的的配置。 接著著把傳入入NC_NettStaart()函數(shù)數(shù)的三個(gè)個(gè)函數(shù)指指針賦值值給三個(gè)個(gè)全局變變量,以以方便后后面適當(dāng)當(dāng)?shù)臅r(shí)候候調(diào)用:接著調(diào)用用協(xié)議棧棧的核心心APII函數(shù)EExeccOpeen()來初始始化協(xié)議議棧的eexeccutiive(自己意意會(huì)這個(gè)個(gè)概念)。 接著著動(dòng)態(tài)創(chuàng)創(chuàng)建一個(gè)個(gè)名為CConffigBBoott的任務(wù)

7、務(wù),其優(yōu)優(yōu)先級(jí)為為15(最高),其執(zhí)執(zhí)行的函函數(shù)是NNS_BBoottTassk()。由于于DSPP/BIIOS是是占先式式實(shí)時(shí)OOS,所所以一旦旦任務(wù)高高優(yōu)先級(jí)級(jí)的任務(wù)務(wù)創(chuàng)建,OS內(nèi)內(nèi)核的調(diào)調(diào)度模塊塊就會(huì)自自動(dòng)切換換到高優(yōu)優(yōu)先級(jí)的的任務(wù)執(zhí)執(zhí)行。很很顯然,接下來來執(zhí)行的的是函數(shù)數(shù)NS_BoootTaask()。這這個(gè)函數(shù)數(shù)的源碼碼在ttiNNDKsrccneetcttrl neetsrrv.cc中可以以找到。NS_BBoottTassk()函數(shù)首首先調(diào)用用CfggSettSerrvicce()來Seet SServvicee CaallBBackk Fuuntiionss foor EEver

8、ry CConffiguurattionn Taag,其其意思是是為每個(gè)個(gè)Connfigguraatioon TTag設(shè)設(shè)置一個(gè)個(gè)回調(diào)函函數(shù),其其目的是是為了在在修改完完配置之之后能及及時(shí)更新新協(xié)議棧棧系統(tǒng),也就是是使協(xié)議議棧系統(tǒng)統(tǒng)隨著配配置的改改變而實(shí)實(shí)時(shí)地改改變。 回調(diào)調(diào)函數(shù)的的接口定定義如下下:在NDKK的協(xié)議議棧中,Connfigguraatioon TTag共共有如下下8個(gè):其中需要要配置回回調(diào)函數(shù)數(shù)的有如如下幾個(gè)個(gè):CFFGTAAG_OOS、CCFGTTAG_IP、CFGGTAGG_SEERVIICE、CFGGTAGG_IPPNETT、CFFGTAAG_RROUTTE,它它們的回回

9、調(diào)函數(shù)數(shù)分別為為:SPPConnfigg()、SPCConffig()、SSPSeerviice()、SSPIppNett()、SPRRoutte(),這些些回調(diào)函函數(shù)的實(shí)實(shí)現(xiàn)源代代碼都在在tiiNDDKssrcnettctrrl nettsrvv.c可可以找到到。下面分析析以下SSPCoonfiig()函數(shù)是是怎樣實(shí)實(shí)現(xiàn)實(shí)時(shí)時(shí)更新系系統(tǒng)的:SPCConffig()函數(shù)數(shù)是作為為CFGGTAGG_OSS、CFFGTAAG_IIP的回回調(diào)函數(shù)數(shù)的,所所以它必必須負(fù)責(zé)責(zé)處理增增添CFFGTAAG_OOS、CCFGTTAG_IP兩兩種類型型的Coonfiigurratiion Enttry時(shí)時(shí)的系統(tǒng)

10、統(tǒng)實(shí)時(shí)更更新工作作。系統(tǒng)統(tǒng)在調(diào)CCfgAAddEEntrry函數(shù)數(shù)來增添添一個(gè)CCFGTTAG_OS、CFGGTAGG_IPP類型的的配置項(xiàng)項(xiàng)后(注注意:CCfgAAddEEntrry只把把配置數(shù)數(shù)據(jù)添加加到配置置中去),會(huì)調(diào)調(diào)用與該該種配置置類型捆捆綁的的的回調(diào)函函數(shù)SPPConnfigg(CffgSeetSeerviice函函數(shù)來完完成捆綁綁工作的的),SSPCoonfiig函數(shù)數(shù)調(diào)用CCfgEEntrryInnfo來來獲取該該配置項(xiàng)項(xiàng)的數(shù)據(jù)據(jù)緩沖區(qū)區(qū)的指針針并存放放在變量量pi中,接著更更具Coonfiigurratiion Tagg的類型型來獲取取具體需需要修改改的系統(tǒng)統(tǒng)配置參參數(shù)結(jié)構(gòu)

11、構(gòu)體;CCFGTTAG_OS OSSENVVCFGG _ooscffg、ooscffgcoopy / CCFGTTAG_IP IPPCONNFIGG _iipcffg、iipcffgcoopy,這兩個(gè)個(gè)都是全全局變量量,它們們的數(shù)據(jù)據(jù)結(jié)構(gòu)類類型如下下:/ CConffiguurattionn Sttruccturretypeedeff sttrucct _ipcconffig uiint IcmmpDooReddireect; / Uppdatte RRtTaablee onn ICCMP reddireect (1=Yess) uiint IcmmpTttl; / TTTL forr ICC

12、MP messsagges RFCC17000 ssayss 644 uiint IcmmpTttlEccho;TTL forr ICCMP echho RRFC117000 saays 64 uiint IpIIndeex; / IIP SStarrt IIndeex uiint IpFForwwarddingg; / IIP FForwwarddingg (11 = Enaableed) uiint IpNNatEEnabble; / IIP NNAT Enaablee (11 = Yess) uiint IpFFiltterEEnabble; / IPP Fiilteerinng EEn

13、abble (1 = YYes) uiint IpRReassmMaaxTiime; / Maax rreasssemmblyy tiime in secconddsuintt IppReaasmMMaxSSizee; / MMax reaasseemblly ppackket sizze uiint IpDDireecteedBCCastt; / Loook forr diirecctedd BCCastt IPP adddreessees uiint TcppReaasmMMaxPPkt; / Maax rreassm ppktss heeld by TCPP soockeet uiint

14、 RtccEnaableeDebbug; / Ennablle RRoutte CConttroll Meessaagess (11=Onn) uiint RtccAdvvTimme; / TTimee inn seec tto ssendd RttAdvv (00=doontt)&nbbsp; uiint RtccAdvvLiffe; / LLiteetimme oof rroutte iin RRtAddv innt RtccAdvvPreef; / PPreffereencee Leevell (ssignned) inn RttAdvv uiint RtAArpDDownnTimme;

15、 / Timme 55 faaileed AARPss keeep Rt dowwn (secc) uiint RtKKeeppaliiveTTimee; / VAALIDDATEED rroutte ttimeeoutt (ssec) uiint RtCClonneTiimeoout; / INNITIIAL rouute timmeouut (secc) uiint RtDDefaaulttMTUU; / DDefaaultt MTTU ffor intternnal rouutes uiint SocckTttlDeefauult; / Deefauult Pacckett TTTL u

16、iint SocckToosDeefauult; / Deefauult Pacckett TOOS innt SocckMaaxCoonneect; / Maxx Soockeet CConnnecttionns uiint SocckTiimeCConnnectt; / Maax ttimee too coonneect (seec) uiint SocckTiimeIIo; / DDefaaultt Soockeet IIO ttimeeoutt (ssec) innt SocckBuufMaax; &nbssp; / Abssoluute maxx Soockeet bbufffer

17、sizze innt SocckBuufMiinTxx; / MMin Tx sspacce ffor abble to wriite innt SocckBuufMiinRxx; / MMin Rx datta ffor abble to reaad uiint PippeTiimeIIo; / DDefaaultt Piipe IO timmeouut (secc) innt PippeBuufSiize; / PPipee innterrnall buuffeer ssizee innt PippeBuufMiinTxx;/ MMin Tx spaace forr aablee too

18、wrritee innt PippeBuufMiinRxx; / MMin Rx datta ffor abble to reaad IPCCONFFIG; 大家家應(yīng)該注注意到所所有的成成員都是是32位位的數(shù)據(jù)據(jù)類型,所以這這里的ppi和ppDstt指針都都定義為為指向332位類類型數(shù)據(jù)據(jù)的指針針。在做做完必要要性的檢檢測(cè)之后后,就會(huì)會(huì)把pii指向數(shù)數(shù)據(jù)緩沖沖中的數(shù)數(shù)據(jù)直接接拷貝到到pDsst+IItemm指向的的數(shù)據(jù)緩緩沖中去去。兩個(gè)個(gè)細(xì)節(jié)性性的問題題:1)為什什么只拷拷一個(gè)332位?因?yàn)檫@這兩種類類型的CConffiguurattionn的Coonfiigurratiion Enttry都

19、都是322位類型型的數(shù)據(jù)據(jù)。2)為什么么Iteem要事事先減一一?因?yàn)闉門agg = CFGGTAGG_OSS / CFGGTAGG_IPP, IItemm的值都都是從11開始的的。這樣系統(tǒng)統(tǒng)的配置置就被修修改了,后面程程序的執(zhí)執(zhí)行就會(huì)會(huì)根據(jù)新新的配置置去操作作。這里里只分析析了AdddEnntryy的過程程,ReemovveEnntryy的過程程基本上上差不多多,不同同的是用用系統(tǒng)默默認(rèn)配置置的值去去覆蓋系系統(tǒng)配置置。 /-/ SSPCoonfiig() - CFGGTAGG_IPP annd CCFGTTAG_OS Serrvicce PProvvideer/-stattic intt S

20、PPConnfigg(HAANDLLE hhCfgg, uuintt Taag, uinnt IItemm, uuintt Opp, HHANDDLE hCffgEnntryy) uinnt *pi,*pddst,*pddef;&nnbsp; (vvoidd)hCCfg; / Gett thhe iinfoormaatioon if( CffgEnntryyInffo( hCffgEnntryy, 00, (UINNT8 *)(&ppi) ) CFGGITEEM_IIP_MMAX ) rretuurn( -11 ); pddst = (uinnt *)&_ipccfg; pdeef = (uu

21、intt *)&ippcfggcoppy; ellse if( Taag = CCFGTTAG_OS ) / Booundd thhe vvaluue oof IItemm iff( IItemm CFGGITEEM_OOS_MMAX ) rretuurn( -11 ); pddst = (uinnt *)&_osccfg; pddef = (uinnt *)&ooscffgcoopy; eelsee reeturrn( -1 ); / Verrifyy Ittem if( !IItemm ) reeturrn( -1 ); Iteem - -; / If thiis iis aan addd

22、, addd thhe eentrry if( Opp = CFFGOPP_ADDD ) *(pdsst+IItemm) = *ppi; / EElsee iff rremoove, rresttoree thhe ddefaaultt ellse if( Opp = CFFGOPP_REEMOVVE ) *(pdsst+IItemm) = *(pdeef+IItemm); / Retturnn suucceess retturnn(1); 到這里里大家可可能覺察察到一個(gè)個(gè)問題:我們的的CfggAdddEnttry函函數(shù)在SStacckTeest任任務(wù)的開開始就被被調(diào)用,而我們們的回調(diào)調(diào)函數(shù)是

23、是在后來來才安裝裝上去的的,那么么這些添添加的配配置項(xiàng)是是不是沒沒有被更更新到系系統(tǒng)配置置中去呢呢?沒錯(cuò)錯(cuò),的確確沒有!那我們們?cè)趺崔k辦呢?由由于一開開始我們們添加了了多個(gè)配配置項(xiàng),那么這這些配置置項(xiàng)更新新到系統(tǒng)統(tǒng)應(yīng)該有有一個(gè)先先后順序序(可能能它們之之間有什什么依賴賴關(guān)系吧吧),因因此,首首先要調(diào)調(diào)用函數(shù)數(shù)CfggSettExeecutteOrrderr()來來設(shè)置,需要注注意的是是這個(gè)函函數(shù)不僅僅設(shè)定配配置項(xiàng)更更新到系系統(tǒng)配置置中的順順序,同同時(shí)也設(shè)設(shè)定了這這些配置置項(xiàng)從系系統(tǒng)配置置中刪除除的順序序。做好好這些準(zhǔn)準(zhǔn)備工作作之后,調(diào)用CCfgEExeccutee()(其中ffExeecutt

24、e參數(shù)數(shù)值為11)來使使配置項(xiàng)項(xiàng)可以更更新到系系統(tǒng)配置置中去,同也使使能以后后添加的的配置項(xiàng)項(xiàng)也能實(shí)實(shí)時(shí)更新新到系統(tǒng)統(tǒng)配置中中去。注注意:這這個(gè)函數(shù)數(shù)必須調(diào)調(diào)用,否否則你用用CfggAdddEnttry函函數(shù)添加加的配置置項(xiàng)都不不能更新新到系統(tǒng)統(tǒng)配置中中去,即即使你在在安裝好好回調(diào)函函數(shù)后調(diào)調(diào)用CffgAdddEnntryy也不能能。至此此,TCCP/IIP協(xié)議議棧系統(tǒng)統(tǒng)已經(jīng)啟啟動(dòng),應(yīng)應(yīng)用程序序可以調(diào)調(diào)用協(xié)議議棧的APII函數(shù)來來實(shí)現(xiàn)網(wǎng)網(wǎng)絡(luò)通信信等應(yīng)用用。 接著調(diào)用用函數(shù)NNC_BBoottCommpleete(),該該函數(shù)除除了設(shè)置置相應(yīng)的的標(biāo)志外外,主要要是來執(zhí)執(zhí)行一個(gè)個(gè)用戶程程序。大大家應(yīng)該該還記得得NC_NettStaart函函數(shù)的接接口吧,它有三三個(gè)函數(shù)數(shù)指針作作為參數(shù)數(shù)傳入,其中第第一個(gè)就就在NCC_BoootCCompplette()中調(diào)用用:*NNetSStarrt,該該函數(shù)指指針?biāo)钢赶虻暮瘮?shù)是由由用戶來來實(shí)現(xiàn),從而向向用戶提提供一個(gè)個(gè)機(jī)會(huì),由用戶戶自己決決定協(xié)議議棧啟動(dòng)動(dòng)之后做做什么工工作。接接著NSS

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論