版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、從Cfgdemo項目來分析協(xié)議棧的啟動項目中靜態(tài)創(chuàng)建的任務有兩個:一個是空閑任務,一個是StackTest任務,main函數(shù)是空的。任務StackTest的優(yōu)先級(5)比空閑任務高。整個程序的初始化部分執(zhí)行完之后,就會執(zhí)行StackTest任務,從而執(zhí)行StackTest()函數(shù)。StackTest()函數(shù)首先調用了NC_SystemOpen()函數(shù),來完成協(xié)議棧系統(tǒng)的初始化工作。必須注意的是:在使用協(xié)議棧之前必須最先調用該函數(shù)。接下來調用函數(shù)CfgNew()來創(chuàng)建一個配置(Configuration)并獲得該配置的句柄,接下來的工作就是在配置中增添配置項(Configuration Entr
2、y),增添配置選項是通過調用CfgAddEntry()函數(shù)實現(xiàn)的。該項目中首先增添的配置項為Host name:從CFGGDEMMO項目目來分析析協(xié)議棧棧的啟動動接著增添添的配置置項為TTelnnet服服務,那那么協(xié)議議棧系統(tǒng)統(tǒng)在啟動動之后會會啟動TTelnnet服服務(創(chuàng)創(chuàng)建了一一個名為為tellnettd的任任務):接著通通過調用用efss_crreattefiile()創(chuàng)建建5個文文件,其其名字分分別為:inddex.htmml、ttibuug.ggif、cfggstaart.cgii、cffgpaass.cgii cffgdoone.cgii;這55個文件件中,前前兩個文文件的數(shù)數(shù)據(jù)分
3、別別存放在在數(shù)組DDEFAAULTT、TIBBUG中,而后三三個文件件實際是是cgii程序,這三個個cgii程序分分別完成成來之客客戶端的的命令請請求:VVieww coonfiigurratiion、Chaangee paasswwordd、Suubmiit cconffiguurattionn,與之之同時,它們動動態(tài)修改改并發(fā)送送了兩個個網(wǎng)頁并并CONNFIGG、USSERMMSG。接著著增添的的配置項項為HTTTP服服務,那那么協(xié)議議棧啟動動之后會會啟動HHttpp服務(創(chuàng)建一一個名為為htttp sservver的的任務) 接接著的增增添的配配置項為為CFGGITEEM_OOS_DDB
4、GPPRINNTLEEVELL,來選選擇打印印的信息息內(nèi)容:接下來調調用函數(shù)數(shù)CfggSavve()來獲取取配置的的大小并并講配置置數(shù)據(jù)存存入一個個緩存中中去,并并釋放配配置。 接下下來調用用函數(shù)NNetBBoott()來來啟動協(xié)協(xié)議棧。這個函函數(shù)是NNDK的的用戶自自己寫的的一個函函數(shù),在在這個函函數(shù)中,調用了了協(xié)議棧棧啟動函函數(shù)NCC_NeetSttartt(),這個函函數(shù)屬于于Nettworrk CConttroll APPI,該該函數(shù)的的源代碼碼可以在在tiiNDDKssrcnettctrrlnnetcctrll.c中中找到。其函數(shù)數(shù)接口如如下:NetBBoott()在在調用NNC_N
5、NetSStarrt()之前調調用CffgNeew()來創(chuàng)建建一個新新的空的的配置,然后再再調用CCfgLLoadd()來來把之前前存入緩緩沖區(qū)中中的配置置好的配配置數(shù)據(jù)據(jù)載入新新的配置置中去,并把它它作為參參數(shù)傳入入NC_NettStaart()中去去,接著著就調用用NC_NettStaart()啟動動協(xié)議棧棧。 NCC_NeetSttartt()函函數(shù)首先先調用了了4個硬硬件抽象象層(HHAL)的四個個初始化化函數(shù),由它們們來完成成底層硬硬件的初初始化(具體細細節(jié)過程程等待進進一步研研究):接著該函函數(shù)調用用CfggSettDeffaullt()把傳入入NC_NettStaart()函數(shù)數(shù)
6、中構建建好的配配置設置置為默認認配置。由于編編程方法法上的需需要,協(xié)協(xié)議棧就就使用配配置是統(tǒng)統(tǒng)一為一一個配置置句柄指指向的配配置。這這樣CffgSeetDeefauult()的本本質就是是把該配配置句柄柄指向傳傳入NCC_NeetSttartt()函函數(shù)中構構建好的的配置。 接著著把傳入入NC_NettStaart()函數(shù)數(shù)的三個個函數(shù)指指針賦值值給三個個全局變變量,以以方便后后面適當當?shù)臅r候候調用:接著調用用協(xié)議棧棧的核心心APII函數(shù)EExeccOpeen()來初始始化協(xié)議議棧的eexeccutiive(自己意意會這個個概念)。 接著著動態(tài)創(chuàng)創(chuàng)建一個個名為CConffigBBoott的任務
7、務,其優(yōu)優(yōu)先級為為15(最高),其執(zhí)執(zhí)行的函函數(shù)是NNS_BBoottTassk()。由于于DSPP/BIIOS是是占先式式實時OOS,所所以一旦旦任務高高優(yōu)先級級的任務務創(chuàng)建,OS內(nèi)內(nèi)核的調調度模塊塊就會自自動切換換到高優(yōu)優(yōu)先級的的任務執(zhí)執(zhí)行。很很顯然,接下來來執(zhí)行的的是函數(shù)數(shù)NS_BoootTaask()。這這個函數(shù)數(shù)的源碼碼在ttiNNDKsrccneetcttrl neetsrrv.cc中可以以找到。NS_BBoottTassk()函數(shù)首首先調用用CfggSettSerrvicce()來Seet SServvicee CaallBBackk Fuuntiionss foor EEver
8、ry CConffiguurattionn Taag,其其意思是是為每個個Connfigguraatioon TTag設設置一個個回調函函數(shù),其其目的是是為了在在修改完完配置之之后能及及時更新新協(xié)議棧棧系統(tǒng),也就是是使協(xié)議議棧系統(tǒng)統(tǒng)隨著配配置的改改變而實實時地改改變。 回調調函數(shù)的的接口定定義如下下:在NDKK的協(xié)議議棧中,Connfigguraatioon TTag共共有如下下8個:其中需要要配置回回調函數(shù)數(shù)的有如如下幾個個:CFFGTAAG_OOS、CCFGTTAG_IP、CFGGTAGG_SEERVIICE、CFGGTAGG_IPPNETT、CFFGTAAG_RROUTTE,它它們的回回
9、調函數(shù)數(shù)分別為為:SPPConnfigg()、SPCConffig()、SSPSeerviice()、SSPIppNett()、SPRRoutte(),這些些回調函函數(shù)的實實現(xiàn)源代代碼都在在tiiNDDKssrcnettctrrl nettsrvv.c可可以找到到。下面分析析以下SSPCoonfiig()函數(shù)是是怎樣實實現(xiàn)實時時更新系系統(tǒng)的:SPCConffig()函數(shù)數(shù)是作為為CFGGTAGG_OSS、CFFGTAAG_IIP的回回調函數(shù)數(shù)的,所所以它必必須負責責處理增增添CFFGTAAG_OOS、CCFGTTAG_IP兩兩種類型型的Coonfiigurratiion Enttry時時的系統(tǒng)
10、統(tǒng)實時更更新工作作。系統(tǒng)統(tǒng)在調CCfgAAddEEntrry函數(shù)數(shù)來增添添一個CCFGTTAG_OS、CFGGTAGG_IPP類型的的配置項項后(注注意:CCfgAAddEEntrry只把把配置數(shù)數(shù)據(jù)添加加到配置置中去),會調調用與該該種配置置類型捆捆綁的的的回調函函數(shù)SPPConnfigg(CffgSeetSeerviice函函數(shù)來完完成捆綁綁工作的的),SSPCoonfiig函數(shù)數(shù)調用CCfgEEntrryInnfo來來獲取該該配置項項的數(shù)據(jù)據(jù)緩沖區(qū)區(qū)的指針針并存放放在變量量pi中,接著更更具Coonfiigurratiion Tagg的類型型來獲取取具體需需要修改改的系統(tǒng)統(tǒng)配置參參數(shù)結構
11、構體;CCFGTTAG_OS OSSENVVCFGG _ooscffg、ooscffgcoopy / CCFGTTAG_IP IPPCONNFIGG _iipcffg、iipcffgcoopy,這兩個個都是全全局變量量,它們們的數(shù)據(jù)據(jù)結構類類型如下下:/ 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; 大家家應該注注意到所所有的成成員都是是32位位的數(shù)據(jù)據(jù)類型,所以這這里的ppi和ppDstt指針都都定義為為指向332位類類型數(shù)據(jù)據(jù)的指針針。在做做完必要要性的檢檢測之后后,就會會把pii指向數(shù)數(shù)據(jù)緩沖沖中的數(shù)數(shù)據(jù)直接接拷貝到到pDsst+IItemm指向的的數(shù)據(jù)緩緩沖中去去。兩個個細節(jié)性性的問題題:1)為什什么只拷拷一個332位?因為這這兩種類類型的CConffiguurattionn的Coonfiigurratiion Enttry都
19、都是322位類型型的數(shù)據(jù)據(jù)。2)為什么么Iteem要事事先減一一?因為為Tagg = CFGGTAGG_OSS / CFGGTAGG_IPP, IItemm的值都都是從11開始的的。這樣系統(tǒng)統(tǒng)的配置置就被修修改了,后面程程序的執(zhí)執(zhí)行就會會根據(jù)新新的配置置去操作作。這里里只分析析了AdddEnntryy的過程程,ReemovveEnntryy的過程程基本上上差不多多,不同同的是用用系統(tǒng)默默認配置置的值去去覆蓋系系統(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); 到這里里大家可可能覺察察到一個個問題:我們的的CfggAdddEnttry函函數(shù)在SStacckTeest任任務的開開始就被被調用,而我們們的回調調函數(shù)是
23、是在后來來才安裝裝上去的的,那么么這些添添加的配配置項是是不是沒沒有被更更新到系系統(tǒng)配置置中去呢呢?沒錯錯,的確確沒有!那我們們怎么辦辦呢?由由于一開開始我們們添加了了多個配配置項,那么這這些配置置項更新新到系統(tǒng)統(tǒng)應該有有一個先先后順序序(可能能它們之之間有什什么依賴賴關系吧吧),因因此,首首先要調調用函數(shù)數(shù)CfggSettExeecutteOrrderr()來來設置,需要注注意的是是這個函函數(shù)不僅僅設定配配置項更更新到系系統(tǒng)配置置中的順順序,同同時也設設定了這這些配置置項從系系統(tǒng)配置置中刪除除的順序序。做好好這些準準備工作作之后,調用CCfgEExeccutee()(其中ffExeecutt
24、e參數(shù)數(shù)值為11)來使使配置項項可以更更新到系系統(tǒng)配置置中去,同也使使能以后后添加的的配置項項也能實實時更新新到系統(tǒng)統(tǒng)配置中中去。注注意:這這個函數(shù)數(shù)必須調調用,否否則你用用CfggAdddEnttry函函數(shù)添加加的配置置項都不不能更新新到系統(tǒng)統(tǒng)配置中中去,即即使你在在安裝好好回調函函數(shù)后調調用CffgAdddEnntryy也不能能。至此此,TCCP/IIP協(xié)議議棧系統(tǒng)統(tǒng)已經(jīng)啟啟動,應應用程序序可以調調用協(xié)議議棧的APII函數(shù)來來實現(xiàn)網(wǎng)網(wǎng)絡通信信等應用用。 接著調用用函數(shù)NNC_BBoottCommpleete(),該該函數(shù)除除了設置置相應的的標志外外,主要要是來執(zhí)執(zhí)行一個個用戶程程序。大大家應該該還記得得NC_NettStaart函函數(shù)的接接口吧,它有三三個函數(shù)數(shù)指針作作為參數(shù)數(shù)傳入,其中第第一個就就在NCC_BoootCCompplette()中調用用:*NNetSStarrt,該該函數(shù)指指針所指指向的函函數(shù)是由由用戶來來實現(xiàn),從而向向用戶提提供一個個機會,由用戶戶自己決決定協(xié)議議棧啟動動之后做做什么工工作。接接著NSS
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 石河子大學《專業(yè)外語文獻閱讀與寫作一》2021-2022學年第一學期期末試卷
- 石河子大學《藥物分析家庭安全合理用藥》2022-2023學年第一學期期末試卷
- 布草洗滌承包合同
- 石河子大學《食品分析實驗》2023-2024學年第一學期期末試卷
- 老年病及預防教案中班
- 沈陽理工大學《三維工程軟件實訓》2021-2022學年期末試卷
- 沈陽理工大學《建筑結構選型》2022-2023學年第一學期期末試卷
- 2018年四川內(nèi)江中考滿分作文《我心中的英雄》3
- 沈陽理工大學《電工與電子技術》2023-2024學年期末試卷
- 光伏承包合伙合同與合伙協(xié)議書
- 2024年初級社會體育指導員(游泳)技能鑒定考試題庫(含答案)
- 湖北省危險廢物監(jiān)管物聯(lián)網(wǎng)系統(tǒng)管理計劃填報說明
- Unit6ADayintheLife教學設計2024-2025學年人教版(2024)英語七年級上冊
- 蘇教版三年級上冊數(shù)學期末考試試卷及解析答案
- 2024年個人勞務承包合同書
- 知道網(wǎng)課智慧《睡眠醫(yī)學(廣州醫(yī)科大學)》測試答案
- 如果歷史是一群喵課件
- 危大工程以及超過一定規(guī)模的危大工程范圍
- 門診導診課件
- 網(wǎng)架吊裝施工專項方案(技術方案)
- 上半年臨床路徑在婦產(chǎn)科的優(yōu)化策略
評論
0/150
提交評論