版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、从Cfgdemo项目来分析协议栈的启动项目中静态创建的任务有两个:一个是空闲任务,一个是StackTest任务,main函数是空的。任务StackTest的优先级(5)比空闲任务高。整个程序的初始化部分执行完之后,就会执行StackTest任务,从而执行StackTest()函数。StackTest()函数首先调用了NC_SystemOpen()函数,来完成协议栈系统的初始化工作。必须注意的是:在使用协议栈之前必须最先调用该函数。接下来调用函数CfgNew()来创建一个配置(Configuration)并获得该配置的句柄,接下来的工作就是在配置中增添配置项(Configuration Entr
2、y),增添配置选项是通过调用CfgAddEntry()函数实现的。该项目中首先增添的配置项为Host name:从CFGGDEMMO项目目来分析析协议栈栈的启动动接着增添添的配置置项为TTelnnet服服务,那那么协议议栈系统统在启动动之后会会启动TTelnnet服服务(创创建了一一个名为为tellnettd的任任务):接着通通过调用用efss_crreattefiile()创建建5个文文件,其其名字分分别为:inddex.htmml、ttibuug.ggif、cfggstaart.cgii、cffgpaass.cgii cffgdoone.cgii;这55个文件件中,前前两个文文件的数数据分
3、别别存放在在数组DDEFAAULTT、TIBBUG中,而后三三个文件件实际是是cgii程序,这三个个cgii程序分分别完成成来之客客户端的的命令请请求:VVieww coonfiigurratiion、Chaangee paasswwordd、Suubmiit cconffiguurattionn,与之之同时,它们动动态修改改并发送送了两个个网页并并CONNFIGG、USSERMMSG。接着着增添的的配置项项为HTTTP服服务,那那么协议议栈启动动之后会会启动HHttpp服务(创建一一个名为为htttp sservver的的任务) 接接着的增增添的配配置项为为CFGGITEEM_OOS_DDB
4、GPPRINNTLEEVELL,来选选择打印印的信息息内容:接下来调调用函数数CfggSavve()来获取取配置的的大小并并讲配置置数据存存入一个个缓存中中去,并并释放配配置。 接下下来调用用函数NNetBBoott()来来启动协协议栈。这个函函数是NNDK的的用户自自己写的的一个函函数,在在这个函函数中,调用了了协议栈栈启动函函数NCC_NeetSttartt(),这个函函数属于于Nettworrk CConttroll APPI,该该函数的的源代码码可以在在tiiNDDKssrcnettctrrlnnetcctrll.c中中找到。其函数数接口如如下:NetBBoott()在在调用NNC_N
5、NetSStarrt()之前调调用CffgNeew()来创建建一个新新的空的的配置,然后再再调用CCfgLLoadd()来来把之前前存入缓缓冲区中中的配置置好的配配置数据据载入新新的配置置中去,并把它它作为参参数传入入NC_NettStaart()中去去,接着着就调用用NC_NettStaart()启动动协议栈栈。 NCC_NeetSttartt()函函数首先先调用了了4个硬硬件抽象象层(HHAL)的四个个初始化化函数,由它们们来完成成底层硬硬件的初初始化(具体细细节过程程等待进进一步研研究):接着该函函数调用用CfggSettDeffaullt()把传入入NC_NettStaart()函数数
6、中构建建好的配配置设置置为默认认配置。由于编编程方法法上的需需要,协协议栈就就使用配配置是统统一为一一个配置置句柄指指向的配配置。这这样CffgSeetDeefauult()的本本质就是是把该配配置句柄柄指向传传入NCC_NeetSttartt()函函数中构构建好的的配置。 接着着把传入入NC_NettStaart()函数数的三个个函数指指针赋值值给三个个全局变变量,以以方便后后面适当当的时候候调用:接着调用用协议栈栈的核心心APII函数EExeccOpeen()来初始始化协议议栈的eexeccutiive(自己意意会这个个概念)。 接着着动态创创建一个个名为CConffigBBoott的任务
7、务,其优优先级为为15(最高),其执执行的函函数是NNS_BBoottTassk()。由于于DSPP/BIIOS是是占先式式实时OOS,所所以一旦旦任务高高优先级级的任务务创建,OS内内核的调调度模块块就会自自动切换换到高优优先级的的任务执执行。很很显然,接下来来执行的的是函数数NS_BoootTaask()。这这个函数数的源码码在ttiNNDKsrccneetcttrl neetsrrv.cc中可以以找到。NS_BBoottTassk()函数首首先调用用CfggSettSerrvicce()来Seet SServvicee CaallBBackk Fuuntiionss foor EEver
8、ry CConffiguurattionn Taag,其其意思是是为每个个Connfigguraatioon TTag设设置一个个回调函函数,其其目的是是为了在在修改完完配置之之后能及及时更新新协议栈栈系统,也就是是使协议议栈系统统随着配配置的改改变而实实时地改改变。 回调调函数的的接口定定义如下下:在NDKK的协议议栈中,Connfigguraatioon TTag共共有如下下8个:其中需要要配置回回调函数数的有如如下几个个:CFFGTAAG_OOS、CCFGTTAG_IP、CFGGTAGG_SEERVIICE、CFGGTAGG_IPPNETT、CFFGTAAG_RROUTTE,它它们的回回
9、调函数数分别为为:SPPConnfigg()、SPCConffig()、SSPSeerviice()、SSPIppNett()、SPRRoutte(),这些些回调函函数的实实现源代代码都在在tiiNDDKssrcnettctrrl nettsrvv.c可可以找到到。下面分析析以下SSPCoonfiig()函数是是怎样实实现实时时更新系系统的:SPCConffig()函数数是作为为CFGGTAGG_OSS、CFFGTAAG_IIP的回回调函数数的,所所以它必必须负责责处理增增添CFFGTAAG_OOS、CCFGTTAG_IP两两种类型型的Coonfiigurratiion Enttry时时的系统
10、统实时更更新工作作。系统统在调CCfgAAddEEntrry函数数来增添添一个CCFGTTAG_OS、CFGGTAGG_IPP类型的的配置项项后(注注意:CCfgAAddEEntrry只把把配置数数据添加加到配置置中去),会调调用与该该种配置置类型捆捆绑的的的回调函函数SPPConnfigg(CffgSeetSeerviice函函数来完完成捆绑绑工作的的),SSPCoonfiig函数数调用CCfgEEntrryInnfo来来获取该该配置项项的数据据缓冲区区的指针针并存放放在变量量pi中,接着更更具Coonfiigurratiion Tagg的类型型来获取取具体需需要修改改的系统统配置参参数结构
11、构体;CCFGTTAG_OS OSSENVVCFGG _ooscffg、ooscffgcoopy / CCFGTTAG_IP IPPCONNFIGG _iipcffg、iipcffgcoopy,这两个个都是全全局变量量,它们们的数据据结构类类型如下下:/ 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位位的数据据类型,所以这这里的ppi和ppDstt指针都都定义为为指向332位类类型数据据的指针针。在做做完必要要性的检检测之后后,就会会把pii指向数数据缓冲冲中的数数据直接接拷贝到到pDsst+IItemm指向的的数据缓缓冲中去去。两个个细节性性的问题题:1)为什什么只拷拷一个332位?因为这这两种类类型的CConffiguurattionn的Coonfiigurratiion Enttry都
19、都是322位类型型的数据据。2)为什么么Iteem要事事先减一一?因为为Tagg = CFGGTAGG_OSS / CFGGTAGG_IPP, IItemm的值都都是从11开始的的。这样系统统的配置置就被修修改了,后面程程序的执执行就会会根据新新的配置置去操作作。这里里只分析析了AdddEnntryy的过程程,ReemovveEnntryy的过程程基本上上差不多多,不同同的是用用系统默默认配置置的值去去覆盖系系统配置置。 /-/ 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函函数在SStacckTeest任任务的开开始就被被调用,而我们们的回调调函数是
23、是在后来来才安装装上去的的,那么么这些添添加的配配置项是是不是没没有被更更新到系系统配置置中去呢呢?没错错,的确确没有!那我们们怎么办办呢?由由于一开开始我们们添加了了多个配配置项,那么这这些配置置项更新新到系统统应该有有一个先先后顺序序(可能能它们之之间有什什么依赖赖关系吧吧),因因此,首首先要调调用函数数CfggSettExeecutteOrrderr()来来设置,需要注注意的是是这个函函数不仅仅设定配配置项更更新到系系统配置置中的顺顺序,同同时也设设定了这这些配置置项从系系统配置置中删除除的顺序序。做好好这些准准备工作作之后,调用CCfgEExeccutee()(其中ffExeecutt
24、e参数数值为11)来使使配置项项可以更更新到系系统配置置中去,同也使使能以后后添加的的配置项项也能实实时更新新到系统统配置中中去。注注意:这这个函数数必须调调用,否否则你用用CfggAdddEnttry函函数添加加的配置置项都不不能更新新到系统统配置中中去,即即使你在在安装好好回调函函数后调调用CffgAdddEnntryy也不能能。至此此,TCCP/IIP协议议栈系统统已经启启动,应应用程序序可以调调用协议议栈的APII函数来来实现网网络通信信等应用用。 接着调用用函数NNC_BBoottCommpleete(),该该函数除除了设置置相应的的标志外外,主要要是来执执行一个个用户程程序。大大家应该该还记得得NC_NettStaart函函数的接接口吧,它有三三个函数数指针作作为参数数传入,其中第第一个就就在NCC_BoootCCompplette()中调用用:*NNetSStarrt,该该函数指指针所指指向的函函数是由由用户来来实现,从而向向用户提提供一个个机会,由用户户自己决决定协议议栈启动动之后做做什么工工作。接接着NSS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026河南省人才发展研究院有限公司招聘工作人员18人笔试备考试题及答案解析
- 2026新疆华促商贸有限责任公司招聘笔试备考试题及答案解析
- 2025 欧洲西部乡村文化景观的保护与利用课件
- 2026江西赣州崇义县邦众人力资源有限公司第六次招聘1人笔试备考题库及答案解析
- 2026江西安义县殡葬服务所招聘笔试备考题库及答案解析
- 2026广西南宁上林县明亮镇人民政府招聘3人笔试模拟试题及答案解析
- 教育行业教师岗位面试技巧全解
- 通信行业工程师面试要点分析
- 电视台节目主持人面试全知道
- 教育机构中英语老师岗位的面试策略及经验
- 二氧化碳排放计算方法与案例分析
- 美的微波炉EG823LC3-NS1说明书
- 老年骨折术后谵妄护理
- 大健康趋势下的干细胞技术发展与应用
- DB6107∕T 70-2025 汉中市学校食堂食品安全管理规范
- 河南专升本高等数学2012-2021年真题和答案解析
- 2025年天津市中考化学试卷及答案
- 第一单元第1课《走近世界民间美术》课件人美版初中美术七年级下册
- 低空无人机遥感技术及应用
- 火电厂消防安全培训
- 2024-2025学年七年级下册期中数学试卷(考试范围:第1~3章)-北师大版(含详解)
评论
0/150
提交评论